<?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>74583</bug_id>
          
          <creation_ts>2011-12-14 20:51:10 -0800</creation_ts>
          <short_desc>[chromium] Move WebMimeRegistry and dependencies to Source/Platform</short_desc>
          <delta_ts>2012-01-04 11:08:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74761</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
    
    <cc>piman</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>521621</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 20:51:10 -0800</bug_when>
    <thetext>[chromium] Demonstrate one possible way to move chromium WebKit platform API into Source/Platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521622</commentid>
    <comment_count>1</comment_count>
      <attachid>119368</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 20:52:11 -0800</bug_when>
    <thetext>Created attachment 119368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522253</commentid>
    <comment_count>2</comment_count>
      <attachid>119505</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 15:08:41 -0800</bug_when>
    <thetext>Created attachment 119505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522369</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 17:14:39 -0800</bug_when>
    <thetext>Ignore the patch for now - it&apos;s not fully baked.

A key feature of splitting the WebKit API up into client and platform APIs is the ability for WebCore to depend directly on the platform API instead of having to go through an extra layer of indirection. This is a strawman of one way to do this.

Terminology note: I&apos;m calling interfaces like WebWidget that are used by the embedder to talk to WebKit the WebKit client API. I&apos;m calling interfaces like WebMimeRegistry (or someday WebLayer) that WebKit uses to talk to the embedder the WebKit platform API, and types that are used by both APIs, like WebString and WebSize, WebKit common API.

Proposal:

*) leave all APIs - client, platform, and common - in the WebKit namespace
*) leave existing WebKit client API in place, Source/WebKit/chromium/public/
*) move platform API headers to Source/Platform/chromium/public
*) move common API headers to Source/Platform/chromium/common. provide forwarding headers in Source/WebKit/chromium/public
*) move implementations for common API, like WebString.cpp, into Source/Platform/chromium/src

Platform would be a new library. Today, it would probably have to link into libwebkit.so|dll since WebCString.o depends on WebCore&apos;s text encoding stuff. In the future, it could be a separate library.

One oddness here is that with the platform and client APIs in the same namespace we&apos;ll have some WebCore code depending on things in the WebKit namespace. This typically indicates a problem. I think that we can control this by careful with include paths so that code in WebCore can only include files in WebKit that are part of the WebKit platform or common APIs. This would be restricted to chromium-specific platform code.

Similarly, in chromium we need to ensure that implementations of the WebKit platform API do not depend on anything in the WebKit client API as that would introduce a nasty dependency cycle. I believe we can keep this in check (no pun intended) by careful checkdeps rules. This may get tricky with things like ui/ that suck in the entire world, but this situation is no worse than today.

One idea we&apos;ve thought about is putting the WebKit platform API into the Platform namespace. This has several problems:
1.) Runs the risk of colliding with cross-platform interfaces that may enter the Platform namespace as code from WebCore/platform migrates over.
2.) There&apos;s no good way to deal with the WebKit common API types. If they don&apos;t move, then the platform API is a mix of WebKit:: and Platform::. If they do move, then the WebKit client API is a mix of WebKit:: and Platform::. If we put them in a different namespace then both APIs are a mess. There&apos;s no good way to alias the types into both namespaces in C++ that I&apos;m aware of.
3.) Platform::WebFoo - really?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522376</commentid>
    <comment_count>4</comment_count>
      <attachid>119527</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 17:19:58 -0800</bug_when>
    <thetext>Created attachment 119527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522379</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 17:21:49 -0800</bug_when>
    <thetext>This patch sets up a Platform.gyp target and moves 2 common APIs over (WebString and WebCString) and one pure-platform API (WebMimeRegistry).  DumpRenderTree and webkit_unit_tests compile and link for me in release and debug+components. Targets in chrome generally don&apos;t, I think mostly due to various targets in chrome depending indirectly on the WebKit API but not declaring that dependency explicitly so they don&apos;t pick up the include dirs needed to find the new Platform headers. I believe that these are all bugs in the chromium side&apos;s dependency listing and not a flaw of this approach.

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522383</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-15 17:25:48 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; *) leave all APIs - client, platform, and common - in the WebKit namespace
&gt; *) leave existing WebKit client API in place, Source/WebKit/chromium/public/
&gt; *) move platform API headers to Source/Platform/chromium/public
&gt; *) move common API headers to Source/Platform/chromium/common. provide forwarding headers in Source/WebKit/chromium/public
&gt; *) move implementations for common API, like WebString.cpp, into Source/Platform/chromium/src

I feel like this plan strikes a good balance.  I&apos;m happy moving forward with this plan.

I might make a small tweak though:

  How about using Source/Platform/chromium/platform instead of .../public?
  That would help reinforce the meaning of what that directory contains,
  and we would be able to continue including files from there using
  #include &lt;platform/WebFoo.h&gt;.  Also, &apos;public&apos; bugs me since common is
  just as *public* as the directory named public.

(I&apos;d also be OK merging common into platform since it is fair to say that client is built on top of platform.  I&apos;m not sure how much value common adds.)

You could also introduce a subdirectory of Platform/chromium/ called SPI (although I hate that acronym) that contains the platform, common, and src directories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522384</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-15 17:26:28 -0800</bug_when>
    <thetext>Keep in mind also that over time Source/Platform/chromium/ will contain everything that is presently in Source/WebCore/platform/chromium/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522390</commentid>
    <comment_count>8</comment_count>
      <attachid>119527</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-15 17:33:54 -0800</bug_when>
    <thetext>Comment on attachment 119527
Patch

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

&gt; Source/Platform/chromium/Platform.gyp:34
&gt; +            &apos;target_name&apos;: &apos;platform&apos;,

This file should be located at Source/Platform/Platform.gyp/Platform.gyp.  The reason is slightly involved, but that&apos;s the pattern we use elsewhere.

&gt; Source/Platform/chromium/Platform.gyp:39
&gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore_platform&apos;, # bad bad, but WebCString depends on stuff in WebCore/platform/text/TextEncoding

Hum...  This is going to cause problems when we migrate code from WebCore/platform to Platform, but we can solve that problem when we get there.  I would clean up this comment a bit.  As written, it&apos;s unlikely to stand the test of time.

&gt; Source/Platform/chromium/Platform.gyp:50
&gt; +                &apos;common/WebCString.h&apos;,
&gt; +                &apos;common/WebCommon.h&apos;,
&gt; +                &apos;common/WebString.h&apos;,

Is there a large benefit from separating the &quot;common&quot; parts from the rest of the API?  I&apos;m not sure the distinction is super important, and it&apos;s nice to have all the public APIs in folders with &quot;public&quot; in their names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522395</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 17:43:50 -0800</bug_when>
    <thetext>The reason I have &apos;common&apos; isolated is to make it clearer to people editing the headers or implementations in Source/Platform/ what the possibly implications are. For example, any modification to WebString will impact both the client and platform APIs, while changes to WebMimeRegistry only impact the platform API. I&apos;m not sure if that&apos;s enough value to keep things distinct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522397</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 17:45:10 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 119527 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119527&amp;action=review
&gt; 
&gt; &gt; Source/Platform/chromium/Platform.gyp:34
&gt; &gt; +            &apos;target_name&apos;: &apos;platform&apos;,
&gt; 
&gt; This file should be located at Source/Platform/Platform.gyp/Platform.gyp.  The reason is slightly involved, but that&apos;s the pattern we use elsewhere.
&gt; 

OK

&gt; &gt; Source/Platform/chromium/Platform.gyp:39
&gt; &gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore_platform&apos;, # bad bad, but WebCString depends on stuff in WebCore/platform/text/TextEncoding
&gt; 
&gt; Hum...  This is going to cause problems when we migrate code from WebCore/platform to Platform, but we can solve that problem when we get there.  I would clean up this comment a bit.  As written, it&apos;s unlikely to stand the test of time.
&gt; 

I don&apos;t intend to land with this comment - it&apos;s just a reminder for myself. Somehow we have to be able to handle text encoding without depending on WebCore, I just need to figure out how that happens and do it for WebCString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522788</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-16 09:41:15 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/Platform/chromium/Platform.gyp:39
&gt; &gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore_platform&apos;, # bad bad, but WebCString depends on stuff in WebCore/platform/text/TextEncoding

I think this problem goes away once we move all of Source/WebCore/platform to Source/Platform/, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522857</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 11:13:55 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; &gt; Source/Platform/chromium/Platform.gyp:39
&gt; &gt; &gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore_platform&apos;, # bad bad, but WebCString depends on stuff in WebCore/platform/text/TextEncoding
&gt; 
&gt; I think this problem goes away once we move all of Source/WebCore/platform to Source/Platform/, no?

Yes. My understanding is that&apos;s a long way out, however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522964</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 13:04:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt;   How about using Source/Platform/chromium/platform instead of .../public?
&gt;   That would help reinforce the meaning of what that directory contains,
&gt;   and we would be able to continue including files from there using
&gt;   #include &lt;platform/WebFoo.h&gt;.  Also, &apos;public&apos; bugs me since common is
&gt;   just as *public* as the directory named public.
&gt; 
&gt; (I&apos;d also be OK merging common into platform since it is fair to say that client is built on top of platform.  I&apos;m not sure how much value common adds.)


One subtle consequence of this is the forwarding headers for WebCommon/WebString/WebCString have to use somewhat-absolute include paths since users of the WebKit API have Source/WebKit/chromium/public/ on the include path already, so we can&apos;t just do #include &quot;platform/WebCommon.h&quot; from Source/WebKit/chromium/public/platform/WebCommon.h since it would just be a cycle.  We can however have that file do #include &quot;../../../../Platform/chromium/platform/WebCommon.h&quot; and then from inside Platform/chromium/platform/ have all #includes be without the &quot;platform/&quot; prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523052</commentid>
    <comment_count>14</comment_count>
      <attachid>119676</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 14:50:50 -0800</bug_when>
    <thetext>Created attachment 119676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523058</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 14:54:30 -0800</bug_when>
    <thetext>Attachment 119676 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;.gitignore&apos;, u&apos;ChangeLog&apos;, u&apos;Source/Platfo...&quot; exit_code: 1

Source/Platform/chromium/platform/WebString.h:48:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/platform/WebString.h:76:  The parameter name &quot;s&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/platform/WebCString.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/platform/WebCommon.h:89:  int16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:90:  uint16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:91:  int32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:92:  uint32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 7 in 19 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>523060</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 14:54:51 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523061</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 14:55:04 -0800</bug_when>
    <thetext>One question this raises is where to put the forwarding headers for the WebKit client API. Today, WebString.h exists in Source/WebKit/chromium/public/platform/. With this patch I&apos;ve moved the actual location to Source/Platform/chromium/platform/WebString.h, so includes of the form &quot;platform/WebString.h&quot; still work but absolute includes (like in chromium) need to see a forwarding header.

It&apos;s awkward to me that users of the WebKit client API have to be aware of this platform distinction for some headers.  I propose that we leave forwarding headers in Source/WK/chr/public/X.h that forward to platform/X.h so users of the client API don&apos;t have to care. Concretely that would mean not having Source/WK/chr/public/platform/WebString.h at all and instead having:

Source/WebKit/chromium/public/WebString.h:
#include &quot;platform/WebString.h&quot;
Source/WebKit/chromium/public/WebClientAPIThatDependsOnWebString.h:
#include &quot;WebString.h&quot;

Source/Platform/chromium/platform/WebString.h:
// real meat of WebString.h


then users the WebKit client API using absolute include paths #include all of their headers from third_party/WebKit/Source/WebKit/chromium/public/, users of the WebKit platform API #include all of their headers from third_party/WebKit/Source/Platform/chromium/platform/, and users of both include what they need from both.

WDYT? This means effectively undoing the platform/ move for the &quot;common&quot; headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523064</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 14:56:45 -0800</bug_when>
    <thetext>This patch should compile without any chromium-side changes. The style errors are all from the file moves and existed in the original files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523074</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-16 15:04:16 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; One subtle consequence of this is the forwarding headers for WebCommon/WebString/WebCString have to use somewhat-absolute include paths since users of the WebKit API have Source/WebKit/chromium/public/ on the include path already, so we can&apos;t just do #include &quot;platform/WebCommon.h&quot; from Source/WebKit/chromium/public/platform/WebCommon.h since it would just be a cycle.  We can however have that file do #include &quot;../../../../Platform/chromium/platform/WebCommon.h&quot; and then from inside Platform/chromium/platform/ have all #includes be without the &quot;platform/&quot; prefix.

This is consistent with the way code includes WTF.  Outside of WTF, people typically type #include &lt;wtf/Foo.h&gt;.  Inside WTF, they just type #include &quot;Foo.h&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523087</commentid>
    <comment_count>20</comment_count>
      <attachid>119676</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 15:20:49 -0800</bug_when>
    <thetext>Comment on attachment 119676
Patch

Attachment 119676 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10904876</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523098</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 15:26:21 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=74761 avoids the need for Platform/ to depend on WebCore. I can also update the platform includes to &lt;&gt; style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523188</commentid>
    <comment_count>22</comment_count>
      <attachid>119708</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-16 17:52:10 -0800</bug_when>
    <thetext>Created attachment 119708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523189</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 17:54:36 -0800</bug_when>
    <thetext>Attachment 119708 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;.gitignore&apos;, u&apos;ChangeLog&apos;, u&apos;Source/Platfo...&quot; exit_code: 1

Source/Platform/chromium/platform/WebString.h:48:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/platform/WebString.h:76:  The parameter name &quot;s&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/platform/WebCString.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/src/WebString.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/chromium/platform/WebCommon.h:89:  int16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:90:  uint16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:91:  int32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/platform/WebCommon.h:92:  uint32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 19 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>528975</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-03 12:55:27 -0800</bug_when>
    <thetext>Ping! Are we ready to go here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529118</commentid>
    <comment_count>25</comment_count>
      <attachid>121009</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-03 15:51:50 -0800</bug_when>
    <thetext>Created attachment 121009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529119</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-03 15:53:09 -0800</bug_when>
    <thetext>This moves the headers to Source/Platform/chromium/public/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529126</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 15:56:07 -0800</bug_when>
    <thetext>Attachment 121009 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;.gitignore&apos;, u&apos;ChangeLog&apos;, u&apos;Source/Platfo...&quot; exit_code: 1

Source/Platform/chromium/public/WebCString.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebString.h:48:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebString.h:76:  The parameter name &quot;s&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebCommon.h:89:  int16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/public/WebCommon.h:90:  uint16_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/public/WebCommon.h:91:  int32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/public/WebCommon.h:92:  uint32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/Platform/chromium/src/WebString.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 8 in 19 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>529625</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 11:08:14 -0800</bug_when>
    <thetext>Committed r104048: &lt;http://trac.webkit.org/changeset/104048&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119368</attachid>
            <date>2011-12-14 20:52:11 -0800</date>
            <delta_ts>2011-12-15 15:08:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20111214205210.patch</filename>
            <type>text/plain</type>
            <size>74731</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi40NGFmODdmMjU5MDM1NjFmNzVlYzI4NjJmOGQ2
MDNjZmQxODQ5Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMS0xMi0xNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdheSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBw
bGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjaHJvbWl1bS9QbGF0Zm9ybS5neXA6IEFkZGVkLgor
ICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaC4KKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6fldlYkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
U3RyaW5nOjpXZWJDU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
Om9wZXJhdG9yIHN0ZDo6c3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJv
bVVURjE2KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8KToKKyAgICAgICAgKiBjaHJvbWl1
bS9jb21tb24vV2ViQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oLgorICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9X
ZWJTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViU3RyaW5nLmguCisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6fldlYlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmlzTnVsbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3Igc3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6Om9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
LnRhcmdldC5tazogQWRkZWQuCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChQbGF0Zm9ybTo6V2ViTWltZVJlZ2lzdHJ5
Ojp+V2ViTWltZVJlZ2lzdHJ5KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6OnV0
ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNT
dHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJhdG9y
IFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Ry
aW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisKIDIw
MTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
c3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NmE3ZTE3NjQzNmJmZjYzNjFjNzc3Y2MxNTBiOGMxNTMxMTllOWUyNS4uMzVmODA1NGViZTJiZmZh
NjhmM2Q5ZWVlNTZkOWJjYWJjZDU4OTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMS0xMi0xNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdh
eSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBwbGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmg6CisgICAgICAg
ICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZv
cm1TdXBwb3J0OjptaW1lUmVnaXN0cnkpOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJT
dHJpbmcuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5TaG93TUlNRVR5cGUpOgorICAg
ICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1TdXBwb3J0Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1TdXBwb3J0Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSk6
CisgICAgICAgICogc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNUeXBlKToKKwogMjAxMS0x
Mi0xNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBSb2xsIGNocm9taXVtIERFUFMgKHIxMTM4MDcgLT4gcjExNDM1NikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm0uZ3lwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzOGZkZTdjMzQyOTE3ODFlNDcx
Mzk2NjZjOWY0NzdjYWQ2OGI1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm0uZ3lwCkBAIC0wLDAgKzEsNjQgQEAKKyMKKyMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorIworCit7CisgICAgJ3RhcmdldHMnOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF0Zm9ybScsCisgICAgICAgICAgICAndHlwZSc6ICdz
dGF0aWNfbGlicmFyeScsCisgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAg
ICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlw
dENvcmUuZ3lwOnd0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dURi9XVEYuZ3lwL1dURi5n
eXA6bmV3d3RmJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzog
WworICAgICAgICAgICAgICAgICcuLi8uLicsICMgcHV0IFNvdXJjZS8gb24gdGhlIGluY2x1ZGUg
cGF0aAorICAgICAgICAgICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZScsCisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICAgICAgICAgJ1dFQktJVF9J
TVBMRU1FTlRBVElPTj0xJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnc291cmNlcyc6
IFsKKyAgICAgICAgICAgICAgICAnY29tbW9uL1dlYkNTdHJpbmcuaCcsCisgICAgICAgICAgICAg
ICAgJ2NvbW1vbi9XZWJDb21tb24uaCcsCisgICAgICAgICAgICAgICAgJ2NvbW1vbi9XZWJTdHJp
bmcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNaW1lUmVnaXN0cnkuaCcsCisgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTdHJpbmcuY3BwJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnZGlyZWN0X2RlcGVu
ZGVudF9zZXR0aW5ncyc6IHsKKyAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAg
ICAgICAgICAgICAgICAgICAnLi4vLi4nLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vSmF2
YVNjcmlwdENvcmUnLAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9LAorICAgICAg
ICB9CisgICAgXQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29t
bW9uL1dlYkNTdHJpbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0
cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE1ZGY2Y2Q5ZjlkNjgxNWFlOTA4NTdhYmVhZTA2MDUyZDJiMmRl
ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dl
YkNTdHJpbmcuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ1N0cmluZ19oCisjZGVmaW5l
IFdlYkNTdHJpbmdfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxz
dHJpbmc+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBDU3RyaW5nOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGU7CitjbGFzcyBXZWJT
dHJpbmc7CisKKy8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3aXRoIHVuc3BlY2lm
aWVkIGVuY29kaW5nLiAgSXQgaXMKKy8vIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJDU3RyaW5n
IG9iamVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViQ1N0
cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8KK2NsYXNzIFdlYkNTdHJpbmcgeworcHVibGljOgor
ICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJDU3RyaW5nKCkgOiBtX3By
aXZhdGUoMCkgeyB9CisKKyAgICBXZWJDU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4pIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAg
ICB9CisKKyAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcmIHMpIDogbV9wcml2YXRlKDAp
IHsgYXNzaWduKHMpOyB9CisKKyAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ1N0
cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0cmluZ3MgYXJlIGVxdWFscywg
YSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKKyAgICAvLyBmaXJzdCBjaGFyYWN0ZXIg
dGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVlIGluIHRoaXMgc3RyaW5nCisg
ICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIHRvIGluZGlj
YXRlIHRoZSBvcHBvc2l0ZS4KKyAgICBXRUJLSVRfRVhQT1JUIGludCBjb21wYXJlKGNvbnN0IFdl
YkNTdHJpbmcmIG90aGVyKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbik7
CisKKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBXRUJLSVRf
RVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdXRmMTYoKSBj
b25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2KGNv
bnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSk7CisKKyNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYp
OworICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmKTsKKyAgICBv
cGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKKyNlbHNlCisgICAgV2ViQ1N0cmluZyhjb25z
dCBzdGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihz
LmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9
KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBz
Lmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9y
IHN0ZDo6c3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgo
KTsKKyAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwgbGVuKSA6IHN0ZDo6
c3RyaW5nKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFVURjE2U3RyaW5nPgorICAg
IHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBVVEYxNlN0cmluZyYgcykKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tVVRGMTYocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0K
KyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKik7
CisgICAgV2ViQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBXZWJDU3RyaW5nJiBhLCBjb25zdCBXZWJDU3RyaW5nJiBiKQoreworICAg
IHJldHVybiBhLmNvbXBhcmUoYikgPCAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYkNv
bW1vbi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDb21tb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNjM0ZjBjMzhmNDE4ZDAyODU4MGM4MzY1M2ExYWYxZTE3MzlhZTE4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDb21tb24uaApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
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
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tbW9uX2gKKyNkZWZpbmUgV2ViQ29tbW9uX2gK
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmF1bHQgY29uZmlndXJhdGlvbgorCisj
aWYgIWRlZmluZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9OKQorICAgICNkZWZpbmUgV0VCS0lUX0lN
UExFTUVOVEFUSU9OIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX1NLSUEp
CisgICAgI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChVU0VfU0tJQSkKKyAgICAg
ICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfU0tJQSAxCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfVVNJTkdfU0tJQSAwCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVk
KFdFQktJVF9VU0lOR19DRykKKyAgICAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFXRUJLSVRf
VVNJTkdfU0tJQQorICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19DRyAxCisgICAgI2Vsc2UK
KyAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfQ0cgMAorICAgICNlbmRpZgorI2VuZGlmCisK
KyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfVjgpCisgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdf
VjggMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfSlNDKQorICAgICNkZWZp
bmUgV0VCS0lUX1VTSU5HX0pTQyAwCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRfRVhQ
T1JUCisKKyNpZiBkZWZpbmVkKFdFQktJVF9ETEwpCisgICAgI2lmIGRlZmluZWQoV0lOMzIpCisg
ICAgICAgICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICAgICAgICAgICNkZWZpbmUgV0VC
S0lUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAg
ICAgICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAgICAg
I2VuZGlmCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisgICAgI2VuZGlmCisjZWxzZQorICAgICNk
ZWZpbmUgV0VCS0lUX0VYUE9SVAorI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBCYXNpYyB0eXBlcworCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworI2lm
IGRlZmluZWQoV0lOMzIpCisvLyBWaXN1YWwgU3R1ZGlvIGRvZXNuJ3QgaGF2ZSBzdGRpbnQuaC4K
K3R5cGVkZWYgc2hvcnQgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7
Cit0eXBlZGVmIGludCBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFVURi0xNiBjaGFyYWN0ZXIgdHlwZQor
I2lmIGRlZmluZWQoV0lOMzIpCit0eXBlZGVmIHdjaGFyX3QgV2ViVUNoYXI7CisjZWxzZQordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBXZWJVQ2hhcjsKKyNlbmRpZgorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gQXNzZXJ0aW9ucworCitXRUJLSVRfRVhQT1JUIHZvaWQgZmFpbGVkQXNzZXJ0
aW9uKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29u
c3QgY2hhciogYXNzZXJ0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKy8vIElkZWFs
bHksIG9ubHkgdXNlIGluc2lkZSB0aGUgcHVibGljIGRpcmVjdG9yeSBidXQgb3V0c2lkZSBvZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04gYmxvY2tzLiAgKE90aGVyd2lzZSB1c2UgV1RGJ3MgQVNTRVJU
LikKKyNpZiBkZWZpbmVkKE5ERUJVRykKKyNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24p
ICgodm9pZCkwKQorI2Vsc2UKKyNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24pIGRvIHsg
XAorICAgIGlmICghKGFzc2VydGlvbikpIFwKKyAgICAgICAgZmFpbGVkQXNzZXJ0aW9uKF9fRklM
RV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAjYXNzZXJ0aW9uKTsgXAorfSB3aGlsZSAoMCkK
KyNlbmRpZgorCisjZGVmaW5lIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKSBXRUJLSVRfQVNT
RVJUKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2Nv
bW1vbi9XZWJTdHJpbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViU3Ry
aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzMzNmRkMTEzZGNkNjFhZWZhZTUyYTk4MDhiNmM1NzI3NWYzYjlk
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2Vi
U3RyaW5nLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
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
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlN0cmluZ19oCisjZGVmaW5lIFdl
YlN0cmluZ19oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZWxzZQorI2luY2x1ZGUgPGJhc2Uv
bnVsbGFibGVfc3RyaW5nMTYuaD4KKyNpbmNsdWRlIDxiYXNlL3N0cmluZzE2Lmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJTdHJp
bmdQcml2YXRlOworCisvLyBBIFVURi0xNiBzdHJpbmcgY29udGFpbmVyLiAgSXQgaXMgaW5leHBl
bnNpdmUgdG8gY29weSBhIFdlYlN0cmluZworLy8gb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0
IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJTdHJpbmcgYWNyb3NzIHRocmVhZHMhISEKKy8vCitj
bGFzcyBXZWJTdHJpbmcgeworcHVibGljOgorICAgIH5XZWJTdHJpbmcoKSB7IHJlc2V0KCk7IH0K
KworICAgIFdlYlN0cmluZygpIDogbV9wcml2YXRlKDApIHsgfQorCisgICAgV2ViU3RyaW5nKGNv
bnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAg
ICAgICAgYXNzaWduKGRhdGEsIGxlbik7CisgICAgfQorCisgICAgV2ViU3RyaW5nKGNvbnN0IFdl
YlN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAgIFdlYlN0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihz
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3RyaW5n
Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwg
c2l6ZV90IGxlbik7CisKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYlN0
cmluZyYgcykgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKKyAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlVDaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdFQktJVF9FWFBPUlQg
V2ViQ1N0cmluZyB1dGY4KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJT
dHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgV0VC
S0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOwor
CisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQor
ICAgICAgICA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRh
dGEsIE4gLSAxKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgeworICAgICAgICBhc3NpZ24oZnJv
bVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYp
OworICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgb3Bl
cmF0b3IgV1RGOjpTdHJpbmcoKSBjb25zdDsKKworICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOworICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKKyNlbHNl
CisKKyAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDogbV9wcml2YXRlKDApCisgICAg
eworICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKworICAgIFdl
YlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IHN0cmluZzE2JiBzKQorICAgIHsKKyAgICAgICAgYXNz
aWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIG9wZXJhdG9yIHN0cmluZzE2KCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBs
ZW4gPSBsZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVu
KSA6IHN0cmluZzE2KCk7CisgICAgfQorCisgICAgV2ViU3RyaW5nKGNvbnN0IE51bGxhYmxlU3Ry
aW5nMTYmIHMpIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBpZiAocy5pc19udWxsKCkp
CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NpZ24o
cy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOworICAgIH0KKworICAgIFdl
YlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpCisgICAgeworICAg
ICAgICBpZiAocy5pc19udWxsKCkpCisgICAgICAgICAgICByZXNldCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3Ro
KCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgTnVsbGFi
bGVTdHJpbmcxNigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAg
ICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KHN0cmluZzE2KCksIHRydWUpOworICAgICAg
ICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2
KGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2KCksIGZhbHNlKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVVRGOFN0cmluZz4KKyAgICBzdGF0aWMgV2ViU3RyaW5n
IGZyb21VVEY4KGNvbnN0IFVURjhTdHJpbmcmIHMpCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bVVURjgocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIHZvaWQgYXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJTdHJpbmdQcml2YXRl
KiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmlu
ZyYgYSwgY29uc3QgV2ViU3RyaW5nJiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhiKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0
cmluZyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxh
dGZvcm0udGFyZ2V0Lm1rIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtLnRhcmdl
dC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41YWZhYzY0OGE4MDllMGIwYzIzZDgxZTQ3OGY5MWUxMTRhMjI3NjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtLnRh
cmdldC5tawpAQCAtMCwwICsxLDMyNCBAQAorIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGd5
cDsgZG8gbm90IGVkaXQuCisKK1RPT0xTRVQgOj0gdGFyZ2V0CitUQVJHRVQgOj0gcGxhdGZvcm0K
K0RFRlNfRGVidWcgOj0gJy1ETk9fSEVBUENIRUNLRVInIFwKKwknLURESVNBQkxFX05BQ0wnIFwK
KwknLURDSFJPTUlVTV9CVUlMRCcgXAorCSctRFVTRV9OU1M9MScgXAorCSctRFRPT0xLSVRfVVNF
U19HVEs9MScgXAorCSctREdUS19ESVNBQkxFX1NJTkdMRV9JTkNMVURFUz0xJyBcCisJJy1EV0VC
VUlfVEFTS19NQU5BR0VSPTEnIFwKKwknLURFTkFCTEVfUkVNT1RJTkc9MScgXAorCSctREVOQUJM
RV9QMlBfQVBJUz0xJyBcCisJJy1ERU5BQkxFX0NPTkZJR1VSQVRJT05fUE9MSUNZJyBcCisJJy1E
RU5BQkxFX0lOUFVUX1NQRUVDSCcgXAorCSctREVOQUJMRV9OT1RJRklDQVRJT05TJyBcCisJJy1E
RU5BQkxFX0dQVT0xJyBcCisJJy1ERU5BQkxFX0VHTElNQUdFPTEnIFwKKwknLURVU0VfU0tJQT0x
JyBcCisJJy1ERU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVI9MScgXAorCSctRFdFQktJ
VF9JTVBMRU1FTlRBVElPTj0xJyBcCisJJy1ERU5BQkxFXzNEX1BMVUdJTj0xJyBcCisJJy1ERU5B
QkxFX0JMT0I9MScgXAorCSctREVOQUJMRV9CTE9CX1NMSUNFPTEnIFwKKwknLURFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkc9MScgXAorCSctREVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT049
MScgXAorCSctREVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wJyBcCisJJy1ERU5BQkxFX0RBVEFf
VFJBTlNGRVJfSVRFTVM9MScgXAorCSctREVOQUJMRV9ERVRBSUxTPTEnIFwKKwknLURFTkFCTEVf
REVWSUNFX09SSUVOVEFUSU9OPTEnIFwKKwknLURFTkFCTEVfRElSRUNUT1JZX1VQTE9BRD0xJyBc
CisJJy1ERU5BQkxFX0RPV05MT0FEX0FUVFJJQlVURT0xJyBcCisJJy1ERU5BQkxFX0ZJTEVfU1lT
VEVNPTEnIFwKKwknLURFTkFCTEVfRklMVEVSUz0xJyBcCisJJy1ERU5BQkxFX0ZVTExTQ1JFRU5f
QVBJPTEnIFwKKwknLURFTkFCTEVfR0FNRVBBRD0xJyBcCisJJy1ERU5BQkxFX0dFT0xPQ0FUSU9O
PTEnIFwKKwknLURFTkFCTEVfR0VTVFVSRV9FVkVOVFM9MScgXAorCSctREVOQUJMRV9HRVNUVVJF
X1JFQ09HTklaRVI9MScgXAorCSctREVOQUJMRV9JQ09OREFUQUJBU0U9MCcgXAorCSctREVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFPTEnIFwKKwknLURFTkFCTEVfSU5QVVRfU1BFRUNIPTEnIFwKKwkn
LURFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUj0wJyBcCisJJy1ERU5BQkxFX0lOUFVUX1RZUEVfREFU
RT0wJyBcCisJJy1ERU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUU9MCcgXAorCSctREVOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FTE9DQUw9MCcgXAorCSctREVOQUJMRV9JTlBVVF9UWVBFX01PTlRI
PTAnIFwKKwknLURFTkFCTEVfSU5QVVRfVFlQRV9USU1FPTAnIFwKKwknLURFTkFCTEVfSU5QVVRf
VFlQRV9XRUVLPTAnIFwKKwknLURFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xJyBcCisJJy1E
RU5BQkxFX0pBVkFTQ1JJUFRfSTE4Tl9BUEk9MScgXAorCSctREVOQUJMRV9MSU5LX1BSRUZFVENI
PTEnIFwKKwknLURFTkFCTEVfTUVESUFfU09VUkNFPTEnIFwKKwknLURFTkFCTEVfTUVESUFfU1RB
VElTVElDUz0xJyBcCisJJy1ERU5BQkxFX01FRElBX1NUUkVBTT0xJyBcCisJJy1ERU5BQkxFX01F
VEVSX1RBRz0xJyBcCisJJy1ERU5BQkxFX01IVE1MPTEnIFwKKwknLURFTkFCTEVfTUlDUk9EQVRB
PTAnIFwKKwknLURFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTPTEnIFwKKwknLURFTkFCTEVfTk9U
SUZJQ0FUSU9OUz0xJyBcCisJJy1ERU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0wJyBcCisJJy1E
RU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MScgXAorCSctREVOQUJMRV9QT0lOVEVSX0xPQ0s9
MScgXAorCSctREVOQUJMRV9QUk9HUkVTU19UQUc9MScgXAorCSctREVOQUJMRV9RVU9UQT0xJyBc
CisJJy1ERU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEnIFwKKwknLURFTkFCTEVfUlVC
WT0xJyBcCisJJy1ERU5BQkxFX1NBTkRCT1g9MScgXAorCSctREVOQUJMRV9TSEFSRURfV09SS0VS
Uz0xJyBcCisJJy1ERU5BQkxFX1NNT09USF9TQ1JPTExJTkc9MScgXAorCSctREVOQUJMRV9TUUxf
REFUQUJBU0U9MScgXAorCSctREVOQUJMRV9TVFlMRV9TQ09QRUQ9MCcgXAorCSctREVOQUJMRV9T
Vkc9MScgXAorCSctREVOQUJMRV9TVkdfRk9OVFM9MScgXAorCSctREVOQUJMRV9UT1VDSF9FVkVO
VFM9MScgXAorCSctREVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9MCcgXAorCSctREVOQUJMRV9W
OF9TQ1JJUFRfREVCVUdfU0VSVkVSPTEnIFwKKwknLURFTkFCTEVfVklERU89MScgXAorCSctREVO
QUJMRV9WSURFT19UUkFDSz0xJyBcCisJJy1ERU5BQkxFX1ZJRVdQT1JUPTAnIFwKKwknLURFTkFC
TEVfV0VCR0w9MScgXAorCSctREVOQUJMRV9XRUJfU09DS0VUUz0xJyBcCisJJy1ERU5BQkxFX1dF
Ql9USU1JTkc9MScgXAorCSctREVOQUJMRV9XT1JLRVJTPTEnIFwKKwknLURFTkFCTEVfWEhSX1JF
U1BPTlNFX0JMT0I9MScgXAorCSctREVOQUJMRV9YU0xUPTEnIFwKKwknLURXVEZfVVNFX0xFVkVM
REI9MScgXAorCSctRFdURl9VU0VfQlVJTFRJTl9VVEY4X0NPREVDPTEnIFwKKwknLURXVEZfVVNF
X09QRU5UWVBFX1NBTklUSVpFUj0xJyBcCisJJy1EV1RGX1VTRV9TS0lBX1RFWFQ9MCcgXAorCSct
RFdURl9VU0VfV0VCUD0xJyBcCisJJy1EV1RGX1VTRV9XRUJLSVRfSU1BR0VfREVDT0RFUlM9MScg
XAorCSctREVOQUJMRV9XRUJfQVVESU89MScgXAorCSctRFdURl9VU0VfQUNDRUxFUkFURURfQ09N
UE9TSVRJTkc9MScgXAorCSctREVOQUJMRV8zRF9SRU5ERVJJTkc9MScgXAorCSctREVOQUJMRV9B
Q0NFTEVSQVRFRF8yRF9DQU5WQVM9MScgXAorCSctRFdURl9VU0VfV0VCQVVESU9fRkZNUEVHPTEn
IFwKKwknLURCVUlMRElOR19DSFJPTUlVTV9fPTEnIFwKKwknLURVU0VfU1lTVEVNX01BTExPQz0x
JyBcCisJJy1EV1RGX1VTRV9QVEhSRUFEUz0xJyBcCisJJy1EVV9VU0lOR19JQ1VfTkFNRVNQQUNF
PTAnIFwKKwknLURVX1NUQVRJQ19JTVBMRU1FTlRBVElPTicgXAorCSctRERZTkFNSUNfQU5OT1RB
VElPTlNfRU5BQkxFRD0xJyBcCisJJy1EV1RGX1VTRV9EWU5BTUlDX0FOTk9UQVRJT05TPTEnIFwK
KwknLURfREVCVUcnCisKKyMgRmxhZ3MgcGFzc2VkIHRvIGFsbCBzb3VyY2UgZmlsZXMuCitDRkxB
R1NfRGVidWcgOj0gLXB0aHJlYWQgXAorCS1mbm8tZXhjZXB0aW9ucyBcCisJLVduby11bnVzZWQt
cGFyYW1ldGVyIFwKKwktV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIFwKKwktRF9GSUxF
X09GRlNFVF9CSVRTPTY0IFwKKwktZnZpc2liaWxpdHk9aGlkZGVuIFwKKwktcGlwZSBcCisJLWZQ
SUMgXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwktV25vLWZvcm1hdCBcCisJLVduby11bnVz
ZWQtcmVzdWx0IFwKKwktTzAgXAorCS1nCisKKyMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgQyBmaWxl
cy4KK0NGTEFHU19DX0RlYnVnIDo9IAorCisjIEZsYWdzIHBhc3NlZCB0byBvbmx5IEMrKyBmaWxl
cy4KK0NGTEFHU19DQ19EZWJ1ZyA6PSAtZm5vLXJ0dGkgXAorCS1mbm8tdGhyZWFkc2FmZS1zdGF0
aWNzIFwKKwktZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gXAorCS1Xbm8tZGVwcmVjYXRlZAor
CitJTkNTX0RlYnVnIDo9IC1JdGhpcmRfcGFydHkvaWN1L3B1YmxpYy9jb21tb24gXAorCS1JdGhp
cmRfcGFydHkvaWN1L3B1YmxpYy9pMThuIFwKKwktSXRoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2Ug
XAorCS1JdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9KYXZhU2NyaXB0Q29yZSBcCisJLUl0aGly
ZF9wYXJ0eS9XZWJLaXQvU291cmNlL0phdmFTY3JpcHRDb3JlIFwKKwktSXRoaXJkX3BhcnR5L1dl
YktpdC9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmIFwKKwktSXRoaXJkX3BhcnR5L1dlYktpdC9T
b3VyY2UvV1RGCisKK0RFRlNfUmVsZWFzZSA6PSAnLUROT19IRUFQQ0hFQ0tFUicgXAorCSctRERJ
U0FCTEVfTkFDTCcgXAorCSctRENIUk9NSVVNX0JVSUxEJyBcCisJJy1EVVNFX05TUz0xJyBcCisJ
Jy1EVE9PTEtJVF9VU0VTX0dUSz0xJyBcCisJJy1ER1RLX0RJU0FCTEVfU0lOR0xFX0lOQ0xVREVT
PTEnIFwKKwknLURXRUJVSV9UQVNLX01BTkFHRVI9MScgXAorCSctREVOQUJMRV9SRU1PVElORz0x
JyBcCisJJy1ERU5BQkxFX1AyUF9BUElTPTEnIFwKKwknLURFTkFCTEVfQ09ORklHVVJBVElPTl9Q
T0xJQ1knIFwKKwknLURFTkFCTEVfSU5QVVRfU1BFRUNIJyBcCisJJy1ERU5BQkxFX05PVElGSUNB
VElPTlMnIFwKKwknLURFTkFCTEVfR1BVPTEnIFwKKwknLURFTkFCTEVfRUdMSU1BR0U9MScgXAor
CSctRFVTRV9TS0lBPTEnIFwKKwknLURFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUj0x
JyBcCisJJy1EV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnIFwKKwknLURFTkFCTEVfM0RfUExVR0lO
PTEnIFwKKwknLURFTkFCTEVfQkxPQj0xJyBcCisJJy1ERU5BQkxFX0JMT0JfU0xJQ0U9MScgXAor
CSctREVOQUJMRV9DSEFOTkVMX01FU1NBR0lORz0xJyBcCisJJy1ERU5BQkxFX0NMSUVOVF9CQVNF
RF9HRU9MT0NBVElPTj0xJyBcCisJJy1ERU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAnIFwKKwkn
LURFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xJyBcCisJJy1ERU5BQkxFX0RFVEFJTFM9MScg
XAorCSctREVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MScgXAorCSctREVOQUJMRV9ESVJFQ1RP
UllfVVBMT0FEPTEnIFwKKwknLURFTkFCTEVfRE9XTkxPQURfQVRUUklCVVRFPTEnIFwKKwknLURF
TkFCTEVfRklMRV9TWVNURU09MScgXAorCSctREVOQUJMRV9GSUxURVJTPTEnIFwKKwknLURFTkFC
TEVfRlVMTFNDUkVFTl9BUEk9MScgXAorCSctREVOQUJMRV9HQU1FUEFEPTEnIFwKKwknLURFTkFC
TEVfR0VPTE9DQVRJT049MScgXAorCSctREVOQUJMRV9HRVNUVVJFX0VWRU5UUz0xJyBcCisJJy1E
RU5BQkxFX0dFU1RVUkVfUkVDT0dOSVpFUj0xJyBcCisJJy1ERU5BQkxFX0lDT05EQVRBQkFTRT0w
JyBcCisJJy1ERU5BQkxFX0lOREVYRURfREFUQUJBU0U9MScgXAorCSctREVOQUJMRV9JTlBVVF9T
UEVFQ0g9MScgXAorCSctREVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SPTAnIFwKKwknLURFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFPTAnIFwKKwknLURFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRT0wJyBc
CisJJy1ERU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTD0wJyBcCisJJy1ERU5BQkxFX0lO
UFVUX1RZUEVfTU9OVEg9MCcgXAorCSctREVOQUJMRV9JTlBVVF9UWVBFX1RJTUU9MCcgXAorCSct
REVOQUJMRV9JTlBVVF9UWVBFX1dFRUs9MCcgXAorCSctREVOQUJMRV9KQVZBU0NSSVBUX0RFQlVH
R0VSPTEnIFwKKwknLURFTkFCTEVfSkFWQVNDUklQVF9JMThOX0FQST0xJyBcCisJJy1ERU5BQkxF
X0xJTktfUFJFRkVUQ0g9MScgXAorCSctREVOQUJMRV9NRURJQV9TT1VSQ0U9MScgXAorCSctREVO
QUJMRV9NRURJQV9TVEFUSVNUSUNTPTEnIFwKKwknLURFTkFCTEVfTUVESUFfU1RSRUFNPTEnIFwK
KwknLURFTkFCTEVfTUVURVJfVEFHPTEnIFwKKwknLURFTkFCTEVfTUhUTUw9MScgXAorCSctREVO
QUJMRV9NSUNST0RBVEE9MCcgXAorCSctREVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlM9MScgXAor
CSctREVOQUJMRV9OT1RJRklDQVRJT05TPTEnIFwKKwknLURFTkFCTEVfT1JJRU5UQVRJT05fRVZF
TlRTPTAnIFwKKwknLURFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQST0xJyBcCisJJy1ERU5BQkxF
X1BPSU5URVJfTE9DSz0xJyBcCisJJy1ERU5BQkxFX1BST0dSRVNTX1RBRz0xJyBcCisJJy1ERU5B
QkxFX1FVT1RBPTEnIFwKKwknLURFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MScgXAor
CSctREVOQUJMRV9SVUJZPTEnIFwKKwknLURFTkFCTEVfU0FOREJPWD0xJyBcCisJJy1ERU5BQkxF
X1NIQVJFRF9XT1JLRVJTPTEnIFwKKwknLURFTkFCTEVfU01PT1RIX1NDUk9MTElORz0xJyBcCisJ
Jy1ERU5BQkxFX1NRTF9EQVRBQkFTRT0xJyBcCisJJy1ERU5BQkxFX1NUWUxFX1NDT1BFRD0wJyBc
CisJJy1ERU5BQkxFX1NWRz0xJyBcCisJJy1ERU5BQkxFX1NWR19GT05UUz0xJyBcCisJJy1ERU5B
QkxFX1RPVUNIX0VWRU5UUz0xJyBcCisJJy1ERU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz0wJyBc
CisJJy1ERU5BQkxFX1Y4X1NDUklQVF9ERUJVR19TRVJWRVI9MScgXAorCSctREVOQUJMRV9WSURF
Tz0xJyBcCisJJy1ERU5BQkxFX1ZJREVPX1RSQUNLPTEnIFwKKwknLURFTkFCTEVfVklFV1BPUlQ9
MCcgXAorCSctREVOQUJMRV9XRUJHTD0xJyBcCisJJy1ERU5BQkxFX1dFQl9TT0NLRVRTPTEnIFwK
KwknLURFTkFCTEVfV0VCX1RJTUlORz0xJyBcCisJJy1ERU5BQkxFX1dPUktFUlM9MScgXAorCSct
REVOQUJMRV9YSFJfUkVTUE9OU0VfQkxPQj0xJyBcCisJJy1ERU5BQkxFX1hTTFQ9MScgXAorCSct
RFdURl9VU0VfTEVWRUxEQj0xJyBcCisJJy1EV1RGX1VTRV9CVUlMVElOX1VURjhfQ09ERUM9MScg
XAorCSctRFdURl9VU0VfT1BFTlRZUEVfU0FOSVRJWkVSPTEnIFwKKwknLURXVEZfVVNFX1NLSUFf
VEVYVD0wJyBcCisJJy1EV1RGX1VTRV9XRUJQPTEnIFwKKwknLURXVEZfVVNFX1dFQktJVF9JTUFH
RV9ERUNPREVSUz0xJyBcCisJJy1ERU5BQkxFX1dFQl9BVURJTz0xJyBcCisJJy1EV1RGX1VTRV9B
Q0NFTEVSQVRFRF9DT01QT1NJVElORz0xJyBcCisJJy1ERU5BQkxFXzNEX1JFTkRFUklORz0xJyBc
CisJJy1ERU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUz0xJyBcCisJJy1EV1RGX1VTRV9XRUJB
VURJT19GRk1QRUc9MScgXAorCSctREJVSUxESU5HX0NIUk9NSVVNX189MScgXAorCSctRFVTRV9T
WVNURU1fTUFMTE9DPTEnIFwKKwknLURXVEZfVVNFX1BUSFJFQURTPTEnIFwKKwknLURVX1VTSU5H
X0lDVV9OQU1FU1BBQ0U9MCcgXAorCSctRFVfU1RBVElDX0lNUExFTUVOVEFUSU9OJyBcCisJJy1E
TkRFQlVHJyBcCisJJy1ETlZBTEdSSU5EJyBcCisJJy1ERFlOQU1JQ19BTk5PVEFUSU9OU19FTkFC
TEVEPTAnCisKKyMgRmxhZ3MgcGFzc2VkIHRvIGFsbCBzb3VyY2UgZmlsZXMuCitDRkxBR1NfUmVs
ZWFzZSA6PSAtcHRocmVhZCBcCisJLWZuby1leGNlcHRpb25zIFwKKwktV25vLXVudXNlZC1wYXJh
bWV0ZXIgXAorCS1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgXAorCS1EX0ZJTEVfT0ZG
U0VUX0JJVFM9NjQgXAorCS1mdmlzaWJpbGl0eT1oaWRkZW4gXAorCS1waXBlIFwKKwktZlBJQyBc
CisJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAorCS1Xbm8tZm9ybWF0IFwKKwktV25vLXVudXNlZC1y
ZXN1bHQgXAorCS1PMiBcCisJLWZuby1pZGVudCBcCisJLWZkYXRhLXNlY3Rpb25zIFwKKwktZmZ1
bmN0aW9uLXNlY3Rpb25zCisKKyMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgQyBmaWxlcy4KK0NGTEFH
U19DX1JlbGVhc2UgOj0gCisKKyMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgQysrIGZpbGVzLgorQ0ZM
QUdTX0NDX1JlbGVhc2UgOj0gLWZuby1ydHRpIFwKKwktZm5vLXRocmVhZHNhZmUtc3RhdGljcyBc
CisJLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIFwKKwktV25vLWRlcHJlY2F0ZWQKKworSU5D
U19SZWxlYXNlIDo9IC1JdGhpcmRfcGFydHkvaWN1L3B1YmxpYy9jb21tb24gXAorCS1JdGhpcmRf
cGFydHkvaWN1L3B1YmxpYy9pMThuIFwKKwktSXRoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UgXAor
CS1JdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9KYXZhU2NyaXB0Q29yZSBcCisJLUl0aGlyZF9w
YXJ0eS9XZWJLaXQvU291cmNlL0phdmFTY3JpcHRDb3JlIFwKKwktSXRoaXJkX3BhcnR5L1dlYktp
dC9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmIFwKKwktSXRoaXJkX3BhcnR5L1dlYktpdC9Tb3Vy
Y2UvV1RGCisKK09CSlMgOj0gJChvYmopLnRhcmdldC8kKFRBUkdFVCkvdGhpcmRfcGFydHkvV2Vi
S2l0L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5vIFwKKwkkKG9iaiku
dGFyZ2V0LyQoVEFSR0VUKS90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3NyYy9XZWJTdHJpbmcubworCisjIEFkZCB0byB0aGUgbGlzdCBvZiBmaWxlcyB3ZSBzcGVj
aWFsbHkgdHJhY2sgZGVwZW5kZW5jaWVzIGZvci4KK2FsbF9kZXBzICs9ICQoT0JKUykKKworIyBD
RkxBR1MgZXQgYWwgb3ZlcnJpZGVzIG11c3QgYmUgdGFyZ2V0LWxvY2FsLgorIyBTZWUgIlRhcmdl
dC1zcGVjaWZpYyBWYXJpYWJsZSBWYWx1ZXMiIGluIHRoZSBHTlUgTWFrZSBtYW51YWwuCiskKE9C
SlMpOiBUT09MU0VUIDo9ICQoVE9PTFNFVCkKKyQoT0JKUyk6IEdZUF9DRkxBR1MgOj0gJChERUZT
XyQoQlVJTERUWVBFKSkgJChJTkNTXyQoQlVJTERUWVBFKSkgJChDRkxBR1NfJChCVUlMRFRZUEUp
KSAkKENGTEFHU19DXyQoQlVJTERUWVBFKSkKKyQoT0JKUyk6IEdZUF9DWFhGTEFHUyA6PSAkKERF
RlNfJChCVUlMRFRZUEUpKSAkKElOQ1NfJChCVUlMRFRZUEUpKSAkKENGTEFHU18kKEJVSUxEVFlQ
RSkpICQoQ0ZMQUdTX0NDXyQoQlVJTERUWVBFKSkKKworIyBTdWZmaXggcnVsZXMsIHB1dHRpbmcg
YWxsIG91dHB1dHMgaW50byAkKG9iaikuCisKKyQob2JqKS4kKFRPT0xTRVQpLyQoVEFSR0VUKS8l
Lm86ICQoc3JjZGlyKS8lLmNwcCBGT1JDRV9ET19DTUQKKwlAJChjYWxsIGRvX2NtZCxjeHgsMSkK
KworIyBUcnkgYnVpbGRpbmcgZnJvbSBnZW5lcmF0ZWQgc291cmNlLCB0b28uCisKKyQob2JqKS4k
KFRPT0xTRVQpLyQoVEFSR0VUKS8lLm86ICQob2JqKS4kKFRPT0xTRVQpLyUuY3BwIEZPUkNFX0RP
X0NNRAorCUAkKGNhbGwgZG9fY21kLGN4eCwxKQorCiskKG9iaikuJChUT09MU0VUKS8kKFRBUkdF
VCkvJS5vOiAkKG9iaikvJS5jcHAgRk9SQ0VfRE9fQ01ECisJQCQoY2FsbCBkb19jbWQsY3h4LDEp
CisKKyMgRW5kIG9mIHRoaXMgc2V0IG9mIHN1ZmZpeCBydWxlcworIyMjIFJ1bGVzIGZvciBmaW5h
bCB0YXJnZXQuCitMREZMQUdTX0RlYnVnIDo9IC1wdGhyZWFkIFwKKwktV2wsLXosbm9leGVjc3Rh
Y2sKKworTERGTEFHU19SZWxlYXNlIDo9IC1wdGhyZWFkIFwKKwktV2wsLXosbm9leGVjc3RhY2sg
XAorCS1XbCwtTzEgXAorCS1XbCwtLWFzLW5lZWRlZCBcCisJLVdsLC0tZ2Mtc2VjdGlvbnMgXAor
CS1XbCwtLWljZj1ub25lCisKK0xJQlMgOj0gCisKKyQob2JqKS50YXJnZXQvdGhpcmRfcGFydHkv
V2ViS2l0L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9saWJwbGF0Zm9ybS5hOiBHWVBfTERGTEFH
UyA6PSAkKExERkxBR1NfJChCVUlMRFRZUEUpKQorJChvYmopLnRhcmdldC90aGlyZF9wYXJ0eS9X
ZWJLaXQvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2xpYnBsYXRmb3JtLmE6IExJQlMgOj0gJChM
SUJTKQorJChvYmopLnRhcmdldC90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL2xpYnBsYXRmb3JtLmE6IFRPT0xTRVQgOj0gJChUT09MU0VUKQorJChvYmopLnRhcmdl
dC90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2xpYnBsYXRmb3Jt
LmE6ICQoT0JKUykgRk9SQ0VfRE9fQ01ECisJJChjYWxsIGRvX2NtZCxhbGluaykKKworYWxsX2Rl
cHMgKz0gJChvYmopLnRhcmdldC90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL2xpYnBsYXRmb3JtLmEKKyMgQWRkIHRhcmdldCBhbGlhcworLlBIT05ZOiBwbGF0Zm9y
bQorcGxhdGZvcm06ICQob2JqKS50YXJnZXQvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9saWJwbGF0Zm9ybS5hCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViTWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MWQ2MjA3MzllNmYy
YjI4ZTViM2JiYTFmM2YzNWM0YTcxYmQwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYk1pbWVSZWdpc3RyeV9oCisjZGVmaW5lIFdlYk1pbWVSZWdpc3RyeV9oCisKKyNp
bmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgV2ViU3RyaW5nOworfQorCituYW1lc3BhY2UgUGxhdGZvcm0gewor
CitjbGFzcyBXZWJNaW1lUmVnaXN0cnkgeworcHVibGljOgorICAgIGVudW0gU3VwcG9ydHNUeXBl
IHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9OworCisgICAg
dmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgbWltZVR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0lt
YWdlTUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAg
dmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBwb3J0c1R5cGUg
c3VwcG9ydHNNZWRpYU1JTUVUeXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIGNvZGVjcykgPSAwOworICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1
cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUp
ID0gMDsKKworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNp
b24oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsKKyAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViU3RyaW5nIHdlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSA9IDA7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYlN0cmluZyBtaW1lVHlwZUZyb21GaWxlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBm
aWxlUGF0aCkgPSAwOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgcHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViTWltZVJlZ2lzdHJ5KCkgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBQbGF0Zm9ybQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3Jj
L1dlYkNTdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5ZDVkZmNiZmQyN2I3OWY1ODY3NmJmN2E5MGI0
NDk0YWM0MzZkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
c3JjL1dlYkNTdHJpbmcuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmgiCisKKyNpbmNs
dWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisvLyBGSVhNRTogVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCByaWdo
dCwgYnV0IHdlIHVzZSBpdCBmb3IgdXRmMTYgZW5jb2RpbmcvZGVjb2RpbmcuIEhtbW1tbS4KKyNp
bmNsdWRlICJXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OkNTdHJp
bmdCdWZmZXIgeworfTsKKworaW50IFdlYkNTdHJpbmc6OmNvbXBhcmUoY29uc3QgV2ViQ1N0cmlu
ZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gQSBudWxsIHN0cmluZyBpcyBhbHdheXMgbGVzcyB0
aGFuIGEgbm9uIG51bGwgb25lLgorICAgIGlmIChpc051bGwoKSAhPSBvdGhlci5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGlzTnVsbCgpID8gLTEgOiAxOworCisgICAgaWYgKGlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gMDsgLy8gQm90aCBXZWJTdHJpbmdzIGFyZSBudWxsLgorCisgICAgcmV0
dXJuIHN0cmNtcChtX3ByaXZhdGUtPmRhdGEoKSwgb3RoZXIubV9wcml2YXRlLT5kYXRhKCkpOwor
fQorCit2b2lkIFdlYkNTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7Cisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKQor
eworICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2
YXRlKSk7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBsZW5ndGgpCit7CisgICAgY2hhciogbmV3RGF0YTsKKyAgICBSZWZQdHI8V1RGOjpDU3Ry
aW5nQnVmZmVyPiBidWZmZXIgPQorICAgICAgICBXVEY6OkNTdHJpbmc6Om5ld1VuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBuZXdEYXRhKS5idWZmZXIoKTsKKyAgICBtZW1jcHkobmV3RGF0YSwgZGF0YSwg
bGVuZ3RoKTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihidWZm
ZXIuZ2V0KCkpKTsKK30KKworc2l6ZV90IFdlYkNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIE5PVEU6IFRoZSBi
dWZmZXIncyBsZW5ndGggaW5jbHVkZXMgdGhlIG51bGwgYnl0ZS4KKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIC0gMTsKK30KKwor
Y29uc3QgY2hhciogV2ViQ1N0cmluZzo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZh
dGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNTdHJpbmdQ
cml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOworfQorCitXZWJTdHJpbmcgV2ViQ1N0cmluZzo6
dXRmMTYoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKS5kZWNv
ZGUoZGF0YSgpLCBsZW5ndGgoKSk7Cit9CisKK1dlYkNTdHJpbmcgV2ViQ1N0cmluZzo6ZnJvbVVU
RjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBX
ZWJDb3JlOjpVVEY4RW5jb2RpbmcoKS5lbmNvZGUoCisgICAgICAgIGRhdGEsIGxlbmd0aCwgV2Vi
Q29yZTo6UXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7Cit9CisKK1dlYkNTdHJpbmcgV2Vi
Q1N0cmluZzo6ZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhKQoreworICAgIHNpemVfdCBs
ZW4gPSAwOworICAgIHdoaWxlIChkYXRhW2xlbl0gIT0gV2ViVUNoYXIoMCkpCisgICAgICAgIGxl
bisrOworICAgIHJldHVybiBmcm9tVVRGMTYoZGF0YSwgbGVuKTsKK30KKworV2ViQ1N0cmluZzo6
V2ViQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJpbmcmIHMpCisgICAgOiBtX3ByaXZhdGUoc3RhdGlj
X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSkKK3sKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnJlZigpOworfQorCitXZWJDU3RyaW5nJiBXZWJDU3Ry
aW5nOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3RyaW5nJiBzKQoreworICAgIGFzc2lnbihzdGF0
aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KHMuYnVmZmVyKCkpKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYkNTdHJpbmc6Om9wZXJhdG9yIFdURjo6Q1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oV2ViQ1N0
cmluZ1ByaXZhdGUqIHApCit7CisgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3
aGVyZSBtX3ByaXZhdGUgPT0gcAorICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBp
ZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRl
ID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vc3JjL1dlYlN0cmluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQ5MGNiM2NkNWM3NTVhZjI3YTNjMjc0
ZWFlMzllMGJkMmQ1NThjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9zcmMvV2ViU3RyaW5nLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViU3RyaW5nLmgiCisKKyNp
bmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlN0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV1RGOjpTdHJpbmdJbXBsIHsKK307CisK
K3ZvaWQgV2ViU3RyaW5nOjpyZXNldCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAg
ICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQor
Cit2b2lkIFdlYlN0cmluZzo6YXNzaWduKGNvbnN0IFdlYlN0cmluZyYgb3RoZXIpCit7CisgICAg
YXNzaWduKGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSkpOwor
fQorCit2b2lkIFdlYlN0cmluZzo6YXNzaWduKGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4oCisg
ICAgICAgIFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlKGRhdGEsIGxlbmd0aCkuZ2V0KCkpKTsKK30K
Kworc2l6ZV90IFdlYlN0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlID8gY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkg
OiAwOworfQorCitjb25zdCBXZWJVQ2hhciogV2ViU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlID8gY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4obV9wcml2
YXRlKS0+Y2hhcmFjdGVycygpIDogMDsKK30KKworV2ViQ1N0cmluZyBXZWJTdHJpbmc6OnV0Zjgo
KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OlN0cmluZyhtX3ByaXZhdGUpLnV0ZjgoKTsKK30K
KworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEsIGxlbmd0
aCk7Cit9CisKK1dlYlN0cmluZyBXZWJTdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEp
Cit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKK30KKworYm9vbCBX
ZWJTdHJpbmc6OmVxdWFscyhjb25zdCBXZWJTdHJpbmcmIHMpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGVxdWFsKG1fcHJpdmF0ZSwgcy5tX3ByaXZhdGUpOworfQorCitXZWJTdHJpbmc6OldlYlN0cmlu
Zyhjb25zdCBXVEY6OlN0cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJT
dHJpbmdQcml2YXRlKj4ocy5pbXBsKCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAg
IG1fcHJpdmF0ZS0+cmVmKCk7Cit9CisKK1dlYlN0cmluZyYgV2ViU3RyaW5nOjpvcGVyYXRvcj0o
Y29uc3QgV1RGOjpTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmlu
Z1ByaXZhdGUqPihzLmltcGwoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViU3RyaW5n
OjpvcGVyYXRvciBXVEY6OlN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsK
K30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmcoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHMpCisg
ICAgOiBtX3ByaXZhdGUoMCkKK3sKKyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7Cit9CisKK1dlYlN0
cmluZyYgV2ViU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHMpCit7
CisgICAgYXNzaWduKHMuc3RyaW5nKCkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViU3Ry
aW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6QXRvbWljU3RyaW5nKHN0YXRpY19jYXN0PFdURjo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUp
KTsKK30KKwordm9pZCBXZWJTdHJpbmc6OmFzc2lnbihXZWJTdHJpbmdQcml2YXRlKiBwKQorewor
ICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRlID09IHAK
KyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAg
ICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDlhODNmYmZlNTAx
MzIwZTFjOGQ4MzYxMTVlYTBhNjMzZTIzMDhkYzkuLjE0ZjQxYmViNWVmNzAxMjYxMWNkMDNiNDYz
MDA1YTg5MTQyOWMwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTY4LDYgKzY4
LDcgQEAKICAgICAgICAgICAgICdtc3ZzX2d1aWQnOiAnNUVDRUM5RTUtOEYyMy00N0I2LTkzRTAt
QzNCMzI4QjNCRTY1JywKICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAg
ICAgICAgJy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6d2ViY29yZScsCisg
ICAgICAgICAgICAgICAgJy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtLmd5cDpwbGF0
Zm9ybScsICMgYWN0dWFsbHkgV2ViQ29yZSBzaG91bGQgZGVwZW5kIG9uIHRoaXMKICAgICAgICAg
ICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lwOnNraWEnLAogICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmlj
dXVjJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9u
cGFwaS9ucGFwaS5neXA6bnBhcGknLApAQCAtNzksNiArODAsNyBAQAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFw
aS5neXA6bnBhcGknLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rv
b2xzL2d5cC92OC5neXA6djgnLAorICAgICAgICAgICAgICAgICcuLi8uLi9QbGF0Zm9ybS9jaHJv
bWl1bS9QbGF0Zm9ybS5neXA6cGxhdGZvcm0nLCAjIHRhcmdldHMgZGVwZW5kaW5nIG9uIHRoZSBX
ZWJLaXQgQVBJIG5lZWQgdG8gc2VlIHRoZSBwbGF0Zm9ybSdzIGluY2x1ZGVfZGlycwogICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICAg
J3B1YmxpYycsCkBAIC0yODEsNyArMjgzLDYgQEAKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYkF1ZGlvRGV2aWNlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZv
cm0vV2ViQmxvYkRhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJC
bG9iUmVnaXN0cnkuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3Ry
aW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ2FudmFzLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ2xpcGJvYXJkLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ29sb3IuaCcsCkBAIC0zMTMsNyArMzE0LDYg
QEAKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkxvY2FsaXplZFN0cmluZy5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk1lZGlhU3RyZWFt
U291cmNlLmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTWltZVJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTm9uQ29weWFibGUu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaCcsCkBAIC00OTEsNyArNDkxLDYgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3Ry
aW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRE9NRXZlbnRMaXN0ZW5lci5jcHAnLApAQCAtNjQ0LDcgKzY0Myw2IEBACiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNlSW1wbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcsCi0gICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJTdHJpbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRSdW4uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlRocmVhZFNhZmVEYXRhLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJVUkwuY3BwJywKQEAgLTEyMzEsNiArMTIyOSw3IEBACiAgICAgICAgICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS93ZWJraXQvc3VwcG9ydC93ZWJraXRf
c3VwcG9ydC5neXA6YmxvYicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS93ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5neXA6d2Via2l0X3N1cHBvcnQn
LAogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvd2Via2l0L3N1
cHBvcnQvd2Via2l0X3N1cHBvcnQuZ3lwOndlYmtpdF91c2VyX2FnZW50JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICcuLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybS5neXA6cGxhdGZv
cm0nLAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAnaW5jbHVk
ZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
Q1N0cmluZy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0
cmluZy5oCmluZGV4IDE1ZGY2Y2Q5ZjlkNjgxNWFlOTA4NTdhYmVhZTA2MDUyZDJiMmRlZmMuLmE2
OTIwNTAwNTQ2Y2RmNjJjNTBjMzNlN2U0MmE0MmYyOWJjY2M0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgKQEAgLTI4LDEw
OSArMjgsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJDU3RyaW5nX2gK
LSNkZWZpbmUgV2ViQ1N0cmluZ19oCiAKLSNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpZm5kZWYg
V2ViQ1N0cmluZ19md2RfaAorI2RlZmluZSBXZWJDU3RyaW5nX2Z3ZF9oCiAKLSNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2Vsc2UKLSNpbmNsdWRl
IDxzdHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBDU3RyaW5nOwotfQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGU7Ci1jbGFzcyBX
ZWJTdHJpbmc7Ci0KLS8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3aXRoIHVuc3Bl
Y2lmaWVkIGVuY29kaW5nLiAgSXQgaXMKLS8vIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJDU3Ry
aW5nIG9iamVjdC4KLS8vCi0vLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2Vi
Q1N0cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYkNTdHJpbmcgewotcHVibGlj
OgotICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJDU3RyaW5nKCkgOiBt
X3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsK
LSAgICB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcmIHMpIDogbV9wcml2YXRl
KDApIHsgYXNzaWduKHMpOyB9Ci0KLSAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2Vi
Q1N0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0cmluZ3MgYXJlIGVxdWFs
cywgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKLSAgICAvLyBmaXJzdCBjaGFyYWN0
ZXIgdGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVlIGluIHRoaXMgc3RyaW5n
Ci0gICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIHRvIGlu
ZGljYXRlIHRoZSBvcHBvc2l0ZS4KLSAgICBXRUJLSVRfRVhQT1JUIGludCBjb21wYXJlKGNvbnN0
IFdlYkNTdHJpbmcmIG90aGVyKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNl
dCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYpOwot
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKLSAgICBXRUJL
SVRfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdXRmMTYo
KSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2
KGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSk7Ci0KLSNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmlu
ZyYpOwotICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmKTsKLSAg
ICBvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgV2ViQ1N0cmluZyhj
b25zdCBzdGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2ln
bihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViQ1N0cmluZyYgb3BlcmF0
b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgp
LCBzLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJh
dG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBsZW5n
dGgoKTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwgbGVuKSA6IHN0
ZDo6c3RyaW5nKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFVURjE2U3RyaW5nPgot
ICAgIHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBVVEYxNlN0cmluZyYgcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmcm9tVVRGMTYocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQgYXNzaWduKFdlYkNTdHJpbmdQcml2YXRl
Kik7Ci0gICAgV2ViQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yPChjb25zdCBXZWJDU3RyaW5nJiBhLCBjb25zdCBXZWJDU3RyaW5nJiBiKQotewot
ICAgIHJldHVybiBhLmNvbXBhcmUoYikgPCAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmluZy5oIgogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YkNvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29t
bW9uLmgKaW5kZXggYzYzNGYwYzM4ZjQxOGQwMjg1ODBjODM2NTNhMWFmMWUxNzM5YWUxOC4uZDBk
ZmY3M2Y0NDg3MjQwMTViOWQ3MGFmNmY5ZWQ4OWNiNDJiMjQ2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29tbW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29tbW9uLmgKQEAgLTI4LDk2ICsy
OCw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ29tbW9uX2gKLSNkZWZp
bmUgV2ViQ29tbW9uX2gKKyNpZm5kZWYgV2ViQ29tbW9uX2Z3ZF9oCisjZGVmaW5lIFdlYkNvbW1v
bl9md2RfaAogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVmYXVsdCBjb25maWd1cmF0
aW9uCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJT04pCi0gICAgI2RlZmluZSBX
RUJLSVRfSU1QTEVNRU5UQVRJT04gMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfVVNJ
TkdfU0tJQSkKLSAgICAjaWYgIWRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFVTRV9TS0lB
KQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDEKLSAgICAjZWxzZQotICAgICAg
ICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDAKLSAgICAjZW5kaWYKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoV0VCS0lUX1VTSU5HX0NHKQotICAgICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IVdFQktJVF9VU0lOR19TS0lBCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0NHIDEKLSAg
ICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19DRyAwCi0gICAgI2VuZGlmCi0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19WOCkKLSAgICAjZGVmaW5lIFdFQktJ
VF9VU0lOR19WOCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19KU0MpCi0g
ICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfSlNDIDAKLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gRXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRvIGJlIGFubm90YXRlZCB3aXRoIFdF
QktJVF9FWFBPUlQKLQotI2lmIGRlZmluZWQoV0VCS0lUX0RMTCkKLSAgICAjaWYgZGVmaW5lZChX
SU4zMikKLSAgICAgICAgI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgICAgICAgICAgI2Rl
ZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAgICAgICAjZWxzZQot
ICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQot
ICAgICAgICAjZW5kaWYKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQg
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLSAgICAjZW5kaWYKLSNlbHNl
Ci0gICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIEJhc2ljIHR5cGVzCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gRm9yIHNpemVf
dAotCi0jaWYgZGVmaW5lZChXSU4zMikKLS8vIFZpc3VhbCBTdHVkaW8gZG9lc24ndCBoYXZlIHN0
ZGludC5oLgotdHlwZWRlZiBzaG9ydCBpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1
aW50MTZfdDsKLXR5cGVkZWYgaW50IGludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1aW50
MzJfdDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVVRGLTE2IGNoYXJhY3Rl
ciB0eXBlCi0jaWYgZGVmaW5lZChXSU4zMikKLXR5cGVkZWYgd2NoYXJfdCBXZWJVQ2hhcjsKLSNl
bHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOwotI2VuZGlmCi0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb25zCi0KLVdFQktJVF9FWFBPUlQgdm9pZCBmYWls
ZWRBc3NlcnRpb24oY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
Ly8gSWRlYWxseSwgb25seSB1c2UgaW5zaWRlIHRoZSBwdWJsaWMgZGlyZWN0b3J5IGJ1dCBvdXRz
aWRlIG9mIFdFQktJVF9JTVBMRU1FTlRBVElPTiBibG9ja3MuICAoT3RoZXJ3aXNlIHVzZSBXVEYn
cyBBU1NFUlQuKQotI2lmIGRlZmluZWQoTkRFQlVHKQotI2RlZmluZSBXRUJLSVRfQVNTRVJUKGFz
c2VydGlvbikgKCh2b2lkKTApCi0jZWxzZQotI2RlZmluZSBXRUJLSVRfQVNTRVJUKGFzc2VydGlv
bikgZG8geyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9uKSkgXAotICAgICAgICBmYWlsZWRBc3NlcnRp
b24oX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICNhc3NlcnRpb24pOyBcCi19IHdo
aWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIFdF
QktJVF9BU1NFUlQoMCkKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ29t
bW9uLmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAppbmRleCA2YzBlNzRm
MTI5NzJjN2YzNzQ2MzQwYWZmNjliMzEyZGMyNWNhMWU5Li4wNGE0ZGNhMDg3ZWRmNzgzMmVkYjYx
YmI4NTBjZWE4OGYyMzU5ZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaApAQCAtNDgs
NiArNDgsMTAgQEAKIHR5cGVkZWYgdm9pZCAqSEFORExFOwogI2VuZGlmCiAKK25hbWVzcGFjZSBQ
bGF0Zm9ybSB7CitjbGFzcyBXZWJNaW1lUmVnaXN0cnk7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsgLy8gRklYTUU6IERvZXMgdGhpcyBi
ZWxvbmcgaW4gcGxhdGZvcm0/CkBAIC02MSw3ICs2NSw2IEBAIGNsYXNzIFdlYkdyYXBoaWNzQ29u
dGV4dDNEOwogY2xhc3MgV2ViSURCRmFjdG9yeTsgLy8gRklYTUU6IERvZXMgdGhpcyBiZWxvbmcg
aW4gcGxhdGZvcm0/CiBjbGFzcyBXZWJJREJLZXk7IC8vIEZJWE1FOiBEb2VzIHRoaXMgYmVsb25n
IGluIHBsYXRmb3JtPwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVsOyAvLyBGSVhNRTogRG9l
cyB0aGlzIGJlbG9uZyBpbiBwbGF0Zm9ybT8KLWNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKIGNsYXNz
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjsKIGNsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxpc3RCdWlsZGVyOyAvLyBGSVhNRTogRG9lcyB0aGlz
IGJlbG9uZyBpbiBwbGF0Zm9ybT8KQEAgLTgwLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgV2ViQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiAwOyB9CiAKICAgICAvLyBNdXN0
IHJldHVybiBub24tbnVsbC4KLSAgICB2aXJ0dWFsIFdlYk1pbWVSZWdpc3RyeSogbWltZVJlZ2lz
dHJ5KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm06OldlYk1pbWVSZWdpc3Ry
eSogbWltZVJlZ2lzdHJ5KCkgeyByZXR1cm4gMDsgfQogCiAgICAgLy8gTXVzdCByZXR1cm4gbm9u
LW51bGwuCiAgICAgdmlydHVhbCBXZWJGaWxlVXRpbGl0aWVzKiBmaWxlVXRpbGl0aWVzKCkgeyBy
ZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzQ0NmU1ZTQ2ZWY2MWExMTRkYmZmNjE2YmUzMTRiNDBlMjY5MGFmZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFdlYk1pbWVSZWdpc3RyeV9oCi0jZGVmaW5lIFdlYk1pbWVSZWdpc3RyeV9o
Ci0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlN0cmluZzsKLQotY2xhc3MgV2ViTWltZVJlZ2lzdHJ5IHsKLXB1YmxpYzoKLSAgICBlbnVt
IFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVkLCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0
ZWQgfTsKLQotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
V2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBv
cnRzSW1hZ2VNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmly
dHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgV2ViU3Ry
aW5nJiBtaW1lVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTWVk
aWFNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGNvZGVjcykgPSAw
OwotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShjb25z
dCBXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBtaW1l
VHlwZUZvckV4dGVuc2lvbihjb25zdCBXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsKLSAg
ICB2aXJ0dWFsIFdlYlN0cmluZyB3ZWxsS25vd25NaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBX
ZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBtaW1l
VHlwZUZyb21GaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpID0gMDsKLSAgICB2aXJ0dWFs
IFdlYlN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcm
IG1pbWVUeXBlKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICB+V2ViTWltZVJlZ2lzdHJ5KCkgeyB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTdHJpbmcuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oCmluZGV4IGMzMzZkZDEx
M2RjZDYxYWVmYWU1MmE5ODA4YjZjNTcyNzVmM2I5ZGYuLmU3ZGY2ZDdiZGExN2UyMDgzMjNmNzkz
NmI3NzQ0M2U5MDkxZGFiMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYlN0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYlN0cmluZy5oCkBAIC0yOCwxNTAgKzI4LDEwIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgV2ViU3RyaW5nX2gKLSNkZWZpbmUgV2ViU3RyaW5nX2gKKyNp
Zm5kZWYgV2ViU3RyaW5nX2Z3ZF9oCisjZGVmaW5lIFdlYlN0cmluZ19md2RfaAogCi0jaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYlN0
cmluZy5oIgogCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YmFzZS9udWxsYWJsZV9zdHJpbmcxNi5oPgotI2luY2x1
ZGUgPGJhc2Uvc3RyaW5nMTYuaD4KICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgV2ViQ1N0cmluZzsKLWNsYXNzIFdlYlN0cmluZ1ByaXZhdGU7Ci0KLS8vIEEgVVRGLTE2IHN0
cmluZyBjb250YWluZXIuICBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViU3RyaW5nCi0v
LyBvYmplY3QuCi0vLwotLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYlN0
cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYlN0cmluZyB7Ci1wdWJsaWM6Ci0g
ICAgfldlYlN0cmluZygpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViU3RyaW5nKCkgOiBtX3ByaXZh
dGUoMCkgeyB9Ci0KLSAgICBXZWJTdHJpbmcoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKLSAg
ICB9Ci0KLSAgICBXZWJTdHJpbmcoY29uc3QgV2ViU3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgwKSB7
IGFzc2lnbihzKTsgfQotCi0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViU3RyaW5n
JiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Ci0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGFzc2lnbihjb25zdCBXZWJTdHJpbmcmKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YXNzaWduKGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKLQotICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViU3RyaW5nJiBzKSBjb25zdDsKLQotICAgIFdFQktJ
VF9FWFBPUlQgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgY29uc3Qg
V2ViVUNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFsZW5ndGgoKTsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJp
dmF0ZTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJDU3RyaW5nIHV0ZjgoKSBjb25zdDsKLQot
ICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcg
ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSk7Ci0KLSAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0
cmluZyhjb25zdCBjaGFyICgmZGF0YSlbTl0pCi0gICAgICAgIDogbV9wcml2YXRlKDApCi0gICAg
ewotICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIgKCZkYXRhKVtO
XSkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRhLCBOIC0gMSkpOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAg
V2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0o
Y29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBvcGVyYXRvciBXVEY6OlN0cmluZygpIGNvbnN0Owot
Ci0gICAgV2ViU3RyaW5nKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgV2ViU3RyaW5n
JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBvcGVyYXRvciBXVEY6
OkF0b21pY1N0cmluZygpIGNvbnN0OwotI2Vsc2UKLQotICAgIFdlYlN0cmluZyhjb25zdCBzdHJp
bmcxNiYgcykgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzLmRhdGEoKSwg
cy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3Ry
aW5nMTYmIHMpCi0gICAgewotICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3Igc3RyaW5nMTYoKSBj
b25zdAotICAgIHsKLSAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwotICAgICAgICByZXR1
cm4gbGVuID8gc3RyaW5nMTYoZGF0YSgpLCBsZW4pIDogc3RyaW5nMTYoKTsKLSAgICB9Ci0KLSAg
ICBXZWJTdHJpbmcoY29uc3QgTnVsbGFibGVTdHJpbmcxNiYgcykgOiBtX3ByaXZhdGUoMCkKLSAg
ICB7Ci0gICAgICAgIGlmIChzLmlzX251bGwoKSkKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFzc2lnbihzLnN0cmluZygpLmRhdGEoKSwgcy5zdHJpbmco
KS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgTnVs
bGFibGVTdHJpbmcxNiYgcykKLSAgICB7Ci0gICAgICAgIGlmIChzLmlzX251bGwoKSkKLSAgICAg
ICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFzc2lnbihzLnN0cmlu
ZygpLmRhdGEoKSwgcy5zdHJpbmcoKS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0KLSAgICBvcGVyYXRvciBOdWxsYWJsZVN0cmluZzE2KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICAgICAgcmV0dXJuIE51bGxhYmxlU3RyaW5n
MTYoc3RyaW5nMTYoKSwgdHJ1ZSk7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKLSAg
ICAgICAgcmV0dXJuIE51bGxhYmxlU3RyaW5nMTYobGVuID8gc3RyaW5nMTYoZGF0YSgpLCBsZW4p
IDogc3RyaW5nMTYoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBVVEY4
U3RyaW5nPgotICAgIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVURjgoY29uc3QgVVRGOFN0cmluZyYg
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tVVRGOChzLmRhdGEoKSwgcy5sZW5ndGgoKSk7
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdm9pZCBhc3NpZ24oV2ViU3RyaW5nUHJp
dmF0ZSopOwotICAgIFdlYlN0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU3RyaW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCi17
Ci0gICAgcmV0dXJuIGEuZXF1YWxzKGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFdlYlN0cmluZyYgYSwgY29uc3QgV2ViU3RyaW5nJiBiKQotewotICAgIHJldHVybiAhKGEg
PT0gYik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4
IDBkZDFkYjhjN2FkYmQxMDk1ZTU0MTRhNWZkOGI2ZWFhYTA2MDdmYjkuLmFmNjg0ZTE5YzBiMWIy
Nzc4M2Y2OWE1YzVmMDZiODU1NGM1MDM5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcApAQCAtNTEsNiArNTEsNyBAQAog
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWlt
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlBsdWdpbkRh
dGFDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpAQCAtNjYsNyArNjcs
NiBAQAogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJX
ZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y2FuU2hvd01JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CiAgICAgLy8gbWltZVR5cGUgc3RyaW5ncyBhcmUg
c3VwcG9zZWQgdG8gYmUgQVNDSUksIGJ1dCBpZiB0aGV5IGFyZSBub3QgZm9yIHNvbWUKICAgICAv
LyByZWFzb24sIHRoZW4gaXQganVzdCBtZWFucyB0aGF0IHRoZSBtaW1lIHR5cGUgd2lsbCBmYWls
IGFsbCBvZiB0aGVzZSAiaXMKICAgICAvLyBzdXBwb3J0ZWQiIGNoZWNrcyBhbmQgZ28gZG93biB0
aGUgcGF0aCBvZiBhbiB1bmhhbmRsZWQgbWltZSB0eXBlLgotICAgIGlmICh3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTUlNRVR5cGUobWltZVR5cGUpID09
IFdlYk1pbWVSZWdpc3RyeTo6SXNTdXBwb3J0ZWQpCisgICAgaWYgKHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNNSU1FVHlwZShtaW1lVHlwZSkgPT0gUGxh
dGZvcm06OldlYk1pbWVSZWdpc3RyeTo6SXNTdXBwb3J0ZWQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gSWYgQ2hyb21lIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLS1kaXNhYmxlLXBsdWdp
bnMgc3dpdGNoLCBwbHVnaW5EYXRhIGlzIG51bGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAppbmRleCAxZDFlNzk3NzgzNDQ3MjI5MmYzNmM2NDRk
ZjNhOGY5YTc2ZTA2ZmE1Li45Y2U4ZWFhMTNiYmI0NDk2NzE2NDFhYzE4MTBjYzFjYzNjZWI3MWMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVD
bGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJNaW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJGaWxlVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwu
aCIKQEAgLTU3LDcgKzU4LDYgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEcmFnRGF0YS5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkltYWdlLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0
UGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCkBA
IC01ODgsMTkgKzU4OCwxOSBAQCBib29sIFBsYXRmb3JtU3VwcG9ydDo6bGF5b3V0VGVzdE1vZGUo
KQogYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKLSAgICAgICAg
IT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKKyAgICAgICAgIT0gUGxhdGZvcm06
OldlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKIGJvb2wgUGxhdGZvcm1TdXBw
b3J0Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQogewogICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCkt
PnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQotICAgICAgICAhPSBXZWJNaW1l
UmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworICAgICAgICAhPSBQbGF0Zm9ybTo6V2ViTWltZVJl
Z2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAogYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OmlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJl
dHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9u
SW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKLSAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05v
dFN1cHBvcnRlZDsKKyAgICAgICAgIT0gUGxhdGZvcm06OldlYk1pbWVSZWdpc3RyeTo6SXNOb3RT
dXBwb3J0ZWQ7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6Om1pbWVUeXBlRm9yRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDU3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MzMTkxY2EwMmQy
ZWU2YWNjNzY3ZWY2ODZiNTAwNzc3MmM4NmNjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5n
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkNTdHJpbmcuaCIKLQotI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkNTdHJpbmdQcml2
YXRlIDogcHVibGljIFdURjo6Q1N0cmluZ0J1ZmZlciB7Ci19OwotCi1pbnQgV2ViQ1N0cmluZzo6
Y29tcGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikgY29uc3QKLXsKLSAgICAvLyBBIG51bGwg
c3RyaW5nIGlzIGFsd2F5cyBsZXNzIHRoYW4gYSBub24gbnVsbCBvbmUuCi0gICAgaWYgKGlzTnVs
bCgpICE9IG90aGVyLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gaXNOdWxsKCkgPyAtMSA6IDE7
Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOyAvLyBCb3RoIFdlYlN0cmlu
Z3MgYXJlIG51bGwuCi0KLSAgICByZXR1cm4gc3RyY21wKG1fcHJpdmF0ZS0+ZGF0YSgpLCBvdGhl
ci5tX3ByaXZhdGUtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViQ1N0cmluZzo6cmVzZXQoKQotewot
ICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgICAg
ICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29u
c3QgV2ViQ1N0cmluZyYgb3RoZXIpCi17Ci0gICAgYXNzaWduKGNvbnN0X2Nhc3Q8V2ViQ1N0cmlu
Z1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKLX0KLQotdm9pZCBXZWJDU3RyaW5nOjphc3Np
Z24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBjaGFyKiBuZXdEYXRh
OwotICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICAgIFdURjo6
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0RhdGEpLmJ1ZmZlcigpOwotICAg
IG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOwotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxX
ZWJDU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOwotfQotCi1zaXplX3QgV2ViQ1N0cmlu
Zzo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBi
eXRlLgotICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRl
KS0+bGVuZ3RoKCkgLSAxOwotfQotCi1jb25zdCBjaGFyKiBXZWJDU3RyaW5nOjpkYXRhKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Ci19Ci0K
LVdlYlN0cmluZyBXZWJDU3RyaW5nOjp1dGYxNigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OlVURjhFbmNvZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsKLX0KLQotV2ViQ1N0
cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmVuY29kZSgKLSAg
ICAgICAgZGF0YSwgbGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVz
KTsKLX0KLQotV2ViQ1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIq
IGRhdGEpCi17Ci0gICAgc2l6ZV90IGxlbiA9IDA7Ci0gICAgd2hpbGUgKGRhdGFbbGVuXSAhPSBX
ZWJVQ2hhcigwKSkKLSAgICAgICAgbGVuKys7Ci0gICAgcmV0dXJuIGZyb21VVEYxNihkYXRhLCBs
ZW4pOwotfQotCi1XZWJDU3RyaW5nOjpXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYgcykK
LSAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KHMuYnVmZmVy
KCkpKQotewotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+cmVmKCk7Ci19
Ci0KLVdlYkNTdHJpbmcmIFdlYkNTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcm
IHMpCi17Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ocy5idWZm
ZXIoKSkpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2ViQ1N0cmluZzo6b3BlcmF0b3IgV1RG
OjpDU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi12b2lkIFdl
YkNTdHJpbmc6OmFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSogcCkKLXsKLSAgICAvLyBUYWtlIGNh
cmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCi0gICAgaWYgKHApCi0g
ICAgICAgIHAtPnJlZigpOwotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+
ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNs
aWVudEltcGwuY3BwCmluZGV4IDk5MzYxZWQ5NDFhYTQ2MzA2ZDU2N2JkMjNkOGRjZGVhZGY2NWE5
OTYuLmE4NWYzNWQwNDE2MjI3NzZmMGNjNGNjN2FjZjYzZTdjOGRlNzE3OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
LmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRp
bWVSYW5nZXMuaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKICNpbmNsdWRlICJW
aWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmgiCkBAIC0zMSw3ICszMiw2IEBACiAjaW5jbHVkZSAicGxh
dGZvcm0vV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5oIgogI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJlY3QuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5n
LmgiCkBAIC02NDgsMTYgKzY0OCwxNiBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRUeXBlcwogTWVkaWFQ
bGF5ZXI6OlN1cHBvcnRzVHlwZSBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY29kZWNzKQogewot
ICAgIFdlYk1pbWVSZWdpc3RyeTo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZSA9IHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNNZWRpYU1JTUVUeXBlKHR5
cGUsIGNvZGVjcyk7CisgICAgUGxhdGZvcm06OldlYk1pbWVSZWdpc3RyeTo6U3VwcG9ydHNUeXBl
IHN1cHBvcnRzVHlwZSA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+
c3VwcG9ydHNNZWRpYU1JTUVUeXBlKHR5cGUsIGNvZGVjcyk7CiAKICAgICBzd2l0Y2ggKHN1cHBv
cnRzVHlwZSkgewogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIGNhc2UgV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDoKKyAgICBjYXNlIFBsYXRm
b3JtOjpXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOgogICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotICAgIGNhc2UgV2ViTWltZVJlZ2lzdHJ5OjpJc1N1
cHBvcnRlZDoKKyAgICBjYXNlIFBsYXRmb3JtOjpXZWJNaW1lUmVnaXN0cnk6OklzU3VwcG9ydGVk
OgogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOwotICAgIGNhc2UgV2Vi
TWltZVJlZ2lzdHJ5OjpNYXlCZVN1cHBvcnRlZDoKKyAgICBjYXNlIFBsYXRmb3JtOjpXZWJNaW1l
UmVnaXN0cnk6Ok1heUJlU3VwcG9ydGVkOgogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOwogICAgIH0KICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc5MjliZDUwY2MyZWZlMTNhNTUwMGM3MTk3NzRmMjI4ZGU0MDIx
MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmlu
Zy5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJDU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
U3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0ltcGwgewotfTsKLQotdm9pZCBXZWJT
dHJpbmc6OnJlc2V0KCkKLXsKLSAgICBpZiAobV9wcml2YXRlKSB7Ci0gICAgICAgIG1fcHJpdmF0
ZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcml2YXRlID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
U3RyaW5nOjphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhlcikKLXsKLSAgICBhc3NpZ24oY29u
c3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQg
V2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17
Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPigKLSAgICAgICAgV1RG
OjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkpOwotfQotCi1zaXplX3Qg
V2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25z
dF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSA6IDA7Ci19Ci0K
LWNvbnN0IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBt
X3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFy
YWN0ZXJzKCkgOiAwOwotfQotCi1XZWJDU3RyaW5nIFdlYlN0cmluZzo6dXRmOCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSkudXRmOCgpOwotfQotCi1XZWJTdHJp
bmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQot
ewotICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKLX0KLQot
V2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwotfQotCi1ib29sIFdlYlN0cmluZzo6
ZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKLXsKLSAgICByZXR1cm4gZXF1YWwobV9w
cml2YXRlLCBzLm1fcHJpdmF0ZSk7Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzKQotICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZh
dGUqPihzLmltcGwoKSkpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRl
LT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6
OlN0cmluZyYgcykKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+
KHMuaW1wbCgpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9y
IFdURjo6U3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi1XZWJT
dHJpbmc6OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLSAgICA6IG1fcHJp
dmF0ZSgwKQotewotICAgIGFzc2lnbihzLnN0cmluZygpKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJT
dHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLXsKLSAgICBhc3Np
Z24ocy5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJh
dG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpBdG9taWNT
dHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkpOwotfQotCi12
b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqIHApCi17Ci0gICAgLy8gVGFr
ZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAotICAgIGlmIChw
KQotICAgICAgICBwLT5yZWYoKTsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7Ci0gICAgbV9wcml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119505</attachid>
            <date>2011-12-15 15:08:41 -0800</date>
            <delta_ts>2011-12-15 17:19:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20111215150840.patch</filename>
            <type>text/plain</type>
            <size>61067</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi40NGFmODdmMjU5MDM1NjFmNzVlYzI4NjJmOGQ2
MDNjZmQxODQ5Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMS0xMi0xNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdheSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBw
bGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjaHJvbWl1bS9QbGF0Zm9ybS5neXA6IEFkZGVkLgor
ICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaC4KKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6fldlYkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
U3RyaW5nOjpXZWJDU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
Om9wZXJhdG9yIHN0ZDo6c3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJv
bVVURjE2KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8KToKKyAgICAgICAgKiBjaHJvbWl1
bS9jb21tb24vV2ViQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oLgorICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9X
ZWJTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViU3RyaW5nLmguCisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6fldlYlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmlzTnVsbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3Igc3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6Om9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
LnRhcmdldC5tazogQWRkZWQuCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChQbGF0Zm9ybTo6V2ViTWltZVJlZ2lzdHJ5
Ojp+V2ViTWltZVJlZ2lzdHJ5KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6OnV0
ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNT
dHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJhdG9y
IFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Ry
aW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisKIDIw
MTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
c3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NmE3ZTE3NjQzNmJmZjYzNjFjNzc3Y2MxNTBiOGMxNTMxMTllOWUyNS4uMzVmODA1NGViZTJiZmZh
NjhmM2Q5ZWVlNTZkOWJjYWJjZDU4OTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMS0xMi0xNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdh
eSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBwbGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmg6CisgICAgICAg
ICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZv
cm1TdXBwb3J0OjptaW1lUmVnaXN0cnkpOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJT
dHJpbmcuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5TaG93TUlNRVR5cGUpOgorICAg
ICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1TdXBwb3J0Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1TdXBwb3J0Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSk6
CisgICAgICAgICogc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNUeXBlKToKKwogMjAxMS0x
Mi0xNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBSb2xsIGNocm9taXVtIERFUFMgKHIxMTM4MDcgLT4gcjExNDM1NikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm0uZ3lwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlY2UxYWEzNzdiZjRiNGMwZjg1
ZTdmNDcxZTUxNDZlODMyYmRjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm0uZ3lwCkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorIworCit7CisgICAgJ3RhcmdldHMnOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF0Zm9ybScsCisgICAgICAgICAgICAndHlwZSc6ICdz
dGF0aWNfbGlicmFyeScsCisgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAg
ICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlw
dENvcmUuZ3lwOnd0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dURi9XVEYuZ3lwL1dURi5n
eXA6bmV3d3RmJywKKyAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDp3ZWJjb3JlX3BsYXRmb3JtJywgIyBiYWQgYmFkLCBidXQgV2ViQ1N0cmluZyBk
ZXBlbmRzIG9uIHN0dWZmIGluIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcKKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAg
ICAgICcuLi8uLicsICMgcHV0IFNvdXJjZS8gb24gdGhlIGluY2x1ZGUgcGF0aAorICAgICAgICAg
ICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZScsCisgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgJ2RlZmluZXMnOiBbCisgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0x
JywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAg
ICAgICAnY29tbW9uL1dlYkNTdHJpbmcuaCcsCisgICAgICAgICAgICAgICAgJ2NvbW1vbi9XZWJD
b21tb24uaCcsCisgICAgICAgICAgICAgICAgJ2NvbW1vbi9XZWJTdHJpbmcuaCcsCisgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJNaW1lUmVnaXN0cnkuaCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJDU3RyaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdHJpbmcuY3BwJywK
KyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6
IHsKKyAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAg
ICAnLi4vLi4nLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vSmF2YVNjcmlwdENvcmUnLAor
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2NvbmRpdGlv
bnMnOiBbCisgICAgICAgICAgICAgICAgWydpbnNpZGVfY2hyb21pdW1fYnVpbGQ9PTEnLCB7Cisg
ICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgICAgICAg
ICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdX
RUJLSVRfRExMJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAg
fV0sCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmluZy5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVkZjZjZDlmOWQ2
ODE1YWU5MDg1N2FiZWFlMDYwNTJkMmIyZGVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmluZy5oCkBAIC0wLDAgKzEsMTM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJDU3RyaW5nX2gKKyNkZWZpbmUgV2ViQ1N0cmluZ19oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZz4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RG
IHsKK2NsYXNzIENTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJD
U3RyaW5nUHJpdmF0ZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLy8gQSBzaW5nbGUtYnl0ZSBzdHJp
bmcgY29udGFpbmVyIHdpdGggdW5zcGVjaWZpZWQgZW5jb2RpbmcuICBJdCBpcworLy8gaW5leHBl
bnNpdmUgdG8gY29weSBhIFdlYkNTdHJpbmcgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlz
IG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJDU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xh
c3MgV2ViQ1N0cmluZyB7CitwdWJsaWM6CisgICAgfldlYkNTdHJpbmcoKSB7IHJlc2V0KCk7IH0K
KworICAgIFdlYkNTdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkNTdHJpbmco
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAg
ICAgIGFzc2lnbihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkNTdHJpbmcoY29uc3QgV2Vi
Q1N0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAgIFdlYkNTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBXZWJDU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWdu
KHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgLy8gUmV0dXJucyAwIGlm
IGJvdGggc3RyaW5ncyBhcmUgZXF1YWxzLCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRo
ZQorICAgIC8vIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IG1hdGNoIGhhcyBhIGdyZWF0
ZXIgdmFsdWUgaW4gdGhpcyBzdHJpbmcKKyAgICAvLyB0aGFuIGluIHxvdGhlcnwsIG9yIGEgdmFs
dWUgbGVzcyB0aGFuIHplcm8gdG8gaW5kaWNhdGUgdGhlIG9wcG9zaXRlLgorICAgIFdFQktJVF9F
WFBPUlQgaW50IGNvbXBhcmUoY29uc3QgV2ViQ1N0cmluZyYgb3RoZXIpIGNvbnN0OworCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2ln
bihjb25zdCBXZWJDU3RyaW5nJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKworICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0
OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CisgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CisKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYlN0cmluZyB1dGYxNigpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViQ1N0cmluZyBmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgpOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2KGNvbnN0
IFdlYlVDaGFyKiBkYXRhKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkNT
dHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJik7CisgICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9KGNv
bnN0IFdURjo6Q1N0cmluZyYpOworICAgIG9wZXJhdG9yIFdURjo6Q1N0cmluZygpIGNvbnN0Owor
I2Vsc2UKKyAgICBXZWJDU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgw
KQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKKyAgICB9CisK
KyAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpzdHJpbmcmIHMpCisgICAgewor
ICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOworICAgICAgICByZXR1cm4gbGVuID8gc3RkOjpz
dHJpbmcoZGF0YSgpLCBsZW4pIDogc3RkOjpzdHJpbmcoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVVRGMTZTdHJpbmc+CisgICAgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2KGNv
bnN0IFVURjE2U3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21VVEYxNihzLmRh
dGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBh
c3NpZ24oV2ViQ1N0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJDU3RyaW5nUHJpdmF0ZSogbV9wcml2
YXRlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFdlYkNTdHJpbmcmIGEsIGNv
bnN0IFdlYkNTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuIGEuY29tcGFyZShiKSA8IDA7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ29tbW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vY29tbW9uL1dlYkNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MzRmMGMzOGY0MThkMDI4NTgwYzgz
NjUzYTFhZjFlMTczOWFlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vY29tbW9uL1dlYkNvbW1vbi5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJp
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
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21t
b25faAorI2RlZmluZSBXZWJDb21tb25faAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
RGVmYXVsdCBjb25maWd1cmF0aW9uCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJ
T04pCisgICAgI2RlZmluZSBXRUJLSVRfSU1QTEVNRU5UQVRJT04gMAorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChXRUJLSVRfVVNJTkdfU0tJQSkKKyAgICAjaWYgIWRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFVTRV9TS0lBKQorICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDEK
KyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDAKKyAgICAjZW5k
aWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX0NHKQorICAgICNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIVdFQktJVF9VU0lOR19TS0lBCisgICAgICAgICNkZWZpbmUgV0VC
S0lUX1VTSU5HX0NHIDEKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19D
RyAwCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19WOCkK
KyAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19WOCAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdF
QktJVF9VU0lOR19KU0MpCisgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfSlNDIDAKKyNlbmRpZgor
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRvIGJl
IGFubm90YXRlZCB3aXRoIFdFQktJVF9FWFBPUlQKKworI2lmIGRlZmluZWQoV0VCS0lUX0RMTCkK
KyAgICAjaWYgZGVmaW5lZChXSU4zMikKKyAgICAgICAgI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgorICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0
KQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVj
bHNwZWMoZGxsaW1wb3J0KQorICAgICAgICAjZW5kaWYKKyAgICAjZWxzZQorICAgICAgICAjZGVm
aW5lIFdFQktJVF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkK
KyAgICAjZW5kaWYKKyNlbHNlCisgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUCisjZW5kaWYKKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2ljIHR5cGVzCisKKyNpbmNsdWRlIDxzdGRk
ZWYuaD4gLy8gRm9yIHNpemVfdAorCisjaWYgZGVmaW5lZChXSU4zMikKKy8vIFZpc3VhbCBTdHVk
aW8gZG9lc24ndCBoYXZlIHN0ZGludC5oLgordHlwZWRlZiBzaG9ydCBpbnQxNl90OwordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKK3R5cGVkZWYgaW50IGludDMyX3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGludCB1aW50MzJfdDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gVVRGLTE2IGNoYXJhY3RlciB0eXBlCisjaWYgZGVmaW5lZChXSU4zMikKK3R5cGVkZWYgd2No
YXJfdCBXZWJVQ2hhcjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOwor
I2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb25zCisKK1dFQktJ
VF9FWFBPUlQgdm9pZCBmYWlsZWRBc3NlcnRpb24oY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pOworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworLy8gSWRlYWxseSwgb25seSB1c2UgaW5zaWRlIHRoZSBwdWJsaWMg
ZGlyZWN0b3J5IGJ1dCBvdXRzaWRlIG9mIFdFQktJVF9JTVBMRU1FTlRBVElPTiBibG9ja3MuICAo
T3RoZXJ3aXNlIHVzZSBXVEYncyBBU1NFUlQuKQorI2lmIGRlZmluZWQoTkRFQlVHKQorI2RlZmlu
ZSBXRUJLSVRfQVNTRVJUKGFzc2VydGlvbikgKCh2b2lkKTApCisjZWxzZQorI2RlZmluZSBXRUJL
SVRfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgXAorICAg
ICAgICBmYWlsZWRBc3NlcnRpb24oX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICNh
c3NlcnRpb24pOyBcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpIFdFQktJVF9BU1NFUlQoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYlN0cmluZy5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL2NvbW1vbi9XZWJTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzM2ZGQxMTNkY2Q2
MWFlZmFlNTJhOTgwOGI2YzU3Mjc1ZjNiOWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJTdHJpbmcuaApAQCAtMCwwICsxLDE3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
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
ZWYgV2ViU3RyaW5nX2gKKyNkZWZpbmUgV2ViU3RyaW5nX2gKKworI2luY2x1ZGUgIldlYkNvbW1v
bi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNlbHNlCisjaW5jbHVkZSA8YmFzZS9udWxsYWJsZV9zdHJpbmcxNi5oPgorI2luY2x1ZGUg
PGJhc2Uvc3RyaW5nMTYuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViQ1N0cmluZzsKK2NsYXNzIFdlYlN0cmluZ1ByaXZhdGU7CisKKy8vIEEgVVRGLTE2IHN0cmlu
ZyBjb250YWluZXIuICBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViU3RyaW5nCisvLyBv
YmplY3QuCisvLworLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYlN0cmlu
ZyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8KK2NsYXNzIFdlYlN0cmluZyB7CitwdWJsaWM6CisgICAg
fldlYlN0cmluZygpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViU3RyaW5nKCkgOiBtX3ByaXZhdGUo
MCkgeyB9CisKKyAgICBXZWJTdHJpbmcoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4p
IDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAgICB9
CisKKyAgICBXZWJTdHJpbmcoY29uc3QgV2ViU3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgwKSB7IGFz
c2lnbihzKTsgfQorCisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViU3RyaW5nJiBz
KQorICAgIHsKKyAgICAgICAgYXNzaWduKHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFzc2lnbihjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNz
aWduKGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKworICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViU3RyaW5nJiBzKSBjb25zdDsKKworICAgIFdFQktJVF9F
WFBPUlQgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgY29uc3QgV2Vi
VUNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFsZW5ndGgoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0
ZTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCBXZWJDU3RyaW5nIHV0ZjgoKSBjb25zdDsKKworICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcgZnJv
bVVURjgoY29uc3QgY2hhciogZGF0YSk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmlu
Zyhjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgICAgIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8aW50IE4+IFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkK
KyAgICB7CisgICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRhLCBOIC0gMSkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2Vi
U3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29u
c3QgV1RGOjpTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBXVEY6OlN0cmluZygpIGNvbnN0OworCisg
ICAgV2ViU3RyaW5nKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7CisgICAgV2ViU3RyaW5nJiBv
cGVyYXRvcj0oY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBXVEY6OkF0
b21pY1N0cmluZygpIGNvbnN0OworI2Vsc2UKKworICAgIFdlYlN0cmluZyhjb25zdCBzdHJpbmcx
NiYgcykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5s
ZW5ndGgoKSk7CisgICAgfQorCisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3RyaW5n
MTYmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3Igc3RyaW5nMTYoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOworICAgICAgICByZXR1cm4g
bGVuID8gc3RyaW5nMTYoZGF0YSgpLCBsZW4pIDogc3RyaW5nMTYoKTsKKyAgICB9CisKKyAgICBX
ZWJTdHJpbmcoY29uc3QgTnVsbGFibGVTdHJpbmcxNiYgcykgOiBtX3ByaXZhdGUoMCkKKyAgICB7
CisgICAgICAgIGlmIChzLmlzX251bGwoKSkKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFzc2lnbihzLnN0cmluZygpLmRhdGEoKSwgcy5zdHJpbmcoKS5s
ZW5ndGgoKSk7CisgICAgfQorCisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgTnVsbGFi
bGVTdHJpbmcxNiYgcykKKyAgICB7CisgICAgICAgIGlmIChzLmlzX251bGwoKSkKKyAgICAgICAg
ICAgIHJlc2V0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2lnbihzLnN0cmluZygp
LmRhdGEoKSwgcy5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICBvcGVyYXRvciBOdWxsYWJsZVN0cmluZzE2KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICAgICAgcmV0dXJuIE51bGxhYmxlU3RyaW5nMTYo
c3RyaW5nMTYoKSwgdHJ1ZSk7CisgICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICAg
ICAgcmV0dXJuIE51bGxhYmxlU3RyaW5nMTYobGVuID8gc3RyaW5nMTYoZGF0YSgpLCBsZW4pIDog
c3RyaW5nMTYoKSwgZmFsc2UpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBVVEY4U3Ry
aW5nPgorICAgIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVURjgoY29uc3QgVVRGOFN0cmluZyYgcykK
KyAgICB7CisgICAgICAgIHJldHVybiBmcm9tVVRGOChzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Cisg
ICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViU3RyaW5nUHJpdmF0
ZSopOworICAgIFdlYlN0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgV2ViU3RyaW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCit7Cisg
ICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFdlYlN0cmluZyYgYSwgY29uc3QgV2ViU3RyaW5nJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYz
YzczNWZlMWQ2ODQyYTA5ODFjMmViYjZiZTI1ZWJiNmNlZDlmYzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYk1pbWVSZWdpc3RyeV9oCisjZGVmaW5lIFdlYk1pbWVSZWdp
c3RyeV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ29tbW9uLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3RyaW5nOworCitjbGFzcyBXZWJNaW1l
UmVnaXN0cnkgeworcHVibGljOgorICAgIGVudW0gU3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0
ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9OworCisgICAgdmlydHVhbCBTdXBwb3J0
c1R5cGUgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUp
ID0gMDsKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0ltYWdlTUlNRVR5cGUoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBwb3J0
c1R5cGUgc3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNZWRpYU1J
TUVUeXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IGNvZGVjcykgPSAwOworICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTm9uSW1hZ2VN
SU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKKworICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
U3RyaW5nIHdlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBmaWxlRXh0ZW5zaW9uKSA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBt
aW1lVHlwZUZyb21GaWxlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBmaWxlUGF0aCkgPSAwOwor
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5
cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisKK3Byb3RlY3RlZDoK
KyAgICB+V2ViTWltZVJlZ2lzdHJ5KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYkNT
dHJpbmcuY3BwIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kOWQ1ZGZjYmZkMjdiNzlmNTg2NzZiZjdhOTBiNDQ5NGFjNDM2ZGU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmluZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm0vY2hy
b21pdW0vY29tbW9uL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworLy8gRklYTUU6IFRoaXMgaXMgZGVmaW5pdGVseSBub3QgcmlnaHQsIGJ1dCB3ZSB1c2UgaXQg
Zm9yIHV0ZjE2IGVuY29kaW5nL2RlY29kaW5nLiBIbW1tbW0uCisjaW5jbHVkZSAiV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV1RGOjpDU3RyaW5nQnVmZmVyIHsKK307CisK
K2ludCBXZWJDU3RyaW5nOjpjb21wYXJlKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKSBjb25zdAor
eworICAgIC8vIEEgbnVsbCBzdHJpbmcgaXMgYWx3YXlzIGxlc3MgdGhhbiBhIG5vbiBudWxsIG9u
ZS4KKyAgICBpZiAoaXNOdWxsKCkgIT0gb3RoZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBp
c051bGwoKSA/IC0xIDogMTsKKworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7
IC8vIEJvdGggV2ViU3RyaW5ncyBhcmUgbnVsbC4KKworICAgIHJldHVybiBzdHJjbXAobV9wcml2
YXRlLT5kYXRhKCksIG90aGVyLm1fcHJpdmF0ZS0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJDU3Ry
aW5nOjpyZXNldCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUt
PmRlcmVmKCk7CisgICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdlYkNT
dHJpbmc6OmFzc2lnbihjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikKK3sKKyAgICBhc3NpZ24oY29u
c3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSkpOworfQorCit2b2lk
IFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIGNoYXIqIG5ld0RhdGE7CisgICAgUmVmUHRyPFdURjo6Q1N0cmluZ0J1ZmZlcj4gYnVmZmVy
ID0KKyAgICAgICAgV1RGOjpDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgbmV3RGF0
YSkuYnVmZmVyKCk7CisgICAgbWVtY3B5KG5ld0RhdGEsIGRhdGEsIGxlbmd0aCk7CisgICAgYXNz
aWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4oYnVmZmVyLmdldCgpKSk7Cit9CisK
K3NpemVfdCBXZWJDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBOT1RFOiBUaGUgYnVmZmVyJ3MgbGVuZ3RoIGlu
Y2x1ZGVzIHRoZSBudWxsIGJ5dGUuCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1By
aXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSAtIDE7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkNT
dHJpbmc6OmRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0
ZSktPmRhdGEoKTsKK30KKworV2ViU3RyaW5nIFdlYkNTdHJpbmc6OnV0ZjE2KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkuZGVjb2RlKGRhdGEoKSwgbGVuZ3Ro
KCkpOworfQorCitXZWJDU3RyaW5nIFdlYkNTdHJpbmc6OmZyb21VVEYxNihjb25zdCBXZWJVQ2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29k
aW5nKCkuZW5jb2RlKAorICAgICAgICBkYXRhLCBsZW5ndGgsIFdlYkNvcmU6OlF1ZXN0aW9uTWFy
a3NGb3JVbmVuY29kYWJsZXMpOworfQorCitXZWJDU3RyaW5nIFdlYkNTdHJpbmc6OmZyb21VVEYx
Nihjb25zdCBXZWJVQ2hhciogZGF0YSkKK3sKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICB3aGls
ZSAoZGF0YVtsZW5dICE9IFdlYlVDaGFyKDApKQorICAgICAgICBsZW4rKzsKKyAgICByZXR1cm4g
ZnJvbVVURjE2KGRhdGEsIGxlbik7Cit9CisKK1dlYkNTdHJpbmc6OldlYkNTdHJpbmcoY29uc3Qg
V1RGOjpDU3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQ
cml2YXRlKj4ocy5idWZmZXIoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9w
cml2YXRlLT5yZWYoKTsKK30KKworV2ViQ1N0cmluZyYgV2ViQ1N0cmluZzo6b3BlcmF0b3I9KGNv
bnN0IFdURjo6Q1N0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmlu
Z1ByaXZhdGUqPihzLmJ1ZmZlcigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDU3Ry
aW5nOjpvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGU7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKiBwKQor
eworICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRlID09
IHAKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAg
ICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3Ny
Yy9XZWJTdHJpbmcuY3BwIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJpbmcu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY0OTBjYjNjZDVjNzU1YWYyN2EzYzI3NGVhZTM5ZTBiZDJkNTU4YzkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlN0cmlu
Zy5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYlN0cmluZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm0v
Y2hyb21pdW0vY29tbW9uL1dlYkNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmdQ
cml2YXRlIDogcHVibGljIFdURjo6U3RyaW5nSW1wbCB7Cit9OworCit2b2lkIFdlYlN0cmluZzo6
cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5kZXJl
ZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBXZWJTdHJpbmc6
OmFzc2lnbihjb25zdCBXZWJTdHJpbmcmIG90aGVyKQoreworICAgIGFzc2lnbihjb25zdF9jYXN0
PFdlYlN0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJTdHJp
bmc6OmFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBh
c3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KAorICAgICAgICBXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKSk7Cit9CisKK3NpemVfdCBXZWJTdHJp
bmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZSA/IGNvbnN0X2Nhc3Q8
V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIDogMDsKK30KKworY29uc3Qg
V2ViVUNoYXIqIFdlYlN0cmluZzo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZSA/IGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmNoYXJhY3RlcnMo
KSA6IDA7Cit9CisKK1dlYkNTdHJpbmcgV2ViU3RyaW5nOjp1dGY4KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV1RGOjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Cit9CisKK1dlYlN0cmluZyBXZWJT
dHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgpOworfQorCitXZWJTdHJp
bmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKQoreworICAgIHJldHVybiBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Cit9CisKK2Jvb2wgV2ViU3RyaW5nOjplcXVhbHMo
Y29uc3QgV2ViU3RyaW5nJiBzKSBjb25zdAoreworICAgIHJldHVybiBlcXVhbChtX3ByaXZhdGUs
IHMubV9wcml2YXRlKTsKK30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmcoY29uc3QgV1RGOjpTdHJp
bmcmIHMpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMu
aW1wbCgpKSkKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnJlZigp
OworfQorCitXZWJTdHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6U3RyaW5n
JiBzKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ocy5pbXBs
KCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlN0cmluZzo6b3BlcmF0b3IgV1RGOjpT
dHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGU7Cit9CisKK1dlYlN0cmluZzo6
V2ViU3RyaW5nKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKDAp
Cit7CisgICAgYXNzaWduKHMuc3RyaW5nKCkpOworfQorCitXZWJTdHJpbmcmIFdlYlN0cmluZzo6
b3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQoreworICAgIGFzc2lnbihzLnN0
cmluZygpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlN0cmluZzo6b3BlcmF0b3IgV1RG
OjpBdG9taWNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OkF0b21pY1N0cmluZyhz
dGF0aWNfY2FzdDxXVEY6OlN0cmluZ0ltcGwgKj4obV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2Vi
U3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBUYWtlIGNhcmUg
dG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCisgICAgaWYgKHApCisgICAg
ICAgIHAtPnJlZigpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVy
ZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA5YTgzZmJmZTUwMTMyMGUxYzhkODM2MTE1ZWEw
YTYzM2UyMzA4ZGM5Li5jZWEyN2I0ZGNkZmNkYzRiNmVhYjk2ODNkYzI4OTE2NjhkMGY2ODJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02OCw2ICs2OCw3IEBACiAgICAgICAgICAg
ICAnbXN2c19ndWlkJzogJzVFQ0VDOUU1LThGMjMtNDdCNi05M0UwLUMzQjMyOEIzQkU2NScsCiAg
ICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAgICAgICAgICcuLi8uLi9XZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOndlYmNvcmUnLAorICAgICAgICAgICAgICAgICcu
Li8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybS5neXA6cGxhdGZvcm0nLCAjIGFjdHVhbGx5
IFdlYkNvcmUgc2hvdWxkIGRlcGVuZCBvbiB0aGlzCiAgICAgICAgICAgICAgICAgJzwoY2hyb21p
dW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCiAgICAgICAgICAg
ICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5w
YXBpJywKQEAgLTc5LDYgKzgwLDcgQEAKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCiAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS92OC90b29scy9neXAvdjguZ3lwOnY4
JywKKyAgICAgICAgICAgICAgICAnLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm0uZ3lw
OnBsYXRmb3JtJywgIyB0YXJnZXRzIGRlcGVuZGluZyBvbiB0aGUgV2ViS2l0IEFQSSBuZWVkIHRv
IHNlZSB0aGUgcGxhdGZvcm0ncyBpbmNsdWRlX2RpcnMKICAgICAgICAgICAgIF0sCiAgICAgICAg
ICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICdwdWJsaWMnLApAQCAtMjgx
LDcgKzI4Myw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJBdWRpb0Rl
dmljZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkJsb2JEYXRhLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQmxvYlJlZ2lzdHJ5LmgnLAot
ICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYkNsaXBib2FyZC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L3BsYXRmb3JtL1dlYkNvbG9yLmgnLApAQCAtMzEzLDcgKzMxNCw2IEBACiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJMb2NhbGl6ZWRTdHJpbmcuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oJywKLSAgICAg
ICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYk5vbkNvcHlhYmxlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
LmgnLApAQCAtNDkxLDcgKzQ5MSw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50
TGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZS5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViQ3Vyc29ySW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRE9NRXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVu
ZXIuY3BwJywKQEAgLTY0NCw3ICs2NDMsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVv
dGFDYWxsYmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVv
dGFDYWxsYmFja3NJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU3RyaW5nLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJDU3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJDU3RyaW5nLmgKaW5kZXggMTVkZjZjZDlmOWQ2ODE1YWU5MDg1N2FiZWFlMDYwNTJkMmIyZGVm
Yy4uNjRjMGRlMjAyMjA1OTNiMTUzMjhjMDA1OGIzMjkwMjEwMjVkZTUyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaApAQCAt
MjgsMTA5ICsyOCw1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ1N0cmlu
Z19oCi0jZGVmaW5lIFdlYkNTdHJpbmdfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2Vsc2UK
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBDU3Ry
aW5nOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGU7
Ci1jbGFzcyBXZWJTdHJpbmc7Ci0KLS8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3
aXRoIHVuc3BlY2lmaWVkIGVuY29kaW5nLiAgSXQgaXMKLS8vIGluZXhwZW5zaXZlIHRvIGNvcHkg
YSBXZWJDU3RyaW5nIG9iamVjdC4KLS8vCi0vLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBw
YXNzIGEgV2ViQ1N0cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYkNTdHJpbmcg
ewotcHVibGljOgotICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJDU3Ry
aW5nKCkgOiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oZGF0
YSwgbGVuKTsKLSAgICB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcmIHMpIDog
bV9wcml2YXRlKDApIHsgYXNzaWduKHMpOyB9Ci0KLSAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0o
Y29uc3QgV2ViQ1N0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0cmluZ3Mg
YXJlIGVxdWFscywgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKLSAgICAvLyBmaXJz
dCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVlIGluIHRo
aXMgc3RyaW5nCi0gICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3MgdGhhbiB6
ZXJvIHRvIGluZGljYXRlIHRoZSBvcHBvc2l0ZS4KLSAgICBXRUJLSVRfRVhQT1JUIGludCBjb21w
YXJlKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQg
dm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0
cmluZyYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsK
LSAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgdXRmMTYoKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcg
ZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0
YSk7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdU
Rjo6Q1N0cmluZyYpOwotICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJp
bmcmKTsKLSAgICBvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgV2Vi
Q1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAg
ICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViQ1N0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgYXNzaWdu
KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBs
ZW4gPSBsZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwg
bGVuKSA6IHN0ZDo6c3RyaW5nKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFVURjE2
U3RyaW5nPgotICAgIHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBVVEYxNlN0cmlu
ZyYgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tVVRGMTYocy5kYXRhKCksIHMubGVuZ3Ro
KCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQgYXNzaWduKFdlYkNTdHJp
bmdQcml2YXRlKik7Ci0gICAgV2ViQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLWlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBXZWJDU3RyaW5nJiBhLCBjb25zdCBXZWJDU3RyaW5n
JiBiKQotewotICAgIHJldHVybiBhLmNvbXBhcmUoYikgPCAwOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dl
YkNTdHJpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYkNvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViQ29tbW9uLmgKaW5kZXggYzYzNGYwYzM4ZjQxOGQwMjg1ODBjODM2NTNhMWFmMWUxNzM5
YWUxOC4uYjg5ZGQyOGU2MThmNzBlODI3ZmU1ZmFkMTI5ODU4YjMyZDhjYmE1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29tbW9uLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29tbW9uLmgKQEAg
LTI4LDk2ICsyOCw0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ29tbW9u
X2gKLSNkZWZpbmUgV2ViQ29tbW9uX2gKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERl
ZmF1bHQgY29uZmlndXJhdGlvbgotCi0jaWYgIWRlZmluZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9O
KQotICAgICNkZWZpbmUgV0VCS0lUX0lNUExFTUVOVEFUSU9OIDAKLSNlbmRpZgotCi0jaWYgIWRl
ZmluZWQoV0VCS0lUX1VTSU5HX1NLSUEpCi0gICAgI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChVU0VfU0tJQSkKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfU0tJQSAxCi0g
ICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfU0tJQSAwCi0gICAgI2VuZGlm
Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19DRykKLSAgICAjaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFXRUJLSVRfVVNJTkdfU0tJQQotICAgICAgICAjZGVmaW5lIFdFQktJ
VF9VU0lOR19DRyAxCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfQ0cg
MAotICAgICNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfVjgpCi0g
ICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfVjggMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJL
SVRfVVNJTkdfSlNDKQotICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0pTQyAwCi0jZW5kaWYKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBh
bm5vdGF0ZWQgd2l0aCBXRUJLSVRfRVhQT1JUCi0KLSNpZiBkZWZpbmVkKFdFQktJVF9ETEwpCi0g
ICAgI2lmIGRlZmluZWQoV0lOMzIpCi0gICAgICAgICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSAgICAgICAgICAgICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkK
LSAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2RlY2xz
cGVjKGRsbGltcG9ydCkKLSAgICAgICAgI2VuZGlmCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0g
ICAgI2VuZGlmCi0jZWxzZQotICAgICNkZWZpbmUgV0VCS0lUX0VYUE9SVAotI2VuZGlmCi0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBCYXNpYyB0eXBlcwotCi0jaW5jbHVkZSA8c3RkZGVm
Lmg+IC8vIEZvciBzaXplX3QKLQotI2lmIGRlZmluZWQoV0lOMzIpCi0vLyBWaXN1YWwgU3R1ZGlv
IGRvZXNuJ3QgaGF2ZSBzdGRpbnQuaC4KLXR5cGVkZWYgc2hvcnQgaW50MTZfdDsKLXR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Ci10eXBlZGVmIGludCBpbnQzMl90OwotdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8v
IFVURi0xNiBjaGFyYWN0ZXIgdHlwZQotI2lmIGRlZmluZWQoV0lOMzIpCi10eXBlZGVmIHdjaGFy
X3QgV2ViVUNoYXI7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBXZWJVQ2hhcjsKLSNl
bmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXNzZXJ0aW9ucwotCi1XRUJLSVRf
RVhQT1JUIHZvaWQgZmFpbGVkQXNzZXJ0aW9uKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXNzZXJ0aW9uKTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLS8vIElkZWFsbHksIG9ubHkgdXNlIGluc2lkZSB0aGUgcHVibGljIGRp
cmVjdG9yeSBidXQgb3V0c2lkZSBvZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04gYmxvY2tzLiAgKE90
aGVyd2lzZSB1c2UgV1RGJ3MgQVNTRVJULikKLSNpZiBkZWZpbmVkKE5ERUJVRykKLSNkZWZpbmUg
V0VCS0lUX0FTU0VSVChhc3NlcnRpb24pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgV0VCS0lU
X0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAotICAgIGlmICghKGFzc2VydGlvbikpIFwKLSAgICAg
ICAgZmFpbGVkQXNzZXJ0aW9uKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAjYXNz
ZXJ0aW9uKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKSBXRUJLSVRfQVNTRVJUKDApCi0KLSNlbmRpZgorI2luY2x1ZGUgIlBsYXRm
b3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDb21tb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NDZlNWU0NmVmNjFhMTE0ZGJmZjYxNmJlMzE0YjQwZTI2
OTBhZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJNaW1lUmVnaXN0cnlfaAotI2Rl
ZmluZSBXZWJNaW1lUmVnaXN0cnlfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci0KLWNsYXNzIFdlYk1pbWVSZWdpc3Ry
eSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNT
dXBwb3J0ZWQsIE1heUJlU3VwcG9ydGVkIH07Ci0KLSAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBz
dXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLSAgICB2aXJ0
dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0ltYWdlTUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBt
aW1lVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzSmF2YVNjcmlw
dE1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIFN1
cHBvcnRzVHlwZSBzdXBwb3J0c01lZGlhTUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBjb2RlY3MpID0gMDsKLSAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0
c05vbkltYWdlTUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwotCi0gICAg
dmlydHVhbCBXZWJTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBm
aWxlRXh0ZW5zaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgd2VsbEtub3duTWltZVR5
cGVGb3JFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSA9IDA7Ci0gICAg
dmlydHVhbCBXZWJTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQ
YXRoKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlN
RVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
fldlYk1pbWVSZWdpc3RyeSgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViU3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJT
dHJpbmcuaAppbmRleCBjMzM2ZGQxMTNkY2Q2MWFlZmFlNTJhOTgwOGI2YzU3Mjc1ZjNiOWRmLi5m
YjU4ZjFjMTM5Y2Q2ZDUyNjBiYWYzNTRlNDhlYjkxZDZjNGM5YjIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTdHJpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTdHJpbmcuaApAQCAtMjgsMTUw
ICsyOCw1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViU3RyaW5nX2gKLSNk
ZWZpbmUgV2ViU3RyaW5nX2gKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2Vi
U3RyaW5nLmgiCiAKLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJhc2Uv
bnVsbGFibGVfc3RyaW5nMTYuaD4KLSNpbmNsdWRlIDxiYXNlL3N0cmluZzE2Lmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkNTdHJpbmc7Ci1jbGFzcyBXZWJTdHJp
bmdQcml2YXRlOwotCi0vLyBBIFVURi0xNiBzdHJpbmcgY29udGFpbmVyLiAgSXQgaXMgaW5leHBl
bnNpdmUgdG8gY29weSBhIFdlYlN0cmluZwotLy8gb2JqZWN0LgotLy8KLS8vIFdBUk5JTkc6IEl0
IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJTdHJpbmcgYWNyb3NzIHRocmVhZHMhISEKLS8vCi1j
bGFzcyBXZWJTdHJpbmcgewotcHVibGljOgotICAgIH5XZWJTdHJpbmcoKSB7IHJlc2V0KCk7IH0K
LQotICAgIFdlYlN0cmluZygpIDogbV9wcml2YXRlKDApIHsgfQotCi0gICAgV2ViU3RyaW5nKGNv
bnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAg
ICAgICAgYXNzaWduKGRhdGEsIGxlbik7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IFdl
YlN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KLQotICAgIFdlYlN0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihz
KTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3RyaW5n
Jik7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwg
c2l6ZV90IGxlbik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYlN0
cmluZyYgcykgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKLSAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlVDaGFyKiBkYXRhKCkgY29uc3Q7Ci0KLSAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KLSAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KLQotICAgIFdFQktJVF9FWFBPUlQg
V2ViQ1N0cmluZyB1dGY4KCkgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJT
dHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgV0VC
S0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOwot
Ci0gICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQot
ICAgICAgICA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKGZyb21VVEY4KGRh
dGEsIE4gLSAxKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBjaGFyICgmZGF0YSlbTl0pCi0gICAgewotICAgICAgICBhc3NpZ24oZnJv
bVVURjgoZGF0YSwgTiAtIDEpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYp
OwotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgb3Bl
cmF0b3IgV1RGOjpTdHJpbmcoKSBjb25zdDsKLQotICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOwotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJik7Ci0gICAgb3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKLSNlbHNl
Ci0KLSAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDogbV9wcml2YXRlKDApCi0gICAg
ewotICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFdl
YlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IHN0cmluZzE2JiBzKQotICAgIHsKLSAgICAgICAgYXNz
aWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIG9wZXJhdG9yIHN0cmluZzE2KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBs
ZW4gPSBsZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVu
KSA6IHN0cmluZzE2KCk7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IE51bGxhYmxlU3Ry
aW5nMTYmIHMpIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBpZiAocy5pc19udWxsKCkp
Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc3NpZ24o
cy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFdl
YlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpCi0gICAgewotICAg
ICAgICBpZiAocy5pc19udWxsKCkpCi0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3Ro
KCkpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgTnVsbGFi
bGVTdHJpbmcxNigpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAg
ICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KHN0cmluZzE2KCksIHRydWUpOwotICAgICAg
ICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2
KGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2KCksIGZhbHNlKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVVRGOFN0cmluZz4KLSAgICBzdGF0aWMgV2ViU3RyaW5n
IGZyb21VVEY4KGNvbnN0IFVURjhTdHJpbmcmIHMpCi0gICAgewotICAgICAgICByZXR1cm4gZnJv
bVVURjgocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIHZvaWQgYXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqKTsKLSAgICBXZWJTdHJpbmdQcml2YXRl
KiBtX3ByaXZhdGU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmlu
ZyYgYSwgY29uc3QgV2ViU3RyaW5nJiBiKQotewotICAgIHJldHVybiBhLmVxdWFscyhiKTsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0
cmluZyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmNwcAppbmRleCAwZGQxZGI4YzdhZGJkMTA5NWU1NDE0YTVmZDhi
NmVhYWEwNjA3ZmI5Li4xODNiZDlmYmMwYzY3YTM0NmQ3ZjBiZThjN2JhZDllNTk0MjVhM2FiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50
SW1wbC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQcm9n
cmVzc1RyYWNrZXIuaCIKQEAgLTY2LDcgKzY3LDYgQEAKICNpbmNsdWRlICJXZWJGcmFtZUltcGwu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgogI2luY2x1
ZGUgIldlYlBsdWdpbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3Jt
U3VwcG9ydC5jcHAKaW5kZXggMWQxZTc5Nzc4MzQ0NzIyOTJmMzZjNjQ0ZGYzYThmOWE3NmUwNmZh
NS4uMDc3NzQyNTg5NzFjY2FlMTg5YTU3MzljMjMzYTRiNjYxZDljZWE4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
TWltZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2ViRmlsZVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCkBAIC01Nyw3ICs1
OCw2IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJJbWFnZS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9y
dC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
M2MzMTkxY2EwMmQyZWU2YWNjNzY3ZWY2ODZiNTAwNzc3MmM4NmNjYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNTdHJpbmcuaCIKLQotI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YkNTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6Q1N0cmluZ0J1ZmZlciB7Ci19OwotCi1pbnQg
V2ViQ1N0cmluZzo6Y29tcGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikgY29uc3QKLXsKLSAg
ICAvLyBBIG51bGwgc3RyaW5nIGlzIGFsd2F5cyBsZXNzIHRoYW4gYSBub24gbnVsbCBvbmUuCi0g
ICAgaWYgKGlzTnVsbCgpICE9IG90aGVyLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gaXNOdWxs
KCkgPyAtMSA6IDE7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOyAvLyBC
b3RoIFdlYlN0cmluZ3MgYXJlIG51bGwuCi0KLSAgICByZXR1cm4gc3RyY21wKG1fcHJpdmF0ZS0+
ZGF0YSgpLCBvdGhlci5tX3ByaXZhdGUtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViQ1N0cmluZzo6
cmVzZXQoKQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5kZXJl
ZigpOwotICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBXZWJDU3RyaW5n
Ojphc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYgb3RoZXIpCi17Ci0gICAgYXNzaWduKGNvbnN0X2Nh
c3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKLX0KLQotdm9pZCBXZWJD
U3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBj
aGFyKiBuZXdEYXRhOwotICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9Ci0g
ICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0RhdGEpLmJ1
ZmZlcigpOwotICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOwotICAgIGFzc2lnbihz
dGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOwotfQotCi1zaXpl
X3QgV2ViQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0aCBpbmNsdWRl
cyB0aGUgbnVsbCBieXRlLgotICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRl
Kj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOwotfQotCi1jb25zdCBjaGFyKiBXZWJDU3RyaW5n
OjpkYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5k
YXRhKCk7Ci19Ci0KLVdlYlN0cmluZyBXZWJDU3RyaW5nOjp1dGYxNigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsK
LX0KLQotV2ViQ1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygp
LmVuY29kZSgKLSAgICAgICAgZGF0YSwgbGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9y
VW5lbmNvZGFibGVzKTsKLX0KLQotV2ViQ1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29u
c3QgV2ViVUNoYXIqIGRhdGEpCi17Ci0gICAgc2l6ZV90IGxlbiA9IDA7Ci0gICAgd2hpbGUgKGRh
dGFbbGVuXSAhPSBXZWJVQ2hhcigwKSkKLSAgICAgICAgbGVuKys7Ci0gICAgcmV0dXJuIGZyb21V
VEYxNihkYXRhLCBsZW4pOwotfQotCi1XZWJDU3RyaW5nOjpXZWJDU3RyaW5nKGNvbnN0IFdURjo6
Q1N0cmluZyYgcykKLSAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0
ZSo+KHMuYnVmZmVyKCkpKQotewotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0
ZS0+cmVmKCk7Ci19Ci0KLVdlYkNTdHJpbmcmIFdlYkNTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBX
VEY6OkNTdHJpbmcmIHMpCi17Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2
YXRlKj4ocy5idWZmZXIoKSkpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2ViQ1N0cmluZzo6
b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwot
fQotCi12b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSogcCkKLXsKLSAg
ICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCi0g
ICAgaWYgKHApCi0gICAgICAgIHAtPnJlZigpOwotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAg
IG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJN
ZWRpYVBsYXllckNsaWVudEltcGwuY3BwCmluZGV4IDk5MzYxZWQ5NDFhYTQ2MzA2ZDU2N2JkMjNk
OGRjZGVhZGY2NWE5OTYuLmVjZDliOGI4YmE3OTQwYjQ5NmVmZTUwYmZlMDgxMDdhMTc5YTBhYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsLmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVy
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CisjaW5jbHVkZSAiUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmgiCkBAIC0zMSw3ICszMiw2IEBACiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNh
bnZhcy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlJlY3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyOWJkNTBjYzJlZmUxM2E1NTAwYzcxOTc3
NGYyMjhkZTQwMjEyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZv
cm0vV2ViU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYkNTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6U3RyaW5nSW1wbCB7Ci19Owot
Ci12b2lkIFdlYlN0cmluZzo6cmVzZXQoKQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAg
ICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0K
LQotdm9pZCBXZWJTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJTdHJpbmcmIG90aGVyKQotewotICAg
IGFzc2lnbihjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsK
LX0KLQotdm9pZCBXZWJTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCkKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KAot
ICAgICAgICBXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKSk7Ci19
Ci0KLXNpemVfdCBXZWJTdHJpbmc6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZSA/IGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgp
IDogMDsKLX0KLQotY29uc3QgV2ViVUNoYXIqIFdlYlN0cmluZzo6ZGF0YSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZSA/IGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJp
dmF0ZSktPmNoYXJhY3RlcnMoKSA6IDA7Ci19Ci0KLVdlYkNTdHJpbmcgV2ViU3RyaW5nOjp1dGY4
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Ci19
Ci0KLVdlYlN0cmluZyBXZWJTdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5n
dGgpOwotfQotCi1XZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRh
KQotewotICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Ci19Ci0KLWJvb2wg
V2ViU3RyaW5nOjplcXVhbHMoY29uc3QgV2ViU3RyaW5nJiBzKSBjb25zdAotewotICAgIHJldHVy
biBlcXVhbChtX3ByaXZhdGUsIHMubV9wcml2YXRlKTsKLX0KLQotV2ViU3RyaW5nOjpXZWJTdHJp
bmcoY29uc3QgV1RGOjpTdHJpbmcmIHMpCi0gICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2Vi
U3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSkKLXsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAg
ICBtX3ByaXZhdGUtPnJlZigpOwotfQotCi1XZWJTdHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9
KGNvbnN0IFdURjo6U3RyaW5nJiBzKQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJTdHJp
bmdQcml2YXRlKj4ocy5pbXBsKCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYlN0cmlu
Zzo6b3BlcmF0b3IgV1RGOjpTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7
Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQot
ICAgIDogbV9wcml2YXRlKDApCi17Ci0gICAgYXNzaWduKHMuc3RyaW5nKCkpOwotfQotCi1XZWJT
dHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQot
ewotICAgIGFzc2lnbihzLnN0cmluZygpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYlN0
cmluZzo6b3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OkF0b21pY1N0cmluZyhzdGF0aWNfY2FzdDxXVEY6OlN0cmluZ0ltcGwgKj4obV9wcml2YXRl
KSk7Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkKLXsK
LSAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBw
Ci0gICAgaWYgKHApCi0gICAgICAgIHAtPnJlZigpOwotICAgIGlmIChtX3ByaXZhdGUpCi0gICAg
ICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4
IDI2NzZkMjNmOTgzOGJmZmY4YmYzNjc4N2Y5Y2IwZDEzYTYyZGMyYTEuLjlhMDIyYmY4MWJmM2Vk
MTM5Nzk3NDg4YjJkM2E2ZWViYmJkNTkwYTIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIv
LmdpdGlnbm9yZQpAQCAtNTQsNiArNTQsMTAgQEAgU291cmNlL1dlYktpdC9jaHJvbWl1bS8qLnZj
cHJvaioKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLnhjb2RlcHJvagogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQueGNvZGVwcm9qCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dFVuaXRUZXN0cy54Y29kZXByb2oKK1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS8qLk1ha2VmaWxl
CitTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vKi5taworU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
Lyouc2xuCitTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vKi52Y3Byb2oqCiBUb29scy9Ub29scy54
Y29kZXByb2oKIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVu
ZGVyVHJlZS54Y29kZXByb2oKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119527</attachid>
            <date>2011-12-15 17:19:58 -0800</date>
            <delta_ts>2011-12-16 14:50:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20111215171957.patch</filename>
            <type>text/plain</type>
            <size>60981</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi40NGFmODdmMjU5MDM1NjFmNzVlYzI4NjJmOGQ2
MDNjZmQxODQ5Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMS0xMi0xNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdheSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBw
bGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjaHJvbWl1bS9QbGF0Zm9ybS5neXA6IEFkZGVkLgor
ICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaC4KKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6fldlYkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
U3RyaW5nOjpXZWJDU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
Om9wZXJhdG9yIHN0ZDo6c3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJv
bVVURjE2KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8KToKKyAgICAgICAgKiBjaHJvbWl1
bS9jb21tb24vV2ViQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oLgorICAgICAgICAqIGNocm9taXVtL2NvbW1vbi9X
ZWJTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViU3RyaW5nLmguCisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6fldlYlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmlzTnVsbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3Igc3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6Om9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
LnRhcmdldC5tazogQWRkZWQuCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChQbGF0Zm9ybTo6V2ViTWltZVJlZ2lzdHJ5
Ojp+V2ViTWltZVJlZ2lzdHJ5KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6OnV0
ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNT
dHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJhdG9y
IFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Ry
aW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmlu
Zzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisKIDIw
MTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
c3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NmE3ZTE3NjQzNmJmZjYzNjFjNzc3Y2MxNTBiOGMxNTMxMTllOWUyNS4uMzVmODA1NGViZTJiZmZh
NjhmM2Q5ZWVlNTZkOWJjYWJjZDU4OTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMS0xMi0xNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVtb25zdHJhdGUgb25lIHBvc3NpYmxlIHdh
eSB0byBtb3ZlIGNocm9taXVtIFdlYktpdCBwbGF0Zm9ybSBBUEkgaW50byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmg6CisgICAgICAg
ICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZv
cm1TdXBwb3J0OjptaW1lUmVnaXN0cnkpOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJT
dHJpbmcuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5TaG93TUlNRVR5cGUpOgorICAg
ICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1TdXBwb3J0Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1TdXBwb3J0Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSk6
CisgICAgICAgICogc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNUeXBlKToKKwogMjAxMS0x
Mi0xNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBSb2xsIGNocm9taXVtIERFUFMgKHIxMTM4MDcgLT4gcjExNDM1NikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm0uZ3lwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0YTAyZGRmOWNiOTBhOWNmYWRh
NGQ0NWQyMjcwZGJjNjk1MDZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm0uZ3lwCkBAIC0wLDAgKzEsNzQgQEAKKyMKKyMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorIworCit7CisgICAgJ3RhcmdldHMnOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF0Zm9ybScsCisgICAgICAgICAgICAndHlwZSc6ICdz
dGF0aWNfbGlicmFyeScsCisgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAg
ICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlw
dENvcmUuZ3lwOnd0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dURi9XVEYuZ3lwL1dURi5n
eXA6bmV3d3RmJywKKyAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDp3ZWJjb3JlX3BsYXRmb3JtJywgIyBiYWQgYmFkLCBidXQgV2ViQ1N0cmluZyBk
ZXBlbmRzIG9uIHN0dWZmIGluIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcKKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAg
ICAgICcuLi8uLicsICMgcHV0IFNvdXJjZS8gb24gdGhlIGluY2x1ZGUgcGF0aAorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICdkZWZpbmVzJzogWworICAgICAgICAgICAgICAgICdXRUJLSVRf
SU1QTEVNRU5UQVRJT049MScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ3NvdXJjZXMn
OiBbCisgICAgICAgICAgICAgICAgJ2NvbW1vbi9XZWJDU3RyaW5nLmgnLAorICAgICAgICAgICAg
ICAgICdjb21tb24vV2ViQ29tbW9uLmgnLAorICAgICAgICAgICAgICAgICdjb21tb24vV2ViU3Ry
aW5nLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWltZVJlZ2lzdHJ5LmgnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViU3RyaW5nLmNwcCcsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2RpcmVjdF9kZXBl
bmRlbnRfc2V0dGluZ3MnOiB7CisgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAg
ICAgICAgICAgICAgICAgICAgJy4uLy4uJywKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgIFsnaW5z
aWRlX2Nocm9taXVtX2J1aWxkPT0xJywgeworICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9u
cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJh
cnkiJywgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCS0lUX0RMTCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9u
L1dlYkNTdHJpbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ1N0cmlu
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE1ZGY2Y2Q5ZjlkNjgxNWFlOTA4NTdhYmVhZTA2MDUyZDJiMmRlZmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYkNT
dHJpbmcuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
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
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ1N0cmluZ19oCisjZGVmaW5lIFdl
YkNTdHJpbmdfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJp
bmc+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBDU3RyaW5nOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGU7CitjbGFzcyBXZWJTdHJp
bmc7CisKKy8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3aXRoIHVuc3BlY2lmaWVk
IGVuY29kaW5nLiAgSXQgaXMKKy8vIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJDU3RyaW5nIG9i
amVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViQ1N0cmlu
ZyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8KK2NsYXNzIFdlYkNTdHJpbmcgeworcHVibGljOgorICAg
IH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJDU3RyaW5nKCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisKKyAgICBXZWJDU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4p
IDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAgICB9
CisKKyAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsg
YXNzaWduKHMpOyB9CisKKyAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ1N0cmlu
ZyYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0cmluZ3MgYXJlIGVxdWFscywgYSB2
YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKKyAgICAvLyBmaXJzdCBjaGFyYWN0ZXIgdGhh
dCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVlIGluIHRoaXMgc3RyaW5nCisgICAg
Ly8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIHRvIGluZGljYXRl
IHRoZSBvcHBvc2l0ZS4KKyAgICBXRUJLSVRfRVhQT1JUIGludCBjb21wYXJlKGNvbnN0IFdlYkNT
dHJpbmcmIG90aGVyKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbik7CisK
KyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
IW1fcHJpdmF0ZTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdXRmMTYoKSBjb25z
dDsKKworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2KGNvbnN0
IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRp
YyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSk7CisKKyNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYpOwor
ICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmKTsKKyAgICBvcGVy
YXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKKyNlbHNlCisgICAgV2ViQ1N0cmluZyhjb25zdCBz
dGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihzLmRh
dGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9KGNv
bnN0IHN0ZDo6c3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxl
bmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIHN0
ZDo6c3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsK
KyAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwgbGVuKSA6IHN0ZDo6c3Ry
aW5nKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFVURjE2U3RyaW5nPgorICAgIHN0
YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBVVEYxNlN0cmluZyYgcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmcm9tVVRGMTYocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKyNl
bmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKik7Cisg
ICAgV2ViQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBXZWJDU3RyaW5nJiBhLCBjb25zdCBXZWJDU3RyaW5nJiBiKQoreworICAgIHJl
dHVybiBhLmNvbXBhcmUoYikgPCAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYkNvbW1v
bi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDb21tb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNjM0ZjBjMzhmNDE4ZDAyODU4MGM4MzY1M2ExYWYxZTE3MzlhZTE4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDb21tb24uaApAQCAt
MCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tbW9uX2gKKyNkZWZpbmUgV2ViQ29tbW9uX2gKKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmF1bHQgY29uZmlndXJhdGlvbgorCisjaWYg
IWRlZmluZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9OKQorICAgICNkZWZpbmUgV0VCS0lUX0lNUExF
TUVOVEFUSU9OIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX1NLSUEpCisg
ICAgI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChVU0VfU0tJQSkKKyAgICAgICAg
I2RlZmluZSBXRUJLSVRfVVNJTkdfU0tJQSAxCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBX
RUJLSVRfVVNJTkdfU0tJQSAwCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdF
QktJVF9VU0lOR19DRykKKyAgICAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFXRUJLSVRfVVNJ
TkdfU0tJQQorICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19DRyAxCisgICAgI2Vsc2UKKyAg
ICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfQ0cgMAorICAgICNlbmRpZgorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfVjgpCisgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfVjgg
MQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfSlNDKQorICAgICNkZWZpbmUg
V0VCS0lUX1VTSU5HX0pTQyAwCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRfRVhQT1JU
CisKKyNpZiBkZWZpbmVkKFdFQktJVF9ETEwpCisgICAgI2lmIGRlZmluZWQoV0lOMzIpCisgICAg
ICAgICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICAgICAgICAgICNkZWZpbmUgV0VCS0lU
X0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAg
ICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAgICAgI2Vu
ZGlmCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisgICAgI2VuZGlmCisjZWxzZQorICAgICNkZWZp
bmUgV0VCS0lUX0VYUE9SVAorI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBC
YXNpYyB0eXBlcworCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworI2lmIGRl
ZmluZWQoV0lOMzIpCisvLyBWaXN1YWwgU3R1ZGlvIGRvZXNuJ3QgaGF2ZSBzdGRpbnQuaC4KK3R5
cGVkZWYgc2hvcnQgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Cit0
eXBlZGVmIGludCBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFVURi0xNiBjaGFyYWN0ZXIgdHlwZQorI2lm
IGRlZmluZWQoV0lOMzIpCit0eXBlZGVmIHdjaGFyX3QgV2ViVUNoYXI7CisjZWxzZQordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBXZWJVQ2hhcjsKKyNlbmRpZgorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gQXNzZXJ0aW9ucworCitXRUJLSVRfRVhQT1JUIHZvaWQgZmFpbGVkQXNzZXJ0aW9u
KGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogYXNzZXJ0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKy8vIElkZWFsbHks
IG9ubHkgdXNlIGluc2lkZSB0aGUgcHVibGljIGRpcmVjdG9yeSBidXQgb3V0c2lkZSBvZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04gYmxvY2tzLiAgKE90aGVyd2lzZSB1c2UgV1RGJ3MgQVNTRVJULikK
KyNpZiBkZWZpbmVkKE5ERUJVRykKKyNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24pICgo
dm9pZCkwKQorI2Vsc2UKKyNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAor
ICAgIGlmICghKGFzc2VydGlvbikpIFwKKyAgICAgICAgZmFpbGVkQXNzZXJ0aW9uKF9fRklMRV9f
LCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAjYXNzZXJ0aW9uKTsgXAorfSB3aGlsZSAoMCkKKyNl
bmRpZgorCisjZGVmaW5lIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKSBXRUJLSVRfQVNTRVJU
KDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL2NvbW1v
bi9XZWJTdHJpbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViU3RyaW5n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzMzNmRkMTEzZGNkNjFhZWZhZTUyYTk4MDhiNmM1NzI3NWYzYjlkZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViU3Ry
aW5nLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlN0cmluZ19oCisjZGVmaW5lIFdlYlN0
cmluZ19oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZWxzZQorI2luY2x1ZGUgPGJhc2UvbnVs
bGFibGVfc3RyaW5nMTYuaD4KKyNpbmNsdWRlIDxiYXNlL3N0cmluZzE2Lmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJTdHJpbmdQ
cml2YXRlOworCisvLyBBIFVURi0xNiBzdHJpbmcgY29udGFpbmVyLiAgSXQgaXMgaW5leHBlbnNp
dmUgdG8gY29weSBhIFdlYlN0cmluZworLy8gb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlz
IG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJTdHJpbmcgYWNyb3NzIHRocmVhZHMhISEKKy8vCitjbGFz
cyBXZWJTdHJpbmcgeworcHVibGljOgorICAgIH5XZWJTdHJpbmcoKSB7IHJlc2V0KCk7IH0KKwor
ICAgIFdlYlN0cmluZygpIDogbV9wcml2YXRlKDApIHsgfQorCisgICAgV2ViU3RyaW5nKGNvbnN0
IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAg
ICAgYXNzaWduKGRhdGEsIGxlbik7CisgICAgfQorCisgICAgV2ViU3RyaW5nKGNvbnN0IFdlYlN0
cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAgIFdlYlN0cmluZyYg
b3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBy
ZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3RyaW5nJik7
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6
ZV90IGxlbik7CisKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYlN0cmlu
ZyYgcykgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsK
KyAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlVDaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2Vi
Q1N0cmluZyB1dGY4KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJp
bmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOworCisg
ICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAg
ICAgICA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEs
IE4gLSAxKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcmIG9wZXJh
dG9yPShjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgeworICAgICAgICBhc3NpZ24oZnJvbVVU
RjgoZGF0YSwgTiAtIDEpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYpOwor
ICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgb3BlcmF0
b3IgV1RGOjpTdHJpbmcoKSBjb25zdDsKKworICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYpOworICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3Ry
aW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKKyNlbHNlCisK
KyAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKworICAgIFdlYlN0
cmluZyYgb3BlcmF0b3I9KGNvbnN0IHN0cmluZzE2JiBzKQorICAgIHsKKyAgICAgICAgYXNzaWdu
KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIG9wZXJhdG9yIHN0cmluZzE2KCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBsZW4g
PSBsZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6
IHN0cmluZzE2KCk7CisgICAgfQorCisgICAgV2ViU3RyaW5nKGNvbnN0IE51bGxhYmxlU3RyaW5n
MTYmIHMpIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBpZiAocy5pc19udWxsKCkpCisg
ICAgICAgICAgICByZXNldCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NpZ24ocy5z
dHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOworICAgIH0KKworICAgIFdlYlN0
cmluZyYgb3BlcmF0b3I9KGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpCisgICAgeworICAgICAg
ICBpZiAocy5pc19udWxsKCkpCisgICAgICAgICAgICByZXNldCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgTnVsbGFibGVT
dHJpbmcxNigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAg
ICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KHN0cmluZzE2KCksIHRydWUpOworICAgICAgICBz
aXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KGxl
biA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2KCksIGZhbHNlKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVVRGOFN0cmluZz4KKyAgICBzdGF0aWMgV2ViU3RyaW5nIGZy
b21VVEY4KGNvbnN0IFVURjhTdHJpbmcmIHMpCisgICAgeworICAgICAgICByZXR1cm4gZnJvbVVU
Rjgocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHZvaWQgYXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJTdHJpbmdQcml2YXRlKiBt
X3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmluZyYg
YSwgY29uc3QgV2ViU3RyaW5nJiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmlu
ZyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYk1pbWVSZWdpc3RyeS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJN
aW1lUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2M3MzVmZTFkNjg0MmEwOTgxYzJlYmI2YmUyNWVi
YjZjZWQ5ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJNaW1lUmVnaXN0cnkuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJNaW1lUmVn
aXN0cnlfaAorI2RlZmluZSBXZWJNaW1lUmVnaXN0cnlfaAorCisjaW5jbHVkZSAiUGxhdGZvcm0v
Y2hyb21pdW0vY29tbW9uL1dlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYlN0cmluZzsKKworY2xhc3MgV2ViTWltZVJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBlbnVt
IFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVkLCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0
ZWQgfTsKKworICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBwb3J0c1R5
cGUgc3VwcG9ydHNJbWFnZU1JTUVUeXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlw
ZSkgPSAwOworICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzSmF2YVNjcmlwdE1JTUVU
eXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworICAgIHZpcnR1YWwg
U3VwcG9ydHNUeXBlIHN1cHBvcnRzTWVkaWFNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgbWltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjb2RlY3MpID0gMDsKKyAgICB2aXJ0dWFsIFN1
cHBvcnRzVHlwZSBzdXBwb3J0c05vbkltYWdlTUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmIG1pbWVUeXBlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5nIG1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSA9
IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyB3ZWxsS25vd25NaW1lVHlwZUZvckV4
dGVuc2lvbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikgPSAwOworICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZmlsZVBhdGgpID0gMDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5n
IHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBt
aW1lVHlwZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgfldlYk1pbWVSZWdpc3RyeSgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDlkNWRmY2JmZDI3Yjc5ZjU4
Njc2YmY3YTkwYjQ0OTRhYzQzNmRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYkNTdHJpbmcu
aCIKKworI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKy8vIEZJWE1FOiBUaGlzIGlzIGRlZmluaXRl
bHkgbm90IHJpZ2h0LCBidXQgd2UgdXNlIGl0IGZvciB1dGYxNiBlbmNvZGluZy9kZWNvZGluZy4g
SG1tbW1tLgorI2luY2x1ZGUgIldlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNTdHJpbmdQcml2YXRlIDogcHVibGlj
IFdURjo6Q1N0cmluZ0J1ZmZlciB7Cit9OworCitpbnQgV2ViQ1N0cmluZzo6Y29tcGFyZShjb25z
dCBXZWJDU3RyaW5nJiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBBIG51bGwgc3RyaW5nIGlzIGFs
d2F5cyBsZXNzIHRoYW4gYSBub24gbnVsbCBvbmUuCisgICAgaWYgKGlzTnVsbCgpICE9IG90aGVy
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gaXNOdWxsKCkgPyAtMSA6IDE7CisKKyAgICBpZiAo
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOyAvLyBCb3RoIFdlYlN0cmluZ3MgYXJlIG51bGwu
CisKKyAgICByZXR1cm4gc3RyY21wKG1fcHJpdmF0ZS0+ZGF0YSgpLCBvdGhlci5tX3ByaXZhdGUt
PmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6cmVzZXQoKQoreworICAgIGlmIChtX3By
aXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgICAgICBtX3ByaXZhdGUg
PSAwOworICAgIH0KK30KKwordm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViQ1N0cmlu
ZyYgb3RoZXIpCit7CisgICAgYXNzaWduKGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihv
dGhlci5tX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjaGFyKiBuZXdEYXRhOworICAgIFJlZlB0
cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgIFdURjo6Q1N0cmluZzo6bmV3
VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0RhdGEpLmJ1ZmZlcigpOworICAgIG1lbWNweShuZXdE
YXRhLCBkYXRhLCBsZW5ndGgpOworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJp
dmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOworfQorCitzaXplX3QgV2ViQ1N0cmluZzo6bGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8g
Tk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgorICAgIHJl
dHVybiBjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkg
LSAxOworfQorCitjb25zdCBjaGFyKiBXZWJDU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYlN0cmluZyBX
ZWJDU3RyaW5nOjp1dGYxNigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNv
ZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsKK30KKworV2ViQ1N0cmluZyBXZWJDU3Ry
aW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmVuY29kZSgKKyAgICAgICAgZGF0YSwg
bGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKK30KKworV2Vi
Q1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEpCit7Cisg
ICAgc2l6ZV90IGxlbiA9IDA7CisgICAgd2hpbGUgKGRhdGFbbGVuXSAhPSBXZWJVQ2hhcigwKSkK
KyAgICAgICAgbGVuKys7CisgICAgcmV0dXJuIGZyb21VVEYxNihkYXRhLCBsZW4pOworfQorCitX
ZWJDU3RyaW5nOjpXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYgcykKKyAgICA6IG1fcHJp
dmF0ZShzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KHMuYnVmZmVyKCkpKQoreworICAg
IGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+cmVmKCk7Cit9CisKK1dlYkNTdHJp
bmcmIFdlYkNTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmIHMpCit7CisgICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIoKSkpOworICAg
IHJldHVybiAqdGhpczsKK30KKworV2ViQ1N0cmluZzo6b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lkIFdlYkNTdHJpbmc6OmFz
c2lnbihXZWJDU3RyaW5nUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJl
ZigpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDkwY2IzY2Q1Yzc1
NWFmMjdhM2MyNzRlYWUzOWUwYmQyZDU1OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJTdHJp
bmcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0lt
cGwgeworfTsKKwordm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRl
KSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhl
cikKK3sKKyAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9w
cml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1By
aXZhdGUqPigKKyAgICAgICAgV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5n
ZXQoKSkpOworfQorCitzaXplX3QgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUp
LT5sZW5ndGgoKSA6IDA7Cit9CisKK2NvbnN0IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZh
dGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOworfQorCitXZWJDU3RyaW5nIFdlYlN0
cmluZzo6dXRmOCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSku
dXRmOCgpOworfQorCitXZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3Qg
Y2hhciogZGF0YSkKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwor
fQorCitib29sIFdlYlN0cmluZzo6ZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKK3sK
KyAgICByZXR1cm4gZXF1YWwobV9wcml2YXRlLCBzLm1fcHJpdmF0ZSk7Cit9CisKK1dlYlN0cmlu
Zzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRp
Y19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0
ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6
Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nh
c3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlOworfQorCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsK
K30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgcykKK3sKKyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+
KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZh
dGUqIHApCit7CisgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3By
aXZhdGUgPT0gcAorICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXgg
OWE4M2ZiZmU1MDEzMjBlMWM4ZDgzNjExNWVhMGE2MzNlMjMwOGRjOS4uY2VhMjdiNGRjZGZjZGM0
YjZlYWI5NjgzZGMyODkxNjY4ZDBmNjgyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApA
QCAtNjgsNiArNjgsNyBAQAogICAgICAgICAgICAgJ21zdnNfZ3VpZCc6ICc1RUNFQzlFNS04RjIz
LTQ3QjYtOTNFMC1DM0IzMjhCM0JFNjUnLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
ICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDp3
ZWJjb3JlJywKKyAgICAgICAgICAgICAgICAnLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vUGxhdGZv
cm0uZ3lwOnBsYXRmb3JtJywgIyBhY3R1YWxseSBXZWJDb3JlIHNob3VsZCBkZXBlbmQgb24gdGhp
cwogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tp
YScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1
L2ljdS5neXA6aWN1dWMnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Ro
aXJkX3BhcnR5L25wYXBpL25wYXBpLmd5cDpucGFwaScsCkBAIC03OSw2ICs4MCw3IEBACiAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6
aWN1dWMnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5
L25wYXBpL25wYXBpLmd5cDpucGFwaScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdjgvdG9vbHMvZ3lwL3Y4Lmd5cDp2OCcsCisgICAgICAgICAgICAgICAgJy4uLy4uL1Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtLmd5cDpwbGF0Zm9ybScsICMgdGFyZ2V0cyBkZXBlbmRp
bmcgb24gdGhlIFdlYktpdCBBUEkgbmVlZCB0byBzZWUgdGhlIHBsYXRmb3JtJ3MgaW5jbHVkZV9k
aXJzCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAg
ICAgICAgICAgICAncHVibGljJywKQEAgLTI4MSw3ICsyODMsNiBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvcGxhdGZvcm0vV2ViQXVkaW9EZXZpY2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9wbGF0Zm9ybS9XZWJCbG9iRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYkJsb2JSZWdpc3RyeS5oJywKLSAgICAgICAgICAgICAgICAncHVibGljL3BsYXRm
b3JtL1dlYkNTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJD
YW52YXMuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJDbGlwYm9hcmQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJDb2xvci5oJywKQEAgLTMx
Myw3ICszMTQsNiBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTG9jYWxp
emVkU3RyaW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2Vi
TWVkaWFTdHJlYW1Tb3VyY2UuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9X
ZWJNaW1lUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJO
b25Db3B5YWJsZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlBlZXJD
b25uZWN0aW9uSGFuZGxlci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dl
YlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oJywKQEAgLTQ5MSw3ICs0OTEsNiBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ29udGVudExheWVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL1dlYkNTdHJpbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkN1cnNvckluZm8u
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50LmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyLmNwcCcsCkBAIC02NDQsNyArNjQzLDYgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1wbC5oJywKLSAgICAgICAg
ICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4
dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVGhyZWFkU2FmZURhdGEuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oCmluZGV4IDE1ZGY2Y2Q5Zjlk
NjgxNWFlOTA4NTdhYmVhZTA2MDUyZDJiMmRlZmMuLjY0YzBkZTIwMjIwNTkzYjE1MzI4YzAwNThi
MzI5MDIxMDI1ZGU1MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYkNTdHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgKQEAgLTI4LDEwOSArMjgsNSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIFdlYkNTdHJpbmdfaAotI2RlZmluZSBXZWJDU3RyaW5nX2gKIAot
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5nPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXVEYgewotY2xhc3MgQ1N0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYkNTdHJpbmdQcml2YXRlOwotY2xhc3MgV2ViU3RyaW5nOwotCi0vLyBBIHNp
bmdsZS1ieXRlIHN0cmluZyBjb250YWluZXIgd2l0aCB1bnNwZWNpZmllZCBlbmNvZGluZy4gIEl0
IGlzCi0vLyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViQ1N0cmluZyBvYmplY3QuCi0vLwotLy8g
V0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYkNTdHJpbmcgYWNyb3NzIHRocmVh
ZHMhISEKLS8vCi1jbGFzcyBXZWJDU3RyaW5nIHsKLXB1YmxpYzoKLSAgICB+V2ViQ1N0cmluZygp
IHsgcmVzZXQoKTsgfQotCi0gICAgV2ViQ1N0cmluZygpIDogbV9wcml2YXRlKDApIHsgfQotCi0g
ICAgV2ViQ1N0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgw
KQotICAgIHsKLSAgICAgICAgYXNzaWduKGRhdGEsIGxlbik7Ci0gICAgfQotCi0gICAgV2ViQ1N0
cmluZyhjb25zdCBXZWJDU3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihzKTsgfQot
Ci0gICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdlYkNTdHJpbmcmIHMpCi0gICAgewot
ICAgICAgICBhc3NpZ24ocyk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICAv
LyBSZXR1cm5zIDAgaWYgYm90aCBzdHJpbmdzIGFyZSBlcXVhbHMsIGEgdmFsdWUgZ3JlYXRlciB0
aGFuIHplcm8gaWYgdGhlCi0gICAgLy8gZmlyc3QgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgbWF0
Y2ggaGFzIGEgZ3JlYXRlciB2YWx1ZSBpbiB0aGlzIHN0cmluZwotICAgIC8vIHRoYW4gaW4gfG90
aGVyfCwgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gemVybyB0byBpbmRpY2F0ZSB0aGUgb3Bwb3NpdGUu
Ci0gICAgV0VCS0lUX0VYUE9SVCBpbnQgY29tcGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikg
Y29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkNTdHJpbmcmKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOwotCi0gICAgV0VCS0lUX0VY
UE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCBjb25zdCBjaGFy
KiBkYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVu
Z3RoKCk7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0K
LQotICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHV0ZjE2KCkgY29uc3Q7Ci0KLSAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViQ1N0cmluZyBm
cm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEpOwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCi0gICAgV2ViQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJpbmcmKTsKLSAgICBXZWJDU3RyaW5n
JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3RyaW5nJik7Ci0gICAgb3BlcmF0b3IgV1RGOjpDU3Ry
aW5nKCkgY29uc3Q7Ci0jZWxzZQotICAgIFdlYkNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMp
IDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3Ro
KCkpOwotICAgIH0KLQotICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBzdGQ6OnN0cmlu
ZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNv
bnN0Ci0gICAgewotICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgICAgIHJldHVy
biBsZW4gPyBzdGQ6OnN0cmluZyhkYXRhKCksIGxlbikgOiBzdGQ6OnN0cmluZygpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlIDxjbGFzcyBVVEYxNlN0cmluZz4KLSAgICBzdGF0aWMgV2ViQ1N0cmlu
ZyBmcm9tVVRGMTYoY29uc3QgVVRGMTZTdHJpbmcmIHMpCi0gICAgewotICAgICAgICByZXR1cm4g
ZnJvbVVURjE2KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICB2b2lkIGFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSopOwotICAgIFdlYkNTdHJpbmdQ
cml2YXRlKiBtX3ByaXZhdGU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2Vi
Q1N0cmluZyYgYSwgY29uc3QgV2ViQ1N0cmluZyYgYikKLXsKLSAgICByZXR1cm4gYS5jb21wYXJl
KGIpIDwgMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1ZGUg
IlBsYXRmb3JtL2Nocm9taXVtL2NvbW1vbi9XZWJDU3RyaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24uaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oCmluZGV4IGM2MzRmMGMz
OGY0MThkMDI4NTgwYzgzNjUzYTFhZjFlMTczOWFlMTguLmI4OWRkMjhlNjE4ZjcwZTgyN2ZlNWZh
ZDEyOTg1OGIzMmQ4Y2JhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oCkBAIC0yOCw5NiArMjgsNCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIFdlYkNvbW1vbl9oCi0jZGVmaW5lIFdlYkNvbW1vbl9oCi0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24KLQotI2lmICFk
ZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikKLSAgICAjZGVmaW5lIFdFQktJVF9JTVBMRU1F
TlRBVElPTiAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19TS0lBKQotICAg
ICNpZiAhZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoVVNFX1NLSUEpCi0gICAgICAgICNk
ZWZpbmUgV0VCS0lUX1VTSU5HX1NLSUEgMQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgV0VC
S0lUX1VTSU5HX1NLSUEgMAotICAgICNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJL
SVRfVVNJTkdfQ0cpCi0gICAgI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhV0VCS0lUX1VTSU5H
X1NLSUEKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfQ0cgMQotICAgICNlbHNlCi0gICAg
ICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0NHIDAKLSAgICAjZW5kaWYKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoV0VCS0lUX1VTSU5HX1Y4KQotICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1Y4IDEK
LSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX0pTQykKLSAgICAjZGVmaW5lIFdF
QktJVF9VU0lOR19KU0MgMAotI2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBF
eHBvcnRlZCBzeW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdpdGggV0VCS0lUX0VYUE9SVAot
Ci0jaWYgZGVmaW5lZChXRUJLSVRfRExMKQotICAgICNpZiBkZWZpbmVkKFdJTjMyKQotICAgICAg
ICAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgICAgICAgICAjZGVmaW5lIFdFQktJVF9F
WFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0gICAgICAgICNlbHNlCi0gICAgICAgICAgICAj
ZGVmaW5lIFdFQktJVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0gICAgICAgICNlbmRp
ZgotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotICAgICNlbmRpZgotI2Vsc2UKLSAgICAjZGVmaW5l
IFdFQktJVF9FWFBPUlQKLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQmFz
aWMgdHlwZXMKLQotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBGb3Igc2l6ZV90Ci0KLSNpZiBkZWZp
bmVkKFdJTjMyKQotLy8gVmlzdWFsIFN0dWRpbyBkb2Vzbid0IGhhdmUgc3RkaW50LmguCi10eXBl
ZGVmIHNob3J0IGludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OwotdHlw
ZWRlZiBpbnQgaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBVVEYtMTYgY2hhcmFjdGVyIHR5cGUKLSNpZiBk
ZWZpbmVkKFdJTjMyKQotdHlwZWRlZiB3Y2hhcl90IFdlYlVDaGFyOwotI2Vsc2UKLXR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7Ci0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIEFzc2VydGlvbnMKLQotV0VCS0lUX0VYUE9SVCB2b2lkIGZhaWxlZEFzc2VydGlvbihj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNo
YXIqIGFzc2VydGlvbik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0vLyBJZGVhbGx5LCBv
bmx5IHVzZSBpbnNpZGUgdGhlIHB1YmxpYyBkaXJlY3RvcnkgYnV0IG91dHNpZGUgb2YgV0VCS0lU
X0lNUExFTUVOVEFUSU9OIGJsb2Nrcy4gIChPdGhlcndpc2UgdXNlIFdURidzIEFTU0VSVC4pCi0j
aWYgZGVmaW5lZChOREVCVUcpCi0jZGVmaW5lIFdFQktJVF9BU1NFUlQoYXNzZXJ0aW9uKSAoKHZv
aWQpMCkKLSNlbHNlCi0jZGVmaW5lIFdFQktJVF9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKLSAg
ICBpZiAoIShhc3NlcnRpb24pKSBcCi0gICAgICAgIGZhaWxlZEFzc2VydGlvbihfX0ZJTEVfXywg
X19MSU5FX18sIF9fRlVOQ1RJT05fXywgI2Fzc2VydGlvbik7IFwKLX0gd2hpbGUgKDApCi0jZW5k
aWYKLQotI2RlZmluZSBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCkgV0VCS0lUX0FTU0VSVCgw
KQotCi0jZW5kaWYKKyNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9jb21tb24vV2ViQ29tbW9u
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJNaW1lUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYk1pbWVSZWdpc3RyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDQ2ZTVl
NDZlZjYxYTExNGRiZmY2MTZiZTMxNGI0MGUyNjkwYWZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV2ViTWltZVJlZ2lzdHJ5X2gKLSNkZWZpbmUgV2ViTWltZVJlZ2lzdHJ5X2gKLQotI2lu
Y2x1ZGUgIldlYkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3Ry
aW5nOwotCi1jbGFzcyBXZWJNaW1lUmVnaXN0cnkgewotcHVibGljOgotICAgIGVudW0gU3VwcG9y
dHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9Owot
Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJTdHJp
bmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNJbWFn
ZU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIFN1
cHBvcnRzVHlwZSBzdXBwb3J0c0phdmFTY3JpcHRNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1p
bWVUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNZWRpYU1JTUVU
eXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgY29kZWNzKSA9IDA7Ci0gICAg
dmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKGNvbnN0IFdlYlN0
cmluZyYgbWltZVR5cGUpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIG1pbWVUeXBlRm9y
RXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikgPSAwOwotICAgIHZpcnR1
YWwgV2ViU3RyaW5nIHdlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmlu
ZyYgZmlsZUV4dGVuc2lvbikgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIG1pbWVUeXBlRnJv
bUZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkgPSAwOwotICAgIHZpcnR1YWwgV2ViU3Ry
aW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5
cGUpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIH5XZWJNaW1lUmVnaXN0cnkoKSB7IH0KLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU3RyaW5nLmgKaW5kZXggYzMzNmRkMTEzZGNkNjFh
ZWZhZTUyYTk4MDhiNmM1NzI3NWYzYjlkZi4uZmI1OGYxYzEzOWNkNmQ1MjYwYmFmMzU0ZTQ4ZWI5
MWQ2YzRjOWIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViU3RyaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViU3RyaW5nLmgKQEAgLTI4LDE1MCArMjgsNSBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIFdlYlN0cmluZ19oCi0jZGVmaW5lIFdlYlN0cmluZ19oCisjaW5jbHVkZSAi
UGxhdGZvcm0vY2hyb21pdW0vY29tbW9uL1dlYlN0cmluZy5oIgogCi0jaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCi0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxiYXNlL251bGxhYmxlX3N0cmluZzE2Lmg+Ci0jaW5jbHVk
ZSA8YmFzZS9zdHJpbmcxNi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBXZWJDU3RyaW5nOwotY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZTsKLQotLy8gQSBVVEYtMTYgc3Ry
aW5nIGNvbnRhaW5lci4gIEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJTdHJpbmcKLS8v
IG9iamVjdC4KLS8vCi0vLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViU3Ry
aW5nIGFjcm9zcyB0aHJlYWRzISEhCi0vLwotY2xhc3MgV2ViU3RyaW5nIHsKLXB1YmxpYzoKLSAg
ICB+V2ViU3RyaW5nKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJTdHJpbmcoKSA6IG1fcHJpdmF0
ZSgwKSB7IH0KLQotICAgIFdlYlN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bikgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOwotICAg
IH0KLQotICAgIFdlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsg
YXNzaWduKHMpOyB9Ci0KLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJTdHJpbmcm
IHMpCi0gICAgewotICAgICAgICBhc3NpZ24ocyk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgYXNzaWduKGNvbnN0IFdlYlN0cmluZyYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
c3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOwotCi0gICAgV0VCS0lUX0VY
UE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJTdHJpbmcmIHMpIGNvbnN0OwotCi0gICAgV0VCS0lU
X0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCBjb25zdCBX
ZWJVQ2hhciogZGF0YSgpIGNvbnN0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIWxlbmd0aCgpOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2
YXRlOyB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkNTdHJpbmcgdXRmOCgpIGNvbnN0OwotCi0g
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpOwotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmluZyBm
cm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKLQotICAgIHRlbXBsYXRlIDxpbnQgTj4gV2ViU3Ry
aW5nKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkKLSAgICAgICAgOiBtX3ByaXZhdGUoMCkKLSAgICB7
Ci0gICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRhLCBOIC0gMSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlIDxpbnQgTj4gV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEpW05d
KQotICAgIHsKLSAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBX
ZWJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShj
b25zdCBXVEY6OlN0cmluZyYpOwotICAgIG9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3Q7Ci0K
LSAgICBXZWJTdHJpbmcoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBXZWJTdHJpbmcm
IG9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwotICAgIG9wZXJhdG9yIFdURjo6
QXRvbWljU3RyaW5nKCkgY29uc3Q7Ci0jZWxzZQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IHN0cmlu
ZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBz
Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBzdHJp
bmcxNiYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBzdHJpbmcxNigpIGNv
bnN0Ci0gICAgewotICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgICAgIHJldHVy
biBsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxlbikgOiBzdHJpbmcxNigpOwotICAgIH0KLQotICAg
IFdlYlN0cmluZyhjb25zdCBOdWxsYWJsZVN0cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQotICAg
IHsKLSAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQotICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXNzaWduKHMuc3RyaW5nKCkuZGF0YSgpLCBzLnN0cmluZygp
Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBOdWxs
YWJsZVN0cmluZzE2JiBzKQotICAgIHsKLSAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQotICAgICAg
ICAgICAgcmVzZXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNzaWduKHMuc3RyaW5n
KCkuZGF0YSgpLCBzLnN0cmluZygpLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLQotICAgIG9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJpbmcx
NihzdHJpbmcxNigpLCB0cnVlKTsKLSAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwotICAg
ICAgICByZXR1cm4gTnVsbGFibGVTdHJpbmcxNihsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxlbikg
OiBzdHJpbmcxNigpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFVURjhT
dHJpbmc+Ci0gICAgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBVVEY4U3RyaW5nJiBz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb21VVEY4KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsK
LSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFzc2lnbihXZWJTdHJpbmdQcml2
YXRlKik7Ci0gICAgV2ViU3RyaW5nUHJpdmF0ZSogbV9wcml2YXRlOwotfTsKLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikKLXsK
LSAgICByZXR1cm4gYS5lcXVhbHMoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgV2ViU3RyaW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9
PSBiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKaW5kZXgg
MGRkMWRiOGM3YWRiZDEwOTVlNTQxNGE1ZmQ4YjZlYWFhMDYwN2ZiOS4uMTgzYmQ5ZmJjMGM2N2Ez
NDZkN2YwYmU4YzdiYWQ5ZTU5NDI1YTNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNaW1l
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0
YUNocm9taXVtLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCkBAIC02Niw3ICs2Nyw2
IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5j
bHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAicGxhdGZv
cm0vV2ViTWltZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgogI2luY2x1ZGUgIldl
YlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCmluZGV4IDFkMWU3OTc3ODM0
NDcyMjkyZjM2YzY0NGRmM2E4ZjlhNzZlMDZmYTUuLjA3Nzc0MjU4OTcxY2NhZTE4OWE1NzM5YzIz
M2E0YjY2MWQ5Y2VhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bs
YXRmb3JtU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZv
cm1TdXBwb3J0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldl
YkZpbGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgpAQCAtNTcsNyArNTgsNiBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJN
aW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJVUkwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNT
dHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMzE5MWNhMDJkMmVlNmFjYzc2N2VmNjg2YjUw
MDc3NzJjODZjY2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJDU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6
OkNTdHJpbmdCdWZmZXIgewotfTsKLQotaW50IFdlYkNTdHJpbmc6OmNvbXBhcmUoY29uc3QgV2Vi
Q1N0cmluZyYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gQSBudWxsIHN0cmluZyBpcyBhbHdheXMg
bGVzcyB0aGFuIGEgbm9uIG51bGwgb25lLgotICAgIGlmIChpc051bGwoKSAhPSBvdGhlci5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGlzTnVsbCgpID8gLTEgOiAxOwotCi0gICAgaWYgKGlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gMDsgLy8gQm90aCBXZWJTdHJpbmdzIGFyZSBudWxsLgotCi0g
ICAgcmV0dXJuIHN0cmNtcChtX3ByaXZhdGUtPmRhdGEoKSwgb3RoZXIubV9wcml2YXRlLT5kYXRh
KCkpOwotfQotCi12b2lkIFdlYkNTdHJpbmc6OnJlc2V0KCkKLXsKLSAgICBpZiAobV9wcml2YXRl
KSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcml2YXRlID0gMDsK
LSAgICB9Ci19Ci0KLXZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IFdlYkNTdHJpbmcmIG90
aGVyKQotewotICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ob3RoZXIu
bV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgY2hhciogbmV3RGF0YTsKLSAgICBSZWZQdHI8V1RG
OjpDU3RyaW5nQnVmZmVyPiBidWZmZXIgPQotICAgICAgICBXVEY6OkNTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBuZXdEYXRhKS5idWZmZXIoKTsKLSAgICBtZW1jcHkobmV3RGF0YSwg
ZGF0YSwgbGVuZ3RoKTsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUq
PihidWZmZXIuZ2V0KCkpKTsKLX0KLQotc2l6ZV90IFdlYkNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIE5PVEU6
IFRoZSBidWZmZXIncyBsZW5ndGggaW5jbHVkZXMgdGhlIG51bGwgYnl0ZS4KLSAgICByZXR1cm4g
Y29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIC0gMTsK
LX0KLQotY29uc3QgY2hhciogV2ViQ1N0cmluZzo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNT
dHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOwotfQotCi1XZWJTdHJpbmcgV2ViQ1N0
cmluZzo6dXRmMTYoKSBjb25zdAotewotICAgIHJldHVybiBXZWJDb3JlOjpVVEY4RW5jb2Rpbmco
KS5kZWNvZGUoZGF0YSgpLCBsZW5ndGgoKSk7Ci19Ci0KLVdlYkNTdHJpbmcgV2ViQ1N0cmluZzo6
ZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHJl
dHVybiBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKS5lbmNvZGUoCi0gICAgICAgIGRhdGEsIGxlbmd0
aCwgV2ViQ29yZTo6UXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7Ci19Ci0KLVdlYkNTdHJp
bmcgV2ViQ1N0cmluZzo6ZnJvbVVURjE2KGNvbnN0IFdlYlVDaGFyKiBkYXRhKQotewotICAgIHNp
emVfdCBsZW4gPSAwOwotICAgIHdoaWxlIChkYXRhW2xlbl0gIT0gV2ViVUNoYXIoMCkpCi0gICAg
ICAgIGxlbisrOwotICAgIHJldHVybiBmcm9tVVRGMTYoZGF0YSwgbGVuKTsKLX0KLQotV2ViQ1N0
cmluZzo6V2ViQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJpbmcmIHMpCi0gICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSkKLXsKLSAgICBpZiAo
bV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPnJlZigpOwotfQotCi1XZWJDU3RyaW5nJiBX
ZWJDU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3RyaW5nJiBzKQotewotICAgIGFzc2ln
bihzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KHMuYnVmZmVyKCkpKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLVdlYkNTdHJpbmc6Om9wZXJhdG9yIFdURjo6Q1N0cmluZygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZTsKLX0KLQotdm9pZCBXZWJDU3RyaW5nOjphc3NpZ24o
V2ViQ1N0cmluZ1ByaXZhdGUqIHApCi17Ci0gICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAotICAgIGlmIChwKQotICAgICAgICBwLT5yZWYoKTsK
LSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgbV9w
cml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAppbmRl
eCA5OTM2MWVkOTQxYWE0NjMwNmQ1NjdiZDIzZDhkY2RlYWRmNjVhOTk2Li5lY2Q5YjhiOGJhNzk0
MGI0OTZlZmU1MGJmZTA4MTA3YTE3OWEwYWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKQEAgLTE3LDYgKzE3
LDcgQEAKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJNaW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5j
bHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVt
SW1wbC5oIgpAQCAtMzEsNyArMzIsNiBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNTdHJpbmcu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDYW52YXMuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNaW1lUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViU2l6ZS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc5MjliZDUwY2MyZWZlMTNhNTUwMGM3MTk3NzRmMjI4ZGU0MDIxMjguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotCi0jaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZSA6IHB1
YmxpYyBXVEY6OlN0cmluZ0ltcGwgewotfTsKLQotdm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKLXsK
LSAgICBpZiAobV9wcml2YXRlKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICAg
ICAgbV9wcml2YXRlID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29u
c3QgV2ViU3RyaW5nJiBvdGhlcikKLXsKLSAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQ
cml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24o
Y29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgYXNzaWduKHN0YXRp
Y19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPigKLSAgICAgICAgV1RGOjpTdHJpbmdJbXBsOjpjcmVh
dGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkpOwotfQotCi1zaXplX3QgV2ViU3RyaW5nOjpsZW5ndGgo
KSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1By
aXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSA6IDA7Ci19Ci0KLWNvbnN0IFdlYlVDaGFyKiBX
ZWJTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9j
YXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOwotfQot
Ci1XZWJDU3RyaW5nIFdlYlN0cmluZzo6dXRmOCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6
U3RyaW5nKG1fcHJpdmF0ZSkudXRmOCgpOwotfQotCi1XZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9t
VVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHJldHVybiBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKLX0KLQotV2ViU3RyaW5nIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkKLXsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KGRhdGEpOwotfQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWxzKGNvbnN0IFdlYlN0
cmluZyYgcykgY29uc3QKLXsKLSAgICByZXR1cm4gZXF1YWwobV9wcml2YXRlLCBzLm1fcHJpdmF0
ZSk7Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQotICAg
IDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCi17
Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0KLQotV2Vi
U3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykKLXsKLSAg
ICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi1XZWJTdHJpbmc6OldlYlN0cmluZyhj
b25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLSAgICA6IG1fcHJpdmF0ZSgwKQotewotICAgIGFz
c2lnbihzLnN0cmluZygpKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShj
b25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLXsKLSAgICBhc3NpZ24ocy5zdHJpbmcoKSk7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3Ry
aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8
V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkpOwotfQotCi12b2lkIFdlYlN0cmluZzo6YXNz
aWduKFdlYlN0cmluZ1ByaXZhdGUqIHApCi17Ci0gICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0
aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAotICAgIGlmIChwKQotICAgICAgICBwLT5yZWYo
KTsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAg
bV9wcml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS8u
Z2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCAyNjc2ZDIzZjk4MzhiZmZmOGJmMzY3ODdmOWNi
MGQxM2E2MmRjMmExLi45YTAyMmJmODFiZjNlZDEzOTc5NzQ4OGIyZDNhNmVlYmJiZDU5MGEyIDEw
MDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTU0LDYgKzU0LDEwIEBA
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vKi52Y3Byb2oqCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0FsbC54Y29kZXByb2oKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lnhjb2RlcHJvagog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXRVbml0VGVzdHMueGNvZGVwcm9qCitTb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vKi5NYWtlZmlsZQorU291cmNlL1BsYXRmb3JtL2Nocm9taXVtLyou
bWsKK1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS8qLnNsbgorU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtLyoudmNwcm9qKgogVG9vbHMvVG9vbHMueGNvZGVwcm9qCiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119676</attachid>
            <date>2011-12-16 14:50:50 -0800</date>
            <delta_ts>2011-12-16 17:52:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20111216145048.patch</filename>
            <type>text/plain</type>
            <size>63915</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi5kOTIxOTk3ZTc1M2VjOTIwOTYzOTA3NTMyMjE5
ZGEzNWI3NzE3Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMS0xMi0xNiAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5kIGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
cmVhdGVzIGEgc2tlbGV0b24gZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIGNocm9taXVtIFdl
YktpdCBwbGF0Zm9ybSBBUEkgYW5kIG1vdmVzIFdlYk1pbWVSZWdpc3RyeS5oCisgICAgICAgIGFs
b25nIHdpdGggaXRzIGRlcGVuZGVuY2llcyAoV2ViU3RyaW5nIGFuZCBXZWJDU3RyaW5nKSB0byB0
aGVpciBmaW5hbCBsb2NhdGlvbi4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cC9QbGF0Zm9ybS5n
eXA6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtLmd5cGk6IEFkZGVkLgorICAgICAgICAqIGNo
cm9taXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDU3RyaW5nOjp+V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Oldl
YkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q1N0cmluZzo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0b3Ig
c3RkOjpzdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpmcm9tVVRGMTYpOgor
ICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcjwpOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
L1dlYkNvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJDb21tb24uaC4KKyAgICAgICAgKiBjaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1l
UmVnaXN0cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChXZWJLaXQ6OldlYk1pbWVSZWdpc3Ry
eTo6fldlYk1pbWVSZWdpc3RyeSk6CisgICAgICAgICogY2hyb21pdW0vcGxhdGZvcm0vV2ViU3Ry
aW5nLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYlN0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIHN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpvcGVyYXRvciBOdWxsYWJsZVN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmlu
Zy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5n
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
OnV0ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJh
dG9yIFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisK
IDIwMTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBB
ZGQgc3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZWZmYTIzNDRkNGM3MDllZDZhODQ2ZjM2NjYyOWZmYjdjMDhjNDFmZi4uZjUwODY0MTU4MzQ0
YjdmZDNmM2Q2MzQ3ODBlYzUzYzc2YjMzMGVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMiBAQAorMjAxMS0xMi0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5k
IGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5o
IGlzIGEgdGVtcG9yYXJ5IGZvcndhcmRpbmcgaGVhZGVyIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24u
IE9uY2UgZG93bnN0cmVhbQorICAgICAgICBjYWxsZXJzIGFyZSB1cGRhdGVkIHRvIHRoZSBuZXcg
bG9jYXRpb24gdGhpcyBoZWFkZXIgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgV2ViU3RyaW5n
LCBXZWJDU3RyaW5nLCBhbmQgV2ViQ29tbW9uLmggd2lsbCByZW1haW4gaW4gcGxhY2UgYXMgZm9y
d2FyZGluZyBoZWFkZXJzIGZvciB1c2VycyBvZiB0aGUgV2ViS2l0IGNsaWVudAorICAgICAgICBB
UEkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9X
ZWJDU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwdWJs
aWMvcGxhdGZvcm0vV2ViU3RyaW5nLmg6CisKIDIwMTEtMTItMTUgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXll
clRyZWVIb3N0IHBvaW50ZXIgb24gTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjJhYTdm
ZWI2YTRkYWRhN2VmM2Y2YjFhY2ZlMmVmYWFmY2ZkZjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAKQEAgLTAsMCArMSw3MiBAQAor
IworIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK3sKKyAgICAnaW5jbHVkZXMnOiBb
CisgICAgICAgICcuLi9QbGF0Zm9ybS5neXBpJywKKyAgICBdLAorICAgICd0YXJnZXRzJzogWwor
ICAgICAgICB7CisgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncGxhdGZvcm0nLAorICAgICAg
ICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAorICAgICAgICAgICAgJ2RlcGVuZGVuY2ll
cyc6IFsKKyAgICAgICAgICAgICAgICAnLi4vLi4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwL0phdmFTY3JpcHRDb3JlLmd5cDp3dGYnLAorICAgICAgICAgICAgICAgICcuLi8uLi9X
VEYvV1RGLmd5cC9XVEYuZ3lwOm5ld3d0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6d2ViY29yZV9wbGF0Zm9ybScsCisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAnLi4v
Y2hyb21pdW0nLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdkZWZpbmVzJzogWworICAg
ICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScsCisgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgJzxAKHBsYXRmb3JtX2Zp
bGVzKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0
dGluZ3MnOiB7CisgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAg
ICAgICAgICAgJy4uL2Nocm9taXVtJywKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgIFsnaW5zaWRl
X2Nocm9taXVtX2J1aWxkPT0xJywgeworICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnki
JywgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnV0VCS0lUX0RMTCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaSBiL1Nv
dXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5Nzg4MGNjZTgxMTY0NDZh
YTE3NDA2Mjk2MTU4YWZhZDE2OTk3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwaQpAQCAtMCwwICsxLDQyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyMKKworeworICAgICd2YXJpYWJsZXMnOiB7CisgICAgICAgICdwbGF0Zm9ybV9m
aWxlcyc6IFsKKyAgICAgICAgICAgICdjaHJvbWl1bS9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgnLAor
ICAgICAgICAgICAgJ2Nocm9taXVtL3BsYXRmb3JtL1dlYkNvbW1vbi5oJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9wbGF0Zm9ybS9XZWJTdHJpbmcuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
cGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9X
ZWJDU3RyaW5nLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAn
LAorICAgICAgICBdCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0
Zm9ybS9XZWJDU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVkZjZjZDlmOWQ2ODE1YWU5MDg1N2FiZWFl
MDYwNTJkMmIyZGVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNTdHJp
bmdfaAorI2RlZmluZSBXZWJDU3RyaW5nX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbHNl
CisjaW5jbHVkZSA8c3RyaW5nPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgQ1N0
cmluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNTdHJpbmdQcml2YXRl
OworY2xhc3MgV2ViU3RyaW5nOworCisvLyBBIHNpbmdsZS1ieXRlIHN0cmluZyBjb250YWluZXIg
d2l0aCB1bnNwZWNpZmllZCBlbmNvZGluZy4gIEl0IGlzCisvLyBpbmV4cGVuc2l2ZSB0byBjb3B5
IGEgV2ViQ1N0cmluZyBvYmplY3QuCisvLworLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8g
cGFzcyBhIFdlYkNTdHJpbmcgYWNyb3NzIHRocmVhZHMhISEKKy8vCitjbGFzcyBXZWJDU3RyaW5n
IHsKK3B1YmxpYzoKKyAgICB+V2ViQ1N0cmluZygpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQ1N0
cmluZygpIDogbV9wcml2YXRlKDApIHsgfQorCisgICAgV2ViQ1N0cmluZyhjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGRh
dGEsIGxlbik7CisgICAgfQorCisgICAgV2ViQ1N0cmluZyhjb25zdCBXZWJDU3RyaW5nJiBzKSA6
IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihzKTsgfQorCisgICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9
KGNvbnN0IFdlYkNTdHJpbmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocyk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgYm90aCBzdHJpbmdz
IGFyZSBlcXVhbHMsIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlCisgICAgLy8gZmly
c3QgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgbWF0Y2ggaGFzIGEgZ3JlYXRlciB2YWx1ZSBpbiB0
aGlzIHN0cmluZworICAgIC8vIHRoYW4gaW4gfG90aGVyfCwgb3IgYSB2YWx1ZSBsZXNzIHRoYW4g
emVybyB0byBpbmRpY2F0ZSB0aGUgb3Bwb3NpdGUuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgY29t
cGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkNT
dHJpbmcmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW4pOworCisgICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7
CisgICAgV0VCS0lUX0VYUE9SVCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViU3Ry
aW5nIHV0ZjE2KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJDU3RyaW5n
IGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgV0VC
S0lUX0VYUE9SVCBzdGF0aWMgV2ViQ1N0cmluZyBmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRh
dGEpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViQ1N0cmluZyhjb25zdCBX
VEY6OkNTdHJpbmcmKTsKKyAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpDU3Ry
aW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3Q7CisjZWxzZQorICAgIFdl
YkNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIDogbV9wcml2YXRlKDApCisgICAgeworICAg
ICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgIH0KKworICAgIFdlYkNTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBzdGQ6OnN0cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2ln
bihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3Qg
bGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBsZW4gPyBzdGQ6OnN0cmluZyhkYXRhKCks
IGxlbikgOiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBVVEYx
NlN0cmluZz4KKyAgICBzdGF0aWMgV2ViQ1N0cmluZyBmcm9tVVRGMTYoY29uc3QgVVRGMTZTdHJp
bmcmIHMpCisgICAgeworICAgICAgICByZXR1cm4gZnJvbVVURjE2KHMuZGF0YSgpLCBzLmxlbmd0
aCgpKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJDU3Ry
aW5nUHJpdmF0ZSopOworICAgIFdlYkNTdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCitp
bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViQ1N0cmluZyYgYSwgY29uc3QgV2ViQ1N0cmlu
ZyYgYikKK3sKKyAgICByZXR1cm4gYS5jb21wYXJlKGIpIDwgMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3BsYXRmb3JtL1dlYkNvbW1vbi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3Jt
L1dlYkNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MzRmMGMzOGY0MThkMDI4NTgwYzgzNjUzYTFhZjFl
MTczOWFlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxh
dGZvcm0vV2ViQ29tbW9uLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
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
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbW1vbl9oCisj
ZGVmaW5lIFdlYkNvbW1vbl9oCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZhdWx0
IGNvbmZpZ3VyYXRpb24KKworI2lmICFkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikKKyAg
ICAjZGVmaW5lIFdFQktJVF9JTVBMRU1FTlRBVElPTiAwCisjZW5kaWYKKworI2lmICFkZWZpbmVk
KFdFQktJVF9VU0lOR19TS0lBKQorICAgICNpZiAhZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoVVNFX1NLSUEpCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1NLSUEgMQorICAgICNl
bHNlCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1NLSUEgMAorICAgICNlbmRpZgorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfQ0cpCisgICAgI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAhV0VCS0lUX1VTSU5HX1NLSUEKKyAgICAgICAgI2RlZmluZSBXRUJLSVRfVVNJ
TkdfQ0cgMQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0NHIDAKKyAg
ICAjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX1Y4KQorICAgICNk
ZWZpbmUgV0VCS0lUX1VTSU5HX1Y4IDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VT
SU5HX0pTQykKKyAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19KU0MgMAorI2VuZGlmCisKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeHBvcnRlZCBzeW1ib2xzIG5lZWQgdG8gYmUgYW5ub3Rh
dGVkIHdpdGggV0VCS0lUX0VYUE9SVAorCisjaWYgZGVmaW5lZChXRUJLSVRfRExMKQorICAgICNp
ZiBkZWZpbmVkKFdJTjMyKQorICAgICAgICAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
ICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgICAg
ICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQgX19kZWNsc3BlYyhk
bGxpbXBvcnQpCisgICAgICAgICNlbmRpZgorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV0VC
S0lUX0VYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorICAgICNl
bmRpZgorI2Vsc2UKKyAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQKKyNlbmRpZgorCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gQmFzaWMgdHlwZXMKKworI2luY2x1ZGUgPHN0ZGRlZi5oPiAv
LyBGb3Igc2l6ZV90CisKKyNpZiBkZWZpbmVkKFdJTjMyKQorLy8gVmlzdWFsIFN0dWRpbyBkb2Vz
bid0IGhhdmUgc3RkaW50LmguCit0eXBlZGVmIHNob3J0IGludDE2X3Q7Cit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IHVpbnQxNl90OwordHlwZWRlZiBpbnQgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWdu
ZWQgaW50IHVpbnQzMl90OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBVVEYt
MTYgY2hhcmFjdGVyIHR5cGUKKyNpZiBkZWZpbmVkKFdJTjMyKQordHlwZWRlZiB3Y2hhcl90IFdl
YlVDaGFyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7CisjZW5kaWYK
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbnMKKworV0VCS0lUX0VYUE9S
VCB2b2lkIGZhaWxlZEFzc2VydGlvbihjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisvLyBJZGVhbGx5LCBvbmx5IHVzZSBpbnNpZGUgdGhlIHB1YmxpYyBkaXJlY3Rv
cnkgYnV0IG91dHNpZGUgb2YgV0VCS0lUX0lNUExFTUVOVEFUSU9OIGJsb2Nrcy4gIChPdGhlcndp
c2UgdXNlIFdURidzIEFTU0VSVC4pCisjaWYgZGVmaW5lZChOREVCVUcpCisjZGVmaW5lIFdFQktJ
VF9BU1NFUlQoYXNzZXJ0aW9uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIFdFQktJVF9BU1NF
UlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSBcCisgICAgICAgIGZh
aWxlZEFzc2VydGlvbihfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgI2Fzc2VydGlv
bik7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCkgV0VCS0lUX0FTU0VSVCgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmU1
N2U5NmFkYzU0YzY0NjI3MmY2NWE2ZWNjMGMyZDE5YmY5Yjc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYk1pbWVSZWdpc3RyeV9oCisjZGVmaW5lIFdlYk1pbWVSZWdp
c3RyeV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYk1pbWVSZWdpc3RyeSB7CitwdWJsaWM6CisgICAg
ZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0ZWQsIE1heUJlU3Vw
cG9ydGVkIH07CisKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01JTUVUeXBlKGNv
bnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworICAgIHZpcnR1YWwgU3VwcG9y
dHNUeXBlIHN1cHBvcnRzSW1hZ2VNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWlt
ZVR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0phdmFTY3JpcHRN
SU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKKyAgICB2aXJ0
dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01lZGlhTUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIG1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY29kZWNzKSA9IDA7CisgICAgdmlydHVh
bCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBtaW1lVHlwZSkgPSAwOworCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBt
aW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmlsZUV4dGVuc2lv
bikgPSAwOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgd2VsbEtub3duTWltZVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsK
KyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5nIG1pbWVUeXBlRnJvbUZpbGUoY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIGZpbGVQYXRoKSA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0
cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgbWltZVR5cGUpID0gMDsKKworcHJvdGVjdGVkOgorICAgIH5XZWJNaW1lUmVnaXN0cnkoKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJTdHJpbmcuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzM2ZGQxMTNk
Y2Q2MWFlZmFlNTJhOTgwOGI2YzU3Mjc1ZjNiOWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtL1dlYlN0cmluZy5oCkBAIC0wLDAgKzEsMTc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTdHJpbmdfaAorI2RlZmluZSBXZWJTdHJpbmdfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxiYXNlL251bGxhYmxlX3N0cmluZzE2Lmg+CisjaW5j
bHVkZSA8YmFzZS9zdHJpbmcxNi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJDU3RyaW5nOworY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZTsKKworLy8gQSBVVEYtMTYg
c3RyaW5nIGNvbnRhaW5lci4gIEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJTdHJpbmcK
Ky8vIG9iamVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2Vi
U3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViU3RyaW5nIHsKK3B1YmxpYzoK
KyAgICB+V2ViU3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJTdHJpbmcoKSA6IG1fcHJp
dmF0ZSgwKSB7IH0KKworICAgIFdlYlN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90
IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOwor
ICAgIH0KKworICAgIFdlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHMpIDogbV9wcml2YXRlKDAp
IHsgYXNzaWduKHMpOyB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJTdHJp
bmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocyk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlN0cmluZyYpOworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOworCisgICAgV0VCS0lU
X0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJTdHJpbmcmIHMpIGNvbnN0OworCisgICAgV0VC
S0lUX0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBjb25z
dCBXZWJVQ2hhciogZGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9w
cml2YXRlOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkNTdHJpbmcgdXRmOCgpIGNvbnN0Owor
CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmlu
ZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKKworICAgIHRlbXBsYXRlIDxpbnQgTj4gV2Vi
U3RyaW5nKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkKKyAgICAgICAgOiBtX3ByaXZhdGUoMCkKKyAg
ICB7CisgICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRhLCBOIC0gMSkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDxpbnQgTj4gV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEp
W05dKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBXVEY6OlN0cmluZyYpOworICAgIG9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3Q7
CisKKyAgICBXZWJTdHJpbmcoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBXZWJTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOworICAgIG9wZXJhdG9yIFdU
Rjo6QXRvbWljU3RyaW5nKCkgY29uc3Q7CisjZWxzZQorCisgICAgV2ViU3RyaW5nKGNvbnN0IHN0
cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgp
LCBzLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBz
dHJpbmcxNiYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBzdHJpbmcxNigp
IGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJl
dHVybiBsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxlbikgOiBzdHJpbmcxNigpOworICAgIH0KKwor
ICAgIFdlYlN0cmluZyhjb25zdCBOdWxsYWJsZVN0cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQor
ICAgIHsKKyAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQorICAgICAgICAgICAgcmVzZXQoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYXNzaWduKHMuc3RyaW5nKCkuZGF0YSgpLCBzLnN0cmlu
ZygpLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBO
dWxsYWJsZVN0cmluZzE2JiBzKQorICAgIHsKKyAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQorICAg
ICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzaWduKHMuc3Ry
aW5nKCkuZGF0YSgpLCBzLnN0cmluZygpLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIG9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJp
bmcxNihzdHJpbmcxNigpLCB0cnVlKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwor
ICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJpbmcxNihsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxl
bikgOiBzdHJpbmcxNigpLCBmYWxzZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFVU
RjhTdHJpbmc+CisgICAgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBVVEY4U3RyaW5n
JiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21VVEY4KHMuZGF0YSgpLCBzLmxlbmd0aCgp
KTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJTdHJpbmdQ
cml2YXRlKik7CisgICAgV2ViU3RyaW5nUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikK
K3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgV2ViU3RyaW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuICEo
YSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzMTkxY2Ew
MmQyZWU2YWNjNzY3ZWY2ODZiNTAwNzc3MmM4NmNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKQEAgLTAsMCArMSwxMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0cmluZy5oIgorCisj
aW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV1RGOjpDU3RyaW5nQnVmZmVyIHsKK307
CisKK2ludCBXZWJDU3RyaW5nOjpjb21wYXJlKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKSBjb25z
dAoreworICAgIC8vIEEgbnVsbCBzdHJpbmcgaXMgYWx3YXlzIGxlc3MgdGhhbiBhIG5vbiBudWxs
IG9uZS4KKyAgICBpZiAoaXNOdWxsKCkgIT0gb3RoZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBpc051bGwoKSA/IC0xIDogMTsKKworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IDA7IC8vIEJvdGggV2ViU3RyaW5ncyBhcmUgbnVsbC4KKworICAgIHJldHVybiBzdHJjbXAobV9w
cml2YXRlLT5kYXRhKCksIG90aGVyLm1fcHJpdmF0ZS0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJD
U3RyaW5nOjpyZXNldCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7CisgICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdl
YkNTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikKK3sKKyAgICBhc3NpZ24o
Y29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSkpOworfQorCit2
b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQor
eworICAgIGNoYXIqIG5ld0RhdGE7CisgICAgUmVmUHRyPFdURjo6Q1N0cmluZ0J1ZmZlcj4gYnVm
ZmVyID0KKyAgICAgICAgV1RGOjpDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgbmV3
RGF0YSkuYnVmZmVyKCk7CisgICAgbWVtY3B5KG5ld0RhdGEsIGRhdGEsIGxlbmd0aCk7CisgICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4oYnVmZmVyLmdldCgpKSk7Cit9
CisKK3NpemVfdCBXZWJDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbV9wcml2
YXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBOT1RFOiBUaGUgYnVmZmVyJ3MgbGVuZ3Ro
IGluY2x1ZGVzIHRoZSBudWxsIGJ5dGUuCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmlu
Z1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSAtIDE7Cit9CisKK2NvbnN0IGNoYXIqIFdl
YkNTdHJpbmc6OmRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG1fcHJp
dmF0ZSktPmRhdGEoKTsKK30KKworV2ViU3RyaW5nIFdlYkNTdHJpbmc6OnV0ZjE2KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkuZGVjb2RlKGRhdGEoKSwgbGVu
Z3RoKCkpOworfQorCitXZWJDU3RyaW5nIFdlYkNTdHJpbmc6OmZyb21VVEYxNihjb25zdCBXZWJV
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVu
Y29kaW5nKCkuZW5jb2RlKAorICAgICAgICBkYXRhLCBsZW5ndGgsIFdlYkNvcmU6OlF1ZXN0aW9u
TWFya3NGb3JVbmVuY29kYWJsZXMpOworfQorCitXZWJDU3RyaW5nIFdlYkNTdHJpbmc6OmZyb21V
VEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSkKK3sKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICB3
aGlsZSAoZGF0YVtsZW5dICE9IFdlYlVDaGFyKDApKQorICAgICAgICBsZW4rKzsKKyAgICByZXR1
cm4gZnJvbVVURjE2KGRhdGEsIGxlbik7Cit9CisKK1dlYkNTdHJpbmc6OldlYkNTdHJpbmcoY29u
c3QgV1RGOjpDU3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkNTdHJp
bmdQcml2YXRlKj4ocy5idWZmZXIoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
bV9wcml2YXRlLT5yZWYoKTsKK30KKworV2ViQ1N0cmluZyYgV2ViQ1N0cmluZzo6b3BlcmF0b3I9
KGNvbnN0IFdURjo6Q1N0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0
cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJD
U3RyaW5nOjpvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGU7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKiBw
KQoreworICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRl
ID09IHAKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkK
KyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3NyYy9XZWJTdHJpbmcuY3BwIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJp
bmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhhM2QxNzM4Y2M1MzY3ZWEwY2ZjMjA5MjQ2ODliZTFmNmNjN2Y5
YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlN0
cmluZy5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
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
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0lt
cGwgeworfTsKKwordm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRl
KSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhl
cikKK3sKKyAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9w
cml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1By
aXZhdGUqPigKKyAgICAgICAgV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5n
ZXQoKSkpOworfQorCitzaXplX3QgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUp
LT5sZW5ndGgoKSA6IDA7Cit9CisKK2NvbnN0IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZh
dGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOworfQorCitXZWJDU3RyaW5nIFdlYlN0
cmluZzo6dXRmOCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSku
dXRmOCgpOworfQorCitXZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3Qg
Y2hhciogZGF0YSkKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwor
fQorCitib29sIFdlYlN0cmluZzo6ZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKK3sK
KyAgICByZXR1cm4gZXF1YWwobV9wcml2YXRlLCBzLm1fcHJpdmF0ZSk7Cit9CisKK1dlYlN0cmlu
Zzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRp
Y19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0
ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6
Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nh
c3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlOworfQorCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsK
K30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgcykKK3sKKyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+
KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZh
dGUqIHApCit7CisgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3By
aXZhdGUgPT0gcAorICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXgg
ZjY1ZmRjOTI5OGZhZDUxNzI3YjMwZmZkOTViMWE0NTNiMzc4YWM1Zi4uMzZjN2RjYjIxOTUyMzI0
Njc2ZjMyMzljNGNkN2I4ZDE4ZTk2MzExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApA
QCAtNjgsNiArNjgsNyBAQAogICAgICAgICAgICAgJ21zdnNfZ3VpZCc6ICc1RUNFQzlFNS04RjIz
LTQ3QjYtOTNFMC1DM0IzMjhCM0JFNjUnLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
ICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDp3
ZWJjb3JlJywKKyAgICAgICAgICAgICAgICAnLi4vLi4vUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1Bs
YXRmb3JtLmd5cDpwbGF0Zm9ybScsICMgYWN0dWFsbHkgV2ViQ29yZSBzaG91bGQgZGVwZW5kIG9u
IHRoaXMKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lw
OnNraWEnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5
L2ljdS9pY3UuZ3lwOmljdXVjJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLApAQCAtMjgwLDcgKzI4MSw2IEBA
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJBdWRpb0RldmljZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkJsb2JEYXRhLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQmxvYlJlZ2lzdHJ5LmgnLAotICAgICAgICAgICAg
ICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL3BsYXRmb3JtL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRm
b3JtL1dlYkNsaXBib2FyZC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dl
YkNvbG9yLmgnLApAQCAtMzEyLDcgKzMxMiw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJMb2NhbGl6ZWRTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9wbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oJywKLSAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL3BsYXRmb3JtL1dlYk5vbkNvcHlhYmxlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
cGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvcGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgnLApAQCAtNDkw
LDcgKzQ4OSw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAot
ICAgICAgICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQ3Vyc29ySW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnQu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXIuY3BwJywKQEAg
LTY0Myw3ICs2NDEsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJ
bXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJ
bXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUaHJl
YWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJMLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5n
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgK
aW5kZXggMTVkZjZjZDlmOWQ2ODE1YWU5MDg1N2FiZWFlMDYwNTJkMmIyZGVmYy4uMzA2N2U1Yjcz
NDI5MWIxZTBmZDIzOWM0OTQ2OTYyMjE1YjczYTRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaApAQCAtMjgsMTA5ICsyOCw0
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ1N0cmluZ19oCi0jZGVmaW5l
IFdlYkNTdHJpbmdfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxz
dHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBDU3RyaW5nOwotfQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGU7Ci1jbGFzcyBXZWJT
dHJpbmc7Ci0KLS8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRhaW5lciB3aXRoIHVuc3BlY2lm
aWVkIGVuY29kaW5nLiAgSXQgaXMKLS8vIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJDU3RyaW5n
IG9iamVjdC4KLS8vCi0vLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViQ1N0
cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYkNTdHJpbmcgewotcHVibGljOgot
ICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJDU3RyaW5nKCkgOiBtX3By
aXZhdGUoMCkgeyB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKLSAg
ICB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcmIHMpIDogbV9wcml2YXRlKDAp
IHsgYXNzaWduKHMpOyB9Ci0KLSAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ1N0
cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLQotICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0cmluZ3MgYXJlIGVxdWFscywg
YSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKLSAgICAvLyBmaXJzdCBjaGFyYWN0ZXIg
dGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVlIGluIHRoaXMgc3RyaW5nCi0g
ICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIHRvIGluZGlj
YXRlIHRoZSBvcHBvc2l0ZS4KLSAgICBXRUJLSVRfRVhQT1JUIGludCBjb21wYXJlKGNvbnN0IFdl
YkNTdHJpbmcmIG90aGVyKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgp
OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbik7
Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKLSAgICBXRUJLSVRf
RVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdXRmMTYoKSBj
b25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkNTdHJpbmcgZnJvbVVURjE2KGNv
bnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSk7Ci0KLSNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYp
OwotICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmKTsKLSAgICBv
cGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgV2ViQ1N0cmluZyhjb25z
dCBzdGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihz
LmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9
KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBz
Lmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9y
IHN0ZDo6c3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgo
KTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwgbGVuKSA6IHN0ZDo6
c3RyaW5nKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFVURjE2U3RyaW5nPgotICAg
IHN0YXRpYyBXZWJDU3RyaW5nIGZyb21VVEYxNihjb25zdCBVVEYxNlN0cmluZyYgcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmcm9tVVRGMTYocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAgIH0K
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQgYXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKik7
Ci0gICAgV2ViQ1N0cmluZ1ByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLWlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBXZWJDU3RyaW5nJiBhLCBjb25zdCBXZWJDU3RyaW5nJiBiKQotewotICAg
IHJldHVybiBhLmNvbXBhcmUoYikgPCAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0v
V2ViQ1N0cmluZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViQ29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJDb21tb24uaAppbmRleCBjNjM0ZjBjMzhmNDE4ZDAyODU4MGM4MzY1M2ExYWYxZTE3
MzlhZTE4Li5lNGFjNzkyMDY4YjY2YzA3ZjNmMjNhYzE3OTU3N2VhZDNiNjk5YTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24uaApA
QCAtMjgsOTYgKzI4LDQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJDb21t
b25faAotI2RlZmluZSBXZWJDb21tb25faAotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
RGVmYXVsdCBjb25maWd1cmF0aW9uCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJ
T04pCi0gICAgI2RlZmluZSBXRUJLSVRfSU1QTEVNRU5UQVRJT04gMAotI2VuZGlmCi0KLSNpZiAh
ZGVmaW5lZChXRUJLSVRfVVNJTkdfU0tJQSkKLSAgICAjaWYgIWRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFVTRV9TS0lBKQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDEK
LSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDAKLSAgICAjZW5k
aWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX0NHKQotICAgICNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIVdFQktJVF9VU0lOR19TS0lBCi0gICAgICAgICNkZWZpbmUgV0VC
S0lUX1VTSU5HX0NHIDEKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19D
RyAwCi0gICAgI2VuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19WOCkK
LSAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19WOCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdF
QktJVF9VU0lOR19KU0MpCi0gICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfSlNDIDAKLSNlbmRpZgot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRvIGJl
IGFubm90YXRlZCB3aXRoIFdFQktJVF9FWFBPUlQKLQotI2lmIGRlZmluZWQoV0VCS0lUX0RMTCkK
LSAgICAjaWYgZGVmaW5lZChXSU4zMikKLSAgICAgICAgI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgotICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0
KQotICAgICAgICAjZWxzZQotICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVj
bHNwZWMoZGxsaW1wb3J0KQotICAgICAgICAjZW5kaWYKLSAgICAjZWxzZQotICAgICAgICAjZGVm
aW5lIFdFQktJVF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkK
LSAgICAjZW5kaWYKLSNlbHNlCi0gICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUCi0jZW5kaWYKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEJhc2ljIHR5cGVzCi0KLSNpbmNsdWRlIDxzdGRk
ZWYuaD4gLy8gRm9yIHNpemVfdAotCi0jaWYgZGVmaW5lZChXSU4zMikKLS8vIFZpc3VhbCBTdHVk
aW8gZG9lc24ndCBoYXZlIHN0ZGludC5oLgotdHlwZWRlZiBzaG9ydCBpbnQxNl90OwotdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKLXR5cGVkZWYgaW50IGludDMyX3Q7Ci10eXBlZGVm
IHVuc2lnbmVkIGludCB1aW50MzJfdDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Ly8gVVRGLTE2IGNoYXJhY3RlciB0eXBlCi0jaWYgZGVmaW5lZChXSU4zMikKLXR5cGVkZWYgd2No
YXJfdCBXZWJVQ2hhcjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOwot
I2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb25zCi0KLVdFQktJ
VF9FWFBPUlQgdm9pZCBmYWlsZWRBc3NlcnRpb24oY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotLy8gSWRlYWxseSwgb25seSB1c2UgaW5zaWRlIHRoZSBwdWJsaWMg
ZGlyZWN0b3J5IGJ1dCBvdXRzaWRlIG9mIFdFQktJVF9JTVBMRU1FTlRBVElPTiBibG9ja3MuICAo
T3RoZXJ3aXNlIHVzZSBXVEYncyBBU1NFUlQuKQotI2lmIGRlZmluZWQoTkRFQlVHKQotI2RlZmlu
ZSBXRUJLSVRfQVNTRVJUKGFzc2VydGlvbikgKCh2b2lkKTApCi0jZWxzZQotI2RlZmluZSBXRUJL
SVRfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9uKSkgXAotICAg
ICAgICBmYWlsZWRBc3NlcnRpb24oX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICNh
c3NlcnRpb24pOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpIFdFQktJVF9BU1NFUlQoMCkKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4v
Li4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViQ29tbW9uLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0
cnkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdp
c3RyeS5oCmluZGV4IGM0NDZlNWU0NmVmNjFhMTE0ZGJmZjYxNmJlMzE0YjQwZTI2OTBhZmYuLjE2
YWNiNjBiOTFiYTg2NDQ4YTM1NGM3ZDA0ODZkYWZiYjM4MWI4YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5o
CkBAIC0xLDYyICsxLDI5IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJN
aW1lUmVnaXN0cnlfaAotI2RlZmluZSBXZWJNaW1lUmVnaXN0cnlfaAotCi0jaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci0KLWNs
YXNzIFdlYk1pbWVSZWdpc3RyeSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXBwb3J0c1R5cGUgeyBJ
c05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0ZWQsIE1heUJlU3VwcG9ydGVkIH07Ci0KLSAgICB2aXJ0
dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5
cGUpID0gMDsKLSAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0ltYWdlTUlNRVR5cGUo
Y29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBl
IHN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0g
MDsKLSAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01lZGlhTUlNRVR5cGUoY29uc3Qg
V2ViU3RyaW5nJiBtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBjb2RlY3MpID0gMDsKLSAgICB2aXJ0dWFsIFN1
cHBvcnRzVHlwZSBzdXBwb3J0c05vbkltYWdlTUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1l
VHlwZSkgPSAwOwotCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24o
Y29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTdHJp
bmcgd2VsbEtub3duTWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0
ZW5zaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJTdHJpbmcgcHJlZmVy
cmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgfldlYk1pbWVSZWdpc3RyeSgpIHsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgorLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBmb3J3YXJkaW5n
IGhlYWRlciB0byBlYXNlIHRoZSBQbGF0Zm9ybSB0cmFuc2l0aW9uIGZvciBkb3duc3RyZWFtIHVz
ZXJzIG9mIHRoZSBXZWJLaXQgQVBJLgorLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NDU4MworLy8gRklYTUU6IFJlbW92ZSBhcyBzb29uIGFzIGRvd25zdHJl
YW0gY2xpZW50cyBhcmUgdXBkYXRlZC4KKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9j
aHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU3RyaW5nLmgKaW5kZXggYzMzNmRkMTEzZGNk
NjFhZWZhZTUyYTk4MDhiNmM1NzI3NWYzYjlkZi4uODZjYTNhMGEwNzVhNGMwNTBmZWY4Njc2YmI3
OTBlMmM2OWVhMWZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViU3RyaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViU3RyaW5nLmgKQEAgLTI4LDE1MCArMjgsNSBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdlYlN0cmluZ19oCi0jZGVmaW5lIFdlYlN0cmluZ19oCisjaW5jbHVk
ZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAK
LSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGJhc2UvbnVsbGFibGVfc3Ry
aW5nMTYuaD4KLSNpbmNsdWRlIDxiYXNlL3N0cmluZzE2Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYkNTdHJpbmc7Ci1jbGFzcyBXZWJTdHJpbmdQcml2YXRlOwot
Ci0vLyBBIFVURi0xNiBzdHJpbmcgY29udGFpbmVyLiAgSXQgaXMgaW5leHBlbnNpdmUgdG8gY29w
eSBhIFdlYlN0cmluZwotLy8gb2JqZWN0LgotLy8KLS8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZl
IHRvIHBhc3MgYSBXZWJTdHJpbmcgYWNyb3NzIHRocmVhZHMhISEKLS8vCi1jbGFzcyBXZWJTdHJp
bmcgewotcHVibGljOgotICAgIH5XZWJTdHJpbmcoKSB7IHJlc2V0KCk7IH0KLQotICAgIFdlYlN0
cmluZygpIDogbV9wcml2YXRlKDApIHsgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IFdlYlVDaGFy
KiBkYXRhLCBzaXplX3QgbGVuKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWdu
KGRhdGEsIGxlbik7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYgcykg
OiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KLQotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9
KGNvbnN0IFdlYlN0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwot
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbik7
Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29u
c3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKLSAgICBXRUJL
SVRfRVhQT1JUIGNvbnN0IFdlYlVDaGFyKiBkYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KLQotICAgIFdFQktJVF9FWFBPUlQgV2ViQ1N0cmluZyB1
dGY4KCkgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVU
RjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOwotCi0gICAgdGVtcGxh
dGUgPGludCBOPiBXZWJTdHJpbmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQotICAgICAgICA6IG1f
cHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25z
dCBjaGFyICgmZGF0YSlbTl0pCi0gICAgewotICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwg
TiAtIDEpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgotICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIFdlYlN0
cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgb3BlcmF0b3IgV1RGOjpT
dHJpbmcoKSBjb25zdDsKLQotICAgIFdlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYp
OwotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0g
ICAgb3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0KLSAgICBXZWJT
dHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBh
c3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFdlYlN0cmluZyYgb3Bl
cmF0b3I9KGNvbnN0IHN0cmluZzE2JiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgp
LCBzLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJh
dG9yIHN0cmluZzE2KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgo
KTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2
KCk7Ci0gICAgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpIDog
bV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBpZiAocy5pc19udWxsKCkpCi0gICAgICAgICAg
ICByZXNldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5k
YXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFdlYlN0cmluZyYgb3Bl
cmF0b3I9KGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpCi0gICAgewotICAgICAgICBpZiAocy5p
c19udWxsKCkpCi0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhc3NpZ24ocy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgTnVsbGFibGVTdHJpbmcxNigp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgICAgIHJldHVy
biBOdWxsYWJsZVN0cmluZzE2KHN0cmluZzE2KCksIHRydWUpOwotICAgICAgICBzaXplX3QgbGVu
ID0gbGVuZ3RoKCk7Ci0gICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KGxlbiA/IHN0cmlu
ZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVVRGOFN0cmluZz4KLSAgICBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNv
bnN0IFVURjhTdHJpbmcmIHMpCi0gICAgewotICAgICAgICByZXR1cm4gZnJvbVVURjgocy5kYXRh
KCksIHMubGVuZ3RoKCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQgYXNz
aWduKFdlYlN0cmluZ1ByaXZhdGUqKTsKLSAgICBXZWJTdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7
Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmluZyYgYSwgY29uc3Qg
V2ViU3RyaW5nJiBiKQotewotICAgIHJldHVybiBhLmVxdWFscyhiKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikKLXsK
LSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzYzMxOTFjYTAyZDJlZTZhY2M3NjdlZjY4NmI1MDA3NzcyYzg2
Y2NjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0
cmluZy5oIgotCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV1RGOjpDU3RyaW5n
QnVmZmVyIHsKLX07Ci0KLWludCBXZWJDU3RyaW5nOjpjb21wYXJlKGNvbnN0IFdlYkNTdHJpbmcm
IG90aGVyKSBjb25zdAotewotICAgIC8vIEEgbnVsbCBzdHJpbmcgaXMgYWx3YXlzIGxlc3MgdGhh
biBhIG5vbiBudWxsIG9uZS4KLSAgICBpZiAoaXNOdWxsKCkgIT0gb3RoZXIuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBpc051bGwoKSA/IC0xIDogMTsKLQotICAgIGlmIChpc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIDA7IC8vIEJvdGggV2ViU3RyaW5ncyBhcmUgbnVsbC4KLQotICAgIHJldHVy
biBzdHJjbXAobV9wcml2YXRlLT5kYXRhKCksIG90aGVyLm1fcHJpdmF0ZS0+ZGF0YSgpKTsKLX0K
LQotdm9pZCBXZWJDU3RyaW5nOjpyZXNldCgpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkgewotICAg
ICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJpdmF0ZSA9IDA7Ci0gICAgfQot
fQotCi12b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikKLXsK
LSAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0
ZSkpOwotfQotCi12b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgbGVuZ3RoKQotewotICAgIGNoYXIqIG5ld0RhdGE7Ci0gICAgUmVmUHRyPFdURjo6Q1N0cmlu
Z0J1ZmZlcj4gYnVmZmVyID0KLSAgICAgICAgV1RGOjpDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVk
KGxlbmd0aCwgbmV3RGF0YSkuYnVmZmVyKCk7Ci0gICAgbWVtY3B5KG5ld0RhdGEsIGRhdGEsIGxl
bmd0aCk7Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4oYnVmZmVy
LmdldCgpKSk7Ci19Ci0KLXNpemVfdCBXZWJDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAotewotICAg
IGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBOT1RFOiBUaGUgYnVm
ZmVyJ3MgbGVuZ3RoIGluY2x1ZGVzIHRoZSBudWxsIGJ5dGUuCi0gICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSAtIDE7Ci19Ci0KLWNv
bnN0IGNoYXIqIFdlYkNTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRl
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJp
dmF0ZSo+KG1fcHJpdmF0ZSktPmRhdGEoKTsKLX0KLQotV2ViU3RyaW5nIFdlYkNTdHJpbmc6OnV0
ZjE2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkuZGVjb2Rl
KGRhdGEoKSwgbGVuZ3RoKCkpOwotfQotCi1XZWJDU3RyaW5nIFdlYkNTdHJpbmc6OmZyb21VVEYx
Nihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6VVRGOEVuY29kaW5nKCkuZW5jb2RlKAotICAgICAgICBkYXRhLCBsZW5ndGgsIFdlYkNv
cmU6OlF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOwotfQotCi1XZWJDU3RyaW5nIFdlYkNT
dHJpbmc6OmZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSkKLXsKLSAgICBzaXplX3QgbGVu
ID0gMDsKLSAgICB3aGlsZSAoZGF0YVtsZW5dICE9IFdlYlVDaGFyKDApKQotICAgICAgICBsZW4r
KzsKLSAgICByZXR1cm4gZnJvbVVURjE2KGRhdGEsIGxlbik7Ci19Ci0KLVdlYkNTdHJpbmc6Oldl
YkNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJiBzKQotICAgIDogbV9wcml2YXRlKHN0YXRpY19j
YXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIoKSkpCi17Ci0gICAgaWYgKG1fcHJpdmF0
ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0KLQotV2ViQ1N0cmluZyYgV2ViQ1N0cmlu
Zzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYgcykKLXsKLSAgICBhc3NpZ24oc3RhdGlj
X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSk7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCi1XZWJDU3RyaW5nOjpvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdAotewotICAg
IHJldHVybiBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKFdlYkNTdHJp
bmdQcml2YXRlKiBwKQotewotICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgbV9wcml2YXRlID09IHAKLSAgICBpZiAocCkKLSAgICAgICAgcC0+cmVmKCk7Ci0gICAgaWYg
KG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9
IHA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlN0cmluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MjliZDUwY2My
ZWZlMTNhNTUwMGM3MTk3NzRmMjI4ZGU0MDIxMjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5n
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0
cmluZ0ltcGwgewotfTsKLQotdm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKLXsKLSAgICBpZiAobV9w
cml2YXRlKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcml2YXRl
ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViU3RyaW5n
JiBvdGhlcikKLXsKLSAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ob3Ro
ZXIubV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0
cmluZ1ByaXZhdGUqPigKLSAgICAgICAgV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVu
Z3RoKS5nZXQoKSkpOwotfQotCi1zaXplX3QgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3By
aXZhdGUpLT5sZW5ndGgoKSA6IDA7Ci19Ci0KLWNvbnN0IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRh
dGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmlu
Z1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOwotfQotCi1XZWJDU3RyaW5n
IFdlYlN0cmluZzo6dXRmOCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6U3RyaW5nKG1fcHJp
dmF0ZSkudXRmOCgpOwotfQotCi1XZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoZGF0YSwgbGVuZ3RoKTsKLX0KLQotV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgo
Y29uc3QgY2hhciogZGF0YSkKLXsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRh
dGEpOwotfQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29u
c3QKLXsKLSAgICByZXR1cm4gZXF1YWwobV9wcml2YXRlLCBzLm1fcHJpdmF0ZSk7Ci19Ci0KLVdl
YlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQotICAgIDogbV9wcml2YXRl
KHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCi17Ci0gICAgaWYgKG1f
cHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJT
dHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykKLXsKLSAgICBhc3NpZ24oc3Rh
dGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlOwotfQotCi1XZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgcykKLSAgICA6IG1fcHJpdmF0ZSgwKQotewotICAgIGFzc2lnbihzLnN0cmlu
ZygpKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgcykKLXsKLSAgICBhc3NpZ24ocy5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJ
bXBsICo+KG1fcHJpdmF0ZSkpOwotfQotCi12b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmlu
Z1ByaXZhdGUqIHApCi17Ci0gICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSBtX3ByaXZhdGUgPT0gcAotICAgIGlmIChwKQotICAgICAgICBwLT5yZWYoKTsKLSAgICBpZiAo
bV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgbV9wcml2YXRlID0g
cDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjU5MGE0OTNlYjAyZDcyZTMzNjBkOWU3ZDcwY2M3
OTBhMGE2MGFhOS4uMTg1N2M5NDE0YzEzMjE4MTgyMWMzNmM1M2NlYTY1NTY4ZGE0OTkwMSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDExLTEyLTE2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBEZW1vbnN0cmF0ZSBvbmUgcG9zc2libGUgd2F5IHRvIG1v
dmUgY2hyb21pdW0gV2ViS2l0IHBsYXRmb3JtIEFQSSBpbnRvIFNvdXJjZS9QbGF0Zm9ybQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1ODMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaGVzIHRoZSBX
RUJLSVRfRVhQT1JUIGNoZWNrIGFib3V0IHRoZSBjaHJvbWl1bSBXZWJLaXQgcGxhdGZvcm0gQVBJ
IGhlYWRlciBsb2NhdGlvbi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5OgorICAgICAgICAoY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbik6CisKIDIw
MTEtMTItMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdyZXNzaW9uIChyMTAyODY2KTogTmF2aWdhdGluZyBhd2F5IGZyb20gb3IgY2xvc2luZyBh
IHBhZ2Ugd2l0aCBhIHBsdWdpbiBjcmFzaGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IGY3OWE5MjY2YTcwMmY0NmYxMTdkNTExMTBiMzJkZTE2
ZDQxOTdhYTguLjU3OTJmMjVjZDRiZmVmNzhjNjUwYjMzYWFjNGJmZTRlYjNhZWUxZTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0xNjAyLDcg
KzE2MDIsNyBAQCBkZWYgY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbihmaWxlbmFtZSwgZmlsZV9l
eHRlbnNpb24sIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlcgogCiAgICAgbW9kaWZpZXJzX2FuZF9y
ZXR1cm5fdHlwZSA9IGZ1bmN0aW9uX3N0YXRlLm1vZGlmaWVyc19hbmRfcmV0dXJuX3R5cGUoKQog
ICAgIGlmIGZpbGVuYW1lLmZpbmQoJy9jaHJvbWl1bS8nKSAhPSAtMSBhbmQgc2VhcmNoKHInXGJX
RUJLSVRfRVhQT1JUXGInLCBtb2RpZmllcnNfYW5kX3JldHVybl90eXBlKToKLSAgICAgICAgaWYg
ZmlsZW5hbWUuZmluZCgnL2Nocm9taXVtL3B1YmxpYy8nKSA9PSAtMSBhbmQgZmlsZW5hbWUuZmlu
ZCgnL2Nocm9taXVtL3Rlc3RzLycpID09IC0xOgorICAgICAgICBpZiBmaWxlbmFtZS5maW5kKCcv
Y2hyb21pdW0vcHVibGljLycpID09IC0xIGFuZCBmaWxlbmFtZS5maW5kKCcvY2hyb21pdW0vdGVz
dHMvJykgPT0gLTEgYW5kIGZpbGVuYW1lLmZpbmQoJ2Nocm9taXVtL3BsYXRmb3JtJykgPT0gLTE6
CiAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbl9zdGF0ZS5mdW5jdGlvbl9uYW1lX3N0YXJ0X3Bv
c2l0aW9uLnJvdywgJ3JlYWRhYmlsaXR5L3dlYmtpdF9leHBvcnQnLCA1LAogICAgICAgICAgICAg
ICAgICAgJ1dFQktJVF9FWFBPUlQgc2hvdWxkIG9ubHkgYXBwZWFyIGluIHRoZSBjaHJvbWl1bSBw
dWJsaWMgKG9yIHRlc3RzKSBkaXJlY3RvcnkuJykKICAgICAgICAgZWxpZiBub3QgZmlsZV9leHRl
bnNpb24gPT0gImgiOgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXgg
MjY3NmQyM2Y5ODM4YmZmZjhiZjM2Nzg3ZjljYjBkMTNhNjJkYzJhMS4uNjhiYTc5MzI1M2I1ZjEz
MmY5Y2M2ZmQ1MTA2YjFiMGZjODg5NWU2MiAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8u
Z2l0aWdub3JlCkBAIC01NCw2ICs1NCwxMCBAQCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtLyoudmNw
cm9qKgogU291cmNlL1dlYktpdC9jaHJvbWl1bS9BbGwueGNvZGVwcm9qCiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC54Y29kZXByb2oKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
VW5pdFRlc3RzLnhjb2RlcHJvagorU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC8qLk1ha2Vm
aWxlCitTb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwLyoubWsKK1NvdXJjZS9QbGF0Zm9ybS9Q
bGF0Zm9ybS5neXAvKi5zbG4KK1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvKi52Y3Byb2oq
CiBUb29scy9Ub29scy54Y29kZXByb2oKIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmd5cC9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2oKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9n
IGIvQ2hhbmdlTG9nCmluZGV4IGY1NWNhNWM2ODk4MThkMjQxMzZlMjFjOWU2NTIzNzE4MTIxMWNm
YTQuLjFkNzA4YTI4NGE0YzJmODQ2OTIzZTYzOTU4ODIzMjcwOTBhZjc5ZjUgMTAwNjQ0Ci0tLSBh
L0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMi0xNiAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5kIGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiAuZ2l0
aWdub3JlOgorCiAyMDExLTEyLTE1ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1
c2lvbi5tb2JpPgogCiAgICAgICAgIFtDTWFrZV0gUmVtb3ZlIEVOQUJMRV9EQVRBR1JJRCBmcm9t
IHRoZSBidWlsZHN5c3RlbS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119708</attachid>
            <date>2011-12-16 17:52:10 -0800</date>
            <delta_ts>2012-01-03 15:51:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20111216175209.patch</filename>
            <type>text/plain</type>
            <size>62161</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi5kOTIxOTk3ZTc1M2VjOTIwOTYzOTA3NTMyMjE5
ZGEzNWI3NzE3Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMS0xMi0xNiAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5kIGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
cmVhdGVzIGEgc2tlbGV0b24gZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIGNocm9taXVtIFdl
YktpdCBwbGF0Zm9ybSBBUEkgYW5kIG1vdmVzIFdlYk1pbWVSZWdpc3RyeS5oCisgICAgICAgIGFs
b25nIHdpdGggaXRzIGRlcGVuZGVuY2llcyAoV2ViU3RyaW5nIGFuZCBXZWJDU3RyaW5nKSB0byB0
aGVpciBmaW5hbCBsb2NhdGlvbi4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cC9QbGF0Zm9ybS5n
eXA6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtLmd5cGk6IEFkZGVkLgorICAgICAgICAqIGNo
cm9taXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDU3RyaW5nOjp+V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Oldl
YkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q1N0cmluZzo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0b3Ig
c3RkOjpzdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpmcm9tVVRGMTYpOgor
ICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcjwpOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
L1dlYkNvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJDb21tb24uaC4KKyAgICAgICAgKiBjaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1l
UmVnaXN0cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChXZWJLaXQ6OldlYk1pbWVSZWdpc3Ry
eTo6fldlYk1pbWVSZWdpc3RyeSk6CisgICAgICAgICogY2hyb21pdW0vcGxhdGZvcm0vV2ViU3Ry
aW5nLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYlN0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIHN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpvcGVyYXRvciBOdWxsYWJsZVN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmlu
Zy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5n
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
OnV0ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJh
dG9yIFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisK
IDIwMTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBB
ZGQgc3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggMjZmNTgxYTNjNTY5NzA2MWIwY2M0MWE5NTFlMWYzZjYxZmU1MDVkYi4uMTk4Njc1OGRkNTA2
OWIwMGU2OTFiNjE0YmE3ZjQxZjk1NThhZmFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsNSArMSwyNCBAQAogMjAxMS0xMi0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5k
IGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5o
IGlzIGEgdGVtcG9yYXJ5IGZvcndhcmRpbmcgaGVhZGVyIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24u
IE9uY2UgZG93bnN0cmVhbQorICAgICAgICBjYWxsZXJzIGFyZSB1cGRhdGVkIHRvIHRoZSBuZXcg
bG9jYXRpb24gdGhpcyBoZWFkZXIgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgV2ViU3RyaW5n
LCBXZWJDU3RyaW5nLCBhbmQgV2ViQ29tbW9uLmggd2lsbCByZW1haW4gaW4gcGxhY2UgYXMgZm9y
d2FyZGluZyBoZWFkZXJzIGZvciB1c2VycyBvZiB0aGUgV2ViS2l0IGNsaWVudAorICAgICAgICBB
UEkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9X
ZWJDU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwdWJs
aWMvcGxhdGZvcm0vV2ViU3RyaW5nLmg6CisKKzIwMTEtMTItMTYgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIFJlbW92ZSBXZWJDU3Ry
aW5nJ3MgZGVwZW5kZW5jeSBvbiBXZWJDb3JlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NDc2MQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cCBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAv
UGxhdGZvcm0uZ3lwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNTQ5MTlmMTU1ZjJkZmY5OTVhZTMwOTJhZTI3NDgw
NGJmMWQwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lw
L1BsYXRmb3JtLmd5cApAQCAtMCwwICsxLDcxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyMKKworeworICAgICdpbmNsdWRlcyc6IFsKKyAgICAgICAgJy4uL1BsYXRmb3JtLmd5
cGknLAorICAgIF0sCisgICAgJ3RhcmdldHMnOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICd0
YXJnZXRfbmFtZSc6ICdwbGF0Zm9ybScsCisgICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGli
cmFyeScsCisgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICcu
Li8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlwdENvcmUuZ3lw
Ond0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dURi9XVEYuZ3lwL1dURi5neXA6bmV3d3Rm
JywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAg
ICAgICAgICAgICcuLi9jaHJvbWl1bScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2Rl
ZmluZXMnOiBbCisgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAgICAgICAn
PEAocGxhdGZvcm1fZmlsZXMpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnZGlyZWN0
X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKKyAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzog
WworICAgICAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0nLAorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAg
ICAgICAgWydpbnNpZGVfY2hyb21pdW1fYnVpbGQ9PTEnLCB7CisgICAgICAgICAgICAgICAgICAg
ICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgICAgICAgICAgWydjb21wb25lbnQ9PSJz
aGFyZWRfbGlicmFyeSInLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXRUJLSVRfRExMJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgfV0sCisg
ICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0
Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDk3
ODgwY2NlODExNjQ0NmFhMTc0MDYyOTYxNThhZmFkMTY5OTc5NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCkBAIC0wLDAgKzEsNDIgQEAKKyMKKyMgQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCit7CisgICAgJ3ZhcmlhYmxlcyc6IHsKKyAgICAg
ICAgJ3BsYXRmb3JtX2ZpbGVzJzogWworICAgICAgICAgICAgJ2Nocm9taXVtL3BsYXRmb3JtL1dl
YkNTdHJpbmcuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcGxhdGZvcm0vV2ViQ29tbW9uLmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaCcsCisgICAgICAgICAgICAn
Y2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9zcmMv
V2ViU3RyaW5nLmNwcCcsCisgICAgICAgIF0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViQ1N0cmluZy5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmEwZTgyM2M0ODRk
NjEwYjk5ZjVhNjMxYjMwMzAyNjQ4YWMzNDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaApAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViQ1N0cmluZ19oCisjZGVmaW5lIFdlYkNTdHJpbmdfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmc+CisjZW5kaWYKKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBDU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
Q1N0cmluZ1ByaXZhdGU7CitjbGFzcyBXZWJTdHJpbmc7CisKKy8vIEEgc2luZ2xlLWJ5dGUgc3Ry
aW5nIGNvbnRhaW5lciB3aXRoIHVuc3BlY2lmaWVkIGVuY29kaW5nLiAgSXQgaXMKKy8vIGluZXhw
ZW5zaXZlIHRvIGNvcHkgYSBXZWJDU3RyaW5nIG9iamVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBp
cyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViQ1N0cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8KK2Ns
YXNzIFdlYkNTdHJpbmcgeworcHVibGljOgorICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9
CisKKyAgICBXZWJDU3RyaW5nKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBXZWJDU3RyaW5n
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pIDogbV9wcml2YXRlKDApCisgICAgeworICAg
ICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAgICB9CisKKyAgICBXZWJDU3RyaW5nKGNvbnN0IFdl
YkNTdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKHMpOyB9CisKKyAgICBXZWJDU3Ry
aW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ1N0cmluZyYgcykKKyAgICB7CisgICAgICAgIGFzc2ln
bihzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vIFJldHVybnMgMCBp
ZiBib3RoIHN0cmluZ3MgYXJlIGVxdWFscywgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0
aGUKKyAgICAvLyBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVh
dGVyIHZhbHVlIGluIHRoaXMgc3RyaW5nCisgICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZh
bHVlIGxlc3MgdGhhbiB6ZXJvIHRvIGluZGljYXRlIHRoZSBvcHBvc2l0ZS4KKyAgICBXRUJLSVRf
RVhQT1JUIGludCBjb21wYXJlKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKSBjb25zdDsKKworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3Np
Z24oY29uc3QgV2ViQ1N0cmluZyYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbik7CisKKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBs
ZW5ndGgoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25z
dDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgV0VCS0lU
X0VYUE9SVCBXZWJTdHJpbmcgdXRmMTYoKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYkNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJik7CisgICAgV2ViQ1N0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYpOworICAgIG9wZXJhdG9yIFdURjo6Q1N0
cmluZygpIGNvbnN0OworI2Vsc2UKKyAgICBXZWJDU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
KSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0
aCgpKTsKKyAgICB9CisKKyAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpzdHJp
bmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBj
b25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOworICAgICAgICByZXR1
cm4gbGVuID8gc3RkOjpzdHJpbmcoZGF0YSgpLCBsZW4pIDogc3RkOjpzdHJpbmcoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVVRGMTZTdHJpbmc+CisgICAgc3RhdGljIFdlYkNTdHJp
bmcgZnJvbVVURjE2KGNvbnN0IFVURjE2U3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZyb21VVEYxNihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgdm9pZCBhc3NpZ24oV2ViQ1N0cmluZ1ByaXZhdGUqKTsKKyAgICBXZWJDU3RyaW5n
UHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFdl
YkNTdHJpbmcmIGEsIGNvbnN0IFdlYkNTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuIGEuY29tcGFy
ZShiKSA8IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJDb21tb24uaCBiL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9XZWJDb21tb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjM0
ZjBjMzhmNDE4ZDAyODU4MGM4MzY1M2ExYWYxZTE3MzlhZTE4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtL1dlYkNvbW1vbi5oCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJDb21tb25faAorI2RlZmluZSBXZWJDb21tb25faAorCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uCisKKyNpZiAhZGVmaW5l
ZChXRUJLSVRfSU1QTEVNRU5UQVRJT04pCisgICAgI2RlZmluZSBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04gMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfU0tJQSkKKyAgICAjaWYg
IWRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFVTRV9TS0lBKQorICAgICAgICAjZGVmaW5l
IFdFQktJVF9VU0lOR19TS0lBIDEKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdFQktJVF9V
U0lOR19TS0lBIDAKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VT
SU5HX0NHKQorICAgICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIVdFQktJVF9VU0lOR19TS0lB
CisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0NHIDEKKyAgICAjZWxzZQorICAgICAgICAj
ZGVmaW5lIFdFQktJVF9VU0lOR19DRyAwCisgICAgI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZp
bmVkKFdFQktJVF9VU0lOR19WOCkKKyAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19WOCAxCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19KU0MpCisgICAgI2RlZmluZSBXRUJLSVRf
VVNJTkdfSlNDIDAKKyNlbmRpZgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhwb3J0
ZWQgc3ltYm9scyBuZWVkIHRvIGJlIGFubm90YXRlZCB3aXRoIFdFQktJVF9FWFBPUlQKKworI2lm
IGRlZmluZWQoV0VCS0lUX0RMTCkKKyAgICAjaWYgZGVmaW5lZChXSU4zMikKKyAgICAgICAgI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JU
IF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICAgICAjZW5kaWYKKyAg
ICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSgiZGVmYXVsdCIpKSkKKyAgICAjZW5kaWYKKyNlbHNlCisgICAgI2RlZmluZSBXRUJL
SVRfRVhQT1JUCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2ljIHR5
cGVzCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gRm9yIHNpemVfdAorCisjaWYgZGVmaW5lZChX
SU4zMikKKy8vIFZpc3VhbCBTdHVkaW8gZG9lc24ndCBoYXZlIHN0ZGludC5oLgordHlwZWRlZiBz
aG9ydCBpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKK3R5cGVkZWYg
aW50IGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVVRGLTE2IGNoYXJhY3RlciB0eXBlCisjaWYgZGVmaW5l
ZChXSU4zMikKK3R5cGVkZWYgd2NoYXJfdCBXZWJVQ2hhcjsKKyNlbHNlCit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IFdlYlVDaGFyOworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBBc3NlcnRpb25zCisKK1dFQktJVF9FWFBPUlQgdm9pZCBmYWlsZWRBc3NlcnRpb24oY29uc3Qg
Y2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBh
c3NlcnRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworLy8gSWRlYWxseSwgb25seSB1
c2UgaW5zaWRlIHRoZSBwdWJsaWMgZGlyZWN0b3J5IGJ1dCBvdXRzaWRlIG9mIFdFQktJVF9JTVBM
RU1FTlRBVElPTiBibG9ja3MuICAoT3RoZXJ3aXNlIHVzZSBXVEYncyBBU1NFUlQuKQorI2lmIGRl
ZmluZWQoTkRFQlVHKQorI2RlZmluZSBXRUJLSVRfQVNTRVJUKGFzc2VydGlvbikgKCh2b2lkKTAp
CisjZWxzZQorI2RlZmluZSBXRUJLSVRfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYg
KCEoYXNzZXJ0aW9uKSkgXAorICAgICAgICBmYWlsZWRBc3NlcnRpb24oX19GSUxFX18sIF9fTElO
RV9fLCBfX0ZVTkNUSU9OX18sICNhc3NlcnRpb24pOyBcCit9IHdoaWxlICgwKQorI2VuZGlmCisK
KyNkZWZpbmUgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIFdFQktJVF9BU1NFUlQoMCkKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2Vi
TWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViTWlt
ZVJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJlNTdlOTZhZGM1NGM2NDYyNzJmNjVhNmVjYzBjMmQx
OWJmOWI3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0
Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJNaW1lUmVn
aXN0cnlfaAorI2RlZmluZSBXZWJNaW1lUmVnaXN0cnlfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3RyaW5nOworCitjbGFzcyBXZWJN
aW1lUmVnaXN0cnkgeworcHVibGljOgorICAgIGVudW0gU3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBw
b3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9OworCisgICAgdmlydHVhbCBTdXBw
b3J0c1R5cGUgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5
cGUpID0gMDsKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0ltYWdlTUlNRVR5cGUo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBw
b3J0c1R5cGUgc3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmIG1pbWVUeXBlKSA9IDA7CisgICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNZWRp
YU1JTUVUeXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmIGNvZGVjcykgPSAwOworICAgIHZpcnR1YWwgU3VwcG9ydHNUeXBlIHN1cHBvcnRzTm9uSW1h
Z2VNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKKworICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6
V2ViU3RyaW5nIHdlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmlu
ZyBtaW1lVHlwZUZyb21GaWxlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBmaWxlUGF0aCkgPSAw
OworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlN
RVR5cGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisKK3Byb3RlY3Rl
ZDoKKyAgICB+V2ViTWltZVJlZ2lzdHJ5KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZv
cm0vV2ViU3RyaW5nLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViU3Ry
aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzMzNmRkMTEzZGNkNjFhZWZhZTUyYTk4MDhiNmM1NzI3NWYzYjlk
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wbGF0Zm9ybS9X
ZWJTdHJpbmcuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3RyaW5nX2gKKyNkZWZpbmUg
V2ViU3RyaW5nX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YmFz
ZS9udWxsYWJsZV9zdHJpbmcxNi5oPgorI2luY2x1ZGUgPGJhc2Uvc3RyaW5nMTYuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ1N0cmluZzsKK2NsYXNzIFdlYlN0
cmluZ1ByaXZhdGU7CisKKy8vIEEgVVRGLTE2IHN0cmluZyBjb250YWluZXIuICBJdCBpcyBpbmV4
cGVuc2l2ZSB0byBjb3B5IGEgV2ViU3RyaW5nCisvLyBvYmplY3QuCisvLworLy8gV0FSTklORzog
SXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYlN0cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8K
K2NsYXNzIFdlYlN0cmluZyB7CitwdWJsaWM6CisgICAgfldlYlN0cmluZygpIHsgcmVzZXQoKTsg
fQorCisgICAgV2ViU3RyaW5nKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBXZWJTdHJpbmco
Y29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4pIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcoY29uc3Qg
V2ViU3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihzKTsgfQorCisgICAgV2ViU3Ry
aW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWdu
KHMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJTdHJp
bmcmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlVDaGFyKiBkYXRh
LCBzaXplX3QgbGVuKTsKKworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2Vi
U3RyaW5nJiBzKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0OworICAgIFdFQktJVF9FWFBPUlQgY29uc3QgV2ViVUNoYXIqIGRhdGEoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgV0VCS0lUX0VYUE9S
VCBXZWJDU3RyaW5nIHV0ZjgoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdl
YlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSk7
CisKKyAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmluZyhjb25zdCBjaGFyICgmZGF0YSlbTl0p
CisgICAgICAgIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZnJvbVVURjgo
ZGF0YSwgTiAtIDEpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmluZyYg
b3BlcmF0b3I9KGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkKKyAgICB7CisgICAgICAgIGFzc2lnbihm
cm9tVVRGOChkYXRhLCBOIC0gMSkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5n
Jik7CisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBv
cGVyYXRvciBXVEY6OlN0cmluZygpIGNvbnN0OworCisgICAgV2ViU3RyaW5nKGNvbnN0IFdURjo6
QXRvbWljU3RyaW5nJik7CisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZygpIGNvbnN0OworI2Vs
c2UKKworICAgIFdlYlN0cmluZyhjb25zdCBzdHJpbmcxNiYgcykgOiBtX3ByaXZhdGUoMCkKKyAg
ICB7CisgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorCisgICAg
V2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3RyaW5nMTYmIHMpCisgICAgeworICAgICAgICBh
c3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCisgICAgb3BlcmF0b3Igc3RyaW5nMTYoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90
IGxlbiA9IGxlbmd0aCgpOworICAgICAgICByZXR1cm4gbGVuID8gc3RyaW5nMTYoZGF0YSgpLCBs
ZW4pIDogc3RyaW5nMTYoKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcoY29uc3QgTnVsbGFibGVT
dHJpbmcxNiYgcykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGlmIChzLmlzX251bGwo
KSkKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2ln
bihzLnN0cmluZygpLmRhdGEoKSwgcy5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgfQorCisgICAg
V2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgTnVsbGFibGVTdHJpbmcxNiYgcykKKyAgICB7Cisg
ICAgICAgIGlmIChzLmlzX251bGwoKSkKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFzc2lnbihzLnN0cmluZygpLmRhdGEoKSwgcy5zdHJpbmcoKS5sZW5n
dGgoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBOdWxs
YWJsZVN0cmluZzE2KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9wcml2YXRlKQorICAg
ICAgICAgICAgcmV0dXJuIE51bGxhYmxlU3RyaW5nMTYoc3RyaW5nMTYoKSwgdHJ1ZSk7CisgICAg
ICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIE51bGxhYmxlU3RyaW5n
MTYobGVuID8gc3RyaW5nMTYoZGF0YSgpLCBsZW4pIDogc3RyaW5nMTYoKSwgZmFsc2UpOworICAg
IH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBVVEY4U3RyaW5nPgorICAgIHN0YXRpYyBXZWJTdHJp
bmcgZnJvbVVURjgoY29uc3QgVVRGOFN0cmluZyYgcykKKyAgICB7CisgICAgICAgIHJldHVybiBm
cm9tVVRGOChzLmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgdm9pZCBhc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSopOworICAgIFdlYlN0cmluZ1ByaXZh
dGUqIG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU3Ry
aW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlN0cmluZyYgYSwgY29uc3QgV2Vi
U3RyaW5nJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9z
cmMvV2ViQ1N0cmluZy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYkNTdHJp
bmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFiY2EwOTlhZWEwOGQ5MDI0M2QyM2JjZDg4ZWU4OGY3YTZhODJm
MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYkNT
dHJpbmcuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
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
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
PHBsYXRmb3JtL1dlYkNTdHJpbmcuaD4KKworI2luY2x1ZGUgPHBsYXRmb3JtL1dlYlN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkNTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6Q1N0cmluZ0J1ZmZlciB7Cit9
OworCitpbnQgV2ViQ1N0cmluZzo6Y29tcGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhlcikgY29u
c3QKK3sKKyAgICAvLyBBIG51bGwgc3RyaW5nIGlzIGFsd2F5cyBsZXNzIHRoYW4gYSBub24gbnVs
bCBvbmUuCisgICAgaWYgKGlzTnVsbCgpICE9IG90aGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gaXNOdWxsKCkgPyAtMSA6IDE7CisKKyAgICBpZiAoaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biAwOyAvLyBCb3RoIFdlYlN0cmluZ3MgYXJlIG51bGwuCisKKyAgICByZXR1cm4gc3RyY21wKG1f
cHJpdmF0ZS0+ZGF0YSgpLCBvdGhlci5tX3ByaXZhdGUtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2Vi
Q1N0cmluZzo6cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2
YXRlLT5kZXJlZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0KK30KKwordm9pZCBX
ZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYgb3RoZXIpCit7CisgICAgYXNzaWdu
KGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKK30KKwor
dm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkK
K3sKKyAgICBjaGFyKiBuZXdEYXRhOworICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1
ZmZlciA9CisgICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5l
d0RhdGEpLmJ1ZmZlcigpOworICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOworICAg
IGFzc2lnbihzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOwor
fQorCitzaXplX3QgV2ViQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0
aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgorICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNTdHJp
bmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOworfQorCitjb25zdCBjaGFyKiBX
ZWJDU3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3By
aXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYlN0cmluZyBXZWJDU3RyaW5nOjp1dGYxNigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgoZGF0YSgpLCBsZW5ndGgoKSk7Cit9
CisKK1dlYkNTdHJpbmc6OldlYkNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJiBzKQorICAgIDog
bV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIoKSkpCit7
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKK30KKworV2Vi
Q1N0cmluZyYgV2ViQ1N0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYgcykKK3sK
KyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSk7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDU3RyaW5nOjpvcGVyYXRvciBXVEY6OkNTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViQ1N0cmlu
Zzo6YXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKiBwKQoreworICAgIC8vIFRha2UgY2FyZSB0byBo
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRlID09IHAKKyAgICBpZiAocCkKKyAgICAgICAg
cC0+cmVmKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigp
OworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNTk5M2Q3
YzhmMmM3MmQ2ZmRmM2ZkOTRiZTRlNTQ1ZGY1MmUyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKQEAgLTAsMCArMSwxMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cGxhdGZvcm0vV2ViU3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxwbGF0Zm9ybS9XZWJDU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5n
UHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0ltcGwgeworfTsKKwordm9pZCBXZWJTdHJpbmc6
OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVy
ZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViU3RyaW5n
Ojphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhlcikKK3sKKyAgICBhc3NpZ24oY29uc3RfY2Fz
dDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViU3Ry
aW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPigKKyAgICAgICAgV1RGOjpTdHJp
bmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkpOworfQorCitzaXplX3QgV2ViU3Ry
aW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0
PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSA6IDA7Cit9CisKK2NvbnN0
IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJz
KCkgOiAwOworfQorCitXZWJDU3RyaW5nIFdlYlN0cmluZzo6dXRmOCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSkudXRmOCgpOworfQorCitXZWJTdHJpbmcgV2Vi
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAg
IHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKK30KKworV2ViU3Ry
aW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkKK3sKKyAgICByZXR1cm4g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworfQorCitib29sIFdlYlN0cmluZzo6ZXF1YWxz
KGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKK3sKKyAgICByZXR1cm4gZXF1YWwobV9wcml2YXRl
LCBzLm1fcHJpdmF0ZSk7Cit9CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3Ry
aW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihz
LmltcGwoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZWYo
KTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmlu
ZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1w
bCgpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6
U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCitXZWJTdHJpbmc6
OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZSgw
KQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6
Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKK3sKKyAgICBhc3NpZ24ocy5z
dHJpbmcoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJTdHJpbmc6Om9wZXJhdG9yIFdU
Rjo6QXRvbWljU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmco
c3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdl
YlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqIHApCit7CisgICAgLy8gVGFrZSBjYXJl
IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAorICAgIGlmIChwKQorICAg
ICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRl
cmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggZjY1ZmRjOTI5OGZhZDUxNzI3YjMwZmZkOTVi
MWE0NTNiMzc4YWM1Zi4uZTNmOTc5M2E4NGU5ZDM1ZDRhYmJmZGI3MGJiNzk3NTk0ZTc3NDQyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjgsNiArNjgsNyBAQAogICAgICAgICAg
ICAgJ21zdnNfZ3VpZCc6ICc1RUNFQzlFNS04RjIzLTQ3QjYtOTNFMC1DM0IzMjhCM0JFNjUnLAog
ICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAnLi4vLi4vV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDp3ZWJjb3JlJywKKyAgICAgICAgICAgICAgICAn
Li4vLi4vUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDpwbGF0Zm9ybScsICMgYWN0
dWFsbHkgV2ViQ29yZSBzaG91bGQgZGVwZW5kIG9uIHRoaXMKICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lwOnNraWEnLAogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKICAgICAg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5n
eXA6bnBhcGknLApAQCAtMjgwLDcgKzI4MSw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJBdWRpb0RldmljZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRm
b3JtL1dlYkJsb2JEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2Vi
QmxvYlJlZ2lzdHJ5LmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQ1N0
cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkNhbnZhcy5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkNsaXBib2FyZC5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYkNvbG9yLmgnLApAQCAtNDkwLDcgKzQ5MCw2
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAotICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ3Vy
c29ySW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnQuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXIuY3BwJywKQEAgLTY0Myw3ICs2
NDIsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwuaCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJbXBsLmgnLAot
ICAgICAgICAgICAgICAgICdzcmMvV2ViU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUaHJlYWRTYWZlRGF0
YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJMLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgKaW5kZXggZmY0
YmUyNDQ4YzViNDZiMTNmOWYxMjZlNGRiODAzZDJkY2U5OGUwOC4uZWM5NGFiNzdlNmFlNGRlNzA0
M2JlYWQ3NjVlMWYxZDkzOGVjODY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaApAQCAtMjgsMTAwICsyOCw1IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ1N0cmluZ19oCi0jZGVmaW5lIFdlYkNTdHJp
bmdfaAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3JtL1dl
YkNTdHJpbmcuaCIKIAotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi0jaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3Ry
aW5nPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgQ1N0cmluZzsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkNTdHJpbmdQcml2YXRlOwotY2xhc3MgV2ViU3Ry
aW5nOwotCi0vLyBBIHNpbmdsZS1ieXRlIHN0cmluZyBjb250YWluZXIgd2l0aCB1bnNwZWNpZmll
ZCBlbmNvZGluZy4gIEl0IGlzCi0vLyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViQ1N0cmluZyBv
YmplY3QuCi0vLwotLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYkNTdHJp
bmcgYWNyb3NzIHRocmVhZHMhISEKLS8vCi1jbGFzcyBXZWJDU3RyaW5nIHsKLXB1YmxpYzoKLSAg
ICB+V2ViQ1N0cmluZygpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViQ1N0cmluZygpIDogbV9wcml2
YXRlKDApIHsgfQotCi0gICAgV2ViQ1N0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
KSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKGRhdGEsIGxlbik7Ci0gICAg
fQotCi0gICAgV2ViQ1N0cmluZyhjb25zdCBXZWJDU3RyaW5nJiBzKSA6IG1fcHJpdmF0ZSgwKSB7
IGFzc2lnbihzKTsgfQotCi0gICAgV2ViQ1N0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdlYkNTdHJp
bmcmIHMpCi0gICAgewotICAgICAgICBhc3NpZ24ocyk7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYgYm90aCBzdHJpbmdzIGFyZSBlcXVhbHMsIGEg
dmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlCi0gICAgLy8gZmlyc3QgY2hhcmFjdGVyIHRo
YXQgZG9lcyBub3QgbWF0Y2ggaGFzIGEgZ3JlYXRlciB2YWx1ZSBpbiB0aGlzIHN0cmluZwotICAg
IC8vIHRoYW4gaW4gfG90aGVyfCwgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gemVybyB0byBpbmRpY2F0
ZSB0aGUgb3Bwb3NpdGUuCi0gICAgV0VCS0lUX0VYUE9SVCBpbnQgY29tcGFyZShjb25zdCBXZWJD
U3RyaW5nJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsK
LSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkNTdHJpbmcmKTsKLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOwot
Ci0gICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VY
UE9SVCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ByaXZhdGU7IH0KLQotICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIHV0ZjE2KCkgY29u
c3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdU
Rjo6Q1N0cmluZyYpOwotICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJp
bmcmKTsKLSAgICBvcGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0gICAgV2Vi
Q1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAg
ICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgV2ViQ1N0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgYXNzaWdu
KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCBs
ZW4gPSBsZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRhdGEoKSwg
bGVuKSA6IHN0ZDo6c3RyaW5nKCk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBhc3NpZ24oV2ViQ1N0cmluZ1ByaXZhdGUqKTsKLSAgICBXZWJDU3RyaW5nUHJpdmF0ZSogbV9w
cml2YXRlOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFdlYkNTdHJpbmcmIGEs
IGNvbnN0IFdlYkNTdHJpbmcmIGIpCi17Ci0gICAgcmV0dXJuIGEuY29tcGFyZShiKSA8IDA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29tbW9uLmgKaW5kZXggYzYzNGYwYzM4ZjQx
OGQwMjg1ODBjODM2NTNhMWFmMWUxNzM5YWUxOC4uZTRhYzc5MjA2OGI2NmMwN2YzZjIzYWMxNzk1
NzdlYWQzYjY5OWE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViQ29tbW9uLmgKQEAgLTI4LDk2ICsyOCw0IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgV2ViQ29tbW9uX2gKLSNkZWZpbmUgV2ViQ29tbW9uX2gKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlZmF1bHQgY29uZmlndXJhdGlvbgotCi0jaWYgIWRlZmlu
ZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9OKQotICAgICNkZWZpbmUgV0VCS0lUX0lNUExFTUVOVEFU
SU9OIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX1NLSUEpCi0gICAgI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChVU0VfU0tJQSkKLSAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfVVNJTkdfU0tJQSAxCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBXRUJLSVRf
VVNJTkdfU0tJQSAwCi0gICAgI2VuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9V
U0lOR19DRykKLSAgICAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFXRUJLSVRfVVNJTkdfU0tJ
QQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19DRyAxCi0gICAgI2Vsc2UKLSAgICAgICAg
I2RlZmluZSBXRUJLSVRfVVNJTkdfQ0cgMAotICAgICNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVm
aW5lZChXRUJLSVRfVVNJTkdfVjgpCi0gICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfVjggMQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfSlNDKQotICAgICNkZWZpbmUgV0VCS0lU
X1VTSU5HX0pTQyAwCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEV4cG9y
dGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRfRVhQT1JUCi0KLSNp
ZiBkZWZpbmVkKFdFQktJVF9ETEwpCi0gICAgI2lmIGRlZmluZWQoV0lOMzIpCi0gICAgICAgICNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICAgICAgICAgICNkZWZpbmUgV0VCS0lUX0VYUE9S
VCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgICNkZWZp
bmUgV0VCS0lUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSAgICAgICAgI2VuZGlmCi0g
ICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkoImRlZmF1bHQiKSkpCi0gICAgI2VuZGlmCi0jZWxzZQotICAgICNkZWZpbmUgV0VC
S0lUX0VYUE9SVAotI2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBCYXNpYyB0
eXBlcwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKLQotI2lmIGRlZmluZWQo
V0lOMzIpCi0vLyBWaXN1YWwgU3R1ZGlvIGRvZXNuJ3QgaGF2ZSBzdGRpbnQuaC4KLXR5cGVkZWYg
c2hvcnQgaW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Ci10eXBlZGVm
IGludCBpbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFVURi0xNiBjaGFyYWN0ZXIgdHlwZQotI2lmIGRlZmlu
ZWQoV0lOMzIpCi10eXBlZGVmIHdjaGFyX3QgV2ViVUNoYXI7Ci0jZWxzZQotdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBXZWJVQ2hhcjsKLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gQXNzZXJ0aW9ucwotCi1XRUJLSVRfRVhQT1JUIHZvaWQgZmFpbGVkQXNzZXJ0aW9uKGNvbnN0
IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciog
YXNzZXJ0aW9uKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLS8vIElkZWFsbHksIG9ubHkg
dXNlIGluc2lkZSB0aGUgcHVibGljIGRpcmVjdG9yeSBidXQgb3V0c2lkZSBvZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04gYmxvY2tzLiAgKE90aGVyd2lzZSB1c2UgV1RGJ3MgQVNTRVJULikKLSNpZiBk
ZWZpbmVkKE5ERUJVRykKLSNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24pICgodm9pZCkw
KQotI2Vsc2UKLSNkZWZpbmUgV0VCS0lUX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAotICAgIGlm
ICghKGFzc2VydGlvbikpIFwKLSAgICAgICAgZmFpbGVkQXNzZXJ0aW9uKF9fRklMRV9fLCBfX0xJ
TkVfXywgX19GVU5DVElPTl9fLCAjYXNzZXJ0aW9uKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgot
Ci0jZGVmaW5lIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKSBXRUJLSVRfQVNTRVJUKDApCi0K
LSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3BsYXRmb3Jt
L1dlYkNvbW1vbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaAppbmRleCBjNDQ2ZTVlNDZlZjYxYTExNGRiZmY2
MTZiZTMxNGI0MGUyNjkwYWZmLi4xNmFjYjYwYjkxYmE4NjQ0OGEzNTRjN2QwNDg2ZGFmYmIzODFi
OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJNaW1lUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaApAQCAtMSw2MiArMSwyOSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgV2ViTWltZVJlZ2lzdHJ5X2gKLSNkZWZpbmUgV2ViTWltZVJlZ2lz
dHJ5X2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViU3RyaW5nOwotCi1jbGFzcyBXZWJNaW1lUmVnaXN0cnkgewotcHVibGljOgotICAg
IGVudW0gU3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1
cHBvcnRlZCB9OwotCi0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNNSU1FVHlwZShj
b25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUg
c3VwcG9ydHNJbWFnZU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLSAg
ICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0phdmFTY3JpcHRNSU1FVHlwZShjb25zdCBX
ZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9y
dHNNZWRpYU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgY29kZWNz
KSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNOb25JbWFnZU1JTUVUeXBl
KGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViU3RyaW5n
IG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikgPSAw
OwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHdlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNv
bnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5n
IG1pbWVUeXBlRnJvbUZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkgPSAwOwotICAgIHZp
cnR1YWwgV2ViU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFdlYlN0
cmluZyYgbWltZVR5cGUpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIH5XZWJNaW1lUmVnaXN0cnko
KSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKy8vIFRoaXMgaXMg
YSB0ZW1wb3JhcnkgZm9yd2FyZGluZyBoZWFkZXIgdG8gZWFzZSB0aGUgUGxhdGZvcm0gdHJhbnNp
dGlvbiBmb3IgZG93bnN0cmVhbSB1c2VycyBvZiB0aGUgV2ViS2l0IEFQSS4KKy8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1ODMKKy8vIEZJWE1FOiBSZW1v
dmUgYXMgc29vbiBhcyBkb3duc3RyZWFtIGNsaWVudHMgYXJlIHVwZGF0ZWQuCisjaW5jbHVkZSAi
Li4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5Lmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJT
dHJpbmcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmlu
Zy5oCmluZGV4IGMzMzZkZDExM2RjZDYxYWVmYWU1MmE5ODA4YjZjNTcyNzVmM2I5ZGYuLjg2Y2Ez
YTBhMDc1YTRjMDUwZmVmODY3NmJiNzkwZTJjNjllYTFmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oCkBAIC0yOCwxNTAgKzI4
LDUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJTdHJpbmdfaAotI2RlZmlu
ZSBXZWJTdHJpbmdfaAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3Bs
YXRmb3JtL1dlYlN0cmluZy5oIgogCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxiYXNlL251bGxhYmxlX3N0cmluZzE2Lmg+Ci0jaW5jbHVkZSA8YmFzZS9zdHJpbmcxNi5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDU3RyaW5nOwotY2xh
c3MgV2ViU3RyaW5nUHJpdmF0ZTsKLQotLy8gQSBVVEYtMTYgc3RyaW5nIGNvbnRhaW5lci4gIEl0
IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJTdHJpbmcKLS8vIG9iamVjdC4KLS8vCi0vLyBX
QVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViU3RyaW5nIGFjcm9zcyB0aHJlYWRz
ISEhCi0vLwotY2xhc3MgV2ViU3RyaW5nIHsKLXB1YmxpYzoKLSAgICB+V2ViU3RyaW5nKCkgeyBy
ZXNldCgpOyB9Ci0KLSAgICBXZWJTdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KLQotICAgIFdl
YlN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkK
LSAgICB7Ci0gICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOwotICAgIH0KLQotICAgIFdlYlN0cmlu
Zyhjb25zdCBXZWJTdHJpbmcmIHMpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKHMpOyB9Ci0KLSAg
ICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJTdHJpbmcmIHMpCi0gICAgewotICAgICAg
ICBhc3NpZ24ocyk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0
IFdlYlN0cmluZyYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViVUNo
YXIqIGRhdGEsIHNpemVfdCBsZW4pOwotCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhj
b25zdCBXZWJTdHJpbmcmIHMpIGNvbnN0OwotCi0gICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgbGVu
Z3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCBjb25zdCBXZWJVQ2hhciogZGF0YSgpIGNv
bnN0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9Ci0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9Ci0KLSAgICBXRUJL
SVRfRVhQT1JUIFdlYkNTdHJpbmcgdXRmOCgpIGNvbnN0OwotCi0gICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgp
OwotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFy
KiBkYXRhKTsKLQotICAgIHRlbXBsYXRlIDxpbnQgTj4gV2ViU3RyaW5nKGNvbnN0IGNoYXIgKCZk
YXRhKVtOXSkKLSAgICAgICAgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihm
cm9tVVRGOChkYXRhLCBOIC0gMSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxpbnQgTj4gV2Vi
U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEpW05dKQotICAgIHsKLSAgICAgICAg
YXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJTdHJpbmcoY29uc3QgV1RG
OjpTdHJpbmcmKTsKLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYp
OwotICAgIG9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3Q7Ci0KLSAgICBXZWJTdHJpbmcoY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBX
VEY6OkF0b21pY1N0cmluZyYpOwotICAgIG9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29u
c3Q7Ci0jZWxzZQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IHN0cmluZzE2JiBzKSA6IG1fcHJpdmF0
ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICB9
Ci0KLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBzdHJpbmcxNiYgcykKLSAgICB7Ci0g
ICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBzdHJpbmcxNigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgICAgIHJldHVybiBsZW4gPyBzdHJpbmcxNihk
YXRhKCksIGxlbikgOiBzdHJpbmcxNigpOwotICAgIH0KLQotICAgIFdlYlN0cmluZyhjb25zdCBO
dWxsYWJsZVN0cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgaWYgKHMu
aXNfbnVsbCgpKQotICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYXNzaWduKHMuc3RyaW5nKCkuZGF0YSgpLCBzLnN0cmluZygpLmxlbmd0aCgpKTsKLSAgICB9
Ci0KLSAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBOdWxsYWJsZVN0cmluZzE2JiBzKQot
ICAgIHsKLSAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQotICAgICAgICAgICAgcmVzZXQoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYXNzaWduKHMuc3RyaW5nKCkuZGF0YSgpLCBzLnN0cmlu
ZygpLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJh
dG9yIE51bGxhYmxlU3RyaW5nMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3ByaXZh
dGUpCi0gICAgICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJpbmcxNihzdHJpbmcxNigpLCB0cnVl
KTsKLSAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwotICAgICAgICByZXR1cm4gTnVsbGFi
bGVTdHJpbmcxNihsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxlbikgOiBzdHJpbmcxNigpLCBmYWxz
ZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFVURjhTdHJpbmc+Ci0gICAgc3RhdGlj
IFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBVVEY4U3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZyb21VVEY4KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICB9Ci0jZW5kaWYKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGFzc2lnbihXZWJTdHJpbmdQcml2YXRlKik7Ci0gICAgV2ViU3Ry
aW5nUHJpdmF0ZSogbV9wcml2YXRlOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikKLXsKLSAgICByZXR1cm4gYS5lcXVh
bHMoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViU3RyaW5nJiBhLCBj
b25zdCBXZWJTdHJpbmcmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
U3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlYjljNjg1MzU5MzFk
MmFjZTU4ZjZlODEzNmQ1ZTc1OTJkOWY1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYkNTdHJpbmcuaCIKLQotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0
cmluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYkNTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6Q1N0cmluZ0J1ZmZl
ciB7Ci19OwotCi1pbnQgV2ViQ1N0cmluZzo6Y29tcGFyZShjb25zdCBXZWJDU3RyaW5nJiBvdGhl
cikgY29uc3QKLXsKLSAgICAvLyBBIG51bGwgc3RyaW5nIGlzIGFsd2F5cyBsZXNzIHRoYW4gYSBu
b24gbnVsbCBvbmUuCi0gICAgaWYgKGlzTnVsbCgpICE9IG90aGVyLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gaXNOdWxsKCkgPyAtMSA6IDE7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiAwOyAvLyBCb3RoIFdlYlN0cmluZ3MgYXJlIG51bGwuCi0KLSAgICByZXR1cm4gc3Ry
Y21wKG1fcHJpdmF0ZS0+ZGF0YSgpLCBvdGhlci5tX3ByaXZhdGUtPmRhdGEoKSk7Ci19Ci0KLXZv
aWQgV2ViQ1N0cmluZzo6cmVzZXQoKQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAgICAg
bV9wcml2YXRlLT5kZXJlZigpOwotICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0KLQot
dm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYgb3RoZXIpCi17Ci0gICAg
YXNzaWduKGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsK
LX0KLQotdm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKLXsKLSAgICBjaGFyKiBuZXdEYXRhOwotICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZm
ZXI+IGJ1ZmZlciA9Ci0gICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5n
dGgsIG5ld0RhdGEpLmJ1ZmZlcigpOwotICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgp
OwotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQo
KSkpOwotfQotCi1zaXplX3QgV2ViQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gTk9URTogVGhlIGJ1ZmZlcidz
IGxlbmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgotICAgIHJldHVybiBjb25zdF9jYXN0PFdl
YkNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOwotfQotCi1jb25zdCBj
aGFyKiBXZWJDU3RyaW5nOjpkYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUq
PihtX3ByaXZhdGUpLT5kYXRhKCk7Ci19Ci0KLVdlYlN0cmluZyBXZWJDU3RyaW5nOjp1dGYxNigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgoZGF0YSgpLCBsZW5ndGgo
KSk7Ci19Ci0KLVdlYkNTdHJpbmc6OldlYkNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJiBzKQot
ICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIo
KSkpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0K
LQotV2ViQ1N0cmluZyYgV2ViQ1N0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYg
cykKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihzLmJ1ZmZl
cigpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJDU3RyaW5nOjpvcGVyYXRvciBXVEY6
OkNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2Vi
Q1N0cmluZzo6YXNzaWduKFdlYkNTdHJpbmdQcml2YXRlKiBwKQotewotICAgIC8vIFRha2UgY2Fy
ZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRlID09IHAKLSAgICBpZiAocCkKLSAg
ICAgICAgcC0+cmVmKCk7Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9IHA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc5MjliZDUwY2MyZWZlMTNhNTUwMGM3MTk3NzRmMjI4ZGU0MDIxMjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgot
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5n
UHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0ltcGwgewotfTsKLQotdm9pZCBXZWJTdHJpbmc6
OnJlc2V0KCkKLXsKLSAgICBpZiAobV9wcml2YXRlKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZGVy
ZWYoKTsKLSAgICAgICAgbV9wcml2YXRlID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViU3RyaW5n
Ojphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhlcikKLXsKLSAgICBhc3NpZ24oY29uc3RfY2Fz
dDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQgV2ViU3Ry
aW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPigKLSAgICAgICAgV1RGOjpTdHJp
bmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkpOwotfQotCi1zaXplX3QgV2ViU3Ry
aW5nOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0
PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSA6IDA7Ci19Ci0KLWNvbnN0
IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZh
dGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5jaGFyYWN0ZXJz
KCkgOiAwOwotfQotCi1XZWJDU3RyaW5nIFdlYlN0cmluZzo6dXRmOCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSkudXRmOCgpOwotfQotCi1XZWJTdHJpbmcgV2Vi
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAg
IHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKLX0KLQotV2ViU3Ry
aW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkKLXsKLSAgICByZXR1cm4g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwotfQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWxz
KGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKLXsKLSAgICByZXR1cm4gZXF1YWwobV9wcml2YXRl
LCBzLm1fcHJpdmF0ZSk7Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6U3Ry
aW5nJiBzKQotICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihz
LmltcGwoKSkpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYo
KTsKLX0KLQotV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmlu
ZyYgcykKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KHMuaW1w
bCgpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6
U3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi1XZWJTdHJpbmc6
OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLSAgICA6IG1fcHJpdmF0ZSgw
KQotewotICAgIGFzc2lnbihzLnN0cmluZygpKTsKLX0KLQotV2ViU3RyaW5nJiBXZWJTdHJpbmc6
Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLXsKLSAgICBhc3NpZ24ocy5z
dHJpbmcoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJTdHJpbmc6Om9wZXJhdG9yIFdU
Rjo6QXRvbWljU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpBdG9taWNTdHJpbmco
c3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkpOwotfQotCi12b2lkIFdl
YlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqIHApCi17Ci0gICAgLy8gVGFrZSBjYXJl
IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAotICAgIGlmIChwKQotICAg
ICAgICBwLT5yZWYoKTsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRl
cmVmKCk7Ci0gICAgbV9wcml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWEzMjIy
OTRjZTgzYzY1ODZkZWQ5N2FkNDQ0NmY5YTI0MjhmMDRjYS4uNjBlYjEyYjdmMWU1NThiMjQ0ZDNm
MmNjODA5NDY1NjRmZjJlMWQzYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTE2ICBKYW1lcyBSb2JpbnNv
biAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIFdlYk1p
bWVSZWdpc3RyeSBhbmQgZGVwZW5kZW5jaWVzIHRvIFNvdXJjZS9QbGF0Zm9ybQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1ODMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaGVzIHRoZSBXRUJLSVRf
RVhQT1JUIGNoZWNrIGFib3V0IHRoZSBjaHJvbWl1bSBXZWJLaXQgcGxhdGZvcm0gQVBJIGhlYWRl
ciBsb2NhdGlvbi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMv
Y3BwLnB5OgorICAgICAgICAoY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbik6CisKIDIwMTEtMTIt
MTYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB3ZWJraXQt
YnVnLWltcG9ydGVyQGdyb3VwLmFwcGxlLmNvbSB0byBhY2NvdW50cwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCBmNzlhOTI2NmE3MDJmNDZmMTE3
ZDUxMTEwYjMyZGUxNmQ0MTk3YWE4Li41NzkyZjI1Y2Q0YmZlZjc4YzY1MGIzM2FhYzRiZmU0ZWIz
YWVlMWUzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJz
L2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5w
eQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAgZGVmIGNoZWNrX2Z1bmN0aW9uX2RlZmluaXRpb24oZmls
ZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIKIAogICAgIG1v
ZGlmaWVyc19hbmRfcmV0dXJuX3R5cGUgPSBmdW5jdGlvbl9zdGF0ZS5tb2RpZmllcnNfYW5kX3Jl
dHVybl90eXBlKCkKICAgICBpZiBmaWxlbmFtZS5maW5kKCcvY2hyb21pdW0vJykgIT0gLTEgYW5k
IHNlYXJjaChyJ1xiV0VCS0lUX0VYUE9SVFxiJywgbW9kaWZpZXJzX2FuZF9yZXR1cm5fdHlwZSk6
Ci0gICAgICAgIGlmIGZpbGVuYW1lLmZpbmQoJy9jaHJvbWl1bS9wdWJsaWMvJykgPT0gLTEgYW5k
IGZpbGVuYW1lLmZpbmQoJy9jaHJvbWl1bS90ZXN0cy8nKSA9PSAtMToKKyAgICAgICAgaWYgZmls
ZW5hbWUuZmluZCgnL2Nocm9taXVtL3B1YmxpYy8nKSA9PSAtMSBhbmQgZmlsZW5hbWUuZmluZCgn
L2Nocm9taXVtL3Rlc3RzLycpID09IC0xIGFuZCBmaWxlbmFtZS5maW5kKCdjaHJvbWl1bS9wbGF0
Zm9ybScpID09IC0xOgogICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb25fc3RhdGUuZnVuY3Rpb25f
bmFtZV9zdGFydF9wb3NpdGlvbi5yb3csICdyZWFkYWJpbGl0eS93ZWJraXRfZXhwb3J0JywgNSwK
ICAgICAgICAgICAgICAgICAgICdXRUJLSVRfRVhQT1JUIHNob3VsZCBvbmx5IGFwcGVhciBpbiB0
aGUgY2hyb21pdW0gcHVibGljIChvciB0ZXN0cykgZGlyZWN0b3J5LicpCiAgICAgICAgIGVsaWYg
bm90IGZpbGVfZXh0ZW5zaW9uID09ICJoIjoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0
aWdub3JlCmluZGV4IDI2NzZkMjNmOTgzOGJmZmY4YmYzNjc4N2Y5Y2IwZDEzYTYyZGMyYTEuLjY4
YmE3OTMyNTNiNWYxMzJmOWNjNmZkNTEwNmIxYjBmYzg4OTVlNjIgMTAwNjQ0Ci0tLSBhLy5naXRp
Z25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNTQsNiArNTQsMTAgQEAgU291cmNlL1dlYktpdC9j
aHJvbWl1bS8qLnZjcHJvaioKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLnhjb2RlcHJvagog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQueGNvZGVwcm9qCiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdFVuaXRUZXN0cy54Y29kZXByb2oKK1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9y
bS5neXAvKi5NYWtlZmlsZQorU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC8qLm1rCitTb3Vy
Y2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwLyouc2xuCitTb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0u
Z3lwLyoudmNwcm9qKgogVG9vbHMvVG9vbHMueGNvZGVwcm9qCiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qCiAKZGlmZiAtLWdp
dCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyMDkzNmU4OWM4NTczYjk5NTZjZDU5MDAy
MWY0MGIzYmQwOWZhZGQ0Li4xMzliYTVhOTM4OWJhNzY2MDZmOGMwNzU4NTM5MjZmZDA3YjI1ZTVi
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMTItMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIE1vdmUgV2ViTWltZVJlZ2lzdHJ5IGFuZCBkZXBlbmRlbmNpZXMgdG8g
U291cmNlL1BsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NDU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGF0ZSAuZ2l0aWdub3JlIGZvciBTb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lw
LyBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlcy4KKworICAgICAgICAqIC5naXRpZ25vcmU6CisKIDIw
MTEtMTItMTYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEZS12aXJ0dWFsaXplIGRlc3RydWN0b3JzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121009</attachid>
            <date>2012-01-03 15:51:50 -0800</date>
            <delta_ts>2012-01-04 10:59:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74583-20120103155149.patch</filename>
            <type>text/plain</type>
            <size>62062</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhN2MwZmMzZmYyNDEw
YjBjNDBmMGEwMGE2NWIzMjljOTgzZjI1ZWIyLi5mZTJjNGM0MzQ0MWQyZmY5YWQ5MGNkOGIwM2Uy
NjczZjkyMDc4ODIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMi0wMS0wMyAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5kIGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
cmVhdGVzIGEgc2tlbGV0b24gZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIGNocm9taXVtIFdl
YktpdCBwbGF0Zm9ybSBBUEkgYW5kIG1vdmVzIFdlYk1pbWVSZWdpc3RyeS5oCisgICAgICAgIGFs
b25nIHdpdGggaXRzIGRlcGVuZGVuY2llcyAoV2ViU3RyaW5nIGFuZCBXZWJDU3RyaW5nKSB0byB0
aGVpciBmaW5hbCBsb2NhdGlvbi4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cC9QbGF0Zm9ybS5n
eXA6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtLmd5cGk6IEFkZGVkLgorICAgICAgICAqIGNo
cm9taXVtL3BsYXRmb3JtL1dlYkNTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ1N0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDU3RyaW5nOjp+V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Oldl
YkNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q1N0cmluZzo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6b3BlcmF0b3Ig
c3RkOjpzdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJDU3RyaW5nOjpmcm9tVVRGMTYpOgor
ICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcjwpOgorICAgICAgICAqIGNocm9taXVtL3BsYXRmb3Jt
L1dlYkNvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJDb21tb24uaC4KKyAgICAgICAgKiBjaHJvbWl1bS9wbGF0Zm9ybS9XZWJNaW1l
UmVnaXN0cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmguCisgICAgICAgIChXZWJLaXQ6OldlYk1pbWVSZWdpc3Ry
eTo6fldlYk1pbWVSZWdpc3RyeSk6CisgICAgICAgICogY2hyb21pdW0vcGxhdGZvcm0vV2ViU3Ry
aW5nLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYlN0cmluZy5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIHN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpvcGVyYXRvciBOdWxsYWJsZVN0cmluZzE2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViQ1N0cmlu
Zy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5n
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6Y29tcGFyZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
OnV0ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJh
dG9yIFdURjo6Q1N0cmluZyk6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwLgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RyaW5nOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6dXRmOCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0
cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXVEY6OkF0b21pY1N0cmluZyk6CisK
IDIwMTEtMTEtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBB
ZGQgc3R1YnMgZm9yIFdURiBhbmQgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggNTgyOTFmMWM3ZWUxYzhhNjNjNjM3MGI2ZWE4MzUzMjc5ODRhYzVmZi4uOTJmMTYyYjQ2MTE3
NWIzMzJmNzZhOTZkNmEwNDRlOTgzYWUxMmU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMS0wMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBXZWJNaW1lUmVnaXN0cnkgYW5k
IGRlcGVuZGVuY2llcyB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgcHVibGljL3BsYXRmb3JtL1dlYk1pbWVSZWdpc3RyeS5o
IGlzIGEgdGVtcG9yYXJ5IGZvcndhcmRpbmcgaGVhZGVyIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24u
IE9uY2UgZG93bnN0cmVhbQorICAgICAgICBjYWxsZXJzIGFyZSB1cGRhdGVkIHRvIHRoZSBuZXcg
bG9jYXRpb24gdGhpcyBoZWFkZXIgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgV2ViU3RyaW5n
LCBXZWJDU3RyaW5nLCBhbmQgV2ViQ29tbW9uLmggd2lsbCByZW1haW4gaW4gcGxhY2UgYXMgZm9y
d2FyZGluZyBoZWFkZXJzIGZvciB1c2VycyBvZiB0aGUgV2ViS2l0IGNsaWVudAorICAgICAgICBB
UEkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9X
ZWJDU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkNvbW1vbi5oOgorICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwdWJs
aWMvcGxhdGZvcm0vV2ViU3RyaW5nLmg6CisKIDIwMTItMDEtMDMgIEFkcmllbm5lIFdhbGtlciAg
PGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFN1cHBvcnQgUlRMIHBhZ2Vz
IGFuZCBlbGVtZW50cyBpbiB0aGUgY29tcG9zaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0u
Z3lwL1BsYXRmb3JtLmd5cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjU0OTE5ZjE1NWYyZGZmOTk1YWUzMDkyYWUy
NzQ4MDRiZjFkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3Jt
Lmd5cC9QbGF0Zm9ybS5neXAKQEAgLTAsMCArMSw3MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisjCisKK3sKKyAgICAnaW5jbHVkZXMnOiBbCisgICAgICAgICcuLi9QbGF0Zm9y
bS5neXBpJywKKyAgICBdLAorICAgICd0YXJnZXRzJzogWworICAgICAgICB7CisgICAgICAgICAg
ICAndGFyZ2V0X25hbWUnOiAncGxhdGZvcm0nLAorICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGlj
X2xpYnJhcnknLAorICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAg
ICAnLi4vLi4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwL0phdmFTY3JpcHRDb3Jl
Lmd5cDp3dGYnLAorICAgICAgICAgICAgICAgICcuLi8uLi9XVEYvV1RGLmd5cC9XVEYuZ3lwOm5l
d3d0ZicsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAg
ICAgICAgICAgICAgICAnLi4vY2hyb21pdW0nLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICdkZWZpbmVzJzogWworICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScs
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAg
ICAgJzxAKHBsYXRmb3JtX2ZpbGVzKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgJ2Rp
cmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CisgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGly
cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgJy4uL2Nocm9taXVtJywKKyAgICAgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAg
ICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVtX2J1aWxkPT0xJywgeworICAgICAgICAgICAgICAg
ICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnY29tcG9uZW50
PT0ic2hhcmVkX2xpYnJhcnkiJywgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZp
bmVzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCS0lUX0RMTCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH1d
LAorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwaSBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE3ZTUwYWRjMTI1YmRiMDU5YmU5YjVhMGNkY2NjMGJmOWYzNGFkZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtMCwwICsxLDQyIEBACisjCisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworeworICAgICd2YXJpYWJsZXMnOiB7Cisg
ICAgICAgICdwbGF0Zm9ybV9maWxlcyc6IFsKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMv
V2ViQ1N0cmluZy5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oJywKKyAgICAgICAgICAgICdjaHJv
bWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJT
dHJpbmcuY3BwJywKKyAgICAgICAgXQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ1N0cmluZy5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJDU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhMGU4MjNjNDg0ZDYxMGI5OWY1
YTYzMWIzMDMwMjY0OGFjMzQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQ1N0cmluZy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJD
U3RyaW5nX2gKKyNkZWZpbmUgV2ViQ1N0cmluZ19oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIK
KworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPHN0cmluZz4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNz
IENTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nUHJp
dmF0ZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLy8gQSBzaW5nbGUtYnl0ZSBzdHJpbmcgY29udGFp
bmVyIHdpdGggdW5zcGVjaWZpZWQgZW5jb2RpbmcuICBJdCBpcworLy8gaW5leHBlbnNpdmUgdG8g
Y29weSBhIFdlYkNTdHJpbmcgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZl
IHRvIHBhc3MgYSBXZWJDU3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViQ1N0
cmluZyB7CitwdWJsaWM6CisgICAgfldlYkNTdHJpbmcoKSB7IHJlc2V0KCk7IH0KKworICAgIFdl
YkNTdHJpbmcoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkNTdHJpbmcoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2ln
bihkYXRhLCBsZW4pOworICAgIH0KKworICAgIFdlYkNTdHJpbmcoY29uc3QgV2ViQ1N0cmluZyYg
cykgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocyk7IH0KKworICAgIFdlYkNTdHJpbmcmIG9wZXJh
dG9yPShjb25zdCBXZWJDU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgLy8gUmV0dXJucyAwIGlmIGJvdGggc3Ry
aW5ncyBhcmUgZXF1YWxzLCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZQorICAgIC8v
IGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IG1hdGNoIGhhcyBhIGdyZWF0ZXIgdmFsdWUg
aW4gdGhpcyBzdHJpbmcKKyAgICAvLyB0aGFuIGluIHxvdGhlcnwsIG9yIGEgdmFsdWUgbGVzcyB0
aGFuIHplcm8gdG8gaW5kaWNhdGUgdGhlIG9wcG9zaXRlLgorICAgIFdFQktJVF9FWFBPUlQgaW50
IGNvbXBhcmUoY29uc3QgV2ViQ1N0cmluZyYgb3RoZXIpIGNvbnN0OworCisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBX
ZWJDU3RyaW5nJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuKTsKKworICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0OworICAgIFdFQktJVF9FWFBPUlQgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIFdl
YlN0cmluZyB1dGYxNigpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
V2ViQ1N0cmluZyhjb25zdCBXVEY6OkNTdHJpbmcmKTsKKyAgICBXZWJDU3RyaW5nJiBvcGVyYXRv
cj0oY29uc3QgV1RGOjpDU3RyaW5nJik7CisgICAgb3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29u
c3Q7CisjZWxzZQorICAgIFdlYkNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIDogbV9wcml2
YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOworICAg
IH0KKworICAgIFdlYkNTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBzdGQ6OnN0cmluZyYgcykKKyAg
ICB7CisgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0CisgICAg
eworICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBsZW4gPyBz
dGQ6OnN0cmluZyhkYXRhKCksIGxlbikgOiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDxjbGFzcyBVVEYxNlN0cmluZz4KKyAgICBzdGF0aWMgV2ViQ1N0cmluZyBmcm9tVVRG
MTYoY29uc3QgVVRGMTZTdHJpbmcmIHMpCisgICAgeworICAgICAgICByZXR1cm4gZnJvbVVURjE2
KHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2
b2lkIGFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSopOworICAgIFdlYkNTdHJpbmdQcml2YXRlKiBt
X3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViQ1N0cmluZyYg
YSwgY29uc3QgV2ViQ1N0cmluZyYgYikKK3sKKyAgICByZXR1cm4gYS5jb21wYXJlKGIpIDwgMDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzYzNGYwYzM4ZjQxOGQwMjg1
ODBjODM2NTNhMWFmMWUxNzM5YWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkNvbW1vbl9oCisjZGVmaW5lIFdlYkNvbW1vbl9oCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24KKworI2lmICFkZWZpbmVkKFdFQktJVF9JTVBMRU1F
TlRBVElPTikKKyAgICAjZGVmaW5lIFdFQktJVF9JTVBMRU1FTlRBVElPTiAwCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19TS0lBKQorICAgICNpZiAhZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoVVNFX1NLSUEpCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1NL
SUEgMQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1NLSUEgMAorICAg
ICNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXRUJLSVRfVVNJTkdfQ0cpCisgICAgI2lm
IGRlZmluZWQoX19BUFBMRV9fKSAmJiAhV0VCS0lUX1VTSU5HX1NLSUEKKyAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfVVNJTkdfQ0cgMQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgV0VCS0lUX1VT
SU5HX0NHIDAKKyAgICAjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0VCS0lUX1VTSU5H
X1Y4KQorICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX1Y4IDEKKyNlbmRpZgorCisjaWYgIWRlZmlu
ZWQoV0VCS0lUX1VTSU5HX0pTQykKKyAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19KU0MgMAorI2Vu
ZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeHBvcnRlZCBzeW1ib2xzIG5lZWQg
dG8gYmUgYW5ub3RhdGVkIHdpdGggV0VCS0lUX0VYUE9SVAorCisjaWYgZGVmaW5lZChXRUJLSVRf
RExMKQorICAgICNpZiBkZWZpbmVkKFdJTjMyKQorICAgICAgICAjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisgICAgICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxl
eHBvcnQpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQg
X19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgICAgICNlbmRpZgorICAgICNlbHNlCisgICAgICAg
ICNkZWZpbmUgV0VCS0lUX0VYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKQorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjZGVmaW5lIFdFQktJVF9FWFBPUlQKKyNlbmRp
ZgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQmFzaWMgdHlwZXMKKworI2luY2x1ZGUg
PHN0ZGRlZi5oPiAvLyBGb3Igc2l6ZV90CisKKyNpZiBkZWZpbmVkKFdJTjMyKQorLy8gVmlzdWFs
IFN0dWRpbyBkb2Vzbid0IGhhdmUgc3RkaW50LmguCit0eXBlZGVmIHNob3J0IGludDE2X3Q7Cit0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OwordHlwZWRlZiBpbnQgaW50MzJfdDsKK3R5
cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBVVEYtMTYgY2hhcmFjdGVyIHR5cGUKKyNpZiBkZWZpbmVkKFdJTjMyKQordHlwZWRl
ZiB3Y2hhcl90IFdlYlVDaGFyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNo
YXI7CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbnMKKwor
V0VCS0lUX0VYUE9SVCB2b2lkIGZhaWxlZEFzc2VydGlvbihjb25zdCBjaGFyKiBmaWxlLCBpbnQg
bGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisvLyBJZGVhbGx5LCBvbmx5IHVzZSBpbnNpZGUgdGhlIHB1
YmxpYyBkaXJlY3RvcnkgYnV0IG91dHNpZGUgb2YgV0VCS0lUX0lNUExFTUVOVEFUSU9OIGJsb2Nr
cy4gIChPdGhlcndpc2UgdXNlIFdURidzIEFTU0VSVC4pCisjaWYgZGVmaW5lZChOREVCVUcpCisj
ZGVmaW5lIFdFQktJVF9BU1NFUlQoYXNzZXJ0aW9uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5l
IFdFQktJVF9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSBc
CisgICAgICAgIGZhaWxlZEFzc2VydGlvbihfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05f
XywgI2Fzc2VydGlvbik7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCkgV0VCS0lUX0FTU0VSVCgwKQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWltZVJlZ2lzdHJ5LmggYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJiZTU3ZTk2YWRjNTRjNjQ2MjcyZjY1YTZlY2MwYzJkMTliZjliNzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1pbWVSZWdpc3RyeS5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
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
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYk1pbWVSZWdpc3RyeV9oCisjZGVmaW5lIFdlYk1p
bWVSZWdpc3RyeV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYk1pbWVSZWdpc3RyeSB7CitwdWJsaWM6
CisgICAgZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0ZWQsIE1h
eUJlU3VwcG9ydGVkIH07CisKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01JTUVU
eXBlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworICAgIHZpcnR1YWwg
U3VwcG9ydHNUeXBlIHN1cHBvcnRzSW1hZ2VNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgbWltZVR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0phdmFT
Y3JpcHRNSU1FVHlwZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKKyAg
ICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c01lZGlhTUlNRVR5cGUoY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIG1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY29kZWNzKSA9IDA7CisgICAg
dmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0
cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmlsZUV4
dGVuc2lvbikgPSAwOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgd2VsbEtub3duTWlt
ZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24p
ID0gMDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5nIG1pbWVUeXBlRnJvbUZpbGUoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZpbGVQYXRoKSA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6
OldlYlN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYgbWltZVR5cGUpID0gMDsKKworcHJvdGVjdGVkOgorICAgIH5XZWJNaW1lUmVnaXN0
cnkoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMzZkZDEx
M2RjZDYxYWVmYWU1MmE5ODA4YjZjNTcyNzVmM2I5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCkBAIC0wLDAgKzEsMTc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTdHJpbmdfaAorI2RlZmluZSBXZWJTdHJpbmdfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxiYXNlL251bGxhYmxlX3N0cmluZzE2Lmg+CisjaW5j
bHVkZSA8YmFzZS9zdHJpbmcxNi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJDU3RyaW5nOworY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZTsKKworLy8gQSBVVEYtMTYg
c3RyaW5nIGNvbnRhaW5lci4gIEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJTdHJpbmcK
Ky8vIG9iamVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2Vi
U3RyaW5nIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViU3RyaW5nIHsKK3B1YmxpYzoK
KyAgICB+V2ViU3RyaW5nKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJTdHJpbmcoKSA6IG1fcHJp
dmF0ZSgwKSB7IH0KKworICAgIFdlYlN0cmluZyhjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90
IGxlbikgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkYXRhLCBsZW4pOwor
ICAgIH0KKworICAgIFdlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHMpIDogbV9wcml2YXRlKDAp
IHsgYXNzaWduKHMpOyB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJTdHJp
bmcmIHMpCisgICAgeworICAgICAgICBhc3NpZ24ocyk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlN0cmluZyYpOworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW4pOworCisgICAgV0VCS0lU
X0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJTdHJpbmcmIHMpIGNvbnN0OworCisgICAgV0VC
S0lUX0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBjb25z
dCBXZWJVQ2hhciogZGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9w
cml2YXRlOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkNTdHJpbmcgdXRmOCgpIGNvbnN0Owor
CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmlu
ZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKKworICAgIHRlbXBsYXRlIDxpbnQgTj4gV2Vi
U3RyaW5nKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkKKyAgICAgICAgOiBtX3ByaXZhdGUoMCkKKyAg
ICB7CisgICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRhLCBOIC0gMSkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDxpbnQgTj4gV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEp
W05dKQorICAgIHsKKyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBXVEY6OlN0cmluZyYpOworICAgIG9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3Q7
CisKKyAgICBXZWJTdHJpbmcoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKKyAgICBXZWJTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOworICAgIG9wZXJhdG9yIFdU
Rjo6QXRvbWljU3RyaW5nKCkgY29uc3Q7CisjZWxzZQorCisgICAgV2ViU3RyaW5nKGNvbnN0IHN0
cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKHMuZGF0YSgp
LCBzLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBz
dHJpbmcxNiYgcykKKyAgICB7CisgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBzdHJpbmcxNigp
IGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgICAgIHJl
dHVybiBsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxlbikgOiBzdHJpbmcxNigpOworICAgIH0KKwor
ICAgIFdlYlN0cmluZyhjb25zdCBOdWxsYWJsZVN0cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQor
ICAgIHsKKyAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQorICAgICAgICAgICAgcmVzZXQoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYXNzaWduKHMuc3RyaW5nKCkuZGF0YSgpLCBzLnN0cmlu
ZygpLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBO
dWxsYWJsZVN0cmluZzE2JiBzKQorICAgIHsKKyAgICAgICAgaWYgKHMuaXNfbnVsbCgpKQorICAg
ICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzaWduKHMuc3Ry
aW5nKCkuZGF0YSgpLCBzLnN0cmluZygpLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIG9wZXJhdG9yIE51bGxhYmxlU3RyaW5nMTYoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJp
bmcxNihzdHJpbmcxNigpLCB0cnVlKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwor
ICAgICAgICByZXR1cm4gTnVsbGFibGVTdHJpbmcxNihsZW4gPyBzdHJpbmcxNihkYXRhKCksIGxl
bikgOiBzdHJpbmcxNigpLCBmYWxzZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFVU
RjhTdHJpbmc+CisgICAgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBVVEY4U3RyaW5n
JiBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21VVEY4KHMuZGF0YSgpLCBzLmxlbmd0aCgp
KTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJTdHJpbmdQ
cml2YXRlKik7CisgICAgV2ViU3RyaW5nUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikK
K3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgV2ViU3RyaW5nJiBhLCBjb25zdCBXZWJTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuICEo
YSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5NmFjOWNi
Y2I0MGU3OGY2NmQyYjQ0NTNmMDE5YTRhYzNlNGRjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViQ1N0cmluZy5jcHAKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KKworI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nUHJpdmF0ZSA6IHB1Ymxp
YyBXVEY6OkNTdHJpbmdCdWZmZXIgeworfTsKKworaW50IFdlYkNTdHJpbmc6OmNvbXBhcmUoY29u
c3QgV2ViQ1N0cmluZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gQSBudWxsIHN0cmluZyBpcyBh
bHdheXMgbGVzcyB0aGFuIGEgbm9uIG51bGwgb25lLgorICAgIGlmIChpc051bGwoKSAhPSBvdGhl
ci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGlzTnVsbCgpID8gLTEgOiAxOworCisgICAgaWYg
KGlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsgLy8gQm90aCBXZWJTdHJpbmdzIGFyZSBudWxs
LgorCisgICAgcmV0dXJuIHN0cmNtcChtX3ByaXZhdGUtPmRhdGEoKSwgb3RoZXIubV9wcml2YXRl
LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkNTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9w
cml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRl
ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IFdlYkNTdHJp
bmcmIG90aGVyKQoreworICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRlKj4o
b3RoZXIubV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWduKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgY2hhciogbmV3RGF0YTsKKyAgICBSZWZQ
dHI8V1RGOjpDU3RyaW5nQnVmZmVyPiBidWZmZXIgPQorICAgICAgICBXVEY6OkNTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBuZXdEYXRhKS5idWZmZXIoKTsKKyAgICBtZW1jcHkobmV3
RGF0YSwgZGF0YSwgbGVuZ3RoKTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1By
aXZhdGUqPihidWZmZXIuZ2V0KCkpKTsKK30KKworc2l6ZV90IFdlYkNTdHJpbmc6Omxlbmd0aCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIC8v
IE5PVEU6IFRoZSBidWZmZXIncyBsZW5ndGggaW5jbHVkZXMgdGhlIG51bGwgYnl0ZS4KKyAgICBy
ZXR1cm4gY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgp
IC0gMTsKK30KKworY29uc3QgY2hhciogV2ViQ1N0cmluZzo6ZGF0YSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25zdF9jYXN0
PFdlYkNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOworfQorCitXZWJTdHJpbmcg
V2ViQ1N0cmluZzo6dXRmMTYoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21V
VEY4KGRhdGEoKSwgbGVuZ3RoKCkpOworfQorCitXZWJDU3RyaW5nOjpXZWJDU3RyaW5nKGNvbnN0
IFdURjo6Q1N0cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJDU3RyaW5n
UHJpdmF0ZSo+KHMuYnVmZmVyKCkpKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1f
cHJpdmF0ZS0+cmVmKCk7Cit9CisKK1dlYkNTdHJpbmcmIFdlYkNTdHJpbmc6Om9wZXJhdG9yPShj
b25zdCBXVEY6OkNTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJp
bmdQcml2YXRlKj4ocy5idWZmZXIoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViQ1N0
cmluZzo6b3BlcmF0b3IgV1RGOjpDU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlOworfQorCit2b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSogcCkK
K3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9
PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9z
cmMvV2ViU3RyaW5nLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViU3RyaW5n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xNzY0OTMxN2JhYmYwODFmMzIyNjZmMTM5NWEwNzc4Yjc2MjFjYjhj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJTdHJp
bmcuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
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
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJTdHJpbmcuaD4KKworI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViU3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBXVEY6OlN0cmluZ0ltcGwgewor
fTsKKwordm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7Cisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViU3RyaW5nJiBvdGhlcikKK3sK
KyAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRl
KSk7Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNp
emVfdCBsZW5ndGgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0cmluZ1ByaXZhdGUq
PigKKyAgICAgICAgV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSkp
OworfQorCitzaXplX3QgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5n
dGgoKSA6IDA7Cit9CisKK2NvbnN0IFdlYlVDaGFyKiBXZWJTdHJpbmc6OmRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUgPyBjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPiht
X3ByaXZhdGUpLT5jaGFyYWN0ZXJzKCkgOiAwOworfQorCitXZWJDU3RyaW5nIFdlYlN0cmluZzo6
dXRmOCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nKG1fcHJpdmF0ZSkudXRmOCgp
OworfQorCitXZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwg
bGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciog
ZGF0YSkKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworfQorCiti
b29sIFdlYlN0cmluZzo6ZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZXF1YWwobV9wcml2YXRlLCBzLm1fcHJpdmF0ZSk7Cit9CisKK1dlYlN0cmluZzo6V2Vi
U3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0
PFdlYlN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAg
ICAgICAgbV9wcml2YXRlLT5yZWYoKTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJh
dG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2Vi
U3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJT
dHJpbmc6Om9wZXJhdG9yIFdURjo6U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlOworfQorCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
cykKKyAgICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsKK30KKwor
V2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
cykKK3sKKyAgICBhc3NpZ24ocy5zdHJpbmcoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitX
ZWJTdHJpbmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV1RGOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJp
dmF0ZSkpOworfQorCit2b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZhdGUqIHAp
Cit7CisgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUg
PT0gcAorICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBpZiAobV9wcml2YXRlKQor
ICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMTA0YWRh
YmI5MjExNTE5NTYxZWNhZGE2M2MwOTdiZTQxMmQ4MGZlMC4uZWEwMTkwMzIzODNjOWJiYzJiZmU3
NmYwNWFjNDE4YTNlZDkwYjc3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjcs
NiArNjcsNyBAQAogICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsgJ2VuYWJsZV93ZXhpdF90aW1l
X2Rlc3RydWN0b3JzJzogMSwgfSwKICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAg
ICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6d2ViY29y
ZScsCisgICAgICAgICAgICAgICAgJy4uLy4uL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9y
bS5neXA6cGxhdGZvcm0nLCAjIGFjdHVhbGx5IFdlYkNvcmUgc2hvdWxkIGRlcGVuZCBvbiB0aGlz
CiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lh
JywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3Uv
aWN1Lmd5cDppY3V1YycsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhp
cmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKQEAgLTI4MSw3ICsyODIsNiBAQAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViQXVkaW9EZXZpY2UuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJCbG9iRGF0YS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL3BsYXRmb3JtL1dlYkJsb2JSZWdpc3RyeS5oJywKLSAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJDYW52YXMuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9X
ZWJDbGlwYm9hcmQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJDb2xv
ci5oJywKQEAgLTQ5NSw3ICs0OTUsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29udGVu
dExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29udGVudExheWVySW1w
bC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYkNTdHJpbmcuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkN1cnNvckluZm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkRPTUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudExpc3Rl
bmVyLmNwcCcsCkBAIC02NDgsNyArNjQ3LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0
b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1
b3RhQ2FsbGJhY2tzSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1
b3RhQ2FsbGJhY2tzSW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViVGhyZWFkU2FmZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVS
TC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZv
cm0vV2ViQ1N0cmluZy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViQ1N0cmluZy5oCmluZGV4IGZmNGJlMjQ0OGM1YjQ2YjEzZjlmMTI2ZTRkYjgwM2QyZGNlOThl
MDguLjdhNDQ4NmRiMzZjOTg5MjE5MDgzNjVjYjlhMjQwZGEyZGY2MmRlZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkNTdHJpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDU3RyaW5nLmgKQEAg
LTI4LDEwMCArMjgsNSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkNTdHJp
bmdfaAotI2RlZmluZSBXZWJDU3RyaW5nX2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViQ1N0cmluZy5oIgogCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgi
Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBDU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1By
aXZhdGU7Ci1jbGFzcyBXZWJTdHJpbmc7Ci0KLS8vIEEgc2luZ2xlLWJ5dGUgc3RyaW5nIGNvbnRh
aW5lciB3aXRoIHVuc3BlY2lmaWVkIGVuY29kaW5nLiAgSXQgaXMKLS8vIGluZXhwZW5zaXZlIHRv
IGNvcHkgYSBXZWJDU3RyaW5nIG9iamVjdC4KLS8vCi0vLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2Fm
ZSB0byBwYXNzIGEgV2ViQ1N0cmluZyBhY3Jvc3MgdGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYkNT
dHJpbmcgewotcHVibGljOgotICAgIH5XZWJDU3RyaW5nKCkgeyByZXNldCgpOyB9Ci0KLSAgICBX
ZWJDU3RyaW5nKCkgOiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3Np
Z24oZGF0YSwgbGVuKTsKLSAgICB9Ci0KLSAgICBXZWJDU3RyaW5nKGNvbnN0IFdlYkNTdHJpbmcm
IHMpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKHMpOyB9Ci0KLSAgICBXZWJDU3RyaW5nJiBvcGVy
YXRvcj0oY29uc3QgV2ViQ1N0cmluZyYgcykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgMCBpZiBib3RoIHN0
cmluZ3MgYXJlIGVxdWFscywgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiB0aGUKLSAgICAv
LyBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBtYXRjaCBoYXMgYSBncmVhdGVyIHZhbHVl
IGluIHRoaXMgc3RyaW5nCi0gICAgLy8gdGhhbiBpbiB8b3RoZXJ8LCBvciBhIHZhbHVlIGxlc3Mg
dGhhbiB6ZXJvIHRvIGluZGljYXRlIHRoZSBvcHBvc2l0ZS4KLSAgICBXRUJLSVRfRVhQT1JUIGlu
dCBjb21wYXJlKGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKSBjb25zdDsKLQotICAgIFdFQktJVF9F
WFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3Qg
V2ViQ1N0cmluZyYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBj
b25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBX
ZWJTdHJpbmcgdXRmMTYoKSBjb25zdDsKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAg
IFdlYkNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJik7Ci0gICAgV2ViQ1N0cmluZyYgb3BlcmF0
b3I9KGNvbnN0IFdURjo6Q1N0cmluZyYpOwotICAgIG9wZXJhdG9yIFdURjo6Q1N0cmluZygpIGNv
bnN0OwotI2Vsc2UKLSAgICBXZWJDU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSA6IG1fcHJp
dmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAg
ICB9Ci0KLSAgICBXZWJDU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpzdHJpbmcmIHMpCi0g
ICAgewotICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdAotICAg
IHsKLSAgICAgICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwotICAgICAgICByZXR1cm4gbGVuID8g
c3RkOjpzdHJpbmcoZGF0YSgpLCBsZW4pIDogc3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGFzc2lnbihXZWJDU3RyaW5nUHJpdmF0ZSopOwotICAgIFdl
YkNTdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgV2ViQ1N0cmluZyYgYSwgY29uc3QgV2ViQ1N0cmluZyYgYikKLXsKLSAgICByZXR1cm4g
YS5jb21wYXJlKGIpIDwgMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViQ29t
bW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24u
aAppbmRleCBjNjM0ZjBjMzhmNDE4ZDAyODU4MGM4MzY1M2ExYWYxZTE3MzlhZTE4Li4zOWI0MGVi
N2Y4MjVjMmVjNDRhMzQ3ZDMzMjcwOTEzZDZmM2JjZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJDb21tb24uaApAQCAtMjgsOTYgKzI4LDQg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJDb21tb25faAotI2RlZmluZSBX
ZWJDb21tb25faAotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVmYXVsdCBjb25maWd1
cmF0aW9uCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJT04pCi0gICAgI2RlZmlu
ZSBXRUJLSVRfSU1QTEVNRU5UQVRJT04gMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChXRUJLSVRf
VVNJTkdfU0tJQSkKLSAgICAjaWYgIWRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFVTRV9T
S0lBKQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDEKLSAgICAjZWxzZQotICAg
ICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19TS0lBIDAKLSAgICAjZW5kaWYKLSNlbmRpZgotCi0j
aWYgIWRlZmluZWQoV0VCS0lUX1VTSU5HX0NHKQotICAgICNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIVdFQktJVF9VU0lOR19TS0lBCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX1VTSU5HX0NHIDEK
LSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9VU0lOR19DRyAwCi0gICAgI2VuZGlm
Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19WOCkKLSAgICAjZGVmaW5lIFdF
QktJVF9VU0lOR19WOCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFdFQktJVF9VU0lOR19KU0Mp
Ci0gICAgI2RlZmluZSBXRUJLSVRfVVNJTkdfSlNDIDAKLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gRXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRvIGJlIGFubm90YXRlZCB3aXRo
IFdFQktJVF9FWFBPUlQKLQotI2lmIGRlZmluZWQoV0VCS0lUX0RMTCkKLSAgICAjaWYgZGVmaW5l
ZChXSU4zMikKLSAgICAgICAgI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgICAgICAgICAg
I2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAgICAgICAjZWxz
ZQotICAgICAgICAgICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0
KQotICAgICAgICAjZW5kaWYKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9FWFBP
UlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLSAgICAjZW5kaWYKLSNl
bHNlCi0gICAgI2RlZmluZSBXRUJLSVRfRVhQT1JUCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIEJhc2ljIHR5cGVzCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gRm9yIHNp
emVfdAotCi0jaWYgZGVmaW5lZChXSU4zMikKLS8vIFZpc3VhbCBTdHVkaW8gZG9lc24ndCBoYXZl
IHN0ZGludC5oLgotdHlwZWRlZiBzaG9ydCBpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCB1aW50MTZfdDsKLXR5cGVkZWYgaW50IGludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1
aW50MzJfdDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVVRGLTE2IGNoYXJh
Y3RlciB0eXBlCi0jaWYgZGVmaW5lZChXSU4zMikKLXR5cGVkZWYgd2NoYXJfdCBXZWJVQ2hhcjsK
LSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOwotI2VuZGlmCi0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBc3NlcnRpb25zCi0KLVdFQktJVF9FWFBPUlQgdm9pZCBm
YWlsZWRBc3NlcnRpb24oY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotLy8gSWRlYWxseSwgb25seSB1c2UgaW5zaWRlIHRoZSBwdWJsaWMgZGlyZWN0b3J5IGJ1dCBv
dXRzaWRlIG9mIFdFQktJVF9JTVBMRU1FTlRBVElPTiBibG9ja3MuICAoT3RoZXJ3aXNlIHVzZSBX
VEYncyBBU1NFUlQuKQotI2lmIGRlZmluZWQoTkRFQlVHKQotI2RlZmluZSBXRUJLSVRfQVNTRVJU
KGFzc2VydGlvbikgKCh2b2lkKTApCi0jZWxzZQotI2RlZmluZSBXRUJLSVRfQVNTRVJUKGFzc2Vy
dGlvbikgZG8geyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9uKSkgXAotICAgICAgICBmYWlsZWRBc3Nl
cnRpb24oX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICNhc3NlcnRpb24pOyBcCi19
IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
IFdFQktJVF9BU1NFUlQoMCkKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTWltZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaAppbmRleCBjNDQ2
ZTVlNDZlZjYxYTExNGRiZmY2MTZiZTMxNGI0MGUyNjkwYWZmLi40MTM3YjA3NTY4ZDFmN2QwNGJj
ZGRhMGYxMjNhOTIzOGNjODI3MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaApAQCAtMSw2MiArMSwyOSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTWltZVJlZ2lzdHJ5X2gKLSNk
ZWZpbmUgV2ViTWltZVJlZ2lzdHJ5X2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5nOwotCi1jbGFzcyBXZWJNaW1lUmVnaXN0
cnkgewotcHVibGljOgotICAgIGVudW0gU3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElz
U3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9OwotCi0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUg
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmly
dHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9ydHNJbWFnZU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYg
bWltZVR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIFN1cHBvcnRzVHlwZSBzdXBwb3J0c0phdmFTY3Jp
cHRNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gICAgdmlydHVhbCBT
dXBwb3J0c1R5cGUgc3VwcG9ydHNNZWRpYU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgY29kZWNzKSA9IDA7Ci0gICAgdmlydHVhbCBTdXBwb3J0c1R5cGUgc3VwcG9y
dHNOb25JbWFnZU1JTUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLQotICAg
IHZpcnR1YWwgV2ViU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYg
ZmlsZUV4dGVuc2lvbikgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHdlbGxLbm93bk1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikgPSAwOwotICAg
IHZpcnR1YWwgV2ViU3RyaW5nIG1pbWVUeXBlRnJvbUZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxl
UGF0aCkgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1J
TUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpID0gMDsKLQotcHJvdGVjdGVkOgotICAg
IH5XZWJNaW1lUmVnaXN0cnkoKSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYKKy8vIFRoaXMgaXMgYSB0ZW1wb3JhcnkgZm9yd2FyZGluZyBoZWFkZXIgdG8gZWFzZSB0
aGUgUGxhdGZvcm0gdHJhbnNpdGlvbiBmb3IgZG93bnN0cmVhbSB1c2VycyBvZiB0aGUgV2ViS2l0
IEFQSS4KKy8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1
ODMKKy8vIEZJWE1FOiBSZW1vdmUgYXMgc29vbiBhcyBkb3duc3RyZWFtIGNsaWVudHMgYXJlIHVw
ZGF0ZWQuCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
Yk1pbWVSZWdpc3RyeS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViU3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJTdHJpbmcuaAppbmRleCBjMzM2ZGQxMTNkY2Q2MWFlZmFlNTJhOTgwOGI2YzU3
Mjc1ZjNiOWRmLi5kOGY0ZmUyMWE1ZjlkYzE3NDE5NzY3YWU5YjgzNDFmYjQwMWM0MzU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTdHJpbmcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTdHJpbmcu
aApAQCAtMjgsMTUwICsyOCw1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
U3RyaW5nX2gKLSNkZWZpbmUgV2ViU3RyaW5nX2gKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgiCiAKLSNpbmNsdWRlICJXZWJDb21tb24u
aCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jZWxzZQotI2luY2x1ZGUgPGJhc2UvbnVsbGFibGVfc3RyaW5nMTYuaD4KLSNpbmNsdWRlIDxi
YXNlL3N0cmluZzE2Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YkNTdHJpbmc7Ci1jbGFzcyBXZWJTdHJpbmdQcml2YXRlOwotCi0vLyBBIFVURi0xNiBzdHJpbmcg
Y29udGFpbmVyLiAgSXQgaXMgaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYlN0cmluZwotLy8gb2Jq
ZWN0LgotLy8KLS8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJTdHJpbmcg
YWNyb3NzIHRocmVhZHMhISEKLS8vCi1jbGFzcyBXZWJTdHJpbmcgewotcHVibGljOgotICAgIH5X
ZWJTdHJpbmcoKSB7IHJlc2V0KCk7IH0KLQotICAgIFdlYlN0cmluZygpIDogbV9wcml2YXRlKDAp
IHsgfQotCi0gICAgV2ViU3RyaW5nKGNvbnN0IFdlYlVDaGFyKiBkYXRhLCBzaXplX3QgbGVuKSA6
IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKGRhdGEsIGxlbik7Ci0gICAgfQot
Ci0gICAgV2ViU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYgcykgOiBtX3ByaXZhdGUoMCkgeyBhc3Np
Z24ocyk7IH0KLQotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYgcykK
LSAgICB7Ci0gICAgICAgIGFzc2lnbihzKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2ln
bihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbik7Ci0KLSAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgZXF1YWxzKGNvbnN0IFdlYlN0cmluZyYgcykgY29uc3Q7Ci0KLSAgICBXRUJLSVRfRVhQ
T1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlVD
aGFyKiBkYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
bGVuZ3RoKCk7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7
IH0KLQotICAgIFdFQktJVF9FWFBPUlQgV2ViQ1N0cmluZyB1dGY4KCkgY29uc3Q7Ci0KLSAgICBX
RUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCk7Ci0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGZyb21V
VEY4KGNvbnN0IGNoYXIqIGRhdGEpOwotCi0gICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmco
Y29uc3QgY2hhciAoJmRhdGEpW05dKQotICAgICAgICA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAg
ICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGUgPGludCBOPiBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyICgmZGF0YSlbTl0pCi0g
ICAgewotICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYlN0
cmluZyhjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0
IFdURjo6U3RyaW5nJik7Ci0gICAgb3BlcmF0b3IgV1RGOjpTdHJpbmcoKSBjb25zdDsKLQotICAg
IFdlYlN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwotICAgIFdlYlN0cmluZyYgb3Bl
cmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJik7Ci0gICAgb3BlcmF0b3IgV1RGOjpBdG9t
aWNTdHJpbmcoKSBjb25zdDsKLSNlbHNlCi0KLSAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYm
IHMpIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVu
Z3RoKCkpOwotICAgIH0KLQotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IHN0cmluZzE2
JiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIHN0cmluZzE2KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuIGxl
biA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0cmluZzE2KCk7Ci0gICAgfQotCi0gICAgV2Vi
U3RyaW5nKGNvbnN0IE51bGxhYmxlU3RyaW5nMTYmIHMpIDogbV9wcml2YXRlKDApCi0gICAgewot
ICAgICAgICBpZiAocy5pc19udWxsKCkpCi0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5kYXRhKCksIHMuc3RyaW5nKCkubGVu
Z3RoKCkpOwotICAgIH0KLQotICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IE51bGxhYmxl
U3RyaW5nMTYmIHMpCi0gICAgewotICAgICAgICBpZiAocy5pc19udWxsKCkpCi0gICAgICAgICAg
ICByZXNldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc3NpZ24ocy5zdHJpbmcoKS5k
YXRhKCksIHMuc3RyaW5nKCkubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotCi0gICAgb3BlcmF0b3IgTnVsbGFibGVTdHJpbmcxNigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgICAgIHJldHVybiBOdWxsYWJsZVN0cmluZzE2KHN0
cmluZzE2KCksIHRydWUpOwotICAgICAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgICAg
IHJldHVybiBOdWxsYWJsZVN0cmluZzE2KGxlbiA/IHN0cmluZzE2KGRhdGEoKSwgbGVuKSA6IHN0
cmluZzE2KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVVRGOFN0cmlu
Zz4KLSAgICBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IFVURjhTdHJpbmcmIHMpCi0g
ICAgewotICAgICAgICByZXR1cm4gZnJvbVVURjgocy5kYXRhKCksIHMubGVuZ3RoKCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQgYXNzaWduKFdlYlN0cmluZ1ByaXZhdGUq
KTsKLSAgICBXZWJTdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7Ci19OwotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFdlYlN0cmluZyYgYSwgY29uc3QgV2ViU3RyaW5nJiBiKQotewotICAg
IHJldHVybiBhLmVxdWFscyhiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBX
ZWJTdHJpbmcmIGEsIGNvbnN0IFdlYlN0cmluZyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
M2ViOWM2ODUzNTkzMWQyYWNlNThmNmU4MTM2ZDVlNzU5MmQ5ZjViLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNTdHJpbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0cmluZy5oIgotCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMgV1RG
OjpDU3RyaW5nQnVmZmVyIHsKLX07Ci0KLWludCBXZWJDU3RyaW5nOjpjb21wYXJlKGNvbnN0IFdl
YkNTdHJpbmcmIG90aGVyKSBjb25zdAotewotICAgIC8vIEEgbnVsbCBzdHJpbmcgaXMgYWx3YXlz
IGxlc3MgdGhhbiBhIG5vbiBudWxsIG9uZS4KLSAgICBpZiAoaXNOdWxsKCkgIT0gb3RoZXIuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBpc051bGwoKSA/IC0xIDogMTsKLQotICAgIGlmIChpc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7IC8vIEJvdGggV2ViU3RyaW5ncyBhcmUgbnVsbC4KLQot
ICAgIHJldHVybiBzdHJjbXAobV9wcml2YXRlLT5kYXRhKCksIG90aGVyLm1fcHJpdmF0ZS0+ZGF0
YSgpKTsKLX0KLQotdm9pZCBXZWJDU3RyaW5nOjpyZXNldCgpCi17Ci0gICAgaWYgKG1fcHJpdmF0
ZSkgewotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJpdmF0ZSA9IDA7
Ci0gICAgfQotfQotCi12b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJDU3RyaW5nJiBv
dGhlcikKLXsKLSAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KG90aGVy
Lm1fcHJpdmF0ZSkpOwotfQotCi12b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGNoYXIqIG5ld0RhdGE7Ci0gICAgUmVmUHRyPFdU
Rjo6Q1N0cmluZ0J1ZmZlcj4gYnVmZmVyID0KLSAgICAgICAgV1RGOjpDU3RyaW5nOjpuZXdVbmlu
aXRpYWxpemVkKGxlbmd0aCwgbmV3RGF0YSkuYnVmZmVyKCk7Ci0gICAgbWVtY3B5KG5ld0RhdGEs
IGRhdGEsIGxlbmd0aCk7Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkNTdHJpbmdQcml2YXRl
Kj4oYnVmZmVyLmdldCgpKSk7Ci19Ci0KLXNpemVfdCBXZWJDU3RyaW5nOjpsZW5ndGgoKSBjb25z
dAotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBOT1RF
OiBUaGUgYnVmZmVyJ3MgbGVuZ3RoIGluY2x1ZGVzIHRoZSBudWxsIGJ5dGUuCi0gICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKSAtIDE7
Ci19Ci0KLWNvbnN0IGNoYXIqIFdlYkNTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIGlmICgh
bV9wcml2YXRlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJD
U3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmRhdGEoKTsKLX0KLQotV2ViU3RyaW5nIFdlYkNT
dHJpbmc6OnV0ZjE2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOChk
YXRhKCksIGxlbmd0aCgpKTsKLX0KLQotV2ViQ1N0cmluZzo6V2ViQ1N0cmluZyhjb25zdCBXVEY6
OkNTdHJpbmcmIHMpCi0gICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1ByaXZh
dGUqPihzLmJ1ZmZlcigpKSkKLXsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZh
dGUtPnJlZigpOwotfQotCi1XZWJDU3RyaW5nJiBXZWJDU3RyaW5nOjpvcGVyYXRvcj0oY29uc3Qg
V1RGOjpDU3RyaW5nJiBzKQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJp
dmF0ZSo+KHMuYnVmZmVyKCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNTdHJpbmc6
Om9wZXJhdG9yIFdURjo6Q1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZTsK
LX0KLQotdm9pZCBXZWJDU3RyaW5nOjphc3NpZ24oV2ViQ1N0cmluZ1ByaXZhdGUqIHApCi17Ci0g
ICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZhdGUgPT0gcAot
ICAgIGlmIChwKQotICAgICAgICBwLT5yZWYoKTsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAg
ICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgbV9wcml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
dHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyOWJkNTBjYzJlZmUxM2E1NTAwYzcxOTc3NGYy
MjhkZTQwMjEyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkNTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJTdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6U3RyaW5nSW1wbCB7Ci19OwotCi12
b2lkIFdlYlN0cmluZzo6cmVzZXQoKQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAgICAg
bV9wcml2YXRlLT5kZXJlZigpOwotICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0KLQot
dm9pZCBXZWJTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJTdHJpbmcmIG90aGVyKQotewotICAgIGFz
c2lnbihjb25zdF9jYXN0PFdlYlN0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKLX0K
LQotdm9pZCBXZWJTdHJpbmc6OmFzc2lnbihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KAotICAg
ICAgICBXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKSk7Ci19Ci0K
LXNpemVfdCBXZWJTdHJpbmc6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZSA/IGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIDog
MDsKLX0KLQotY29uc3QgV2ViVUNoYXIqIFdlYlN0cmluZzo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZSA/IGNvbnN0X2Nhc3Q8V2ViU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0
ZSktPmNoYXJhY3RlcnMoKSA6IDA7Ci19Ci0KLVdlYkNTdHJpbmcgV2ViU3RyaW5nOjp1dGY4KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Ci19Ci0K
LVdlYlN0cmluZyBXZWJTdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgp
OwotfQotCi1XZWJTdHJpbmcgV2ViU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKQot
ewotICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Ci19Ci0KLWJvb2wgV2Vi
U3RyaW5nOjplcXVhbHMoY29uc3QgV2ViU3RyaW5nJiBzKSBjb25zdAotewotICAgIHJldHVybiBl
cXVhbChtX3ByaXZhdGUsIHMubV9wcml2YXRlKTsKLX0KLQotV2ViU3RyaW5nOjpXZWJTdHJpbmco
Y29uc3QgV1RGOjpTdHJpbmcmIHMpCi0gICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViU3Ry
aW5nUHJpdmF0ZSo+KHMuaW1wbCgpKSkKLXsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBt
X3ByaXZhdGUtPnJlZigpOwotfQotCi1XZWJTdHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9KGNv
bnN0IFdURjo6U3RyaW5nJiBzKQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJTdHJpbmdQ
cml2YXRlKj4ocy5pbXBsKCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYlN0cmluZzo6
b3BlcmF0b3IgV1RGOjpTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19
Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQotICAg
IDogbV9wcml2YXRlKDApCi17Ci0gICAgYXNzaWduKHMuc3RyaW5nKCkpOwotfQotCi1XZWJTdHJp
bmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBzKQotewot
ICAgIGFzc2lnbihzLnN0cmluZygpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYlN0cmlu
Zzo6b3BlcmF0b3IgV1RGOjpBdG9taWNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6
OkF0b21pY1N0cmluZyhzdGF0aWNfY2FzdDxXVEY6OlN0cmluZ0ltcGwgKj4obV9wcml2YXRlKSk7
Ci19Ci0KLXZvaWQgV2ViU3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkKLXsKLSAg
ICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCi0g
ICAgaWYgKHApCi0gICAgICAgIHAtPnJlZigpOwotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAg
IG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA2ZTlhMGZmMzllNWNhNDNiOGRlYmEwZTk3OTNjNmJiMWIyOGRkOGQ5Li43ZmRmZjU1
MjliZWQ3YmI3N2Q4ODAxMzJlMzFhNWM4NTg4NzA1NzgzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMDMg
IEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIE1vdmUgV2ViTWltZVJlZ2lzdHJ5IGFuZCBkZXBlbmRlbmNpZXMgdG8gU291cmNlL1BsYXRm
b3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU4
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlYWNo
ZXMgdGhlIFdFQktJVF9FWFBPUlQgY2hlY2sgYWJvdXQgdGhlIGNocm9taXVtIFdlYktpdCBwbGF0
Zm9ybSBBUEkgaGVhZGVyIGxvY2F0aW9uLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy9jcHAucHk6CisgICAgICAgIChjaGVja19mdW5jdGlvbl9kZWZpbml0aW9u
KToKKwogMjAxMi0wMS0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgYSB0b29sIHRvIGFuYWx5emUgY2hhbmdlIGxvZ3MKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKaW5kZXggZjc5YTkyNjZhNzAyZjQ2ZjExN2Q1
MTExMGIzMmRlMTZkNDE5N2FhOC4uNTc5MmYyNWNkNGJmZWY3OGM2NTBiMzNhYWM0YmZlNGViM2Fl
ZTFlMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9j
cHAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkK
QEAgLTE2MDIsNyArMTYwMiw3IEBAIGRlZiBjaGVja19mdW5jdGlvbl9kZWZpbml0aW9uKGZpbGVu
YW1lLCBmaWxlX2V4dGVuc2lvbiwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyCiAKICAgICBtb2Rp
ZmllcnNfYW5kX3JldHVybl90eXBlID0gZnVuY3Rpb25fc3RhdGUubW9kaWZpZXJzX2FuZF9yZXR1
cm5fdHlwZSgpCiAgICAgaWYgZmlsZW5hbWUuZmluZCgnL2Nocm9taXVtLycpICE9IC0xIGFuZCBz
ZWFyY2gocidcYldFQktJVF9FWFBPUlRcYicsIG1vZGlmaWVyc19hbmRfcmV0dXJuX3R5cGUpOgot
ICAgICAgICBpZiBmaWxlbmFtZS5maW5kKCcvY2hyb21pdW0vcHVibGljLycpID09IC0xIGFuZCBm
aWxlbmFtZS5maW5kKCcvY2hyb21pdW0vdGVzdHMvJykgPT0gLTE6CisgICAgICAgIGlmIGZpbGVu
YW1lLmZpbmQoJy9jaHJvbWl1bS9wdWJsaWMvJykgPT0gLTEgYW5kIGZpbGVuYW1lLmZpbmQoJy9j
aHJvbWl1bS90ZXN0cy8nKSA9PSAtMSBhbmQgZmlsZW5hbWUuZmluZCgnY2hyb21pdW0vcGxhdGZv
cm0nKSA9PSAtMToKICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uX3N0YXRlLmZ1bmN0aW9uX25h
bWVfc3RhcnRfcG9zaXRpb24ucm93LCAncmVhZGFiaWxpdHkvd2Via2l0X2V4cG9ydCcsIDUsCiAg
ICAgICAgICAgICAgICAgICAnV0VCS0lUX0VYUE9SVCBzaG91bGQgb25seSBhcHBlYXIgaW4gdGhl
IGNocm9taXVtIHB1YmxpYyAob3IgdGVzdHMpIGRpcmVjdG9yeS4nKQogICAgICAgICBlbGlmIG5v
dCBmaWxlX2V4dGVuc2lvbiA9PSAiaCI6CmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGln
bm9yZQppbmRleCAyNjc2ZDIzZjk4MzhiZmZmOGJmMzY3ODdmOWNiMGQxM2E2MmRjMmExLi42OGJh
NzkzMjUzYjVmMTMyZjljYzZmZDUxMDZiMWIwZmM4ODk1ZTYyIDEwMDY0NAotLS0gYS8uZ2l0aWdu
b3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTU0LDYgKzU0LDEwIEBAIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vKi52Y3Byb2oqCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0FsbC54Y29kZXByb2oKIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lnhjb2RlcHJvagogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXRVbml0VGVzdHMueGNvZGVwcm9qCitTb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0u
Z3lwLyouTWFrZWZpbGUKK1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvKi5taworU291cmNl
L1BsYXRmb3JtL1BsYXRmb3JtLmd5cC8qLnNsbgorU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5
cC8qLnZjcHJvaioKIFRvb2xzL1Rvb2xzLnhjb2RlcHJvagogVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvagogCmRpZmYgLS1naXQg
YS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZjkxZTcyMmFiYTE3MzZjMjBjN2FmYjVmODA3
OTQyOTEwYjRjZWJmZi4uYmYxYWVkZDAyODliNmZiMTVmZTAxMjk1YTk2N2U2NDBlZTU1MzIwMSAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDEyLTAxLTAzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBNb3ZlIFdlYk1pbWVSZWdpc3RyeSBhbmQgZGVwZW5kZW5jaWVzIHRvIFNv
dXJjZS9QbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzQ1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGUgLmdpdGlnbm9yZSBmb3IgU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC8g
Z2VuZXJhdGVkIHByb2plY3QgZmlsZXMuCisKKyAgICAgICAgKiAuZ2l0aWdub3JlOgorCiAyMDEy
LTAxLTAzICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAog
ICAgICAgICBbUXRdIENsZWFuIHVwIGRldGVjdGlvbiBvZiBmb250Y29uZmlnCg==
</data>
<flag name="review"
          id="121386"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>