<?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>105889</bug_id>
          
          <creation_ts>2012-12-31 19:52:22 -0800</creation_ts>
          <short_desc>Objective-C API for JavaScriptCore</short_desc>
          <delta_ts>2013-01-30 14:16:26 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fpizlo</cc>
    
    <cc>joepeck</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>798400</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-12-31 19:52:22 -0800</bug_when>
    <thetext>JavaScriptCore should support an Objective-C API.  The C API is great for portability, but when interfacing with Objective-C code we could make type conversion, object life cycle management, etc much more automatic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798418</commentid>
    <comment_count>1</comment_count>
      <attachid>180985</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 00:23:16 -0800</bug_when>
    <thetext>Created attachment 180985
First cut</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798419</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 00:27:02 -0800</bug_when>
    <thetext>Attachment 180985 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/ChangeLog:14:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/JavaScriptCore/ChangeLog:15:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/JavaScriptCore/API/APIJSValue.h:147:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/API/APIJSValue.h:287:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:116:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:126:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:171:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:154:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:175:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:190:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/JSValueInternal.h:39:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:39:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:40:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:40:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:41:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:41:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:42:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:42:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:43:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:43:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:44:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:44:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:45:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSValueInternal.h:45:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSContextInternal.h:45:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSContextInternal.h:57:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/API/JSVirtualMachineInternal.h:33:  The parameter name &quot;virtualMachine&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 27 in 31 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>798420</commentid>
    <comment_count>3</comment_count>
      <attachid>180986</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 00:48:54 -0800</bug_when>
    <thetext>Created attachment 180986
Style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798421</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 00:52:23 -0800</bug_when>
    <thetext>Attachment 180986 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:116:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:174:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:189:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798422</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 00:54:08 -0800</bug_when>
    <thetext>Patch up for review.

The file APIJSValue.h should really be named JSValue.h, but I&apos;d propose landing as is, then landing a patch to rename JSValue.h -&gt; JSCJSValue.h, then a patch to rename APIJSValue.h -&gt; JSValue.h.  (Without the new API, there is no justification for the rename).

There are a number of FIXMEs tracking further work needed, these all reference bugs:
    https://bugs.webkit.org/show_bug.cgi?id=105891
    https://bugs.webkit.org/show_bug.cgi?id=105892
    https://bugs.webkit.org/show_bug.cgi?id=105894
    https://bugs.webkit.org/show_bug.cgi?id=105895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798423</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 00:55:18 -0800</bug_when>
    <thetext>The remaining style issues seem bogus; looks like stylebot is being thrown by Objective-C.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798426</commentid>
    <comment_count>7</comment_count>
      <attachid>180986</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 01:31:49 -0800</bug_when>
    <thetext>Comment on attachment 180986
Style fixes

Attachment 180986 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15625156

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798427</commentid>
    <comment_count>8</comment_count>
      <attachid>180986</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-01 01:32:42 -0800</bug_when>
    <thetext>Comment on attachment 180986
Style fixes

Attachment 180986 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15626177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798449</commentid>
    <comment_count>9</comment_count>
      <attachid>180992</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 10:16:10 -0800</bug_when>
    <thetext>Created attachment 180992
Fixes for the build bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798450</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 10:18:44 -0800</bug_when>
    <thetext>Attachment 180992 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:116:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:174:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:189:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798453</commentid>
    <comment_count>11</comment_count>
      <attachid>180992</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-01 11:00:04 -0800</bug_when>
    <thetext>Comment on attachment 180992
Fixes for the build bot

Attachment 180992 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15627270</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798454</commentid>
    <comment_count>12</comment_count>
      <attachid>180993</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 11:15:55 -0800</bug_when>
    <thetext>Created attachment 180993
Build bot fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798455</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 11:18:36 -0800</bug_when>
    <thetext>Attachment 180993 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:116:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:174:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:189:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798456</commentid>
    <comment_count>14</comment_count>
      <attachid>180993</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-01 12:00:05 -0800</bug_when>
    <thetext>Comment on attachment 180993
Build bot fix

Attachment 180993 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15603853</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798457</commentid>
    <comment_count>15</comment_count>
      <attachid>180994</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 12:05:58 -0800</bug_when>
    <thetext>Created attachment 180994
Build bot fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798459</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 12:08:34 -0800</bug_when>
    <thetext>Attachment 180994 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:116:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:174:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:189:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798472</commentid>
    <comment_count>17</comment_count>
      <attachid>180994</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-01 15:12:51 -0800</bug_when>
    <thetext>Comment on attachment 180994
Build bot fix

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

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:264
&gt; +// Helper function to add offset information back into a bock signature.

Typo: block

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:296
&gt; +    // The first argument to a block is the bloxk itself.

Typo in comment.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:317
&gt; +    // Prefic the signature with the return type &amp; total stackframe size.

Typo: prefic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798473</commentid>
    <comment_count>18</comment_count>
      <attachid>180994</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-01 15:30:01 -0800</bug_when>
    <thetext>Comment on attachment 180994
Build bot fix

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

The comments about anonymous namespaces are strictly optional - it&apos;s just a style that I sort of like. 

But you should definitely think about the multiple inheritance case. I think that&apos;s a bug. 

Holding off r+ until we figure out the multi inheritance part.

&gt; Source/JavaScriptCore/API/JSValue.mm:630
&gt; +class JSContainerConvertor {

I would suggest putting classes like these (declared + defined in implementation files and invisible from other modules) in anonymous namespaces (&quot;namespace { ... }&quot;). You could then shorten the names and omit the &apos;JS&apos; prefix since you&apos;ll not have to worry about namespace pollution.

&gt; Source/JavaScriptCore/API/JSValue.mm:721
&gt; +static id containerValueToObject(JSGlobalContextRef context, JSContainerConvertor::Task task)

If this code was in an anonymous namespace then &apos;static&apos; could be omitted.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:53
&gt; +            forEachProtocolImplementingProtocol(protocols[i], protocol, callback);

Thus seems like it will repeatedly visit the same protocol in case of multiple inheritance. I believe that this should use a DFS type formulation - ie a work list of protocols to visit and a hashset of already-seen protocols.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:66
&gt; +    if (protocolsCount) {

Seems like the part of this code once you have a Protocol** should be in a shared helper for the Class and Protocol cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798475</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-01 15:43:40 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 180994 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180994&amp;action=review
&gt; 
&gt; The comments about anonymous namespaces are strictly optional - it&apos;s just a style that I sort of like. 
&gt; 
&gt; But you should definitely think about the multiple inheritance case. I think that&apos;s a bug. 
&gt; 
&gt; Holding off r+ until we figure out the multi inheritance part.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSValue.mm:630
&gt; &gt; +class JSContainerConvertor {
&gt; 
&gt; I would suggest putting classes like these (declared + defined in implementation files and invisible from other modules) in anonymous namespaces (&quot;namespace { ... }&quot;). You could then shorten the names and omit the &apos;JS&apos; prefix since you&apos;ll not have to worry about namespace pollution.

Just realized that the reason for the &apos;JS&apos; prefix has nothing to do with namespace pollution but rather is meant to distinguish between this and the &apos;ObjC&apos; version. 

Still, I would have used an anonymous namespace to make clear that this is a utility class that is internal to this file. 

&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSValue.mm:721
&gt; &gt; +static id containerValueToObject(JSGlobalContextRef context, JSContainerConvertor::Task task)
&gt; 
&gt; If this code was in an anonymous namespace then &apos;static&apos; could be omitted.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:53
&gt; &gt; +            forEachProtocolImplementingProtocol(protocols[i], protocol, callback);
&gt; 
&gt; Thus seems like it will repeatedly visit the same protocol in case of multiple inheritance. I believe that this should use a DFS type formulation - ie a work list of protocols to visit and a hashset of already-seen protocols.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:66
&gt; &gt; +    if (protocolsCount) {
&gt; 
&gt; Seems like the part of this code once you have a Protocol** should be in a shared helper for the Class and Protocol cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798506</commentid>
    <comment_count>20</comment_count>
      <attachid>181003</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 17:37:46 -0800</bug_when>
    <thetext>Created attachment 181003
DFS, typo fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798507</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 17:40:31 -0800</bug_when>
    <thetext>Attachment 181003 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:138:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:196:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:211:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798508</commentid>
    <comment_count>22</comment_count>
      <attachid>181003</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-01 17:50:01 -0800</bug_when>
    <thetext>Comment on attachment 181003
DFS, typo fixes

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

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:44
&gt; +inline void forEachProtocolImplementingProtocol(Protocol* base, Protocol* protocol, void (^callback)(Protocol*))

This method seems like it&apos;s not used anymore, and is also still wrong, since it doesn&apos;t do DFS.  I think this method was just a helper for the one below, before you implemented DFS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798510</commentid>
    <comment_count>23</comment_count>
      <attachid>181004</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 17:54:59 -0800</bug_when>
    <thetext>Created attachment 181004
Removed redundant forEachProtocolImplementingProtocol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798511</commentid>
    <comment_count>24</comment_count>
      <attachid>181004</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-01 17:56:04 -0800</bug_when>
    <thetext>Comment on attachment 181004
Removed redundant forEachProtocolImplementingProtocol

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798513</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-01 17:59:18 -0800</bug_when>
    <thetext>Attachment 181004 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/APIJSValue.h&apos;, u...&quot; exit_code: 1
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:121:  Extra space before [  [whitespace/braces] [5]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:179:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/API/ObjcRuntimeExtras.h:194:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 3 in 31 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>798523</commentid>
    <comment_count>26</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-01 19:52:47 -0800</bug_when>
    <thetext>Fixed in r138604</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798716</commentid>
    <comment_count>27</comment_count>
      <attachid>181004</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-02 10:30:21 -0800</bug_when>
    <thetext>Comment on attachment 181004
Removed redundant forEachProtocolImplementingProtocol

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

Formatting of Objective-C type pointers here is all over the map. Our coding style says “NSInvocation *” but I don’t feel strongly about that except in public headers. Maybe we can change the WebKit coding style. I wish this patch was self-consistent about that, though. But that’s less important than other comments I made here.

The use of the WTF:: prefix here is extensive and unnecessary. WTF is designed to be used without having to use an explicit prefix except in a few unusual cases.

&gt; Source/JavaScriptCore/API/APIJSValue.h:37
&gt; +// The JSContext is used to manage the life-cycle of the refereced JavaScript

Typo: refereced

&gt; Source/JavaScriptCore/API/APIJSValue.h:39
&gt; +// the JSValue will continue to keep the referencd value within the JavaScript

Typo: referencd

&gt; Source/JavaScriptCore/API/APIJSValue.h:50
&gt; +// (the associated JSVirtualMachine is avaible indirectly via the context

Typo: avaible

&gt; Source/JavaScriptCore/API/APIJSValue.h:93
&gt; +// class methods will be returned. See JSExport.h sor more information on

Typo: sor

&gt; Source/JavaScriptCore/API/APIJSValue.h:95
&gt; +NS_CLASS_AVAILABLE(10_9, NA)

I suggest adding a blank line before this line.

&gt; Source/JavaScriptCore/API/APIJSValue.h:118
&gt; +- (id)toObjectOfClass:(Class)cls;

I’m not a big fan of “cls” to avoid the C++ class keyword. I suggest something like expectedClass. I won’t comment elsewhere, but I think use of the abbreviation cls is an anti-pattern.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:43
&gt; +id __NSMakeSpecialForwardingCaptureBlock(const char *signature, void (^handler)(NSInvocation *inv));

No need to abbreviate invocation here as “inv”.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:44
&gt; +};

Extra semicolon here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:60
&gt; +    JSValueRef get(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef*)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:71
&gt; +    JSValueRef get(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef*)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:81
&gt; +    JSValueRef get(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef*)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:98
&gt; +        m_allocation = (char*)malloc(size + alignment);

Should use static_cast here instead of C-style cast.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:108
&gt; +    virtual JSValueRef get(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef*)

Should specify override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:151
&gt; +        return nil;

Is nil right here? Normally we use nil only for Objective-C object pointer types.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:166
&gt; +        return nil;

Is nil right here? Normally we use nil only for Objective-C object pointer types.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:174
&gt; +        return nil;

Is nil right here? Normally we use nil only for Objective-C object pointer types.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:189
&gt; +    void set(NSInvocation*, JSContext*, JSValueRef, JSValueRef*)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:197
&gt; +    void set(NSInvocation* invocation, JSContext* context, JSValueRef result, JSValueRef* exception)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:207
&gt; +    void set(NSInvocation* invocation, JSContext* context, JSValueRef result, JSValueRef* exception)

Should specify both virtual and override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:223
&gt; +class BlockResultStruct : public BlockResult {

Is there a way to share some of the code with BlockArgumentStruct? The two classes seem quite close in implementation.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:232
&gt; +        m_allocation = (char*)malloc(size + alignment);

Should use static_cast here instead of C-style cast.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:242
&gt; +    void set(NSInvocation* invocation, JSContext* context, JSValueRef result, JSValueRef*)

Should specify override here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:256
&gt; +@implementation JSBlockAdaptor {

The use of m_ prefixes for Objective-C object fields is a bit non-standard.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:258
&gt; +    WTF::RetainPtr&lt;NSString&gt; m_signatureWithOffsets;
&gt; +    WTF::RetainPtr&lt;NSString&gt; m_signatureWithoutOffsets;

Should not need these WTF:: prefixes here. WTF works without a prefix.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:268
&gt; +    NSString* result = [NSString stringWithFormat:@&quot;%@%s%lu%@&quot;, prefix, copy.get(), offset, postfix];

The %lu format string is not right for an NSUInteger. If you want to use %lu you will need to cast it to an unsigned long or find some other way to get the format string right.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:293
&gt; +    if (encodedType[0] != &apos;@&apos; || encodedType[1] != &apos;?&apos;) {
&gt; +        return self;
&gt; +    }

WebKit coding style omits the braces in a case like this.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:300
&gt; +    OwnPtr&lt;BlockArgument&gt; arguments = 0;

No need for this &quot;= 0&quot; for an OwnPtr.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:319
&gt; +    // which is a nonsesne, but harmless since this is the last use).

Typo: a nonsesne

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:337
&gt; +    const char* withoutOffsets= [m_signatureWithoutOffsets UTF8String];

Missing space before the &quot;=&quot; here.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:357
&gt; +    JSGlobalContextRef ctx = contextInternalContext(context);

I suggest contextRef or globalContext rather than ctx for this local.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:399
&gt; +        JSGlobalContextRef ctx = contextInternalContext(context);

I suggest contextRef or globalContext rather than ctx for this local.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:401
&gt; +        JSValueRef args[adaptor-&gt;m_argumentCount];

Confusing to have locals named both args and arguments in the same function. I suggest calling this argumentArray.

&gt; Source/JavaScriptCore/API/JSContext.h:33
&gt; +// An instance of JSContext represents a JavaScript execution environment, all
&gt; +// JavaScript execution takes place within a context.

This is a comma splice. Should be two sentences.

&gt; Source/JavaScriptCore/API/JSContext.h:41
&gt; +NS_CLASS_AVAILABLE(10_9, NA)

I suggest adding a space above this line.

&gt; Source/JavaScriptCore/API/JSContext.h:54
&gt; +// Instances of JSContext originating from WebKit will return a reference to the
&gt; +// WindowProxy object.

Interesting, but confusing. I don’t know what a WindowProxy object is.

&gt; Source/JavaScriptCore/API/JSContext.mm:40
&gt; +typedef WTF::HashMap&lt;JSValueRef, size_t&gt; ProtectMap;

No need for the WTF:: prefix here.

WTF has a HashCountedSet class, which might be a better fit here than a HashMap with values of size_t.

&gt; Source/JavaScriptCore/API/JSContext.mm:46
&gt; +    ProtectMap m_protected;

I think this should be called m_protectCounts rather than m_protected.

&gt; Source/JavaScriptCore/API/JSValue.mm:63
&gt; ++ (JSValue *)valueWithBool:(BOOL)value inContext:(JSContext *)context

I suggest blank lines between methods, even when they are short like these.

&gt; Source/JavaScriptCore/API/JSValue.mm:130
&gt; +    return (context &amp;&amp; JSValueToBoolean(contextInternalContext(context), m_value)) ? YES : NO;

I don’t believe the &quot;? YES : NO&quot; here does any good. It would only be helpful if the value could be something other than 0 or 1, and that is not the case.

&gt; Source/JavaScriptCore/API/JSValue.mm:473
&gt; +    JSValueRef func = JSObjectGetProperty(contextInternalContext(context), thisObject, name, &amp;exception);

No need to abbreviate the name function here.

&gt; Source/JavaScriptCore/API/JSValue.mm:533
&gt; +        @&quot;x&quot;:[NSNumber numberWithFloat:point.x],

Could use @(point.x) instead of [NSNumber numberWithFloat:point.x]

The explicit use of float is potentially wrong since CGFloat can be either float or double.

&gt; Source/JavaScriptCore/API/JSValue.mm:542
&gt; +        @&quot;location&quot;:[NSNumber numberWithFloat:range.location],
&gt; +        @&quot;length&quot;:[NSNumber numberWithFloat:range.length]

Why float? These are integers. I suggest just @(range.location) and @(range.length).

&gt; Source/JavaScriptCore/API/JSValue.mm:574
&gt; +    if (![(NSObject*)key isKindOfClass:[NSString class]]) {

Is the typecast here really needed?

&gt; Source/JavaScriptCore/API/JSValue.mm:594
&gt; +    if (![(NSObject*)key isKindOfClass:[NSString class]]) {

Same question about the typecast.

&gt; Source/JavaScriptCore/API/JSValue.mm:651
&gt; +    WTF::HashMap&lt;JSValueRef, id&gt; m_objectMap;
&gt; +    WTF::Vector&lt;Task&gt; m_worklist;

No need for the WTF:: prefixes here or elsewhere.

&gt; Source/JavaScriptCore/API/JSValue.mm:861
&gt; +    JSValueRef convert(id object);

Maybe const?

&gt; Source/JavaScriptCore/API/JSValue.mm:862
&gt; +    void add(Task task);

Better to leave out the argument name here.

&gt; Source/JavaScriptCore/API/JSValue.mm:864
&gt; +    bool isWorkListEmpty() { return !m_worklist.size(); }

This member function should be const.

&gt; Source/JavaScriptCore/API/JSValue.mm:932
&gt; +            id literalTrue = @YES;

I don’t think the local variable makes this clearer.

&gt; Source/JavaScriptCore/API/JSValue.mm:935
&gt; +            id literalFalse = @NO;

Ditto.

&gt; Source/JavaScriptCore/API/JSValue.mm:968
&gt; +            NSArray * array = (NSArray *)current.objc;

Unusual extra space here.

&gt; Source/JavaScriptCore/API/JSValue.mm:977
&gt; +            NSEnumerator* enumerator = [dictionary keyEnumerator];
&gt; +            while (id key = [enumerator nextObject]) {

Better to use the Objective-C for loop for this. I think it’s even more efficient.

&gt; Source/JavaScriptCore/API/JSValue.mm:1007
&gt; +    [super init];

Normally init methods look at the return value of init and return nil if it returned nil.

&gt; Source/JavaScriptCore/API/JSValue.mm:1018
&gt; +static StructTagHandler* getStructTagHandler(const char* encodedType)

Normally we don’t use get in the names of these types of functions inside WebKit. I think maybe find is a better verb to use.

&gt; Source/JavaScriptCore/API/JSValue.mm:1024
&gt; +    static StructHandlers *m_structHandlers = 0;

Incorrect use of m_ here since this is not a member. Also wrong position of the *.

&gt; Source/JavaScriptCore/API/JSValue.mm:1027
&gt; +    if (!m_structHandlers) {
&gt; +        m_structHandlers = new StructHandlers();

I suggest putting this code to create and initialize the handlers into its own separate function.

&gt; Source/JavaScriptCore/API/JSValue.mm:1032
&gt; +            SEL sel = method_getName(method);

Why not spell out selector?

&gt; Source/JavaScriptCore/API/JSValue.mm:1034
&gt; +            size_t len = strlen(name);

I suggest naming this length or nameLength rather than len.

&gt; Source/JavaScriptCore/API/JSValue.mm:1036
&gt; +            if (len &lt; valueWithMinLen || strncmp(name, &quot;valueWith&quot;, 9) || strncmp(name + len - 11, &quot;:inContext:&quot;, 11))

Why not use memcmp instead of strncmp? Is strncmp adding value?

&gt; Source/JavaScriptCore/API/JSValue.mm:1044
&gt; +            if (strcmp(secondType, &quot;@&quot;)) {

We normally use != 0 here to emphasize the != for the result of functions like strcmp and strncmp.

&gt; Source/JavaScriptCore/API/JSValue.mm:1054
&gt; +            m_structHandlers-&gt;add(WTF::String(type).impl(), (StructTagHandler){ sel, 0 });

There’s some unneeded reference count churn here where we create a String and then put its StringImpl into the map and then release the impl. To write it without reference count churn we can do StringImpl::create(type) rather than String(type).impl().

&gt; Source/JavaScriptCore/API/JSValue.mm:1065
&gt; +            if (len &lt; minLenValue || strncmp(name, &quot;to&quot;, 2))

Again, I think memcmp is better than strncmp here.

&gt; Source/JavaScriptCore/API/JSValue.mm:1073
&gt; +            StructHandlers::iterator iter = m_structHandlers-&gt;find(WTF::String(type).impl());

Our hash tables are defined so we can find strings without creating a StringImpl just to do the search. Maybe we should do that here. Or we can just use char* for the keys instead of RefPtr&lt;StringImpl&gt;.

&gt; Source/JavaScriptCore/API/JSValue.mm:1103
&gt; +    StructHandlers::iterator iter = m_structHandlers-&gt;find(WTF::String(encodedType).impl());

It’s a real shame that we have to allocate a StringImpl each time here. We can and should rewrite this so the map contains just char* rather than RefPtr&lt;StringImpl&gt;.

&gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:41
&gt; +    [super init];

Idiomatically we put the return value of super init into self and check it for nil.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:75
&gt; +    char* buffer = (char*)malloc(header + strlen(firstColon + 1) + 1);

static_cast here?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:324
&gt; +        m_constructor = createObjectWithCustomBrand(context, [NSString stringWithFormat:@&quot;%sConstructor&quot;, className], wrapperClass(), [cls retain]);

Where is the class that’s stored in the private data released?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:424
&gt; +    // (1) For immortal objects JSValues will effectively leaj and this results in error output being logged - we should avoid adding associated objects to immortal objects.

Typo: leaj

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:439
&gt; +    //ASSERT(!exception);

Why is this still here and commented out?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:451
&gt; +    static Protocol* protocol = 0;
&gt; +    if (!protocol)
&gt; +        protocol = objc_getProtocol(&quot;JSExport&quot;);

Given that this is C++, it can be written:

    static Protocol* protocol = objc_getProtocol(&quot;JSExport&quot;);

No if statement needed.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:459
&gt; +    static Class cls = 0;
&gt; +    if (!cls)
&gt; +        cls = objc_getClass(&quot;NSBlock&quot;);

Same comment as above.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:41
&gt; +#import &quot;objc/runtime.h&quot;
&gt; +#import &quot;wtf/RetainPtr.h&quot;

These should be angle bracket includes.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:57
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef*)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:67
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:77
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:95
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef*)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:111
&gt; +    ~CallbackArgumentOfClass()

Should say virtual here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:116
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:140
&gt; +class CallbackArgumentNSNumber : public CallbackArgument {
&gt; +public:

Same comment applies many, many other places: There is no reason that the override of the virtual function named set needs to be public. I would have made it private.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:141
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:150
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:159
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:168
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:177
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:193
&gt; +        m_allocation = (char*)malloc(size + alignment);

Should use static_cast.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:203
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef*)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:222
&gt; +    CallbackArgumentBlockCallback(JSBlockAdaptor* adaptor)
&gt; +        : m_adaptor(adaptor)
&gt; +    {
&gt; +    }

Not retaining the passed-in JSBlockAdaptor is unusual. The caller does things correctly, but I worry that it’s easy to get this wrong. One way to avoid this is to use a private constructor and a named construction function named “adopt” to make it clear this adopts a reference count. Or at least name the argument in a way that tries to make that clear. Or even have the class name signal this adoption.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:229
&gt; +    void set(NSInvocation* invocation, NSInteger argumentNumber, JSContext* context, JSValueRef argument, JSValueRef* exception)

Should say virtual and override here.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:263
&gt; +        return nil;

Not sure nil is right here because I don’t think ResultType is a Objective-C object pointer type.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:320
&gt; +    virtual JSValueRef get(NSInvocation*, JSContext* context, JSValueRef*)

Should be marked override.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:328
&gt; +    virtual JSValueRef get(NSInvocation* invocation, JSContext* context, JSValueRef*)

Should be marked override.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:339
&gt; +    virtual JSValueRef get(NSInvocation* invocation, JSContext* context, JSValueRef*)

Should be marked override.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:343
&gt; +        return JSValueMakeNumber(contextInternalContext(context), (double)value);

Should be static_cast. Can we get away without a typecast?

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:357
&gt; +class CallbackResultStruct : public CallbackResult {

Code here is so similar to other classes I have to wonder if there’s a way to share more code.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:366
&gt; +        m_allocation = (char*)malloc(size + alignment);

Should be static_cast.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:492
&gt; +    delete (ObjCCallbackFunction*)JSObjectGetPrivate(object);

static_cast?

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:498
&gt; +    // (1) We don&apos;t want to support the C-API&apos;s confusing drops-locks-once policy - should only drop locks if we can do so recursivey.

Typo: recursivey

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:499
&gt; +    // (2) We&apos;re caling some JSC internals that require us to be on the &apos;inside&apos; - e.g. createTypeError.

Typo: caling

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:500
&gt; +    // (3) We need to be locked (per context would be fine) against conflicting usgae of the ObjCCallbackFunction&apos;s NSInvocation.

Typo: usgae

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:539
&gt; +    static JSClassRef classRef = 0;
&gt; +
&gt; +    if (!classRef) {
&gt; +        JSClassDefinition definition;
&gt; +        definition = kJSClassDefinitionEmpty;
&gt; +        definition.className = &quot;Function&quot;;
&gt; +        definition.finalize = objCCallbackFunctionFinalize;
&gt; +        definition.callAsFunction = objCCallbackFunctionCallAsFunction;
&gt; +        classRef = JSClassCreate(&amp;definition);
&gt; +    }

More elegant to do this in a separate function and write:

    static JSClassRef classRef = createObjCCallbackFunctionClass();

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:560
&gt; +        }
&gt; +        [m_invocation setTarget:target];
&gt; +    }
&gt; +    case CallbackClassMethod:
&gt; +        firstArgument = 2;
&gt; +        break;

I assume this falls through intentionally. I think a comment is needed to make it clear it’s not a mistake.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:591
&gt; +    enum CheckResult {
&gt; +        CheckResultFalse,
&gt; +        CheckResultTrue,
&gt; +        CheckResultUnknown
&gt; +    };
&gt; +    static enum CheckResult check = CheckResultUnknown;
&gt; +    if (check == CheckResultUnknown) {
&gt; +        id block = ^(NSString *string){ return string; };
&gt; +        check = _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;) ? CheckResultTrue : CheckResultFalse;
&gt; +    }
&gt; +    return (bool)check;

There’s no need for the enum. You can just use a combined C++ and C syntax something like this:

    static bool containsClass = ^{
        id block = ^(NSString *string){ return string; };
        return _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;);
    };
    return containsClass;

This avoids a number of unpleasant code style things.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:598
&gt; +    if (!isdigit(*position))
&gt; +        return false;
&gt; +    while(isdigit(*++position));

This should use isASCIIDigit, not isdigit.

The while should have a space after it before the parentheses and should use braces rather than a semicolon for greater clarity.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:613
&gt; +        if (&apos;@&apos; != *(position++) || !skipNumber(position) || &apos;:&apos; != *(position++) || !skipNumber(position))

It’s idiomatic to write *position++ rather than *(position++)

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:617
&gt; +        if ((&apos;@&apos; != *(position++)) || (&apos;?&apos; != *(position++)) || !skipNumber(position) || (!blockSignatureContainsClass() &amp;&amp; strchr(position, &apos;@&apos;)))

The extra parentheses here are a bit confusing. The blockSignatureContainsClass logic is sufficiently subtle that I think we need a comment.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:674
&gt; +    return ((ObjCCallbackFunction*)JSObjectGetPrivate(object))-&gt;wrappedBlock();

static_cast instead of C-style cast?

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:81
&gt; +inline void forEachMethodInClass(Class cls, void (^callback)(Method method))

The argument name method isn’t needed here.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:89
&gt; +    unsigned count;
&gt; +    Method* methods = class_copyMethodList(cls, &amp;count);
&gt; +    if (count) {
&gt; +        for (unsigned i = 0; i &lt; count; ++i)
&gt; +            callback(methods[i]);
&gt; +        free(methods);
&gt; +    }

Why the if statement? It seems that it optimizes the case of 0 methods, which probably is not common enough that it needs optimization. And it causes the code to depend on a return value of NULL for a count of 0; it seems it would be safer to just call free unconditionally.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:100
&gt; +    unsigned count;
&gt; +    struct objc_method_description* methods = protocol_copyMethodDescriptionList(protocol, isRequiredMethod, isInstanceMethod, &amp;count);
&gt; +    if (count) {
&gt; +        for (unsigned i = 0; i &lt; count; ++i)
&gt; +            callback(methods[i].name, methods[i].types);
&gt; +        free(methods);
&gt; +    }

Same comment about the if statement.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:111
&gt; +    unsigned count;
&gt; +    objc_property_t* properties = protocol_copyPropertyList(protocol, &amp;count);
&gt; +    if (count) {
&gt; +        for (unsigned i = 0; i &lt; count; ++i)
&gt; +            callback(properties[i]);
&gt; +        free(properties);
&gt; +    }

Same comment about the if statement.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:117
&gt; +    NSUInteger count = 1;

NSUInteger is a strange type to choose here. I would choose size_t given what this is used for.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:119
&gt; +        char c = *(position++);

Idiomatic to just do *position++

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:138
&gt; +class StringRange {
&gt; +public:
&gt; +    StringRange(const char* begin, const char* end) : m_ptr(strndup(begin, end - begin)) { }
&gt; +    ~StringRange() { free(m_ptr); }
&gt; +    operator const char*() { return m_ptr; }
&gt; +    const char* get() { return m_ptr; }
&gt; +
&gt; +private:
&gt; +    char* m_ptr;
&gt; +};

Should mark this class noncopyable.

The member functions should be const.

&gt; Source/JavaScriptCore/API/ObjcRuntimeExtras.h:219
&gt; +extern &quot;C&quot; {
&gt; +    const char *_protocol_getMethodTypeEncoding(Protocol *, SEL, BOOL isRequiredMethod, BOOL isInstanceMethod);
&gt; +    id objc_initWeak(id *, id);
&gt; +    void objc_destroyWeak(id *);
&gt; +    bool _Block_has_signature(void *);
&gt; +    const char * _Block_signature(void *);
&gt; +}

Are these really needed here? Aren’t they in public system headers?

&gt; Source/JavaScriptCore/API/tests/testapi.c:51
&gt; +#if PLATFORM(MAC)

Seems like the wrong ifdef. Should use the “if we have the Objective-C API” ifdef, right?

&gt; Source/JavaScriptCore/API/tests/testapi.m:137
&gt; +    enum CheckResult {
&gt; +        CheckResultFalse,
&gt; +        CheckResultTrue,
&gt; +        CheckResultUnknown
&gt; +    };
&gt; +    static enum CheckResult check = CheckResultUnknown;
&gt; +    if (check == CheckResultUnknown) {
&gt; +        id block = ^(NSString *string){ return string; };
&gt; +        check = _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;) ? CheckResultTrue : CheckResultFalse;
&gt; +    }
&gt; +    return (bool)check;

Should rewrite as I suggested above.

&gt; Source/JavaScriptCore/API/tests/testapi.m:147
&gt; +        checkResult(@&quot;2 + 2&quot;, [result toInt32] == 4);

This doesn’t check the type of the result. Same is true of a lot of other tests below. Wouldn’t it be better to check the type too?

&gt; Source/JavaScriptCore/runtime/JSGlobalData.h:456
&gt; +        void *m_apiData;

Same comments here as on JSGlobalObject below. I don’t like the use of “api” to mean Objective-C language binding layer and I don’t like the use of a public data member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798723</commentid>
    <comment_count>28</comment_count>
      <attachid>181004</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-02 10:33:47 -0800</bug_when>
    <thetext>Comment on attachment 181004
Removed redundant forEachProtocolImplementingProtocol

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

&gt;&gt; Source/JavaScriptCore/API/JSValue.mm:533
&gt;&gt; +        @&quot;x&quot;:[NSNumber numberWithFloat:point.x],
&gt; 
&gt; Could use @(point.x) instead of [NSNumber numberWithFloat:point.x]
&gt; 
&gt; The explicit use of float is potentially wrong since CGFloat can be either float or double.

I guess the @(point.x) feature may not yet be in the version of clang we are using, so oops. But the point about CGFloat remains. Probably best to make a helper function that makes a number from a CGFloat that uses float or double as appropriate.

&gt;&gt; Source/JavaScriptCore/API/JSValue.mm:542
&gt;&gt; +        @&quot;length&quot;:[NSNumber numberWithFloat:range.length]
&gt; 
&gt; Why float? These are integers. I suggest just @(range.location) and @(range.length).

I think the correct method to use is numberWithUnsignedInteger: since NSRange values are NSUInteger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798763</commentid>
    <comment_count>29</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-02 11:44:07 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; There’s no need for the enum. You can just use a combined C++ and C syntax something like this:
&gt; 
&gt;     static bool containsClass = ^{
&gt;         id block = ^(NSString *string){ return string; };
&gt;         return _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;);
&gt;     };
&gt;     return containsClass;
&gt; 
&gt; This avoids a number of unpleasant code style things.

Now that&apos;s nice.
I guess I&apos;m not used to programming with closures in C &amp; have not encountered this before - I like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798974</commentid>
    <comment_count>30</comment_count>
      <attachid>181080</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-02 15:25:46 -0800</bug_when>
    <thetext>Created attachment 181080
Darin review feedback part 1

Hi Darin, thanks for all the review feedback.

Here is a patch with fixes for a big bulk of the more trivial issues, will follow up with fixes/responses to the issues not yet addressed.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798990</commentid>
    <comment_count>31</comment_count>
      <attachid>181080</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-02 15:31:39 -0800</bug_when>
    <thetext>Comment on attachment 181080
Darin review feedback part 1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799006</commentid>
    <comment_count>32</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-02 15:40:05 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I guess the @(point.x) feature may not yet be in the version of clang we are using, so oops. But the point about CGFloat remains. Probably best to make a helper function that makes a number from a CGFloat that uses float or double as appropriate.

Actually the API is going to require latest clang anyway (for enhanced type information strings in blocks).  The @() style looks good to me, so I think I&apos;ll follow this suggestion for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799125</commentid>
    <comment_count>33</comment_count>
      <attachid>181117</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-02 17:26:19 -0800</bug_when>
    <thetext>Created attachment 181117
Darin review feedback part 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799128</commentid>
    <comment_count>34</comment_count>
      <attachid>181117</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-02 17:35:47 -0800</bug_when>
    <thetext>Comment on attachment 181117
Darin review feedback part 2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799253</commentid>
    <comment_count>35</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-02 21:52:31 -0800</bug_when>
    <thetext>Hi Darin,

Hopefully most of the issues you identified should now been fixed by the follow up patches.
There are a couple of couple of things left to follow up on.

(In reply to comment #27)
&gt; Formatting of Objective-C type pointers here is all over the map. Our coding style says “NSInvocation *” but I don’t feel strongly about that except in public headers. Maybe we can change the WebKit coding style. I wish this patch was self-consistent about that, though. But that’s less important than other comments I made here.

I got into a bit of a mess here between the Objective-C &amp; WebKit coding styles.  I&apos;d attempted to resolve this the wrong way - based on the context rather than the type - so Objective-C methods used Objective-C style for Objective-C types, and C functions used C style for Objective-C types.

I&apos;ve now corrected this so we&apos;re (hopefully) consistently using Objective-C style for Objective-C types everywhere.

&gt; &gt; Source/JavaScriptCore/API/JSContext.h:54
&gt; &gt; +// Instances of JSContext originating from WebKit will return a reference to the
&gt; &gt; +// WindowProxy object.
&gt; 
&gt; Interesting, but confusing. I don’t know what a WindowProxy object is.

WindowProxy is the WebIDL term for the DOMWindowShell (as opposed to the ECMA defined Global Object).

I think this method needs a well crafted comment - it clearly needs some better description, but I&apos;d like to avoid having too in depth and wordy an exposition here. I&apos;ll undertake to revisit this.

&gt; &gt; Source/JavaScriptCore/API/JSValue.mm:1073
&gt; &gt; +            StructHandlers::iterator iter = m_structHandlers-&gt;find(WTF::String(type).impl());
&gt; 
&gt; Our hash tables are defined so we can find strings without creating a StringImpl just to do the search. Maybe we should do that here. Or we can just use char* for the keys instead of RefPtr&lt;StringImpl&gt;.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSValue.mm:1103
&gt; &gt; +    StructHandlers::iterator iter = m_structHandlers-&gt;find(WTF::String(encodedType).impl());
&gt; 
&gt; It’s a real shame that we have to allocate a StringImpl each time here. We can and should rewrite this so the map contains just char* rather than RefPtr&lt;StringImpl&gt;.

Yep, good point. Having looked at this with Geoff, I think the best solution is probably to use a string translator. There&apos;s a little bit of cleanup necessary to make this work (these are currently all defined in AtomicString.cpp, so at minimum will need moving to their own header). I&apos;m going to hand this task on to whomever takes over the API work from me (probably Mark).

&gt; &gt; Source/JavaScriptCore/API/JSWrapperMap.mm:324
&gt; &gt; +        m_constructor = createObjectWithCustomBrand(context, [NSString stringWithFormat:@&quot;%sConstructor&quot;, className], wrapperClass(), [cls retain]);
&gt; 
&gt; Where is the class that’s stored in the private data released?

These are being freed by wrapperFinalize (since the constructor objects are instances of wrapperClass). This could be clearer, maybe factoring out a function to construct wrapper objects that also performed the retain might be an improvement.

&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalData.h:456
&gt; &gt; +        void *m_apiData;
&gt; 
&gt; Same comments here as on JSGlobalObject below. I don’t like the use of “api” to mean Objective-C language binding layer and I don’t like the use of a public data member.

I was lacking inspiration here! How about:
    - bindingsPrivateData(), setBindingsPrivateData()?
    - objCBindingsPrivateData(), setObjCBindingsPrivateData()?

cheers,
G</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804984</commentid>
    <comment_count>36</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-10 22:58:39 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #27)
&gt; &gt; There’s no need for the enum. You can just use a combined C++ and C syntax something like this:
&gt; &gt; 
&gt; &gt;     static bool containsClass = ^{
&gt; &gt;         id block = ^(NSString *string){ return string; };
&gt; &gt;         return _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;);
&gt; &gt;     };
&gt; &gt;     return containsClass;
&gt; &gt; 
&gt; &gt; This avoids a number of unpleasant code style things.
&gt; 
&gt; Now that&apos;s nice.
&gt; I guess I&apos;m not used to programming with closures in C &amp; have not encountered this before - I like this.

To prevent an error I&apos;ve seen before, make sure you aren&apos;t assigning the block itself to the static. You want to assign the result of evaluating the block to the static!

    #include &lt;stdio.h&gt;
    int main()
    {
        static bool test1 = ^{ printf(&quot;Evaluated test1\n&quot;); return false; };
        static bool test2 = ^{ printf(&quot;Evaluated test2\n&quot;); return false; }();
        printf(&quot;test1: %s\n&quot;, test1 ? &quot;true&quot; : &quot;false&quot;); // =&gt; true, not what we expected.
        printf(&quot;test2: %s\n&quot;, test2 ? &quot;true&quot; : &quot;false&quot;); // =&gt; false, this is what we wanted.
    }

outputs:

    Evaluated test2
    test1: true
    test2: false</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804993</commentid>
    <comment_count>37</comment_count>
      <attachid>181080</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-10 23:29:14 -0800</bug_when>
    <thetext>Comment on attachment 181080
Darin review feedback part 1

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

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:548
&gt; +    static bool containsClass = ^{
&gt;          id block = ^(NSString *string){ return string; };
&gt; -        check = _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;) ? CheckResultTrue : CheckResultFalse;
&gt; -    }
&gt; -    return (bool)check;
&gt; +        return _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;);
&gt; +    };
&gt; +    return containsClass;

Oops, looks like I was late to the party. I think this should evaluate the block. I just verified on my machine I get different results for &quot;containsClass = ^{...}&quot; and &quot;containsClass = ^{...}()&quot;.

I think blockSignatureContainsClass is now incorrectly always returning true when it should be false.

&gt; Source/JavaScriptCore/API/tests/testapi.m:132
&gt; +    static bool containsClass = (bool)^{
&gt;          id block = ^(NSString *string){ return string; };
&gt; -        check = _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;) ? CheckResultTrue : CheckResultFalse;
&gt; -    }
&gt; -    return (bool)check;
&gt; +        return _Block_has_signature(block) &amp;&amp; strstr(_Block_signature(block), &quot;NSString&quot;);
&gt; +    };
&gt; +    return containsClass;
&gt;  }

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805145</commentid>
    <comment_count>38</comment_count>
      <attachid>181004</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-11 03:50:19 -0800</bug_when>
    <thetext>Comment on attachment 181004
Removed redundant forEachProtocolImplementingProtocol

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

Cool stuff!!! Sorry to review an old patch, but its the only place where I could read through and comment on its entirety. I avoided all of Darin&apos;s comments, and tried to check ToT before adding a comment in case things were already fixed.

&gt; Source/JavaScriptCore/API/APIJSValue.h:43
&gt; +// being maintained by this JSValue, and the JSValue instance may no longer by

Typo: &quot;no longer by used&quot; =&gt; &quot;no longer be used&quot;

&gt; Source/JavaScriptCore/API/APIJSValue.h:44
&gt; +// used as a reference to this value. For any method invoked on instance of

Typo: &quot;invoked on instance of JSValue with a nil&quot; probably =&gt; &quot;invoked on instances of JSValue with a nil&quot;

&gt; Source/JavaScriptCore/API/APIJSValue.h:166
&gt; +// the JavaScript langauage.

Typo: &quot;langauage&quot; =&gt; &quot;language&quot;

&gt; Source/JavaScriptCore/API/APIJSValue.h:191
&gt; +// Call this value as a function passing the specified &quot;this&quot; value and arguments.
&gt; +- (JSValue *)callWithArguments:(NSArray *)arguments;

The comment seems out of date. There is no specified &quot;this&quot; value. The implementation explicitly passes 0 as the thisObject.

&gt; Source/JavaScriptCore/API/APIJSValue.h:196
&gt; +// value, and the specified agruments.

Typo: &quot;agruments&quot; =&gt; &quot;arguments&quot;.

&gt; Source/JavaScriptCore/API/APIJSValue.h:206
&gt; +// Objective-C methods exported to JavaScript may have argument and/or return
&gt; +// values of struct types if the struct if conversion to and from the struct
&gt; +// is supported by JSValue. Support is provided for any types where JSValue

Typo: &quot;return values of struct types if the struct if conversion to&quot; =&gt; ???

&gt; Source/JavaScriptCore/API/APIJSValue.h:238
&gt; +// Convert a value to type CGRange by accessing properties named &quot;width&quot; and
&gt; +// &quot;height&quot; from this value converting the results to double.
&gt; +- (CGSize)toSize;

Typo: &quot;CGRange&quot; =&gt; &quot;CGSize&quot;

&gt; Source/JavaScriptCore/API/APIJSValue.h:251
&gt; +// An object key passed as a subscript will be converted to a JavaScipt value,

Typo: &quot;JavaScipt&quot; =&gt; &quot;JavaScript&quot;

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.h:27
&gt; +#import &lt;wtf/RetainPtr.h&gt;

Looks like you can move this import to the implementation file. It&apos;s not needed here in the header.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:26
&gt; +#include &quot;config.h&quot;

Everywhere you include &quot;config.h&quot; you use #include. They can be #import to match all other imports.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:38
&gt; +#import &quot;JSWrapperMap.h&quot;
&gt; +#import &quot;JSValue.h&quot;
&gt; +#import &quot;JSValueInternal.h&quot;

Ordering: JSValue &lt; JSWrapper

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:40
&gt; +#import &quot;wtf/OwnPtr.h&quot;

Switch to &lt;&gt;s: &lt;wtf/OwnPtr.h&gt;

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:42
&gt; +extern &quot;C&quot; {

Some extern &quot;C&quot; blocks in this patch are indented and others aren&apos;t. I don&apos;t know if there is a standard style.

&gt; Source/JavaScriptCore/API/JSBlockAdaptor.mm:372
&gt; +        // (and that were able to create a forwarding block for this signature).

Typo: &quot;were&quot; =&gt; &quot;we&apos;re&quot;

&gt; Source/JavaScriptCore/API/JSContext.h:79
&gt; +// assign ant uncaught exception to this property).

Typo: &quot;ant&quot; =&gt; &quot;an&quot;

&gt; Source/JavaScriptCore/API/JSContext.h:80
&gt; +// If a JSValue orginating from a different JSVirtualMachine this this context

Typo: &quot;orginating&quot; =&gt; &quot;originating&quot;
Typo: &quot;JSVirtualMachine this this context&quot; =&gt; &quot;JSVirtualMachine than this context&quot;

&gt; Source/JavaScriptCore/API/JSContext.h:88
&gt; +// occuring within a callback from JavaScript to be rethrown upon return.

Typo: &quot;occuring&quot; =&gt; &quot;occurring&quot;

&gt; Source/JavaScriptCore/API/JSContext.h:106
&gt; +// An object key passed as a subscript will be converted to a JavaScipt value,

Typo: &quot;JavaScipt&quot; =&gt; &quot;JavaScript&quot;

&gt; Source/JavaScriptCore/API/JSContext.mm:119
&gt; +        for (size_t i =0; i &lt; count; ++i)

Style: &quot;i =0&quot; missing a space

&gt; Source/JavaScriptCore/API/JSContext.mm:167
&gt; +    [super dealloc];

I&apos;d expect to see synthesized properties exception (retain) and exceptionHandler (copy) released here if needed as well. Or are they guaranteed to be nil (in which case it would be good to assert that)?

&gt; Source/JavaScriptCore/API/JSExport.h:30
&gt; +// When an JavaScript value is created from an instance of an Objective-C class

Typo: &quot;an JavaScript&quot; =&gt; &quot;a JavaScript&quot;. This is the only case an was used.

&gt; Source/JavaScriptCore/API/JSExport.h:60
&gt; +// property being exported a JavaScript accessor property will be created on the
&gt; +// Prototype, and for each class method exported a JavaScript function will be
&gt; +// created on the Constructor object. For example:

This mentions that it creates accessor properties. It would be nice to mention if they are &quot;enumerable&quot; and &quot;configurable&quot; or not.

&gt; Source/JavaScriptCore/API/JSExport.h:73
&gt; +// since the class conforms to the MyClassJavaScriptExports protocol, and this

Typo: &quot;MyClassJavaScriptExports&quot; =&gt; &quot;MyClassJavaScriptMethods&quot;

&gt; Source/JavaScriptCore/API/JSExport.h:96
&gt; +//    will be created, allowing the the JavaScript function to be used in the

Typo: &quot;the the&quot; =&gt; &quot;the&quot;

&gt; Source/JavaScriptCore/API/JSExport.h:101
&gt; +// derives from NSString by conforms to JSExport is passed to valueWithObject:,

Typo: &quot;derives from NSString by conforms to&quot; =&gt; &quot;derives from NSString  but conforms to &quot;

&gt; Source/JavaScriptCore/API/JSValue.mm:26
&gt; +#include &quot;config.h&quot;

Normally there would be import &quot;JSValue.h&quot; here and a newline after it.

&gt; Source/JavaScriptCore/API/JSValue.mm:42
&gt; +#import &quot;wtf/HashMap.h&quot;
&gt; +#import &quot;wtf/HashSet.h&quot;
&gt; +#import &quot;wtf/Vector.h&quot;
&gt; +#import &lt;wtf/TCSpinLock.h&gt;
&gt; +#import &quot;wtf/text/WTFString.h&quot;

&lt;wtf&gt; style.

&gt; Source/JavaScriptCore/API/JSValue.mm:306
&gt; +    if (index != (unsigned)index)
&gt; +        [self valueForProperty:[[JSValue valueWithDouble:index inContext:context] toString]];

Missing return!

&gt; Source/JavaScriptCore/API/JSValue.mm:919
&gt; +        if ([object isKindOfClass:[NSArray class]])
&gt; +            return (ObjcContainerConvertor::Task){ object, JSObjectMakeArray(contextInternalContext(context), 0, NULL, 0), ContainerArray };

NSArray is already handled above. These 2 lines can be removed.

&gt; Source/JavaScriptCore/API/JSValue.mm:922
&gt; +        if ([object isKindOfClass:[NSDictionary class]])
&gt; +            return (ObjcContainerConvertor::Task){ object, JSObjectMake(contextInternalContext(context), 0, 0), ContainerDictionary };

NSDictionary is already handled above. These 2 lines can be removed.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:34
&gt; +#import &quot;ObjCCallbackFunction.h&quot;
&gt; +#import &quot;ObjcRuntimeExtras.h&quot;

Although correct, the different capitalizations of these files is asking for trouble on a case-sensitive system! It would be good to standardize the capitalization if this wasn&apos;t already on your radar.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:36
&gt; +#import &quot;wtf/Vector.h&quot;

&lt;wtf&gt; style

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:66
&gt; +    // Use &apos;index&apos; to check for colons, if there are non, this is easy!

Typo: &quot;non&quot; =&gt; &quot;none&quot;

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:106
&gt; +// Make an object that is in all ways are completely vanilla JavaScript object,

Typo: This line need rephrasing.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:108
&gt; +// Object.prototype.toString comversion.

Typo: &quot;comversion&quot; =&gt; &quot;conversion&quot;

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:154
&gt; +//  * If an accessorMap is provided, and conatins a this name, store the method in the map.

Typo: &quot;conatins&quot; =&gt; &quot;contains&quot;. And the grammar here might need to change &quot;and contains a this name&quot;?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:155
&gt; +//  * Otherwise, if the object doesn&apos;t already conatin a property with name, create it.

Typo: &quot;conatin&quot; =&gt; &quot;contain&quot;

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:402
&gt; +    // Skip internal classes begining with &apos;_&apos; - just copy link to the parent class&apos;s info.

Typo: &quot;begining&quot; =&gt; &quot;beginning&quot;

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:425
&gt; +    // (2) A long lived object may rack up many JSValues. When the contexts are released these will unproctect the associated JavaScript objects,

Typo: &quot;unproctect&quot; =&gt; &quot;unprotect&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805651</commentid>
    <comment_count>39</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-11 15:00:40 -0800</bug_when>
    <thetext>Hi Joe, Thanks for all the feedback.  The block thing was a genuine bug – I believe MarkH has since fixed this.  I&apos;ll follow up on all these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805669</commentid>
    <comment_count>40</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-11 15:19:16 -0800</bug_when>
    <thetext>Yep, looks like he handled them in:
&lt;http://webkit.org/b/106055&gt; testapi is failing with a block-related error in the Objc API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820545</commentid>
    <comment_count>41</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-01-30 14:16:26 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Hi Joe, Thanks for all the feedback.  The block thing was a genuine bug – I believe MarkH has since fixed this.  I&apos;ll follow up on all these comments.

Follow-ups for my (non typo/style) comments are:
&lt;http://webkit.org/b/108378&gt; Objective-C API: exceptionHandler needs to be released in JSContext dealloc
&lt;http://webkit.org/b/108264&gt; Objective-C API: Fix insertion of values greater than the max index allowed by the spec

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180985</attachid>
            <date>2013-01-01 00:23:16 -0800</date>
            <delta_ts>2013-01-01 00:48:54 -0800</delta_ts>
            <desc>First cut</desc>
            <filename>105889.1.patch</filename>
            <type>text/plain</type>
            <size>224889</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG86
CisgICAgICAgICAgICAqIHNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5oIChi
dXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAgICog
bnVtZXJvdXMgRklYTUVzLCBhbGwgd2l0aCBzZXBhcmF0ZSBidWdzIGZpbGVkLgorCisgICAgICAg
ICogQVBJL0FQSUpTVmFsdWUuaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZl
LUMgY2xhc3MgaXMgdXNlZCB0byByZWZlcmVuY2UgYSBKYXZhU2NyaXB0IG9iamVjdC4KKyAgICAg
ICAgKiBBUEkvSlNCYXNlLmg6CisgICAgICAgICAgICAtIGFkZGVkIEpTX09CSkNfQVBJX0VOQUJM
RUQgbWFjcm8gdG8gY29udHJvbCBPYmpDIEFQSSBzdXBwb3J0LgorICAgICAgICAqIEFQSS9KU0Js
b2NrQWRhcHRvci5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmplY3RpdmUtQyBjbGFz
cyBpcyB1c2VkIGluIGNyZWF0aW5nIGEgc3BlY2lhbCBOU0Jsb2NrIHByb3h5aW5nIGEgSmF2YVNj
cmlwdCBmdW5jdGlvbi4KKyAgICAgICAgKiBBUEkvSlNCbG9ja0FkYXB0b3IubW06IEFkZGVkLgor
ICAgICAgICAoQmxvY2tBcmd1bWVudCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50Ojp+QmxvY2tB
cmd1bWVudCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50Qm9vbGVhbik6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50Qm9vbGVhbjo6Z2V0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnROdW1lcmljKToK
KyAgICAgICAgKEJsb2NrQXJndW1lbnROdW1lcmljOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1
bWVudElkKToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRJZDo6Z2V0KToKKyAgICAgICAgKEJsb2Nr
QXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFN0cnVjdDo6QmxvY2tBcmd1
bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0Ojp+QmxvY2tBcmd1bWVu
dFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpnZXQpOgorICAgICAgICAg
ICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIEpTQmxvY2tBZGFwdG9y
LgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZSk6CisgICAgICAgIChCbG9ja0Fy
Z3VtZW50VHlwZURlbGVnYXRlOjp0eXBlSW50ZWdlcik6CisgICAgICAgIChCbG9ja0FyZ3VtZW50
VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVs
ZWdhdGU6OnR5cGVCb29sKToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVWb2lkKToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6Cisg
ICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlT2ZDbGFzcyk6CisgICAgICAg
IChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQmxvY2spOgorICAgICAgICAoQmxvY2tB
cmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRl
IGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQmxv
Y2tSZXN1bHQpOgorICAgICAgICAoQmxvY2tSZXN1bHQ6On5CbG9ja1Jlc3VsdCk6CisgICAgICAg
IChCbG9ja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQmxvY2tSZXN1bHRWb2lkOjpzZXQpOgorICAg
ICAgICAoQmxvY2tSZXN1bHRJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrUmVzdWx0SW50ZWdlcjo6
c2V0KToKKyAgICAgICAgKEJsb2NrUmVzdWx0RG91YmxlKToKKyAgICAgICAgKEJsb2NrUmVzdWx0
RG91YmxlOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRCb29sZWFuKToKKyAgICAgICAgKEJs
b2NrUmVzdWx0Qm9vbGVhbjo6c2V0KToKKyAgICAgICAgKEJsb2NrUmVzdWx0U3RydWN0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0U3RydWN0OjpCbG9ja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChC
bG9ja1Jlc3VsdFN0cnVjdDo6fkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAgICAgKEJsb2NrUmVz
dWx0U3RydWN0OjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIHJlc3VsdCB0eXBlIGluZm9y
bWF0aW9uIG9mIGEgSlNCbG9ja0FkYXB0b3IuCisgICAgICAgIChidWlsZEJsb2NrU2lnbmF0dXJl
KToKKyAgICAgICAgICAgIC0gcGFydGlhbCBzdGVwIGluIGNvbnN0cnVjdGluZyBhIHNpZ25hdHVy
ZSB3aXRoIHN0YWNrIG9mZnNldCBpbmZvcm1hdGlvbiBmcm9tIG9uZSB3aXRob3V0LgorICAgICAg
ICAoLVtKU0Jsb2NrQWRhcHRvciBpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3RvY29sOl0p
OgorICAgICAgICAgICAgLSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKC1bSlNCbG9ja0FkYXB0b3Ig
YmxvY2tNYXRjaGVzU2lnbmF0dXJlOl0pOgorICAgICAgICAgICAgLSBjaGVjayB3aGV0aGVyIHNp
Z25hdHVyZSBzdHJpbmdzIG1hdGNoLCB3aGVyZSBvbmx5IG9uZSBjb250YWlucyBzdGFjayBmcmFt
ZSBvZmZzZXRzLgorICAgICAgICAoLVtKU0Jsb2NrQWRhcHRvciBibG9ja0Zyb21WYWx1ZTppbkNv
bnRleHQ6d2l0aEV4Y2VwdGlvbjpdKToKKyAgICAgICAgICAgIC0gdXNlIHRoZSBhZGFwdG9yIHRv
IGNyZWF0ZSBhIHNwZWNpYWwgZm9yd2FyZGluZyBibG9jay4KKyAgICAgICAgKiBBUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6OmluaGVyaXRzKToKKyAgICAg
ICAgICAgIC0gYWRkIG1pc3NpbmcgYnJhY2VzIHRvIG11bHRpbGluZSBmb3Igc3RhdGVtZW50Lgor
ICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2Jq
ZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byByZWZlcmVuY2UgYSBKYXZhU2NyaXB0IGNvbnRleHQu
CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbTogQWRkZWQuCisgICAgICAgICgtW0pTQ29udGV4
dCBpbml0XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0NvbnRl
eHQgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0IGlu
IGEgZ2l2ZW4gVk0gKEpTR2xvYmFsRGF0YSkuCisgICAgICAgICgtW0pTQ29udGV4dCBldmFsdWF0
ZVNjcmlwdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IGdsb2JhbE9iamVjdF0pOgorICAgICAg
ICAgICAgLSBldmFsdWF0ZSBhIHNjcmlwdCwgZ2xvYmFsIG9iamVjdCBhY2Nlc3Nvci4KKyAgICAg
ICAgKCtbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XSk6CisgICAgICAgICgrW0pTQ29udGV4dCBj
dXJyZW50VGhpc10pOgorICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudEFyZ3VtZW50c10pOgor
ICAgICAgICAgICAgLSBUaGVzZSBtZXRob2RzIG9idGFpbiBjb250ZXh0LCB0aGlzLCBhcmd1bWVu
dHMgZnJvbSB3aXRoaW4gYSBjYWxsYmFjay4KKyAgICAgICAgKC1bSlNDb250ZXh0IHZpcnR1YWxN
YWNoaW5lXSk6CisgICAgICAgICAgICAtIGltcGxlbWVudGF0aW9uIGZvciAudmlydHVhbE1hY2hp
bmUgcHJvcGVydHkuCisgICAgICAgICgtW0pTQ29udGV4dCBvYmplY3RGb3JLZXllZFN1YnNjcmlw
dDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE9iamVjdDpmb3JLZXllZFN1YnNjcmlwdDpd
KToKKyAgICAgICAgICAgIC0gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IHByb3BlcnR5IGFjY2Vzcy4K
KyAgICAgICAgKGNvbnRleHRJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAgICAgLSBpbnRlcm5h
bCBhY2Nlc3NvciB0byBtX2NvbnRleHQuCisgICAgICAgICgtW0pTQ29udGV4dCBkZWFsbG9jXSk6
CisgICAgICAgICAgICAtIGRlc2N0cnVjdG9yLgorICAgICAgICAoLVtKU0NvbnRleHQgbm90aWZ5
RXhjZXB0aW9uOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246XSk6
CisgICAgICAgICAgICAtIGludGVybmFsIG1ldGhvZCB0byByZWNvcmQgYW4gZXhjZXB0aW9uIHdh
cyB0aHJvd24uCisgICAgICAgICgtW0pTQ29udGV4dCBiZWdpbkNhbGxiYWNrV2l0aERhdGE6dGhp
c1ZhbHVlOmFyZ3VtZW50Q291bnQ6YXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQg
ZW5kQ2FsbGJhY2tXaXRoRGF0YTpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0
byBwdXNoL3BvcCBhIGNhbGxiYWNrIHJlY29yZC4KKyAgICAgICAgKC1bSlNDb250ZXh0IHByb3Rl
Y3Q6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB1bnByb3RlY3Q6XSk6CisgICAgICAgICAgICAt
IGludGVybmFsIG1ldGhvZHMgdG8gYWRkIGEgdmFsdWUgdG8gYSBwcm90ZWN0IHNldCAodXNlZCB0
byBwcm90ZWN0IHRoZSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBKU1ZhbHVlKS4KKyAgICAgICAgKC1b
SlNDb250ZXh0IHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGludGVybmFsIG1l
dGhvZCB0byBjcmVhdGUgYSB3cmFwcGVyIG9iamVjdC4KKyAgICAgICAgKFdlYWtDb250ZXh0UmVm
OjpXZWFrQ29udGV4dFJlZik6CisgICAgICAgIChXZWFrQ29udGV4dFJlZjo6fldlYWtDb250ZXh0
UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjpnZXQpOgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OnNldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyB0byBpbXBsZW1lbnQgYSB3
ZWFrIHJlZmVyZW5jZSB0byBhIEpTQ29udGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0SW50
ZXJuYWwuaDogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0RhdGEpOgorICAgICAgICAoV2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTQ29udGV4dC5tbSBmb3IgZGVzY3Jp
cHRpb24gb2YgaW50ZXJuYWwgbWV0aG9kcy4KKyAgICAgICAgKiBBUEkvSlNFeHBvcnQuaDogQWRk
ZWQuCisgICAgICAgICAgICAtIFByb3ZpZGVzIEpTRXhwb3J0IHByb3RvY29sICYgSlNFeHBvcnRB
cyBtYWNyby4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZS5tbTogQWRkZWQuCisgICAgICAgICgrW0pT
VmFsdWUgdmFsdWVXaXRoT2JqZWN0OmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2
YWx1ZVdpdGhCb29sOmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhE
b3VibGU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aEludDMyOmlu
Q29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhVSW50MzI6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpdKToK
KyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdSZWd1bGFyRXhwcmVzc2lvbkZyb21QYXR0ZXJuOmZs
YWdzOmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZy
b21NZXNzYWdlOmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxs
SW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZEluQ29u
dGV4dDpdKToKKyAgICAgICAgICAgIC0gQ29uc3RydWN0b3JzLgorICAgICAgICAoLVtKU1ZhbHVl
IHRvT2JqZWN0XSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9PYmplY3RPZkNsYXNzOl0pOgorICAg
ICAgICAoLVtKU1ZhbHVlIHRvQm9vbF0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRG91YmxlXSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9JbnQzMl0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvVUlu
dDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9OdW1iZXJdKToKKyAgICAgICAgKC1bSlNWYWx1
ZSB0b1N0cmluZ10pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGF0ZV0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvQXJyYXldKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0RpY3Rpb25hcnldKToKKyAg
ICAgICAgICAgIC0gQ29udmVyc2lvbiB0byBPYmplY3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKC1b
SlNWYWx1ZSB2YWx1ZUZvclByb3BlcnR5Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVl
OmZvclByb3BlcnR5Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGRlbGV0ZVByb3BlcnR5Ol0pOgor
ICAgICAgICAoLVtKU1ZhbHVlIGhhc1Byb3BlcnR5Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGRl
ZmluZVByb3BlcnR5OmRlc2NyaXB0b3I6XSk6CisgICAgICAgICAgICAtIFByb3BlcnR5IGFjY2Vz
cyBieSBwcm9wZXJ0eSBuYW1lLgorICAgICAgICAoLVtKU1ZhbHVlIHZhbHVlQXRJbmRleDpdKToK
KyAgICAgICAgKC1bSlNWYWx1ZSBzZXRWYWx1ZTphdEluZGV4Ol0pOgorICAgICAgICAgICAgLSBQ
cm9wZXJ0eSBhY2Nlc3MgYnkgaW5kZXguCisgICAgICAgICgtW0pTVmFsdWUgaXNVbmRlZmluZWRd
KToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc051bGxdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Jv
b2xlYW5dKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc051bWJlcl0pOgorICAgICAgICAoLVtKU1Zh
bHVlIGlzU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNPYmplY3RdKToKKyAgICAgICAg
ICAgIC0gVGVzdCBKYXZhU2NyaXB0IHR5cGUuCisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFRv
T2JqZWN0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzRXF1YWxXaXRoVHlwZUNvZXJjaW9uVG9P
YmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNJbnN0YW5jZU9mOl0pOgorICAgICAgICAg
ICAgLSA9PT0sID09LCBpbnN0YW5jZW9mIG9wZXJhdG9ycy4KKyAgICAgICAgKC1bSlNWYWx1ZSBj
YWxsV2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBjb25zdHJ1Y3RXaXRoQXJn
dW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGludm9rZU1ldGhvZDp3aXRoQXJndW1lbnRz
Ol0pOgorICAgICAgICAgICAgLSBDYWxsICYgY29uc3RydWN0LgorICAgICAgICAoLVtKU1ZhbHVl
IGNvbnRleHRdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC5jb250ZXh0IHBy
b3BlcnR5LgorICAgICAgICAoLVtKU1ZhbHVlIHRvUG9pbnRdKToKKyAgICAgICAgKC1bSlNWYWx1
ZSB0b1JhbmdlXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9SZWN0XSk6CisgICAgICAgICgtW0pT
VmFsdWUgdG9TaXplXSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUG9pbnQ6aW5Db250
ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmluQ29udGV4dDpdKToK
KyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OmluQ29udGV4dDpdKToKKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhTaXplOmluQ29udGV4dDpdKToKKyAgICAgICAgICAgIC0gU3Vw
cG9ydCBmb3IgTlMgc3RydWN0IHR5cGVzLgorICAgICAgICAoLVtKU1ZhbHVlIG9iamVjdEZvcktl
eWVkU3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIG9iamVjdEF0SW5kZXhlZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6Zm9yS2V5ZWRTdWJzY3JpcHQ6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0T2JqZWN0OmF0SW5kZXhlZFN1YnNjcmlwdDpdKToK
KyAgICAgICAgICAgIC0gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IHByb3BlcnR5IGFjY2Vzcy4KKyAg
ICAgICAgKGlzRGF0ZSk6CisgICAgICAgIChpc0FycmF5KToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBmb3IgaW5zdGFuY2VzIG9mIEpTIERhdGUsIEFy
cmF5IHR5cGVzLgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoVGFz
ayk6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6SlNDb250YWluZXJDb252ZXJ0b3Ip
OgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OmlzV29ya0xpc3RFbXB0eSk6CisgICAg
ICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChKU0NvbnRhaW5l
ckNvbnZlcnRvcjo6YWRkKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjp0YWtlKToK
KyAgICAgICAgICAgIC0gaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBzdGF0ZSB3aGlsZSBjb252
ZXJ0aW5nIHRvIEFycmF5L0RpY3Rpb25hcnkgb2JqZWN0cy4KKyAgICAgICAgKHZhbHVlVG9PYmpl
Y3RXaXRob3V0Q29weSk6CisgICAgICAgIChjb250YWluZXJWYWx1ZVRvT2JqZWN0KToKKyAgICAg
ICAgKHZhbHVlVG9PYmplY3QpOgorICAgICAgICAodmFsdWVUb051bWJlcik6CisgICAgICAgICh2
YWx1ZVRvU3RyaW5nKToKKyAgICAgICAgKHZhbHVlVG9EYXRlKToKKyAgICAgICAgKHZhbHVlVG9B
cnJheSk6CisgICAgICAgICh2YWx1ZVRvRGljdGlvbmFyeSk6CisgICAgICAgICAgICAtIGZ1bmN0
aW9uIGZvciBjb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIE9iamVjdGl2ZS1DIG9iamVj
dHMuCisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVydG9yKToKKyAgICAgICAgKE9iamNDb250
YWluZXJDb252ZXJ0b3I6Ok9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToKKyAgICAgICAgKE9iamNDb250YWlu
ZXJDb252ZXJ0b3I6OmNvbnZlcnQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
YWRkKToKKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3I6OnRha2UpOgorICAgICAgICAg
ICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxlIGNvbnZlcnRpbmcgdG8g
QXJyYXkvRGljdGlvbmFyeSB2YWx1ZXMuCisgICAgICAgIChvYmplY3RUb1ZhbHVlV2l0aG91dENv
cHkpOgorICAgICAgICAob2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICh2YWx1ZUludGVybmFsVmFs
dWUpOgorICAgICAgICAgICAgLSBmdW5jdGlvbiBmb3IgY29udmVydGluZyBPYmplY3RpdmUtQyBv
YmplY3RzIHRvIEphdmFTY3JpcHQgdmFsdWVzLgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOmluQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpbml0V2l0aFZhbHVlOmlu
Q29udGV4dDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgY29uc3RydWN0b3JzLgorICAgICAg
ICAoU3RydWN0VGFnSGFuZGxlcik6CisgICAgICAgIChnZXRTdHJ1Y3RUYWdIYW5kbGVyKToKKyAg
ICAgICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6XSk6CisgICAgICAgICgr
W0pTVmFsdWUgc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Ol0pOgorICAgICAgICAgICAgLSBtZXRo
b2RzIHRvIHRyYWNraW5nIHN0cnVjdCB0eXBlcyB0aGF0IHN1cHBvcnQgY29udmVyc2lvbiB0by9m
cm9tIEpTVmFsdWUuCisgICAgICAgICgtW0pTVmFsdWUgZGVhbGxvY10pOgorICAgICAgICAgICAg
LSBkZXN0cnVjdG9yLgorICAgICAgICAoLVtKU1ZhbHVlIGRlc2NyaXB0aW9uXSk6CisgICAgICAg
ICAgICAtIE9iamVjdGl2ZS1DIHRvLU5TU3RyaW5nIGNvbnZlcnNpb24uCisgICAgICAgICh0eXBl
VG9WYWx1ZUludm9jYXRpb25Gb3IpOgorICAgICAgICAodmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9y
KToKKyAgICAgICAgICAgIC0gY3JlYXRlIGludm9jYXRpb24gb2JqZWN0cyBmb3IgY29udmVyc2lv
biB0by9mcm9tIEpTVmFsdWUuCisgICAgICAgICogQVBJL0pTVmFsdWVJbnRlcm5hbC5oOiBBZGRl
ZC4KKyAgICAgICAgICAgIC0gc2VlIEFQSS9KU1ZhbHVlLm1tIGZvciBkZXNjcmlwdGlvbiBvZiBp
bnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLmg6IEFkZGVk
LgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1DIGNsYXNzIGlzIHVzZWQgdG8gcmVmZXJl
bmNlIGEgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgKEpTR2xvYmFsRGF0YSkuCisgICAgICAg
ICogQVBJL0pTVmlydHVhbE1hY2hpbmUubW06IEFkZGVkLgorICAgICAgICAoLVtKU1ZpcnR1YWxN
YWNoaW5lIGluaXRdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBkZWFsbG9jXSk6Cisg
ICAgICAgICAgICAtIGNvbnN0cnVjdG9yICYgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKGdldEdyb3Vw
RnJvbVZpcnR1YWxNYWNoaW5lKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgYWNjZXNzb3IgZm9y
IG1fZ3JvdXAgcHJvcGVydHkuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gc2VlIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tIGZv
ciBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU1dyYXBw
ZXJNYXAuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5tbTogQWRkZWQuCisg
ICAgICAgICh3cmFwcGVyQ2xhc3MpOgorICAgICAgICAgICAgLSBzaW5nbGV0b24gcm9vdCBmb3Ig
ZGV0Y3Rpb24gKCYgdW53cmFwcGluZykgb2Ygd3JhcHBlciBvYmplY3RzLgorICAgICAgICAoc2Vs
ZWN0b3JUb1Byb3BlcnR5TmFtZSk6CisgICAgICAgICAgICAtIGRlZmF1bHQgc2VsZWN0b3IgdG8g
cHJvcGVydHkgbmFtZSBjb252ZXJzaW9uLgorICAgICAgICAoY3JlYXRlT2JqZWN0V2l0aEN1c3Rv
bUJyYW5kKToKKyAgICAgICAgICAgIC0gY3JlYXRlcyBhIEpTT2JqZWN0IHdpdGggYSBjdXN0b20g
TmF0aXZlQnJhbmQgKGNsYXNzIG5hbWUpLgorICAgICAgICAoY3JlYXRlUmVuYW1lTWFwKToKKyAg
ICAgICAgICAgIC0gcGFyc2UgQG9wdGlvbmFsIHByb3BlcnRpZXMgb2YgYSBKU0V4cG9ydCBwcm90
b2NvbC4KKyAgICAgICAgKHB1dE5vbkVudW1lcmFibGUpOgorICAgICAgICAgICAgLSBwcm9wZXJ0
eSBwdXQgd2l0aCBlbnVtZXJhYmxlPWZhbHNlLgorICAgICAgICAoY29weU1ldGhvZHNUb09iamVj
dCk6CisgICAgICAgICAgICAtIGl0ZXJhdGUgbWV0aG9kcyBpbiBhIHByb3RvY29sOyBhZGQgZnVu
Y3Rpb25zIHRvIGEgSlNPYmplY3QuCisgICAgICAgIChwYXJzZVByb3BlcnR5QXR0cmlidXRlcyk6
CisgICAgICAgICAgICAtIGV4YW1pbmUgcHJvdG9jb2wgcHJvcGVydHkgbWV0YWRhdGEuCisgICAg
ICAgIChtYWtlU2V0dGVyTmFtZSk6CisgICAgICAgICAgICAtICJmb28iIC0+ICJzZXRGb28iCisg
ICAgICAgIChjb3B5UHJvdG90eXBlUHJvcGVydGllcyk6CisgICAgICAgICAgICAtIGNyZWF0ZSBw
cm9wZXJ0aWVzIG9uIGEgUHJvdG9jb2wgb2JqZWN0IHJlZmxlY3RpbmcgdGhlIGluc3RhbmNlIG1l
dGhvZHMgJiBwcm9wZXJ0aWVzIG9mIGEgcHJvdG9jb2wuCisgICAgICAgICgtW0pTT2JqQ0NsYXNz
SW5mbyBpbml0V2l0aENvbnRleHQ6Zm9yQ2xhc3M6c3VwZXJDbGFzc0luZm86XSk6CisgICAgICAg
ICgtW0pTT2JqQ0NsYXNzSW5mbyBkZWFsbG9jXSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5m
byB3cmFwcGVyRm9yT2JqZWN0Ol0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gY29uc3Ry
dWN0b3JdKToKKyAgICAgICAgICAgIC0gY2FjaGUgdGhlIFByb3RvY29sL0NvbnN0cnVjdG9yIG9i
amVjdHMgZm9yIGFuIE9iamVjdGl2ZS1DIHR5cGUuCisgICAgICAgICgtW0pTV3JhcHBlck1hcCBp
bml0V2l0aENvbnRleHQ6XSk6CisgICAgICAgICgtW0pTV3JhcHBlck1hcCBkZWFsbG9jXSk6Cisg
ICAgICAgICAgICAtIGNvbnN0cnVjdG9yICYgZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTV3Jh
cHBlck1hcCBjbGFzc0luZm9Gb3JDbGFzczpdKToKKyAgICAgICAgICAgIC0gbWFwcyBDbGFzcyAt
PiBKU09iakNDbGFzc0luZm8uCisgICAgICAgICgtW0pTV3JhcHBlck1hcCB3cmFwcGVyRm9yT2Jq
ZWN0Ol0pOgorICAgICAgICAgICAgLSBjcmV0YWUgb3IgcmV0cmlldmUgYSBjYWNoZWQgd3JhcHBl
ciB2YWx1ZSBmb3IgYW4gb2JqZWN0LgorICAgICAgICAodHJ5VW53cmFwT2JqY09iamVjdCk6Cisg
ICAgICAgICAgICAtIGNoZWNrIHdoZXRoZXIgYSB2YWx1ZSBpcyBhIHdyYXBwZXIgb2JqZWN0OyB1
bndyYXAgaWYgc28uCisgICAgICAgICogQVBJL0phdmFTY3JpcHRDb3JlLmg6CisgICAgICAgICAg
ICAtIEFkZGVkIGluY2x1ZGVzIGZvciBuZXcgQVBJIGhlYWRlcnMuCisgICAgICAgICogQVBJL09i
akNDYWxsYmFja0Z1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIGNsYXNzIGlz
IHVzZWQgdG8gd3JhcCBPYmplY3RpdmUtQyBpbnN0YW5jZSBtZXRob2RzLCBjbGFzcyBtZXRob2Rz
ICYgYmxvY2tzIGFzIEpTRnVuY3Rpb24gb2JqZWN0cy4KKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24ubW06IEFkZGVkLgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudCk6CisgICAg
ICAgIChDYWxsYmFja0FyZ3VtZW50Ojp+Q2FsbGJhY2tBcmd1bWVudCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50Qm9vbGVhbik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbjo6
c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyKToKKyAgICAgICAgKENhbGxi
YWNrQXJndW1lbnRJbnRlZ2VyOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudERvdWJs
ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50RG91YmxlOjpzZXQpOgorICAgICAgICAoQ2Fs
bGJhY2tBcmd1bWVudEpTVmFsdWUpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEpTVmFsdWU6
OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SWQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudElkOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6OkNhbGxiYWNrQXJndW1lbnRPZkNsYXNzKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRPZkNsYXNzOjp+Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6OnNldCk6CisgICAgICAgIChD
YWxsYmFja0FyZ3VtZW50TlNOdW1iZXIpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TTnVt
YmVyOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nKToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnROU1N0cmluZzo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnROU0RhdGUpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZTo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU0FycmF5KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRO
U0FycmF5OjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeSk6Cisg
ICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5OjpzZXQpOgorICAgICAgICAoQ2Fs
bGJhY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50U3RydWN0OjpD
YWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1Y3Q6
On5DYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayk6CisgICAg
ICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6Q2FsbGJhY2tBcmd1bWVudEJsb2Nr
Q2FsbGJhY2spOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2s6On5DYWxs
YmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50Qmxv
Y2tDYWxsYmFjazo6c2V0KToKKyAgICAgICAgICAgIC0gZGVjb2RlZCBhcmd1ZW50IHR5cGUgaW5m
b3JtYXRpb24gb2YgYSBPYmpDQ2FsbGJhY2tGdW5jdGlvbi4KKyAgICAgICAgKEFyZ3VtZW50VHlw
ZURlbGVnYXRlKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlSW50ZWdlcik6
CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZURvdWJsZSk6CisgICAgICAgIChB
cmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVs
ZWdhdGU6OnR5cGVWb2lkKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlSWQp
OgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAgICAgICAg
KEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQmxvY2spOgorICAgICAgICAoQXJndW1lbnRUeXBl
RGVsZWdhdGU6OnR5cGVTdHJ1Y3QpOgorICAgICAgICAgICAgLSBkZWxlZ2F0ZSBmb3IgdXNlIGlu
IGNvbmp1bmN0aW9uIHdpdGggcGFyc2VPYmpDVHlwZS4KKyAgICAgICAgKENhbGxiYWNrUmVzdWx0
KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Ojp+Q2FsbGJhY2tSZXN1bHQpOgorICAgICAgICAo
Q2FsbGJhY2tSZXN1bHRWb2lkKToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Vm9pZDo6Z2V0KToK
KyAgICAgICAgKENhbGxiYWNrUmVzdWx0SWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZDo6
Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0TnVtZXJpYyk6CisgICAgICAgIChDYWxsYmFj
a1Jlc3VsdE51bWVyaWM6OmdldCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW4pOgor
ICAgICAgICAoQ2FsbGJhY2tSZXN1bHRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6OkNhbGxiYWNrUmVz
dWx0U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0U3RydWN0Ojp+Q2FsbGJhY2tSZXN1
bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6OmdldCk6CisgICAgICAg
ICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUgaW5mb3JtYXRpb24gb2YgYSBPYmpDQ2FsbGJhY2tG
dW5jdGlvbi4KKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZSk6CisgICAgICAgIChSZXN1bHRU
eXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6
dHlwZURvdWJsZSk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5cGVCb29sKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoUmVzdWx0VHlw
ZURlbGVnYXRlOjp0eXBlSWQpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlT2ZD
bGFzcyk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAg
IChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5cGVTdHJ1Y3QpOgorICAgICAgICAgICAgLSBkZWxlZ2F0
ZSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggcGFyc2VPYmpDVHlwZS4KKyAgICAgICAgKE9i
akNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbik6CisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6fk9iakND
YWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9y
LgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNvbnRleHQpOgorICAgICAgICAgICAg
LSBhY2Nlc3Nvci4KKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp3cmFwcGVkQmxvY2sp
OgorICAgICAgICAgICAgLSBhdHRlbW1wdCB0byB1bndyYXAgYSBibG9jayBvYmplY3QuCisgICAg
ICAgIChvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplKToKKyAgICAgICAgKG9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25D
bGFzcyk6CisgICAgICAgICAgICAtIEpTQ2xhc3NSZWYgdXNlZCB0byByZXByZXNlbnQgT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24gb2JqZWN0cy4KKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjpj
YWxsKToKKyAgICAgICAgKGJsb2NrU2lnbmF0dXJlQ29udGFpbnNDbGFzcyk6CisgICAgICAgICAg
ICAtIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBvbiBhIHJl
Y2VudCBDbGFuZy4KKyAgICAgICAgKHNraXBOdW1iZXIpOgorICAgICAgICAgICAgLSBoZWxwZXIg
dXNlZCBpbiBwYXJzaW5nIHNpZ25hdHVyZSBzdHJpbmdzLgorICAgICAgICAob2JqQ0NhbGxiYWNr
RnVuY3Rpb25Gb3JJbnZvY2F0aW9uKToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9y
TWV0aG9kKToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2spOgorICAgICAg
ICAgICAgLSBmdW5jdGlvbnMgdG8gdHJ5IHRvIGNyZWF0ZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBp
bnN0YW5jZXMgZm9yIG1ldGhvZHMvYmxvY2tzLgorICAgICAgICAodHJ5VW53cmFwQmxvY2spOgor
ICAgICAgICAgICAgLSBhdHRlbW1wdCB0byB1bndyYXAgYSBibG9jayBvYmplY3QuCisgICAgICAg
ICogQVBJL09iamNSdW50aW1lRXh0cmFzLmg6IEFkZGVkLgorICAgICAgICAocHJvdG9jb2xJbXBs
ZW1lbnRzUHJvdG9jb2wpOgorICAgICAgICAoZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJv
dG9jb2wpOgorICAgICAgICAoZm9yRWFjaE1ldGhvZEluQ2xhc3MpOgorICAgICAgICAoZm9yRWFj
aE1ldGhvZEluUHJvdG9jb2wpOgorICAgICAgICAoZm9yRWFjaFByb3BlcnR5SW5Qcm90b2NvbCk6
CisgICAgICAgICAgICAtIGZ1bmN0aW9ucyB1c2VkIGluIHJlZmxlY3Rpbmcgb24gT2JqZWN0aXZl
LUMgdHlwZXMuCisgICAgICAgIChza2lwUGFpcik6CisgICAgICAgICAgICAtIHBhcnNpbmcgaGVs
cGVyIHVzZWQgYnkgcGFyc2VPYmpDVHlwZSwgc2NhbnMgZm9yIG1hdGNoaW5nIHBhcmVudGhlc2Vz
LgorICAgICAgICAoU3RyaW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6OlN0cmluZ1Jh
bmdlKToKKyAgICAgICAgKFN0cmluZ1JhbmdlOjp+U3RyaW5nUmFuZ2UpOgorICAgICAgICAoU3Ry
aW5nUmFuZ2U6Om9wZXJhdG9yIGNvbnN0IGNoYXIqKToKKyAgICAgICAgKFN0cmluZ1JhbmdlOjpn
ZXQpOgorICAgICAgICAgICAgLSBIZWxwZXIgY2xhc3MgLSBjcmVhdGUgYSBjIHN0cmluZyBjb3B5
IG9mIGEgcmFuZ2Ugb2YgYW4gZXhpc3Rpbmcgc3RyaW5nLgorICAgICAgICAocGFyc2VPYmpDVHlw
ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIHRvIHBhcnNlIE9iamVjdGl2ZS1DIHR5cGUgc3Ry
aW5ncywgbWFrZXMgY2FsbGJhY2tzIHRvIGEgZGVsZWFndGUuCisgICAgICAgICogQVBJL3Rlc3Rz
L3Rlc3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAgICAgLSBhZGRlZCBjYWxsIHRv
IHRlc3RPYmplY3RpdmVDQVBJIChpbiB0ZXN0YXBpLm0pLgorICAgICAgICAqIEFQSS90ZXN0cy90
ZXN0YXBpLm06IEFkZGVkLgorICAgICAgICAoK1tQYXJlbnRPYmplY3QgcGFyZW50VGVzdF0pOgor
ICAgICAgICAoK1tUZXN0T2JqZWN0IHRlc3RPYmplY3RdKToKKyAgICAgICAgKCtbVGVzdE9iamVj
dCBjbGFzc1Rlc3RdKToKKyAgICAgICAgKC1bVGVzdE9iamVjdCBnZXRTdHJpbmddKToKKyAgICAg
ICAgKC1bVGVzdE9iamVjdCB0ZXN0QXJndW1lbnRUeXBlc1dpdGhJbnQ6ZG91YmxlOmJvb2xlYW46
c3RyaW5nOm51bWJlcjphcnJheTpkaWN0aW9uYXJ5Ol0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0
IGNhbGxiYWNrOl0pOgorICAgICAgICAoLVtUZXh0WFlaIHRlc3Q6XSk6CisgICAgICAgICAgICAt
IHRlc3Qgb2JqZWN0LCB1c2VkIGluIHZhcmlvdXMgdGVzdCB2YXNlcy4KKyAgICAgICAgKGNoZWNr
UmVzdWx0KToKKyAgICAgICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoYmxvY2tT
aWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAgICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRv
IGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9uIGEgcmVjZW50IENsYW5nLgorICAgICAgICAo
dGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAgICAgLSBuZXcgdGVzdCBjYXNlcy4KKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAg
ICAgLSBhZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAg
ICAgICAtIGFkZGVkIG1fYXBpRGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZvciB1
c2UgYnkgdGhlIEFQSS4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAg
ICAgICAgICAtIGFkZGVkIG1fYXBpRGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZv
ciB1c2UgYnkgdGhlIEFQSS4KKwogMjAxMi0xMi0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIE9uZSBtb3JlIHVucmV2aXdlZCBob2xpZGF5IE1JUFMg
YW5kIFNINCBidWlsZGZpeGVzIGFmdGVyIHIxMzg1MTYuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0FQSUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSUpTVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgSlNfT0JKQ19BUElf
RU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIEpT
Q29udGV4dDsKKworLy8gQSBKU1ZhbHVlIGlzIGEgcmVmZXJlbmNlIHRvIGEgdmFsdWUgd2l0aGlu
IHRoZSBKYXZhU2NyaXB0IG9iamVjdCBzcGFjZSBvZiBhCisvLyBKU1ZpcnR1YWxNYWNoaW5lLiBB
bGwgaW5zdGFuY2VzIG9mIEpTVmFsdWUgb3JpZ2luYXRlIGZyb20gYSBKU0NvbnRleHQsIGFuZAor
Ly8gaG9sZCBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoaXMgSlNDb250ZXh0LiBXaGVyZSBhbiBpbnN0
YW5jZSBtZXRob2QgaXMgaW52b2tlZAorLy8gdXBvbiBhIEpTVmFsdWUsIGFuZCB0aGlzIHJldHVy
bnMgYW5vdGhlciBKU1ZhbHVlLCB0aGUgcmV0dXJuZWQgSlNWYWx1ZSB3aWxsCisvLyBvcmlnaW5h
dGUgZnJvbSB0aGUgc2FtZSBKU0NvbnRleHQgYXMgdGhlIEpTVmFsdWUgb24gd2hpY2ggdGhlIG1l
dGhvZCB3YXMKKy8vIGludm9rZWQuCisvLworLy8gVGhlIEpTQ29udGV4dCBpcyB1c2VkIHRvIG1h
bmFnZSB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgcmVmZXJlY2VkIEphdmFTY3JpcHQKKy8vIHZhbHVl
IHdpdGhpbiB0aGUgdmlydHVhbCBtYWNoaW5lLiBTbyBsb25nIGFzIHRoZSBKU0NvbnRleHQgaXMg
YmVpbmcgcmV0YWluZWQKKy8vIHRoZSBKU1ZhbHVlIHdpbGwgY29udGludWUgdG8ga2VlcCB0aGUg
cmVmZXJlbmNkIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdAorLy8gdmlydHVhbCBtYWNoaW5l
IGFsaXZlLiBXaGVuIHRoZSBKU0NvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgSlNWYWx1ZSBpcwor
Ly8gZGVhbGxvY2F0ZWQgdGhlIHdlYWsgY29udGV4dCBwcm9wZXJ0eSBvZiB0aGUgSlNWYWx1ZSB3
aWxsIGJlY29tZSBuaWwuIEFmdGVyCisvLyB0aGlzIG9jY3VycyB0aGUgdmFsdWUgd2l0aGluIHRo
ZSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSBpcyBubyBsb25nZXIKKy8vIGJlaW5nIG1haW50
YWluZWQgYnkgdGhpcyBKU1ZhbHVlLCBhbmQgdGhlIEpTVmFsdWUgaW5zdGFuY2UgbWF5IG5vIGxv
bmdlciBieQorLy8gdXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGlzIHZhbHVlLiBGb3IgYW55IG1l
dGhvZCBpbnZva2VkIG9uIGluc3RhbmNlIG9mCisvLyBKU1ZhbHVlIHdpdGggYSBuaWwgY29udGV4
dCwgdGhlIG1ldGhvZCB3aWxsIHJldHVybiBhIG5pbC96ZXJvL2ZhbHNlIHJlc3VsdC4KKy8vCisv
LyBGb3IgYWxsIG1ldGhvZHMgdGFraW5nIGFyZ3VtZW50cyBvZiB0eXBlIGlkLCBhcmd1bWVudHMg
d2lsbCBiZSBjb252ZXJ0ZWQKKy8vIGludG8gYSBKYXZhU2NyaXB0IHZhbHVlIGFjY29yZGluZyB0
byB0aGUgY29udmVyc2lvbiBzcGVjaWZpZWQgYmVsb3cuCisvLyBBbGwgSmF2YVNjcmlwdCB2YWx1
ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgSlNWaXJ0dWFsTWFjaGluZQorLy8g
KHRoZSBhc3NvY2lhdGVkIEpTVmlydHVhbE1hY2hpbmUgaXMgYXZhaWJsZSBpbmRpcmVjdGx5IHZp
YSB0aGUgY29udGV4dAorLy8gcHJvcGVydHkpLiBBbiBpbnN0YW5jZSBvZiBKU1ZhbHVlIG1heSBv
bmx5IGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0bworLy8gbWV0aG9kcyBvbiBpbnN0YW5jZXMg
b2YgSlNWYWx1ZSBhbmQgSlNDb250ZXh0IHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lCisvLyBKU1Zp
cnR1YWxNYWNoaW5lIC0gcGFzc2luZyBhIEpTVmFsdWUgdG8gYSBtZXRob2Qgb24gYW4gb2JqZWN0
IG9yaWdpbmF0aW5nCisvLyBmcm9tIGEgZGlmZmVyZW50IEpTVmlydHVhbE1hY2hpbmUgd2lsbCBy
ZXN1bHQgaW4gYW4gT2JqZWN0aXZlLUMgZXhjZXB0aW9uCisvLyBiZWluZyByYWlzZWQuCisvLwor
Ly8gQ29udmVyc2lvbiBiZXR3ZWVuIE9iamVjdGl2ZS1DIGFuZCBKYXZhU2NyaXB0IHR5cGVzLgor
Ly8KKy8vIFdoZW4gY29udmVydGluZyBiZXR3ZWVuIEphdmFTY3JpcHQgdmFsdWVzIGFuZCBPYmpl
Y3RpdmUtQyBvYmplY3RzIGEgY29weSBpcworLy8gcGVyZm9ybWVkLiBWYWx1ZXMgb2YgdHlwZXMg
bGlzdGVkIGJlbG93IGFyZSBjb3BpZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKy8vIHR5cGVzIG9u
IGNvbnZlcnNpb24gaW4gZWFjaCBkaXJlY3Rpb24uIEZvciBOU0RpY3Rpb25hcmllcywgZW50cmll
cyBpbiB0aGUKKy8vIGRpY3Rpb25hcnkgdGhhdCBhcmUga2V5ZWQgYnkgc3RyaW5ncyBhcmUgY29w
aWVkIG9udG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KKy8vIEZvciBkaWN0aW9uYXJpZXMgYW5kIGFy
cmF5cywgY29udmVyc2lvbiBpcyByZWN1cnNpdmUsIHdpdGggdGhlIHNhbWUgb2JqZWN0CisvLyBj
b252ZXJzaW9uIGJlaW5nIGFwcGxpZWQgdG8gYWxsIGVudHJpZXMgaW4gdGhlIGNvbGxlY3Rpb24u
CisvLworLy8gICBPYmplY3RpdmUtQyB0eXBlICB8ICAgSmF2YVNjcmlwdCB0eXBlCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgbmlsICAg
ICAgICAgfCAgICAgdW5kZWZpbmVkCisvLyAgICAgICAgTlNOdWxsICAgICAgIHwgICAgICAgIG51
bGwKKy8vICAgICAgIE5TU3RyaW5nICAgICAgfCAgICAgICBzdHJpbmcKKy8vICAgICAgIE5TTnVt
YmVyICAgICAgfCAgIG51bWJlciwgYm9vbGVhbgorLy8gICAgIE5TRGljdGlvbmFyeSAgICB8ICAg
T2JqZWN0IG9iamVjdAorLy8gICAgICAgTlNBcnJheSAgICAgICB8ICAgIEFycmF5IG9iamVjdAor
Ly8gICAgICAgIE5TRGF0ZSAgICAgICB8ICAgICBEYXRlIG9iamVjdAorLy8gICAgICAgTlNCbG9j
ayAqICAgICB8ICAgRnVuY3Rpb24gb2JqZWN0ICoKKy8vICAgICAgICAgIGlkICoqICAgICAgfCAg
IFdyYXBwZXIgb2JqZWN0ICoqCisvLyAgICAgICAgQ2xhc3MgKioqICAgIHwgQ29uc3RydWN0b3Ig
b2JqZWN0ICoqKgorLy8KKy8vICogSW5zdGFuY2VzIG9mIE5TQmxvY2sgd2l0aCBzdXBwb3J0ZWQg
YXJndW1lbnRzIHR5cGVzIHdpbGwgYmUgcHJlc2VudGVkIHRvCisvLyBKYXZhU2NyaXB0IGFzIGEg
Y2FsbGFibGUgRnVuY3Rpb24gb2JqZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0
ZWQKKy8vIGFyZ3VtZW50IHR5cGVzIHNlZSBKU0V4cG9ydC5oLiBJZiBhIEphdmFTY3JpcHQgRnVu
Y3Rpb24gb3JpZ2luYXRpbmcgZnJvbSBhbgorLy8gT2JqZWN0aXZlLUMgYmxvY2sgaXMgY29udmVy
dGVkIGJhY2sgdG8gYW4gT2JqZWN0aXZlLUMgb2JqZWN0IHRoZSBibG9jayB3aWxsCisvLyBiZSBy
ZXR1cm5lZC4gQWxsIG90aGVyIEphdmFTY3JpcHQgZnVuY3Rpb25zIHdpbGwgYmUgY29udmVydGVk
IGluIHRoZSBzYW1lCisvLyBtYW5uZXIgYXMgYSBKYXZhU2NyaXB0IG9iamVjdCBvZiB0eXBlIE9i
amVjdC4KKy8vCisvLyAqKiBGb3IgT2JqZWN0aXZlLUMgaW5zdGFuY2VzIHRoYXQgZG8gbm90IGRl
cml2ZSBmcm9tIHRoZSBzZXQgb2YgdHlwZXMgbGlzdGVkCisvLyBhYm92ZSwgYSB3cmFwcGVyIG9i
amVjdCB0byBwcm92aWRlIGEgcmV0YWluaW5nIGhhbmRsZSB0byB0aGUgT2JqZWN0aXZlLUMKKy8v
IGluc3RhbmNlIGZyb20gSmF2YVNjcmlwdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2Ug
d3JhcHBlciBvYmplY3RzLCBzZWUKKy8vIEpTRXhwb3J0LmguIFdoZW4gYSBKYXZhU2NyaXB0IHdy
YXBwZXIgb2JqZWN0IGlzIGNvbnZlcnRlZCBiYWNrIHRvIE9iamVjdGl2ZS1DCisvLyB0aGUgT2Jq
ZWN0aXZlLUMgaW5zdGFuY2UgYmVpbmcgcmV0YWluZWQgYnkgdGhlIHdyYXBwZXIgaXMgcmV0dXJu
ZWQuCisvLworLy8gKioqIEZvciBPYmplY3RpdmUtQyBDbGFzcyBvYmplY3RzIGEgY29uc3RydWN0
b3Igb2JqZWN0IGNvbnRhaW5pbmcgZXhwb3J0ZWQKKy8vIGNsYXNzIG1ldGhvZHMgd2lsbCBiZSBy
ZXR1cm5lZC4gU2VlIEpTRXhwb3J0Lmggc29yIG1vcmUgaW5mb3JtYXRpb24gb24KKy8vIGNvbnN0
cnVjdG9yIG9iamVjdHMuCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCitAaW50ZXJmYWNl
IEpTVmFsdWUgOiBOU09iamVjdAorCisvLyBDcmVhdGUgYSBKU1ZhbHVlIGJ5IGNvbnZlcnRpbmcg
YW4gT2JqZWN0aXZlLUMgb2JqZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE9iamVjdDooaWQp
dmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNj
cmlwdCB2YWx1ZSBmcm9tIGFuIE9iamVjdGl2ZS1DIHByaW1pdGl2ZSB0eXBlLgorKyAoSlNWYWx1
ZSAqKXZhbHVlV2l0aEJvb2w6KEJPT0wpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aERvdWJsZTooZG91YmxlKXZhbHVlIGluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhJbnQzMjooaW50
MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1ZhbHVlICop
dmFsdWVXaXRoVUludDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQ7CisvLyBDcmVhdGUgYSBKYXZhU2NyaXB0IHZhbHVlIGluIHRoaXMgY29udGV4dC4KKysg
KEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRl
eHQ7CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3QXJyYXlJbkNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQ7CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVndWxhckV4cHJlc3Npb25Gcm9t
UGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0cmluZyAqKWZsYWdzIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdFcnJv
ckZyb21NZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5Db250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQ7CisrIChKU1ZhbHVlICopdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OihKU0Nv
bnRleHQgKiljb250ZXh0OworCisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25k
aW5nIE9iamVjdGl2ZS1DIG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZQorLy8gY29udmVyc2lvbiBz
cGVjaWZpZWQgYWJvdmUuCistIChpZCl0b09iamVjdDsKKy8vIENvbnZlcnQgdGhpcyB2YWx1ZSB0
byBhIGNvcnJlc3BvbmRpbmcgT2JqZWN0aXZlLUMgb2JqZWN0LCBpZiB0aGUgcmVzdWx0IGlzCisv
LyBub3Qgb2YgdGhlIHNwZWNpZmllZCBjbGFzcyB0aGVuIG5pbCB3aWxsIGJlIHJldHVybmVkLgor
LSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHM7CisvLyBUaGUgdmFsdWUgaXMgY29waWVk
IHRvIGEgYm9vbGVhbiBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJ5IHRo
ZQorLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4KKy0gKEJPT0wpdG9Cb29sOworLy8gVGhlIHZhbHVl
IGlzIGNvcGllZCB0byBhIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lm
aWVkIGJ5IHRoZQorLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4KKy0gKGRvdWJsZSl0b0RvdWJsZTsK
Ky8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYW4gaW50ZWdlciBhY2NvcmRpbmcgdG8gdGhlIGNv
bnZlcnNpb24gc3BlY2lmaWVkIGJ5CisvLyB0aGUgSmF2YVNjcmlwdCBsYW5ndWFnZS4KKy0gKGlu
dDMyX3QpdG9JbnQzMjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYW4gaW50ZWdlciBhY2Nv
cmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJ5CisvLyB0aGUgSmF2YVNjcmlwdCBs
YW5ndWFnZS4KKy0gKHVpbnQzMl90KXRvVUludDMyOworLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9v
bGVhbiwgYSBOU051bWJlciB2YWx1ZSBvZiBAWUVTIG9yIEBOTyB3aWxsIGJlIHJldHVybmVkLgor
Ly8gRm9yIGFsbCBvdGhlciB0eXBlcyB0aGUgdmFsdWUgd2lsbCBiZSBjb3BpZWQgdG8gYSBudW1i
ZXIgYWNjb3JkaW5nIHRvIHRoZQorLy8gY29udmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlIEphdmFT
Y3JpcHQgbGFuZ3VhZ2UuCistIChOU051bWJlciAqKXRvTnVtYmVyOworLy8gVGhlIHZhbHVlIGlz
IGNvcGllZCB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVk
IGJ5IHRoZQorLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4KKy0gKE5TU3RyaW5nICopdG9TdHJpbmc7
CisvLyBUaGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgbnVtYmVyIHJlcHJlc2VudGluZyBhIHRp
bWUgaW50ZXJ2YWwgc2luY2UgMTk3MCwKKy8vIGFuZCBhIG5ldyBOU0RhdGUgaW5zdGFuY2UgaXMg
cmV0dXJuZWQuCistIChOU0RhdGUgKil0b0RhdGU7CisvLyBJZiB0aGUgdmFsdWUgaXMgbnVsbCBv
ciB1bmRlZmluZWQgdGhlbiBuaWwgaXMgcmV0dXJuZWQuCisvLyBJZiB0aGUgdmFsdWUgaXMgbm90
IGFuIG9iamVjdCB0aGVuIGEgSmF2YVNjcmlwdCBUeXBlRXJyb3Igd2lsbCBiZSB0aHJvd24uCisv
LyBUaGUgcHJvcGVydHkgImxlbmd0aCIgaXMgcmVhZCBmcm9tIHRoZSBvYmplY3QsIGNvbnZlcnRl
ZCB0byBhbiB1bnNpZ25lZAorLy8gaW50ZWdlciwgYW5kIGFuIE5TQXJyYXkgb2YgdGhpcyBzaXpl
IGlzIGFsbG9jYXRlZC4gUHJvcGVydGllcyBjb3JyZXNwb25kaW5nCisvLyB0byBpbmRpY2llcyB3
aXRoaW4gdGhlIGFycmF5IGJvdW5kcyB3aWxsIGJlIGNvcGllZCB0byB0aGUgYXJyYXksICB3aXRo
CisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRlZCB0byBlcXVpdmFsZW50IEpTVmFsdWVz
IGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0FycmF5OworLy8gSWYgdGhlIHZhbHVlIGlz
IG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVkLgorLy8gSWYgdGhlIHZhbHVl
IGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlwZUVycm9yIHdpbGwgYmUgdGhy
b3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSBjb3Bp
ZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9iamVjdGl2ZS1DIG9iamVjdHMgY29udmVy
dGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3BlY2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5
ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBwcm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4g
VGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFTY3JpcHQgdmFsdWUKKy8vICd1bmRlZmlu
ZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZv
clByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5OworLy8gU2V0IGEgcHJvcGVydHkgb24gdGhl
IHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yUHJvcGVydHk6KE5TU3RyaW5n
ICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJu
cyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4KKy0gKEJPT0wpZGVsZXRlUHJvcGVydHk6
KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5zIFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVz
ZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBh
cyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgorLSAoQk9PTCloYXNQcm9wZXJ0eTooTlNT
dHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBh
IGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4gb2JqZWN0OworLy8gdGhpcyBtZXRob2Qg
b3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgbWV0
aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVhZ2UuCistICh2b2lkKWRlZmluZVByb3Bl
cnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8v
IEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20gdGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3
aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFsdWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJv
cGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChKU1ZhbHVlICopdmFsdWVBdEluZGV4OihO
U1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVl
LgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsK
KworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBwcmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5
cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJPT0wpaXNOdWxsOworLSAoQk9PTClpc0Jv
b2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9PTClpc1N0cmluZzsKKy0gKEJPT0wpaXNP
YmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2
YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wpaXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1
ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlw
dCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0
OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUg
SmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIuCistIChCT09MKWlzSW5zdGFuY2VPZjoo
aWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhl
IHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3VtZW50cy4KKy0gKEpTVmFsdWUgKiljYWxs
V2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCistIChKU1Zh
bHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKKy8vIEFj
Y2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIgZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRo
ZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHByb3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0
aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUg
c3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6KE5TU3RyaW5n
ICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7CisKKy8vIFRoZSBK
U0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFk
b25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0OworCitAZW5kCisKKy8vIE9iamVjdGl2ZS1D
IG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBhcmd1bWVudCBhbmQvb3Ig
cmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVzIGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVy
c2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBpcyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4g
U3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVzIHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRh
aW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5k
IGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBlPiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8
VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1hdGNoLAorLy8gd2l0aCB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0
aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIuCisvLyBTdXBwb3J0IGlzIHByb3ZpZGVk
IGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNSYW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUu
CitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9ydCkKKworLy8gVGhpcyBtZXRob2QgcmV0
dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0IG9iamVjdCBjb250YWluaW5nIHByb3Bl
cnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRoIHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50
LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXdseSBhbGxv
Y2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAi
bG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysg
KEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5nZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVk
IEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcworLy8gbmFtZWQgIngiLCAi
eSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0Lgor
KyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0IGluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQg
SmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgi
IGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAq
KXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dQb2ludCBieSByZWFkaW5nIHByb3Bl
cnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8gdGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRp
bmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQb2ludCl0b1BvaW50OworLy8gQ29udmVy
dCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nlc3NpbmcgcHJvcGVydGllcyBuYW1lZCAi
bG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhl
IHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0b1JhbmdlOworLy8gQ29udmVydCBhIHZh
bHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJvcGVydGllcyBuYW1lZCAieCIsICJ5Iiwg
IndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5n
IHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVjdCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEg
dmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2luZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0
aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFsdWUgY29udmVydGluZyB0aGUgcmVzdWx0
cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOworCitAZW5kCisKKy8vIEluc3RhbmNlcyBv
ZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5h
YmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNjZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZv
ciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9iamVjdEEsICpvYmplY3RCOworLy8gICAg
SlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdldCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgi
IGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0
IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3QnLgorLy8gICAgb2JqZWN0W0AiWSJdID0g
djE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHByb3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4K
Ky8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAgICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRl
eCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2JqZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJz
Y3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NpcHQgdmFsdWUsCisvLyBhbmQgdGhl
biB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5nIHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1l
LgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1cHBvcnQpCisKKy0gKEpTVmFsdWUgKilv
YmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5OworLSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5k
ZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClv
YmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0
T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Owor
CitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8g
VGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5nIGEgcHJvcGVydHkgZGVzY3JpcHRvciBm
b3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8v
IFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9uZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6
CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRlc2NyaXB0b3IgY29udGFpbmluZyBvbmUg
b3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAid3JpdGFibGUiLAorLy8gICAgYW5kIG9w
dGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAiZW51bWVyYWJsZSIg
YW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRhIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250
YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJzZXQiIGtleS4KKy8vICAgIEEgZGF0YSBk
ZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMg
b2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QgKHJlcGxhY2luZyBhbnkgZXhp
c3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNjZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAt
IEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJnZXQiIGFu
ZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNvbnRhaW5pbmcgb25lIG9yIGJvdGggb2Yg
dGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAgImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vz
c29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgInZhbHVlIgorLy8gICAg
b3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nlc3NvciBkZXNjcmlwdG9yIG1heSBiZSB1
c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vz
c29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFjaW5nIGFueSBleGlzdGluZyBkYXRhIHBy
b3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250
YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJlbnVtZXJhYmxlIiBhbmQKKy8vICAgICJj
b25maWd1cmFibGUiLiAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGFueSBv
ZiB0aGUga2V5cworLy8gICAgInZhbHVlIiwgIiB3cml0YWJsZSIsICJnZXQiLCBvciAic2V0Ii4K
Ky8vICAgIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgYXR0
cmlidXRlcyBvZiBhbiBleGlzdGluZworLy8gICAgZGF0YSBvciBhY2Nlc3NvciBwcm9wZXJ0eSwg
b3IgdG8gY3JlYXRlIGEgbmV3IGRhdGEgcHJvcGVydHkuCitKU19FWFBPUlQgZXh0ZXJuIE5TU3Ry
aW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JXcml0YWJsZUtleTsKK0pTX0VYUE9SVCBl
eHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvckVudW1lcmFibGVLZXk7
CitKU19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JD
b25maWd1cmFibGVLZXk7CitKU19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgSlNQcm9w
ZXJ0eURlc2NyaXB0b3JWYWx1ZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcg
KiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9IC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNCArMTM1LDggQEAgSlNfRVhQ
T1JUIHZvaWQgSlNHYXJiYWdlQ29sbGVjdChKU0NvbnRleAogfQogI2VuZGlmCiAKKy8qIEVuYWJs
ZSB0aGUgT2JqZWN0aXZlLUMgQVBJIGZvciBwbGF0Zm9ybXMgd2l0aCBhIG1vZGVybiBydW50aW1l
LiAqLworI3VuZGVmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNkZWZpbmUgSlNfT0JKQ19BUElfRU5B
QkxFRCAoZGVmaW5lZChfX09CSkNfXykgJiYgZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVk
KF9faTM4Nl9fKSkKKwogI2VuZGlmIC8qIEpTQmFzZV9oICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNCbG9j
a0FkYXB0b3IgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVBy
b3RvY29sOihjb25zdCBjaGFyICopc2lnbmF0dXJlOworLSAoaWQpYmxvY2tGcm9tVmFsdWU6KEpT
VmFsdWVSZWYpYXJndW1lbnQgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IHdpdGhFeGNl
cHRpb246KEpTVmFsdWVSZWYgKilleGNlcHRpb247CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29y
ZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0LmgiCisj
aW1wb3J0ICJBUElTaGltcy5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkpTQmxvY2tB
ZGFwdG9yLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNXcmFw
cGVyTWFwLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJ3dGYvT3duUHRyLmgi
CisjaW1wb3J0IDwvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29y
ay9Qcml2YXRlSGVhZGVycy9OU0Jsb2NrLmg+CisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUv
QmxvY2tfcHJpdmF0ZS5oPgorCitleHRlcm4gIkMiIHsKK2lkIF9fTlNNYWtlU3BlY2lhbEZvcndh
cmRpbmdDYXB0dXJlQmxvY2soY29uc3QgY2hhciAqc2lnbmF0dXJlLCB2b2lkICheaGFuZGxlciko
TlNJbnZvY2F0aW9uICppbnYpKTsKK307CisKK2NsYXNzIEJsb2NrQXJndW1lbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnQoKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYg
Z2V0KE5TSW52b2NhdGlvbiosIE5TSW50ZWdlciwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiopID0g
MDsKKworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBtX25leHQ7Cit9OworCitCbG9ja0FyZ3Vt
ZW50Ojp+QmxvY2tBcmd1bWVudCgpCit7Cit9CisKK2NsYXNzIEJsb2NrQXJndW1lbnRCb29sZWFu
IDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEpTVmFsdWVSZWYgZ2V0KE5T
SW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1i
ZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgQmxvY2tBcmd1bWVudE51bWVyaWMgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7Citw
dWJsaWM6CisgICAgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisg
ICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVudDom
dmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSk7CisgICAgfQor
fTsKKworY2xhc3MgQmxvY2tBcmd1bWVudElkIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVi
bGljOgorICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRl
Z2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAg
IHsKKyAgICAgICAgaWQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2
YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICAgICAgcmV0dXJuIG9iamVjdFRvVmFs
dWUoY29udGV4dCwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIEJsb2NrQXJndW1lbnRTdHJ1
Y3QgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgQmxvY2tBcmd1bWVudFN0
cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNv
ZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWluXTsK
KyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6ZUFu
ZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAtLWFs
aWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsgYWxp
Z25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+YWxp
Z25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QmxvY2tBcmd1bWVudFN0cnVjdCgp
CisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAgICAg
ICAgZnJlZShtX2FsbG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVy
LCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgW2ludm9j
YXRpb24gZ2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwor
CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYWxsb2NhdGlv
biBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomY29udGV4dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBp
bnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAgICAgSlNWYWx1ZSogdmFs
dWU7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1
ZV07CisgICAgICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAg
Y2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3MgQmxv
Y2tBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCbG9ja0FyZ3Vt
ZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
UmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJsb2Nr
QXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IEJsb2NrQXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRU
eXBlIHR5cGVCb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudEJv
b2xlYW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5
cGVPZkNsYXNzKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5
cGVCbG9jayhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4g
bmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVTdHJ1Y3QoY29uc3QgY2hh
ciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNv
cHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSB2
YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRTdHJ1Y3QoaW52b2NhdGlvbiwgY29weSk7CisgICAgICAgIHJldHVybiBuaWw7
CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkJsb2NrUmVzdWx0KCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldChOU0lu
dm9jYXRpb24qLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikgPSAwOworfTsK
KworY2xhc3MgQmxvY2tSZXN1bHRWb2lkIDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1Zh
bHVlUmVmKikKKyAgICB7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEJsb2NrUmVzdWx0SW50ZWdlciA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpT
VmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBU
IHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbikpOworICAgICAgICBbaW52b2NhdGlv
biBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBCbG9ja1Jlc3VsdERvdWJsZSA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNv
bnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgewor
ICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIHJlc3VsdCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0
UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja1Jlc3VsdEJvb2xl
YW4gOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2Nh
dGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwg
SlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0gSlNWYWx1ZVRvQm9vbGVh
bihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQpOworICAgICAgICBbaW52
b2NhdGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307CisKK2NsYXNzIEJsb2Nr
UmVzdWx0U3RydWN0IDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1Jl
c3VsdFN0cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFy
KiBlbmNvZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNp
b25JbnZvY2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0
YWluXTsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0
U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAg
ICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXpl
ICsgYWxpZ25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkg
JiB+YWxpZ25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QmxvY2tSZXN1bHRTdHJ1
Y3QoKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07Cisg
ICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoTlNJ
bnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgcmVz
dWx0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFs
dWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgW21f
Y29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1ZV07CisgICAgICAgIFtt
X2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVmZmVyXTsKKyAgICAgICAg
W2ludm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1fYnVm
ZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK0BpbXBsZW1lbnRhdGlvbiBKU0Js
b2NrQWRhcHRvciB7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc2lnbmF0dXJlV2l0
aE9mZnNldHM7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc2lnbmF0dXJlV2l0aG91
dE9mZnNldHM7CisgICAgT3duUHRyPEJsb2NrUmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBPd25QdHI8
QmxvY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudDsK
K30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBvZmZzZXQgaW5mb3JtYXRpb24gYmFjayBp
bnRvIGEgYm9jayBzaWduYXR1cmUuCitzdGF0aWMgTlNTdHJpbmcqIGJ1aWxkQmxvY2tTaWduYXR1
cmUoTlNTdHJpbmcqIHByZWZpeCwgY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCwg
TlNVSW50ZWdlciYgb2Zmc2V0LCBOU1N0cmluZyogcG9zdGZpeCkKK3sKKyAgICBTdHJpbmdSYW5n
ZSBjb3B5KGJlZ2luLCBlbmQpOworICAgIE5TU3RyaW5nKiByZXN1bHQgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAJXMlbHUlQCIsIHByZWZpeCwgY29weS5nZXQoKSwgb2Zmc2V0LCBw
b3N0Zml4XTsKKyAgICBOU1VJbnRlZ2VyIHNpemU7CisgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50
KGNvcHksICZzaXplLCAwKTsKKyAgICBpZiAoc2l6ZSA8IDQpCisgICAgICAgIHNpemUgPSA0Owor
ICAgIG9mZnNldCArPSBzaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKGlkKWluaXRX
aXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIqKWVuY29kZWRUeXBlCit7
CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV9zaWduYXR1cmVXaXRob3V0T2Zmc2V0cyA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbmNvZGVkVHlwZV07CisgICAgbV9hcmd1bWVu
dENvdW50ID0gMDsKKworICAgIC8vIEN1cnJlbnRseSBvbmx5IGFkYXB0aW5nIEphdmFTY3JpcHQg
ZnVuY3Rpb25zIHRvIGJsb2NrcyByZXR1cm5pbmcgdm9pZC4KKyAgICBjb25zdCBjaGFyKiByZXN1
bHRUeXBlQmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICBpZiAoKmVuY29kZWRUeXBlKysgIT0gJ3Yn
KQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICBPd25QdHI8QmxvY2tSZXN1bHQ+IHJlc3VsdCA9
IGFkb3B0UHRyKG5ldyBCbG9ja1Jlc3VsdFZvaWQpOworICAgIGNvbnN0IGNoYXIqIHJlc3VsdFR5
cGVFbmQgPSBlbmNvZGVkVHlwZTsKKworICAgIGlmIChlbmNvZGVkVHlwZVswXSAhPSAnQCcgfHwg
ZW5jb2RlZFR5cGVbMV0gIT0gJz8nKSB7CisgICAgICAgIHJldHVybiBzZWxmOworICAgIH0KKyAg
ICBlbmNvZGVkVHlwZSArPSAyOworCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGEgYmxv
Y2sgaXMgdGhlIGJsb3hrIGl0c2VsZi4KKyAgICBOU1N0cmluZyogc2lnbmF0dXJlID0gQCJAPzAi
OworICAgIE5TVUludGVnZXIgb2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsKKworICAgIE93blB0cjxC
bG9ja0FyZ3VtZW50PiBhcmd1bWVudHMgPSAwOworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50Piog
bmV4dEFyZ3VtZW50ID0gJmFyZ3VtZW50czsKKyAgICB3aGlsZSAoKmVuY29kZWRUeXBlKSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gZW5jb2RlZFR5cGU7CisgICAgICAgIE93blB0cjxC
bG9ja0FyZ3VtZW50PiBhcmd1bWVudCA9IGFkb3B0UHRyKHBhcnNlT2JqQ1R5cGU8QmxvY2tBcmd1
bWVudFR5cGVEZWxlZ2F0ZT4oZW5jb2RlZFR5cGUpKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkK
KyAgICAgICAgICAgIHJldHVybiBzZWxmOworICAgICAgICBjb25zdCBjaGFyKiBlbmQgPSBlbmNv
ZGVkVHlwZTsKKworICAgICAgICAvLyBBcHBlbmQgdGhlIHR5cGUgJiBzdGFjayBvZmZzZXQgb2Yg
dGhpcyBhcmd1bWVudCB0byB0aGUgc2lnbmF0dXJlIHN0cmluZy4KKyAgICAgICAgc2lnbmF0dXJl
ID0gYnVpbGRCbG9ja1NpZ25hdHVyZShzaWduYXR1cmUsIGJlZ2luLCBlbmQsIG9mZnNldCwgQCIi
KTsKKworICAgICAgICAqbmV4dEFyZ3VtZW50ID0gYXJndW1lbnQucmVsZWFzZSgpOworICAgICAg
ICBuZXh0QXJndW1lbnQgPSAmKCpuZXh0QXJndW1lbnQpLT5tX25leHQ7CisgICAgICAgICsrbV9h
cmd1bWVudENvdW50OworICAgIH0KKworICAgIC8vIFByZWZpYyB0aGUgc2lnbmF0dXJlIHdpdGgg
dGhlIHJldHVybiB0eXBlICYgdG90YWwgc3RhY2tmcmFtZSBzaXplLgorICAgIC8vICh0aGlzIGNh
bGwgd2lsbCBhbHNvIGFkZCB0aGUgcmV0dXJuIHR5cGUgc2l6ZSB0byB0aGUgb2Zmc2V0LAorICAg
IC8vIHdoaWNoIGlzIGEgbm9uc2VzbmUsIGJ1dCBoYXJtbGVzcyBzaW5jZSB0aGlzIGlzIHRoZSBs
YXN0IHVzZSkuCisgICAgc2lnbmF0dXJlID0gYnVpbGRCbG9ja1NpZ25hdHVyZShAIiIsIHJlc3Vs
dFR5cGVCZWdpbiwgcmVzdWx0VHlwZUVuZCwgb2Zmc2V0LCBzaWduYXR1cmUpOworCisgICAgbV9z
aWduYXR1cmVXaXRoT2Zmc2V0cyA9IHNpZ25hdHVyZTsKKyAgICBtX3Jlc3VsdCA9IHJlc3VsdC5y
ZWxlYXNlKCk7CisgICAgbV9hcmd1bWVudHMgPSBhcmd1bWVudHMucmVsZWFzZSgpOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy8vIFRoZSBKU0Jsb2NrQWRhcHRvciBzdG9yZXMgdGhlIHR5cGUg
c3RyaW5nIHRha2VuIGZyb20gdGhlIHByb3RvY29sLiBUaGlzIHN0cmluZworLy8gZG9lcyBub3Qg
Y29udGFpbiBpbnZvY2F0aW9uIGxheW91dCBpbmZvcm1hdGlvbi4gVGhlIHNpZ25hdHVyZSBmcm9t
IHRoZSBibG9jaworLy8gZG9lcyBjb250YWluIHRoZSBzdGFja2ZyYW1lIG9mZnNldHMuIFNraXAg
dGhlc2Ugd2hlbiBjb21wYXJpbmcgc3RyaW5ncy4KKy0gKGJvb2wpYmxvY2tNYXRjaGVzU2lnbmF0
dXJlOihpZClibG9jaworeworICAgIGlmICghX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB3aXRob3V0T2Zmc2V0cz0g
W21fc2lnbmF0dXJlV2l0aG91dE9mZnNldHMgVVRGOFN0cmluZ107CisgICAgY29uc3QgY2hhciog
c2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZShibG9jayk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB3aGlsZSAoaXNkaWdpdCgqd2l0aG91dE9mZnNldHMpKQorICAgICAgICAgICAg
Kyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKnNpZ25hdHVyZSkpCisg
ICAgICAgICAgICArK3NpZ25hdHVyZTsKKyAgICAgICAgCisgICAgICAgIGlmICgqd2l0aG91dE9m
ZnNldHMgIT0gKnNpZ25hdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCEqd2l0aG91dE9mZnNldHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Kyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgKytzaWduYXR1cmU7CisgICAgfQorfQorCistIChp
ZClibG9ja0Zyb21WYWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4
dCopY29udGV4dCB3aXRoRXhjZXB0aW9uOihKU1ZhbHVlUmVmKilleGNlcHRpb24KK3sKKyAgICBK
U0dsb2JhbENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsK
KworICAgIC8vIENoZWNrIGZvciBudWxsL3VuZGVmaW5lZC4KKyAgICBpZiAoSlNWYWx1ZUlzVW5k
ZWZpbmVkKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc051bGwoY3R4LCBhcmd1bWVudCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IDA7CisgICAg
aWYgKGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY3R4LCBhcmd1bWVudCkpIHsKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIE9iamVjdGl2ZS1DIGJsb2NrLgor
ICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0Jsb2NrIGNsYXNzXV0pIHsKKyAg
ICAgICAgICAgIGlmIChbc2VsZiBibG9ja01hdGNoZXNTaWduYXR1cmU6b2JqZWN0XSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3Np
Z25hdHVyZVdpdGhPZmZzZXRzICYmIEpTVmFsdWVJc09iamVjdChjdHgsIGFyZ3VtZW50KSkgewor
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9u
CisgICAgICAgIC8vIChhbmQgdGhhdCB3ZXJlIGFibGUgdG8gY3JlYXRlIGEgZm9yd2FyZGluZyBi
bG9jayBmb3IgdGhpcyBzaWduYXR1cmUpLgorICAgICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoY3R4LCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKEpT
T2JqZWN0SXNGdW5jdGlvbihjdHgsIG9iamVjdCkpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9i
amVjdDsKKyAgICB9CisKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgIEpTQzo6QVBJRW50
cnlTaGltIGVudHJ5U2hpbSh0b0pTKGN0eCkpOworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAiSW52YWxpZCBhcmd1bWVudCBzdXBwbGll
ZCBmb3IgT2JqZWN0aXZlLUMgYmxvY2siKSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQor
CisgICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzLgorICAgIEpTQmxvY2tBZGFwdG9yKiBhZGFwdG9y
ID0gc2VsZjsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmZ1
bmN0aW9uIGluQ29udGV4dDpjb250ZXh0XTsKKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk1CisgICAgLy8gQ3VycmVudGx5IG9ubHkg
c3VwcG9ydGluZyB2b2lkIGZ1bmN0aW9ucy4KKyAgICByZXR1cm4gX19OU01ha2VTcGVjaWFsRm9y
d2FyZGluZ0NhcHR1cmVCbG9jayhbbV9zaWduYXR1cmVXaXRoT2Zmc2V0cyBVVEY4U3RyaW5nXSwg
XihOU0ludm9jYXRpb24gKmludm9jYXRpb24peworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NAorICAgICAgICAvLyBSYXRoZXIg
dGhhbiByZXF1aXJpbmcgdGhhdCB0aGUgY29udGV4dCBiZSByZXRhaW5lZCwgaXQgd291bGQgcHJv
YmFibHkgYmUgbW9yZQorICAgICAgICAvLyBhcHByb3ByaWF0ZSB0byB1c2UgYSBuZXcgSlNDb250
ZXh0IGluc3RhbmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAgLy8gSXQg
d291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB0aHJvdyBhIEpTIGV4Y2VwdGlvbiBoZXJlLCBidXQg
d2l0aG91dCBhIGNvbnRleHQgd2UgaGF2ZQorICAgICAgICAvLyBub3RoaW5nIHRvIHdvcmsgd2l0
aC4KKyAgICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gdmFsdWUuY29udGV4dDsKKyAgICAgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKU0dsb2JhbENvbnRl
eHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICBK
U1ZhbHVlUmVmIGFyZ3NbYWRhcHRvci0+bV9hcmd1bWVudENvdW50XTsKKworICAgICAgICBzaXpl
X3QgYXJndW1lbnROdW1iZXIgPSAwOworICAgICAgICBCbG9ja0FyZ3VtZW50KiBhcmd1bWVudHMg
PSBhZGFwdG9yLT5tX2FyZ3VtZW50cy5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0FyZ3VtZW50
KiBhcmd1bWVudCA9IGFyZ3VtZW50czsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJndW1lbnQtPm1f
bmV4dC5nZXQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAg
ICAgICAgICAgYXJnc1thcmd1bWVudE51bWJlcl0gPSBhcmd1bWVudC0+Z2V0KGludm9jYXRpb24s
IGFyZ3VtZW50TnVtYmVyICsgMSwgY29udGV4dCwgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICBp
ZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICArK2FyZ3VtZW50TnVtYmVyOworICAgICAgICB9CisgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnROdW1iZXI7CisKKyAgICAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGN0
eCwgSlNWYWx1ZVRvT2JqZWN0KGN0eCwgdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCksIDAs
IGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9u
KSB7CisgICAgICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworfQorCitAZW5kCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDgsMTAgKzUwOCwxMCBAQCB2b2lkKiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldFByaXZh
CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmluaGVyaXRzKEpTQ2xhc3NSZWYgYykgY29uc3QKIHsKLSAgICBmb3IgKEpTQ2xhc3NSZWYganND
bGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFz
cykKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpz
Q2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoanNDbGFzcyA9PSBj
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKworI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisKK0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworCisvLyBBbiBpbnN0YW5jZSBv
ZiBKU0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0aW9uIGVudmlyb25tZW50
LCBhbGwKKy8vIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNlIHdpdGhpbiBhIGNvbnRl
eHQuCisvLyBKU0NvbnRleHQgaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNsZSBv
ZiBvYmplY3RzIHdpdGhpbiB0aGUKKy8vIEphdmFTY3JpcHQgdmlydHVhbCBtYWNoaW5lLiBFdmVy
eSBpbnN0YW5jZSBvZiBKU1ZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCBhCisvLyBKU0NvbnRleHQg
dmlhIGEgd2VhayByZWZlcmVuY2UuIFRoZSBKU1ZhbHVlIHdpbGwga2VlcCB0aGUgSmF2YVNjcmlw
dCB2YWx1ZSBpdAorLy8gcmVmZXJlbmNlcyBhbGl2ZSBzbyBsb25nIGFzIHRoZSBKU0NvbnRleHQg
aXMgYWxzbyByZXRhaW5lZC4gV2hlbiBhbiBpbnN0YW5jZQorLy8gb2YgSlNDb250ZXh0IGlzIGRl
YWxsb2NhdGVkIGFuZCB0aGUgd2VhayByZWZlcmVuY2VzIHRvIGl0IGFyZSBjbGVhcmVkIHRoZQor
Ly8gSlNWYWx1ZXMgdGhhdCBoYWQgYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0IHdp
bGwgYmUgaW52YWxpZGF0ZWQsIGFuZAorLy8gd2lsbCBjZWFzZSB0byBrZWVwIHRoZSB2YWx1ZXMg
d2l0aGluIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBhbGl2ZS4KK05TX0NMQVNTX0FWQUlMQUJMRSgx
MF85LCBOQSkKK0BpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QKKworLy8gQ3JlYXRlIGEg
SlNDb250ZXh0LgorLSAoaWQpaW5pdDsKKy8vIENyZWF0ZSBhIEpTQ29udGV4dCBpbiB0aGUgc3Bl
Y2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKy0gKGlkKWluaXRXaXRoVmlydHVhbE1hY2hpbmU6KEpT
VmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworLy8gRXZhbHVhdGUgYSBzdHJpbmcg
b2YgSmF2YVNjcmlwdCBjb2RlLgorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmlu
ZyAqKXNjcmlwdDsKKworLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgb2JqZWN0
IG9mIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorLy8gSW5zdGFuY2VzIG9mIEpT
Q29udGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVybiBhIHJlZmVyZW5jZSB0
byB0aGUKKy8vIFdpbmRvd1Byb3h5IG9iamVjdC4KKy0gKEpTVmFsdWUgKilnbG9iYWxPYmplY3Q7
CisKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gT2JqZWN0aXZl
LUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2Ny
aXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIGNvbnRleHQuIE91dHNpZGUgb2YKKy8vIGEg
Y2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4KKysg
KEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0OworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxl
ZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAorLy8g
YXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3Mg
dGhpcyB2YWx1ZS4gT3V0c2lkZQorLy8gb2YgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdGhp
cyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoSlNWYWx1ZSAqKWN1cnJlbnRUaGlzOworLy8g
VGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9j
ayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8g
cmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgYXJndW1lbnRzLCBvYmplY3RzCisvLyBpbiB0aGUgcmV0
dXJuZWQgYXJyYXkgYXJlIGluc3RhbmNlcyBvZiBKU1ZhbHVlLiBPdXRzaWRlIG9mIGEgY2FsbGJh
Y2sgZnJvbQorLy8gSmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisrIChO
U0FycmF5ICopY3VycmVudEFyZ3VtZW50czsKKworLy8gVGhlICJleGNlcHRpb24iIHByb3BlcnR5
IG1heSBiZSB1c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0byBKYXZhU2NyaXB0LgorLy8gQmVm
b3JlIGEgY2FsbGJhY2sgaXMgbWFkZSBmcm9tIEphdmFTY3JpcHQgdG8gYW4gT2JqZWN0aXZlLUMg
YmxvY2sgb3IgbWV0aG9kLAorLy8gdGhlIHByaW9yIHZhbHVlIG9mIHRoZSBleGNlcHRpb24gcHJv
cGVydHkgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIHRoZSBwcm9wZXJ0eQorLy8gd2lsbCBiZSBzZXQg
dG8gbmlsLiBBZnRlciB0aGUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCB0aGUgbmV3IHZhbHVlIG9m
IHRoZQorLy8gZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcmVhZCwgYW5kIHByaW9yIHZhbHVl
IHJlc3RvcmVkLiBJZiB0aGUgbmV3IHZhbHVlCisvLyBvZiBleGNlcHRpb24gaXMgbm90IG5pbCwg
dGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIHRoYXQgdmFsdWUgYmVpbmcgdGhyb3duLgorLy8g
VGhpcyBwcm9wZXJ0eSBtYXkgYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZvciB1bmNhdWdodCBleGNl
cHRpb25zIGFyaXNpbmcgZnJvbQorLy8gQVBJIGZ1bmN0aW9uIGNhbGxzIChzaW5jZSB0aGUgZGVm
YXVsdCBiZWhhdmlvdXIgb2YgImV4Y2VwdGlvbkhhbmRsZXIiIGlzIHRvCisvLyBhc3NpZ24gYW50
IHVuY2F1Z2h0IGV4Y2VwdGlvbiB0byB0aGlzIHByb3BlcnR5KS4KKy8vIElmIGEgSlNWYWx1ZSBv
cmdpbmF0aW5nIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGluZSB0aGlzIHRoaXMgY29u
dGV4dAorLy8gaXMgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSwgYW4gT2JqZWN0aXZlLUMgZXhj
ZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorQHByb3BlcnR5KHJldGFpbikgSlNWYWx1ZSAqZXhjZXB0
aW9uOworCisvLyBJZiBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uIHJlc3VsdHMgaW4gYW4gdW5j
YXVnaHQgSmF2YVNjcmlwdCBleGNlcHRpb24sIHRoZQorLy8gImV4Y2VwdGlvbkhhbmRsZXIiIGJs
b2NrIHdpbGwgYmUgaW52b2tlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHRoZQor
Ly8gZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzdG9yZSB0aGUgZXhjZXB0aW9uIHRvIHRoZSBleGNl
cHRpb24gcHJvcGVydHkgb24KKy8vIGNvbnRleHQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIGRlZmF1
bHQgYmVoYXZpb3VyIGlzIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucworLy8gb2NjdXJpbmcgd2l0
aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhyb3duIHVwb24gcmV0dXJu
LgorLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3VsdCBpbiBhbGwgdW5jYXVn
aHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQorLy8gdGhlIEFQSSBiZWluZyBzaWxlbnRseSBjb25z
dW1lZC4KK0Bwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5kbGVyKShKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CisKKy8vIEFsbCBpbnN0YW5jZXMgb2YgSlND
b250ZXh0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgSlNWaXJ0dWFsTWFjaGluZS4gVGhl
CisvLyB2aXJ0dWFsIG1hY2hpbmUgcHJvdmlkZXMgYW4gIm9iamVjdCBzcGFjZSIgb3Igc2V0IG9m
IGV4ZWN1dGlvbiByZXNvdXJjZXMuCitAcHJvcGVydHkocmVhZG9ubHksIHJldGFpbikgSlNWaXJ0
dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmU7CisKK0BlbmQKKworLy8gSW5zdGFuY2VzIG9mIEpT
Q29udGV4dCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIG9yZGVyIHRvIGVuYWJs
ZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkgYW5kIGluZGV4LCBmb3Ig
ZXhhbXBsZToKKy8vCisvLyAgICBKU0NvbnRleHQgKmNvbnRleHQ7CisvLyAgICBKU1ZhbHVlICp2
ID0gY29udGV4dFtAIlgiXTsgLy8gR2V0IHZhbHVlIGZvciAiWCIgZnJvbSB0aGUgZ2xvYmFsIG9i
amVjdC4KKy8vICAgIGNvbnRleHRbQCJZIl0gPSB2OyAgICAgICAgICAvLyBBc3NpZ24gJ3YnIHRv
ICJZIiBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vCisvLyBBbiBvYmplY3Qga2V5IHBhc3NlZCBh
cyBhIHN1YnNjcmlwdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEphdmFTY2lwdCB2YWx1ZSwKKy8v
IGFuZCB0aGVuIHRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdXNlZCB0byByZXNvbHZl
IGEgcHJvcGVydHkgb2YgdGhlCisvLyBnbG9iYWwgb2JqZWN0LgorQGludGVyZmFjZSBKU0NvbnRl
eHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2Ny
aXB0OihpZClrZXk7CistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vic2Ny
aXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9ydCAiSlNDb250
ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgorI2lt
cG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNpbmNs
dWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPG9iamMvb2JqYy1pbnRlcm5hbC5oPgorCisjaWYgSlNf
T0JKQ19BUElfRU5BQkxFRAorCit0eXBlZGVmIFdURjo6SGFzaE1hcDxKU1ZhbHVlUmVmLCBzaXpl
X3Q+IFByb3RlY3RNYXA7CisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgeworICAgIEpTVmly
dHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1f
Y29udGV4dDsKKyAgICBKU1dyYXBwZXJNYXAgKm1fd3JhcHBlck1hcDsKKyAgICBQcm90ZWN0TWFw
IG1fcHJvdGVjdGVkOworfQorCitAc3ludGhlc2l6ZSBleGNlcHRpb247CitAc3ludGhlc2l6ZSBl
eGNlcHRpb25IYW5kbGVyOworCistIChpZClpbml0Cit7CisgICAgcmV0dXJuIFtzZWxmIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXTsKK30KKworLSAoaWQpaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZpcnR1YWxNYWNoaW5lCit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV92aXJ0
dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRhaW5dOworICAgIG1fY29udGV4dCA9IEpT
R2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUodmly
dHVhbE1hY2hpbmUpLCAwKTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBhbGxv
Y10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRpb24gPSBuaWw7Cisg
ICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWUg
KmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0aW9u
VmFsdWU7CisgICAgfTsKKworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCistIChKU1ZhbHVl
KilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKK3sKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvblZhbHVlID0gMDsKKyAgICBKU1N0cmluZ1JlZiBzY3JpcHRKUyA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilzY3JpcHQpOworICAgIEpTVmFsdWVSZWYgcmVz
dWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQsIHNjcmlwdEpTLCAwLCAwLCAwLCAmZXhj
ZXB0aW9uVmFsdWUpOworICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRKUyk7CisKKyAgICBpZiAo
ZXhjZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNl
cHRpb246ZXhjZXB0aW9uVmFsdWVdOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZh
bHVlOnJlc3VsdCBpbkNvbnRleHQ6c2VsZl07Cit9CisKKy0gKEpTVmFsdWUqKWdsb2JhbE9iamVj
dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU0NvbnRleHRHZXRHbG9i
YWxPYmplY3QobV9jb250ZXh0KSBpbkNvbnRleHQ6c2VsZl07Cit9CisKKysgKEpTQ29udGV4dCAq
KWN1cnJlbnRDb250ZXh0Cit7CisgICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRo
cmVhZERhdGEoKTsKKyAgICBDYWxsYmFja0RhdGEgKmVudHJ5ID0gKENhbGxiYWNrRGF0YSAqKXRo
cmVhZERhdGEubV9hcGlEYXRhOworICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5jb250ZXh0IDog
bmlsOworfQorCisrIChKU1ZhbHVlICopY3VycmVudFRoaXMKK3sKKyAgICBXVEZUaHJlYWREYXRh
JiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkg
PSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBpZiAoIWVudHJ5
LT5jdXJyZW50VGhpcykKKyAgICAgICAgZW50cnktPmN1cnJlbnRUaGlzID0gW1tKU1ZhbHVlIGFs
bG9jXSBpbml0V2l0aFZhbHVlOmVudHJ5LT50aGlzVmFsdWUgaW5Db250ZXh0OltKU0NvbnRleHQg
Y3VycmVudENvbnRleHRdXTsKKworICAgIHJldHVybiBlbnRyeS0+Y3VycmVudFRoaXM7Cit9CisK
KysgKE5TQXJyYXkgKiljdXJyZW50QXJndW1lbnRzCit7CisgICAgV1RGVGhyZWFkRGF0YSYgdGhy
ZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKKyAgICBDYWxsYmFja0RhdGEgKmVudHJ5ID0gKENh
bGxiYWNrRGF0YSAqKXRocmVhZERhdGEubV9hcGlEYXRhOworCisgICAgaWYgKCFlbnRyeS0+Y3Vy
cmVudEFyZ3VtZW50cykgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0
IGN1cnJlbnRDb250ZXh0XTsKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gZW50cnktPmFyZ3VtZW50
Q291bnQ7CisgICAgICAgIEpTVmFsdWUgKiBhcmdzW2NvdW50XTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBhcmdzW2ldID0gW0pTVmFsdWUg
dmFsdWVXaXRoVmFsdWU6ZW50cnktPmFyZ3VtZW50c1tpXSBpbkNvbnRleHQ6Y29udGV4dF07Cisg
ICAgICAgIGVudHJ5LT5jdXJyZW50QXJndW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6YXJncyBjb3VudDpjb3VudF07CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5LT5j
dXJyZW50QXJndW1lbnRzOworfQorCistIChKU1ZpcnR1YWxNYWNoaW5lKil2aXJ0dWFsTWFjaGlu
ZQoreworICAgIHJldHVybiBtX3ZpcnR1YWxNYWNoaW5lOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVj
dEZvcktleWVkU3Vic2NyaXB0OihpZClrZXkKK3sKKyAgICByZXR1cm4gW3NlbGYgZ2xvYmFsT2Jq
ZWN0XVtrZXldOworfQorCistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vi
c2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXkKK3sKKyAgICBbc2VsZiBnbG9iYWxPYmplY3RdW2tl
eV0gPSBvYmplY3Q7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChJbnRl
cm5hbCkKKworSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleHQoSlNDb250
ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHQ7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5tX2FwaURhdGEgPSAwOworCisgICAgUHJvdGVjdE1hcDo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX3Byb3RlY3RlZC5iZWdpbigpOworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
cHJvdGVjdGVkLmVuZCgpOworICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3Ip
CisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBpdGVyYXRvci0+a2V5KTsKKwor
ICAgIFttX3dyYXBwZXJNYXAgcmVsZWFzZV07CisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZSht
X2NvbnRleHQpOworICAgIFttX3ZpcnR1YWxNYWNoaW5lIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClub3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0
aW9uVmFsdWUKK3sKKyAgICBzZWxmLmV4Y2VwdGlvbkhhbmRsZXIoc2VsZiwgW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6ZXhjZXB0aW9uVmFsdWUgaW5Db250ZXh0OnNlbGZdKTsKK30KKworLSAoSlNW
YWx1ZSAqKXZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb25WYWx1
ZQoreworICAgIFtzZWxmIG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CisgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDpzZWxmXTsKK30KKworLSAo
Qk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb25WYWx1ZQor
eworICAgIFtzZWxmIG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CisgICAgcmV0dXJu
IE5POworfQorCistICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICop
Y2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3Vu
dDooc2l6ZV90KWFyZ3VtZW50Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJn
dW1lbnRzCit7CisgICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEo
KTsKKyAgICBbc2VsZiByZXRhaW5dOworICAgIENhbGxiYWNrRGF0YSAqcHJldlN0YWNrID0gKENh
bGxiYWNrRGF0YSAqKXRocmVhZERhdGEubV9hcGlEYXRhOworICAgICpjYWxsYmFja0RhdGEgPSAo
Q2FsbGJhY2tEYXRhKXsgcHJldlN0YWNrLCBzZWxmLCBbc2VsZi5leGNlcHRpb24gcmV0YWluXSwg
dGhpc1ZhbHVlLCBuaWwsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbmlsIH07CisgICAgdGhy
ZWFkRGF0YS5tX2FwaURhdGEgPSBjYWxsYmFja0RhdGE7CisgICAgc2VsZi5leGNlcHRpb24gPSBu
aWw7Cit9CisKKy0gKHZvaWQpZW5kQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICopY2Fs
bGJhY2tEYXRhCit7CisgICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERh
dGEoKTsKKyAgICBzZWxmLmV4Y2VwdGlvbiA9IGNhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0
aW9uOworICAgIFtjYWxsYmFja0RhdGEtPnByZXNlcnZlZEV4Y2VwdGlvbiByZWxlYXNlXTsKKyAg
ICBbY2FsbGJhY2tEYXRhLT5jdXJyZW50VGhpcyByZWxlYXNlXTsKKyAgICBbY2FsbGJhY2tEYXRh
LT5jdXJyZW50QXJndW1lbnRzIHJlbGVhc2VdOworICAgIHRocmVhZERhdGEubV9hcGlEYXRhID0g
Y2FsbGJhY2tEYXRhLT5uZXh0OworICAgIFtzZWxmIHJlbGVhc2VdOworfQorCistICh2b2lkKXBy
b3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUKK3sKKyAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3Rl
Y3RlZAorICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKKworICAg
IFByb3RlY3RNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Byb3RlY3RlZC5hZGQodmFsdWUsIDEp
OworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QobV9j
b250ZXh0LCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Cit9CisKKy0gKHZvaWQpdW5wcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlCit7CisgICAgLy8g
TG9jayBhY2Nlc3MgdG8gbV9wcm90ZWN0ZWQKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHRv
SlMobV9jb250ZXh0KSk7CisKKyAgICBQcm90ZWN0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1f
cHJvdGVjdGVkLmZpbmQodmFsdWUpOworICAgIGlmIChpdGVyYXRvci0+dmFsdWUgPT0gMSkgewor
ICAgICAgICBtX3Byb3RlY3RlZC5yZW1vdmUodmFsdWUpOworICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KG1fY29udGV4dCwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICAtLWl0ZXJhdG9yLT52
YWx1ZTsKK30KKworLSAoSlNWYWx1ZSopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7Cisg
ICAgLy8gTG9jayBhY2Nlc3MgdG8gbV93cmFwcGVyTWFwCisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh0b0pTKG1fY29udGV4dCkpOworICAgIHJldHVybiBbbV93cmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6b2JqZWN0XTsKK30KKworQGVuZAorCitXZWFrQ29udGV4dFJlZjo6V2Vha0NvbnRl
eHRSZWYoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfaW5pdFdlYWsoJm1fd2Vha0Nv
bnRleHQsIGNvbnRleHQpOworfQorCitXZWFrQ29udGV4dFJlZjo6fldlYWtDb250ZXh0UmVmKCkK
K3sKKyAgICBvYmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsKK30KKworSlNDb250ZXh0
ICogV2Vha0NvbnRleHRSZWY6OmdldCgpCit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1f
d2Vha0NvbnRleHQpOworfQorCit2b2lkIFdlYWtDb250ZXh0UmVmOjpzZXQoSlNDb250ZXh0ICpj
b250ZXh0KQoreworICAgIG9iamNfc3RvcmVXZWFrKCZtX3dlYWtDb250ZXh0LCBjb250ZXh0KTsK
K30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dElu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNp
bXBvcnQgIkpTQ29udGV4dC5oIgorCitzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBDYWxsYmFj
a0RhdGEgKm5leHQ7CisgICAgSlNDb250ZXh0ICpjb250ZXh0OworICAgIEpTVmFsdWUgKnByZXNl
cnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHRoaXNWYWx1ZTsKKyAgICBKU1ZhbHVlICpj
dXJyZW50VGhpczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudDsKKyAgICBjb25zdCBKU1ZhbHVl
UmVmICphcmd1bWVudHM7CisgICAgTlNBcnJheSAqY3VycmVudEFyZ3VtZW50czsKK307CisKK2Ns
YXNzIFdlYWtDb250ZXh0UmVmIHsKK3B1YmxpYzoKKyAgICBXZWFrQ29udGV4dFJlZihKU0NvbnRl
eHQgKmNvbnRleHQgPSBuaWwpOworICAgIH5XZWFrQ29udGV4dFJlZigpOworCisgICAgSlNDb250
ZXh0ICogZ2V0KCk7CisgICAgdm9pZCBzZXQoSlNDb250ZXh0ICopOworCitwcml2YXRlOgorICAg
IEpTQ29udGV4dCAqbV93ZWFrQ29udGV4dDsKK307CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0KElu
dGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0Nv
bnRleHQqIGNvbnRleHQpOworCistICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZill
eGNlcHRpb247CistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVl
UmVmKWV4Y2VwdGlvbjsKKy0gKEJPT0wpYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVS
ZWYpZXhjZXB0aW9uOworCistICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tE
YXRhICopY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1l
bnRDb3VudDooc2l6ZV90KWFyZ3VtZW50Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVm
ICopYXJndW1lbnRzOworLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEg
KiljYWxsYmFja0RhdGE7CisKKy0gKHZvaWQpcHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZTsKKy0g
KHZvaWQpdW5wcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworCistIChKU1ZhbHVlKil3cmFwcGVy
Rm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTRXhwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworLy8gV2hlbiBhbiBKYXZhU2NyaXB0
IHZhbHVlIGlzIGNyZWF0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhbiBPYmplY3RpdmUtQyBjbGFz
cworLy8gZm9yIHdoaWNoIG5vIGNvcHlpbmcgY29udmVyc2lvbiBpcyBzcGVjaWZpZWQgYSBKYXZh
U2NyaXB0IHdyYXBwZXIgb2JqZWN0IHdpbGwKKy8vIGJlIGNyZWF0ZWQuCisvLworLy8gSW4gSmF2
YVNjcmlwdCBpbmhlcml0YW5jZSBpcyBzdXBwb3J0ZWQgdmlhIGEgY2hhaW4gb2YgcHJvdG90eXBl
IG9iamVjdHMsIGFuZAorLy8gZm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MgKGFuZCBwZXIgSlND
b250ZXh0KSBhbiBvYmplY3QgYXBwcm9wcmlhdGUgZm9yIHVzZQorLy8gYXMgYSBwcm90b3R5cGUg
d2lsbCBiZSBwcm92aWRlZC4gRm9yIHRoZSBjbGFzcyBOU09iamVjdCB0aGUgcHJvdG90eXBlIG9i
amVjdAorLy8gd2lsbCBiZSB0aGUgSmF2YVNjcmlwdCBjb250ZXh0J3MgT2JqZWN0IFByb3RvdHlw
ZS4gRm9yIGFsbCBvdGhlciBPYmplY3RpdmUtQworLy8gY2xhc3NlcyBhIFByb3RvdHlwZSBvYmpl
Y3Qgd2lsbCBiZSBjcmVhdGVkLiBUaGUgUHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbgorLy8g
T2JqZWN0aXZlLUMgY2xhc3Mgd2lsbCBoYXZlIGl0cyBpbnRlcm5hbCBbUHJvdG90eXBlXSBwcm9w
ZXJ0eSBzZXQgdG8gcG9pbnQgdG8KKy8vIHRoZSBQcm90b3R5cGUgb2JqZWN0IG9mIHRoZSBPYmpl
Y3RpdmUtQyBjbGFzcydzIHN1cGVyY2xhc3MuIEFzIHN1Y2ggdGhlCisvLyBwcm90b3R5cGUgY2hh
aW4gZm9yIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCB3aWxsIHJlZmxlY3QgdGhlIHdyYXBw
ZWQKKy8vIE9iamVjdGl2ZS1DIHR5cGUncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisvLworLy8g
SW4gYWRkaXRpb24gdG8gdGhlIFByb3RvdHlwZSBvYmplY3QgYSBKYXZhU2NyaXB0IENvbnN0cnVj
dG9yIG9iamVjdCB3aWxsIGFsc28KKy8vIGJlIHByb2R1Y2VkIGZvciBlYWNoIE9iamVjdGl2ZS1D
IGNsYXNzLiBUaGUgQ29uc3RydWN0b3Igb2JqZWN0IGhhcyBhIHByb3BlcnR5CisvLyBuYW1lZCAn
cHJvdG90eXBlJyB0aGF0IHJlZmVyZW5jZXMgdGhlIFByb3RvdHlwZSBvYmplY3QsIGFuZCB0aGUg
UHJvdG90eXBlCisvLyBvYmplY3QgaGFzIGEgcHJvcGVydHkgbmFtZWQgJ2NvbnN0cnVjdG9yJyB0
aGF0IHJlZmVyZW5jZXMgdGhlIENvbnN0cnVjdG9yLgorLy8gVGhlIENvbnN0cnVjdG9yIG9iamVj
dCBpcyBub3QgY2FsbGFibGUuCisvLworLy8gQnkgZGVmYXVsdCBubyBtZXRob2RzIG9yIHByb3Bl
cnRpZXMgb2YgdGhlIE9iamVjdGl2ZS1DIGNsYXNzIHdpbGwgYmUgZXhwb3NlZAorLy8gdG8gSmF2
YVNjcmlwdCwgaG93ZXZlciBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIG1heSBleHBsaWNpdGx5IGJl
IGV4cG9ydGVkLgorLy8gRm9yIGVhY2ggcHJvdG9jb2wgdGhhdCBhIGNsYXNzIGNvbmZvcm1zIHRv
LCBpZiB0aGUgcHJvdG9jb2wgaW5jb3Jwb3JhdGVzIHRoZQorLy8gcHJvdG9jb2wgSlNFeHBvcnQs
IHRoZW4gdGhlIHByb3RvY29sIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIG1ldGhv
ZHMKKy8vIGFuZCBwcm9wZXJ0aWVzIHRvIGJlIGV4cG9ydGVkIHRvIEphdmFTY3JpcHQuCisvLwor
Ly8gRm9yIGVhY2ggaW5zdGFuY2UgbWV0aG9kIGJlaW5nIGV4cG9ydGVkLCBhIGNvcnJlc3BvbmRp
bmcgSmF2YVNjcmlwdCBmdW5jdGlvbgorLy8gd2lsbCBiZSBhc3NpZ25lZCBhcyBhIHByb3BlcnR5
IG9mIHRoZSBQcm90b3R5cGUgb2JqZWN0LCBmb3IgZWFjaCBPYmplY3RpdmUtQworLy8gcHJvcGVy
dHkgYmVpbmcgZXhwb3J0ZWQgYSBKYXZhU2NyaXB0IGFjY2Vzc29yIHByb3BlcnR5IHdpbGwgYmUg
Y3JlYXRlZCBvbiB0aGUKKy8vIFByb3RvdHlwZSwgYW5kIGZvciBlYWNoIGNsYXNzIG1ldGhvZCBl
eHBvcnRlZCBhIEphdmFTY3JpcHQgZnVuY3Rpb24gd2lsbCBiZQorLy8gY3JlYXRlZCBvbiB0aGUg
Q29uc3RydWN0b3Igb2JqZWN0LiBGb3IgZXhhbXBsZToKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlD
bGFzc0phdmFTY3JpcHRNZXRob2RzIDxKU0V4cG9ydD4KKy8vICAgIC0gKHZvaWQpZm9vOworLy8g
ICAgQGVuZAorLy8KKy8vICAgIEBpbnRlcmZhY2UgTXlDbGFzcyA6IE5TT2JqZWN0IDxNeUNsYXNz
SmF2YVNjcmlwdE1ldGhvZHM+CisvLyAgICAtICh2b2lkKWZvbzsKKy8vICAgIC0gKHZvaWQpYmFy
OworLy8gICAgQGVuZAorLy8KKy8vIElmIGFuIGluc3RhbmNlIG9mIE15Q2xhc3MgaXMgY29udmVy
dGVkIHRvIGEgSmF2YVNjcmlwdCB2YWx1ZSwgdGhlIHJlc3VsdGluZworLy8gd3JhcHBlciBvYmpl
Y3Qgd2lsbCAodmlhIGl0cyBwcm90b3R5cGUpIGV4cG9ydCB0aGUgbWV0aG9kICJmb28iIHRvIEph
dmFTY3JpcHQsCisvLyBzaW5jZSB0aGUgY2xhc3MgY29uZm9ybXMgdG8gdGhlIE15Q2xhc3NKYXZh
U2NyaXB0RXhwb3J0cyBwcm90b2NvbCwgYW5kIHRoaXMKKy8vIHByb3RvY29sIGluY29ycG9yYXRl
cyBKU0V4cG9ydC4gImJhciIgd2lsbCBub3QgYmUgZXhwb3J0ZWQuCisvLworLy8gUHJvcGVydGll
cywgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIGFy
ZQorLy8gc3VwcG9ydGVkOgorLy8KKy8vIFByaW1pdGl2ZSBudW1iZXJzOiBzaWduZWQgdmFsdWVz
IG9mIHVwIHRvIDMyLWJpdHMgYXJlIGNvbnZlcnRlZCBpbiBhIG1hbm5lcgorLy8gICAgY29uc2lz
dGVudCB3aXRoIHZhbHVlV2l0aEludDMyL3RvSW50MzIsIHVuc2lnbmVkIHZhbHVlcyBvZiB1cCB0
byAzMi1iaXRzCisvLyAgICBhcmUgY29udmVydGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0
aCB2YWx1ZVdpdGhVSW50MzIvdG9VSW50MzIsIGFsbAorLy8gICAgb3RoZXIgbnVtZXJpYyB2YWx1
ZXMgYXJlIGNvbnZlcnRlZCBjb25zaXN0ZW50bHkgd2l0aCB2YWx1ZVdpdGhEb3VibGUvCisvLyAg
ICB0b0RvdWJsZS4KKy8vIEJPT0w6IHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3
aXRoIHZhbHVlV2l0aEJvb2wvdG9Cb29sLgorLy8gaWQ6IHZhbHVlcyBhcmUgY29udmVydGVkIGNv
bnNpc3RlbnRseSB3aXRoIHZhbHVlV2l0aE9iamVjdC90b09iamVjdC4KKy8vIDxPYmplY3RpdmUt
QyBDbGFzcz46IC0gd2hlcmUgdGhlIHR5cGUgaXMgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWVkIE9i
amVjdGl2ZS1DCisvLyAgICBjbGFzcywgY29udmVyc2lvbiBpcyBjb25zaXN0ZW50IHdpdGggdmFs
dWVXaXRoT2JqZWN0T2ZDbGFzcy90b09iamVjdC4KKy8vIHN0cnVjdCB0eXBlczogQyBzdHJ1Y3Qg
dHlwZXMgYXJlIHN1cHBvcnRlZCwgd2hlcmUgSlNWYWx1ZSBwcm92aWRlcyBzdXBwb3J0CisvLyAg
ICBmb3IgdGhlIGdpdmVuIHR5cGUuIFN1cHBvcnQgaXMgYnVpbHQgaW4gZm9yIENHUG9pbnQsIE5T
UmFuZ2UsIENHUmVjdCwgYW5kCisvLyAgICBDR1NpemU7IHNlZSBKU1ZhbHVlU3RydWN0U3VwcG9y
dC5oIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYWRkIHN1cHBvcnQKKy8vICAgIGZvciBhZGRp
dGlvbmFsIHR5cGVzLgorLy8gYmxvY2sgdHlwZXM6IEluIGFkZGl0aW9uIHRvIHN1cHBvcnQgcHJv
dmlkZWQgYnkgdmFsdWVXaXRoT2JqZWN0L3RvT2JqZWN0IGZvcgorLy8gICAgYmxvY2sgdHlwZXMs
IGlmIGEgSmF2YVNjcmlwdCBGdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHdoZXJl
IHRoZQorLy8gICAgdHlwZSByZXF1aXJlZCBpcyBhIGJsb2NrIHdpdGggYSB2b2lkIHJldHVybiB2
YWx1ZSAoYW5kIHdoZXJlIHRoZSBibG9jaydzCisvLyAgICBhcmd1bWVudHMgYXJlIGFsbCBvZiBz
dXBwb3J0ZWQgdHlwZXMpLCB0aGVuIGEgc3BlY2lhbCBhZGFwdG9yIGJsb2NrCisvLyAgICB3aWxs
IGJlIGNyZWF0ZWQsIGFsbG93aW5nIHRoZSB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byBiZSB1
c2VkIGluIHRoZQorLy8gICAgcGxhY2Ugb2YgYSBibG9jay4KKy8vCisvLyBGb3IgYW55IGludGVy
ZmFjZSB0aGF0IGNvbmZvcm1zIHRvIEpTRXhwb3J0IHRoZSBub3JtYWwgY29weWluZyBjb252ZXJz
aW9uIGZvcgorLy8gYnVpbHQgaW4gdHlwZXMgd2lsbCBiZSBpbmhpYml0ZWQgLSBzbywgZm9yIGV4
YW1wbGUsIGlmIGFuIGluc3RhbmNlIHRoYXQKKy8vIGRlcml2ZXMgZnJvbSBOU1N0cmluZyBieSBj
b25mb3JtcyB0byBKU0V4cG9ydCBpcyBwYXNzZWQgdG8gdmFsdWVXaXRoT2JqZWN0OiwKKy8vIGEg
d3JhcHBlciBvYmplY3QgZm9yIHRoZSBPYmplY3RpdmUtQyBvYmplY3Qgd2lsbCBiZSByZXR1cm5l
ZCByYXRoZXIgdGhhbiBhCisvLyBKYXZhU2NyaXB0IHN0cmluZyBwcmltaXRpdmUuCitAcHJvdG9j
b2wgSlNFeHBvcnQKK0BlbmQKKworLy8gV2hlbiBhIHNlbGVjdG9yIHRoYXQgdGFrZXMgb25lIG9y
IG1vcmUgYXJndW1lbnRzIGlzIGNvbnZlcnRlZCB0byBhIEphdmFTY3JpcHQKKy8vIHByb3BlcnR5
IG5hbWUsIGJ5IGRlZmF1bHQgYSBwcm9wZXJ0eSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHBl
cmZvcm1pbmcgdGhlCisvLyBmb2xsb3dpbmcgY29udmVyc2lvbjoKKy8vICAtIEFsbCBzZW1pY29s
b25zIGFyZSByZW1vdmVkIGZyb20gdGhlIHNlbGVjdG9yCisvLyAgLSBBbnkgbG93ZXJjYXNlIGxl
dHRlciB0aGF0IGhhZCBmb2xsb3dlZCBhIHNlbWljb2xvbiB3aWxsIGJlIGNhcGl0YWxpemVkLgor
Ly8gVW5kZXIgdGhlIGRlZmF1bHQgY29udmVyc2lvbiBhIHNlbGVjdG9yICJkb0Zvbzp3aXRoQmFy
OiIgd2lsbCBiZSBleHBvcnRlZCBhcworLy8gImRvRm9vV2l0aEJhciIuIFRoZSBkZWZhdWx0IGNv
bnZlcnNpb24gbWF5IGJlIG92ZXJyaWRlbiB1c2luZyB0aGUgSlNFeHBvcnRBcworLy8gbWFjcm8s
IGZvciBleGFtcGxlIHRvIGV4cG9ydCBhIG1ldGhvZCAiZG9Gb286d2l0aEJhcjoiIGFzICJkb0Zv
byI6CisvLworLy8gICAgQHByb3RvY29sIE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcyA8SlNFeHBv
cnQ+CisvLyAgICBKU0V4cG9ydEFzKGRvRm9vLAorLy8gICAgLSAodm9pZClkb0ZvbzooaWQpZm9v
IHdpdGhCYXI6KGlkKWJhcgorLy8gICAgKTsKKy8vICAgIEBlbmQKKy8vCisvLyBOb3RlIHRoYXQg
dGhlIEpTRXhwb3J0IG1hY3JvIG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzZWxlY3RvciB0aGF0
IHRha2VzIG9uZQorLy8gb3IgbW9yZSBhcmd1bWVudC4KKyNkZWZpbmUgSlNFeHBvcnRBcyhQcm9w
ZXJ0eU5hbWUsIFNlbGVjdG9yKSBcCisgICAgQG9wdGlvbmFsIFNlbGVjdG9yIF9fSlNfRVhQT1JU
X0FTX18jI1Byb3BlcnR5TmFtZTooaWQpYXJndW1lbnQ7IEByZXF1aXJlZCBTZWxlY3RvcgorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0
ICJBUElTaGltcy5oIgorI2ltcG9ydCAiRGF0ZUluc3RhbmNlLmgiCisjaW1wb3J0ICJFcnJvci5o
IgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFs
LmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFs
dWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0ICJPYmpjUnVu
dGltZUV4dHJhcy5oIgorI2ltcG9ydCAiSlNWYWx1ZS5oIgorI2ltcG9ydCAid3RmL0hhc2hNYXAu
aCIKKyNpbXBvcnQgInd0Zi9IYXNoU2V0LmgiCisjaW1wb3J0ICJ3dGYvVmVjdG9yLmgiCisjaW1w
b3J0IDx3dGYvVENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL3RleHQvV1RGU3RyaW5nLmgiCisj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW1wb3J0ICJvYmpjL29iamMtaW50ZXJu
YWwuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworTlNTdHJpbmcgKiBjb25zdCBKU1By
b3BlcnR5RGVzY3JpcHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CitOU1N0cmluZyAqIGNv
bnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CitO
U1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5ID0gQCJj
b25maWd1cmFibGUiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVl
S2V5ID0gQCJ2YWx1ZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0
S2V5ID0gQCJnZXQiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtl
eSA9IEAic2V0IjsKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUgeworICAgIEpTVmFsdWVSZWYg
bV92YWx1ZTsKKyAgICBKU0NvbnRleHQgKm1fd2Vha0NvbnRleHQ7Cit9CisKKysgKEpTVmFsdWUg
Kil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNv
bnRleHQsIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVX
aXRoQm9vbDooQk9PTCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9
CisrIChKU1ZhbHVlICopdmFsdWVXaXRoRG91YmxlOihkb3VibGUpdmFsdWUgaW5Db250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVl
KSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoSW50MzI6KGlu
dDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoVUludDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29u
dGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRl
eHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
VmFsdWU6SlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDAp
IGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCAwLCBOVUxMLCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFs
dWVXaXRoTmV3UmVndWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJu
IGZsYWdzOihOU1N0cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAor
eworICAgIEpTU3RyaW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0
cmluZygoQ0ZTdHJpbmdSZWYpcGF0dGVybik7CisgICAgSlNTdHJpbmdSZWYgZmxhZ3NTdHJpbmcg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpZmxhZ3MpOworICAgIEpT
VmFsdWVSZWYgYXJndW1lbnRzWzJdID0geyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBwYXR0ZXJuU3RyaW5nKSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgZmxhZ3NTdHJpbmcpIH07CisgICAgSlNTdHJp
bmdSZWxlYXNlKHBhdHRlcm5TdHJpbmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShmbGFnc1N0cmlu
Zyk7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlUmVn
RXhwKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDIsIGFyZ3VtZW50cywgMCkgaW5D
b250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Vycm9yRnJvbU1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQK
K3sKKyAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygo
Q0ZTdHJpbmdSZWYpbWVzc2FnZSk7CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVN
YWtlU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAg
SlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
VmFsdWU6SlNPYmplY3RNYWtlRXJyb3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
MSwgJmFyZ3VtZW50LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFs
dWVXaXRoTnVsbEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bGwoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVl
V2l0aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVy
biBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKGlkKXRv
T2JqZWN0Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB2YWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIG1fdmFsdWUpOworfQorLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcylj
bHMKK3sKKyAgICBpZCByZXN1bHQgPSBbc2VsZiB0b09iamVjdF07CisgICAgcmV0dXJuIFtyZXN1
bHQgaXNLaW5kT2ZDbGFzczpjbHNdID8gcmVzdWx0IDogbmlsOworfQorCistIChCT09MKXRvQm9v
bAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVy
biAoY29udGV4dCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoZG91YmxlKXRvRG91YmxlCit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBkb3VibGUgcmVzdWx0ID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUs
ICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CistIChpbnQzMl90KXRvSW50MzIKK3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKFtzZWxmIHRv
RG91YmxlXSk7Cit9CistICh1aW50MzJfdCl0b1VJbnQzMgoreworICAgIHJldHVybiBKU0M6OnRv
VUludDMyKFtzZWxmIHRvRG91YmxlXSk7Cit9CistIChOU051bWJlciAqKXRvTnVtYmVyCit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwor
ICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
W2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKy0gKE5TU3RyaW5nICopdG9TdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0
cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNEYXRlICopdG9EYXRlCit7
CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAw
OworICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAg
IFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7
Cit9CistIChOU0FycmF5ICopdG9BcnJheQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtz
ZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvQXJy
YXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TRGljdGlvbmFyeSAqKXRvRGlj
dGlvbmFyeQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCistIChKU1ZhbHVlICopdmFsdWVGb3JQcm9wZXJ0eTooTlNT
dHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBj
b250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1
ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsK
KyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0
cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtj
b250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9Cist
ICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0
eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbikgeworICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU09i
amVjdFNldFByb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwg
bmFtZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAg
IEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtj
b250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorLSAoQk9PTClkZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sK
KyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
KyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlv
bikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVj
dERlbGV0ZVByb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwg
bmFtZSwgJmV4Y2VwdGlvbikgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9P
TCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJl
ZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0
dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBK
U1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVm
KXByb3BlcnR5TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSkgPyBZRVMgOiBOTzsK
KyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKHZv
aWQpZGVmaW5lUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHkgZGVzY3JpcHRvcjooaWQpZGVz
Y3JpcHRvcgoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIFtbY29udGV4dCBnbG9iYWxPYmpl
Y3RdW0AiT2JqZWN0Il0gaW52b2tlTWV0aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVu
dHM6QFsgc2VsZiwgcHJvcGVydHksIGRlc2NyaXB0b3IgXV07Cit9CisKKy0gKEpTVmFsdWUgKil2
YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBpZiAoaW5kZXggIT0gKHVuc2lnbmVkKWluZGV4KQorICAgICAgICBbc2VsZiB2YWx1
ZUZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNv
bnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9u
XTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgs
ICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4
dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAodm9p
ZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIHNldFZhbHVlOnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1
ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmpl
Y3QsICh1bnNpZ25lZClpbmRleCwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy0gKEJPT0wp
aXNVbmRlZmluZWQKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsK
KyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051
bGwKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1
cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNCb29sZWFuCit7CisgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0
ICYmIEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92
YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChCT09MKWlzTnVtYmVyCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFs
dWVJc051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZ
RVMgOiBOTzsKK30KKy0gKEJPT0wpaXNTdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzU3RyaW5n
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POwor
fQorLSAoQk9PTClpc09iamVjdAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNv
bnRleHRdOworICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CisKKy0gKEJP
T0wpaXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POwor
CisgICAgcmV0dXJuIEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIG1fdmFsdWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpKSA/IFlFUyA6
IE5POworfQorLSAoQk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1
ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSAwOworICAgIEJPT0wgcmVzdWx0ID0gSlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZl
eGNlcHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZhbHVlCit7CisgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm4gTk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNP
YmplY3RSZWYgY29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJ
bnN0YW5jZU9mQ29uc3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92
YWx1ZSwgY29uc3RydWN0b3IsICZleGNlcHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChKU1ZhbHVlICopY2FsbFdp
dGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFs
dWVSZWYgYXJndW1lbnRzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRv
VmFsdWUoY29udGV4dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3Qs
IDAsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBp
bkNvbnRleHQ6Y29udGV4dF07Cit9CistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50
czooTlNBcnJheSAqKWFyZ3MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJ
bnRlZ2VyIGFyZ3VtZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbYXJndW1lbnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50Q291bnQ7ICsraSkKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250
ZXh0LCBbYXJncyBvYmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXND
b25zdHJ1Y3Rvcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CistIChKU1ZhbHVlICopaW52b2tlTWV0aG9kOihOU1N0cmluZyAqKW1ldGhv
ZCB3aXRoQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCit7CisgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50cyBjb3Vu
dF07CisgICAgSlNWYWx1ZVJlZiBhcmdzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBvYmpl
Y3RUb1ZhbHVlKGNvbnRleHQsIFthcmd1bWVudHMgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgdGhpc09iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQg
dmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBu
YW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7Cisg
ICAgSlNWYWx1ZVJlZiBmdW5jID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0
cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtj
b250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIGZ1bmMsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJl
dHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAg
IEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3MsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29u
dGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCist
IChKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1fd2Vh
a0NvbnRleHQpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN0cnVjdFN1
cHBvcnQpCisKKy0gKENHUG9pbnQpdG9Qb2ludAoreworICAgIHJldHVybiAoQ0dQb2ludCl7Cisg
ICAgICAgIFtzZWxmW0AieCJdIHRvRG91YmxlXSwKKyAgICAgICAgW3NlbGZbQCJ5Il0gdG9Eb3Vi
bGVdCisgICAgfTsKK30KKworLSAoTlNSYW5nZSl0b1JhbmdlCit7CisgICAgcmV0dXJuIChOU1Jh
bmdlKXsKKyAgICAgICAgKE5TVUludGVnZXIpW3NlbGZbQCJsb2NhdGlvbiJdIHRvRG91YmxlXSwK
KyAgICAgICAgKE5TVUludGVnZXIpW3NlbGZbQCJsZW5ndGgiXSB0b0RvdWJsZV0KKyAgICB9Owor
fQorCistIChDR1JlY3QpdG9SZWN0Cit7CisgICAgcmV0dXJuIChDR1JlY3QpeworICAgICAgICBb
c2VsZiB0b1BvaW50XSwKKyAgICAgICAgW3NlbGYgdG9TaXplXQorICAgIH07Cit9CisKKy0gKENH
U2l6ZSl0b1NpemUKK3sKKyAgICByZXR1cm4gKENHU2l6ZSl7CisgICAgICAgIFtzZWxmW0Aid2lk
dGgiXSB0b0RvdWJsZV0sCisgICAgICAgIFtzZWxmW0AiaGVpZ2h0Il0gdG9Eb3VibGVdCisgICAg
fTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhPYmplY3Q6QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBvaW50
LnhdLAorICAgICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueV0KKyAg
ICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJhbmdl
OihOU1JhbmdlKXJhbmdlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJsb2NhdGlvbiI6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpyYW5nZS5sb2NhdGlvbl0sCisgICAgICAgIEAibGVuZ3Ro
IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJhbmdlLmxlbmd0aF0KKyAgICB9IGluQ29udGV4
dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OnJlY3Qub3JpZ2luLnhdLAorICAgICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
cmVjdC5vcmlnaW4ueV0sCisgICAgICAgIEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6cmVjdC5zaXplLndpZHRoXSwKKyAgICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6cmVjdC5zaXplLmhlaWdodF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30K
KworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6
QHsKKyAgICAgICAgQCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLndpZHRo
XSwKKyAgICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWln
aHRdCisgICAgfSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEpTVmFsdWUoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktl
eWVkU3Vic2NyaXB0OihpZClrZXkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBj
b250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBp
ZiAoIVsoTlNPYmplY3QqKWtleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7Cisg
ICAgICAgIGtleSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250
ZXh0XSB0b1N0cmluZ107CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuIFtK
U1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKyAgICB9CisKKyAg
ICByZXR1cm4gW3NlbGYgdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCist
IChKU1ZhbHVlICopb2JqZWN0QXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Cit7
CisgICAgcmV0dXJuIFtzZWxmIHZhbHVlQXRJbmRleDppbmRleF07Cit9CisKKy0gKHZvaWQpc2V0
T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQor
eworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFs
dWVXaXRoT2JqZWN0OmtleSBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBp
ZiAoIWtleSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBzZXRWYWx1
ZTpvYmplY3QgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopa2V5XTsKK30KKworLSAodm9pZClzZXRP
YmplY3Q6KGlkKW9iamVjdCBhdEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sK
KyAgICBbc2VsZiBzZXRWYWx1ZTpvYmplY3QgYXRJbmRleDppbmRleF07Cit9CisKK0BlbmQKKwor
aW5saW5lIGJvb2wgaXNEYXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQpCit7CisgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4
dCkpOworICAgIHJldHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6OkRhdGVJbnN0YW5j
ZTo6c19pbmZvKTsKK30KKworaW5saW5lIGJvb2wgaXNBcnJheShKU09iamVjdFJlZiBvYmplY3Qs
IEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVu
dHJ5U2hpbSh0b0pTKGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0
cygmSlNDOjpKU0FycmF5OjpzX2luZm8pOworfQorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShJ
bnRlcm5hbCkKKworZW51bSBDb252ZXJzaW9uVHlwZSB7CisgICAgQ29udGFpbmVyTm9uZSwKKyAg
ICBDb250YWluZXJBcnJheSwKKyAgICBDb250YWluZXJEaWN0aW9uYXJ5Cit9OworCitjbGFzcyBK
U0NvbnRhaW5lckNvbnZlcnRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAg
ICBKU1ZhbHVlUmVmIGpzOworICAgICAgICBpZCBvYmpjOworICAgICAgICBDb252ZXJzaW9uVHlw
ZSB0eXBlOworICAgIH07CisKKyAgICBKU0NvbnRhaW5lckNvbnZlcnRvcihKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAg
fQorCisgICAgaWQgY29udmVydChKU1ZhbHVlUmVmIHByb3BlcnR5KTsKKyAgICB2b2lkIGFkZChU
YXNrIHRhc2spOworICAgIFRhc2sgdGFrZSgpOworICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkg
eyByZXR1cm4gIW1fd29ya2xpc3Quc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxD
b250ZXh0UmVmIG1fY29udGV4dDsKKyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1f
b2JqZWN0TWFwOworICAgIFdURjo6VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitpbmxp
bmUgaWQgSlNDb250YWluZXJDb252ZXJ0b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sK
KyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmpl
Y3RNYXAuZmluZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9vYmplY3RNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIFRhc2sgcmVzdWx0ID0gdmFsdWVUb09i
amVjdFdpdGhvdXRDb3B5KG1fY29udGV4dCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuanMpCisg
ICAgICAgIGFkZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQub2JqYzsKK30KKwordm9pZCBK
U0NvbnRhaW5lckNvbnZlcnRvcjo6YWRkKFRhc2sgdGFzaykKK3sKKyAgICBtX29iamVjdE1hcC5h
ZGQodGFzay5qcywgdGFzay5vYmpjKTsKKyAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5v
bmUpCisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKHRhc2spOworfQorCitKU0NvbnRhaW5lckNv
bnZlcnRvcjo6VGFzayBKU0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJU
KCFpc1dvcmtMaXN0RW1wdHkoKSk7CisgICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7
CisgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0
YXRpYyBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHko
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYg
KCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlkIHByaW1pdGl2
ZTsKKyAgICAgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAg
ICAgICAgcHJpbWl0aXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVT
IDogQE5POworICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUp
KSB7CisgICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIG51bWJlciwgc28gaXQgd2lsbCB1bmlx
dWUgY29ycmVjdGx5IGluIHRoZSBoYXNoIG1hcCAtCisgICAgICAgICAgICAvLyBpdCdzIG5pY2Vy
IG5vdCB0byBsZWFrIHRoaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIQorICAgICAg
ICAgICAgdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgdmFsdWUsIDApKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCldOworICAg
ICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIC8vIFdvdWxkIGJlIG5pY2UgdG8gdW5pcXVlIHN0cmluZ3MsIHRvby4KKyAgICAgICAg
ICAgIEpTU3RyaW5nUmVmIGpzc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgMCk7CisgICAgICAgICAgICBOU1N0cmluZyAqIHN0cmluZ05TID0gKE5TU3RyaW5nICop
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNzdHJpbmcpOworICAg
ICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGpzc3RyaW5nKTsKKyAgICAgICAgICAgIHByaW1pdGl2
ZSA9IFtzdHJpbmdOUyBhdXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlz
TnVsbChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBwcmltaXRpdmUgPSBbTlNOdWxsIG51
bGxdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmlu
ZWQoY29udGV4dCwgdmFsdWUpKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IG5pbDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUs
IHByaW1pdGl2ZSwgQ29udGFpbmVyTm9uZSB9OworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIG9i
amVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CisKKyAgICBpZiAoaWQg
d3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAg
cmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgd3JhcHBlZCwgQ29u
dGFpbmVyTm9uZSB9OworCisgICAgaWYgKGlzRGF0ZShvYmplY3QsIGNvbnRleHQpKQorICAgICAg
ICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNEYXRlIGRh
dGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvYmpl
Y3QsIDApXSwgQ29udGFpbmVyTm9uZSB9OworCisgICAgaWYgKGlzQXJyYXkob2JqZWN0LCBjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVj
dCwgW05TTXV0YWJsZUFycmF5IGFycmF5XSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgIHJldHVy
biAoSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldLCBDb250YWluZXJEaWN0aW9uYXJ5IH07Cit9CisKK3N0YXRpYyBpZCBj
b250YWluZXJWYWx1ZVRvT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0NvbnRh
aW5lckNvbnZlcnRvcjo6VGFzayB0YXNrKQoreworICAgIEFTU0VSVCh0YXNrLnR5cGUgIT0gQ29u
dGFpbmVyTm9uZSk7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3IgY29udmVydG9yKGNvbnRleHQp
OworICAgIGNvbnZlcnRvci5hZGQodGFzayk7CisgICAgQVNTRVJUKCFjb252ZXJ0b3IuaXNXb3Jr
TGlzdEVtcHR5KCkpOworICAgIAorICAgIGRvIHsKKyAgICAgICAgSlNDb250YWluZXJDb252ZXJ0
b3I6OlRhc2sgY3VycmVudCA9IHRhc2sgPSBjb252ZXJ0b3IudGFrZSgpOworICAgICAgICBBU1NF
UlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmpl
Y3RSZWYganMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY3VycmVudC5qcywgMCk7CisKKyAg
ICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAgICAg
QVNTRVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNNdXRhYmxlQXJyYXkgY2xhc3Nd
XSk7CisgICAgICAgICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSAoTlNNdXRhYmxlQXJyYXkg
KiljdXJyZW50Lm9iamM7CisgICAgICAgIAorICAgICAgICAgICAgSlNTdHJpbmdSZWYgbGVuZ3Ro
U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gSlNDOjp0b1VJbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqcywgbGVuZ3RoU3RyaW5nLCAwKSwg
MCkpOworICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGxlbmd0aFN0cmluZyk7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlkIG9iamMgPSBjb252ZXJ0b3IuY29udmVydChKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBqcywgaSwgMCkpOworICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6b2JqYyA/IG9iamMgOiBbTlNOdWxsIG51bGxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6
W05TTXV0YWJsZURpY3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKiljdXJyZW50Lm9iamM7
CisKKyAgICAgICAgICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lQXJyYXkg
PSBKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKGNvbnRleHQsIGpzKTsKKyAgICAgICAgICAgIHNp
emVfdCBsZW5ndGggPSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocHJvcGVydHlOYW1lQXJy
YXkpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5h
bWVBcnJheUdldE5hbWVBdEluZGV4KHByb3BlcnR5TmFtZUFycmF5LCBpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaWQgb2JqYyA9IGNvbnZlcnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwganMsIHByb3BlcnR5TmFtZSwgMCkpKQorICAgICAgICAgICAgICAgICAgICBkaWN0
aW9uYXJ5W1soTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBwcm9wZXJ0eU5hbWUpIGF1dG9yZWxlYXNlXV0gPSBvYmpjOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZShwcm9wZXJ0eU5hbWVBcnJh
eSk7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5
KCkpOworCisgICAgcmV0dXJuIHRhc2sub2JqYzsKK30KKworaWQgdmFsdWVUb09iamVjdChKU0Nv
bnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNDb250YWluZXJDb252
ZXJ0b3I6OlRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29u
dGFpbmVyTm9uZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5vYmpjOworICAgIHJldHVybiBjb250
YWluZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3Vs
dCk7Cit9CisKK2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpl
eGNlcHRpb24pOworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250
ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TTnVt
YmVyIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBp
ZiAoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSA/IEBZRVMgOiBATk87CisKKyAgICBkb3VibGUg
cmVzdWx0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToqZXhjZXB0aW9uID8gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSA6IHJlc3VsdF07Cit9CitpZCB2YWx1ZVRv
U3RyaW5nKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAo
aWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAg
ICAgIGlmIChbd3JhcHBlZCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAg
ICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWYganNzdHJpbmcg
PSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGlm
ICgqZXhjZXB0aW9uKSB7CisgICAgICAgIEFTU0VSVCghanNzdHJpbmcpOworICAgICAgICByZXR1
cm4gbmlsOworICAgIH0KKworICAgIE5TU3RyaW5nKiBzdHJpbmdOUyA9IFsoTlNTdHJpbmcgKilK
U1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZykgYXV0b3Jl
bGVhc2VdOworICAgIEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJuIHN0cmlu
Z05TOworfQoraWQgdmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0
LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBj
bGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgZG91Ymxl
IHJlc3VsdCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAg
ICByZXR1cm4gKmV4Y2VwdGlvbiA/IG5pbCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxT
aW5jZTE5NzA6cmVzdWx0XTsKK30KK2lkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpj
T2JqZWN0KGNvbnRleHQsIHZhbHVlKSkgeworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZD
bGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAg
fQorCisgICAgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBjb250YWluZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIChKU0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayl7IHZhbHVlLCBbTlNNdXRhYmxlQXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheX0p
OworCisgICAgaWYgKCEoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSkpCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihK
U0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0
aXZlIHRvIE5TQXJyYXkiKSk7CisgICAgcmV0dXJuIG5pbDsKK30KK2lkIHZhbHVlVG9EaWN0aW9u
YXJ5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQg
d3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAg
IGlmIChbd3JhcHBlZCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAg
ICAgICAgIHJldHVybiB3cmFwcGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgdmFsdWUpKQorICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChj
b250ZXh0LCAoSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZURp
Y3Rpb25hcnkgZGljdGlvbmFyeV0sIENvbnRhaW5lckRpY3Rpb25hcnl9KTsKKworICAgIGlmICgh
KEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250
ZXh0LCB2YWx1ZSkpKQorICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBl
RXJyb3IodG9KUyhjb250ZXh0KSwgIkNhbm5vdCBjb252ZXJ0IHByaW1pdGl2ZSB0byBOU0RpY3Rp
b25hcnkiKSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworY2xhc3MgT2JqY0NvbnRhaW5lckNvbnZl
cnRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBpZCBvYmpjOworICAg
ICAgICBKU1ZhbHVlUmVmIGpzOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07
CisKKyAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yKEpTQ29udGV4dCAqY29udGV4dCkKKyAgICAg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBj
b252ZXJ0KGlkIG9iamVjdCk7CisgICAgdm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRh
a2UoKTsKKyAgICBib29sIGlzV29ya0xpc3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNp
emUoKTsgfQorCitwcml2YXRlOgorICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIFdURjo6
SGFzaE1hcDxpZCwgSlNWYWx1ZVJlZj4gbV9vYmplY3RNYXA7CisgICAgV1RGOjpWZWN0b3I8VGFz
az4gbV93b3JrbGlzdDsKK307CisKK0pTVmFsdWVSZWYgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
Y29udmVydChpZCBvYmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBhdXRvIGl0
ID0gbV9vYmplY3RNYXAuZmluZChvYmplY3QpOworICAgIGlmIChpdCAhPSBtX29iamVjdE1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKworICAgIE9iamNDb250YWluZXJDb252
ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShtX2NvbnRleHQsIG9i
amVjdCk7CisgICAgYWRkKHRhc2spOworICAgIHJldHVybiB0YXNrLmpzOworfQorCit2b2lkIE9i
amNDb250YWluZXJDb252ZXJ0b3I6OmFkZChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRh
c2spCit7CisgICAgbV9vYmplY3RNYXAuYWRkKHRhc2sub2JqYywgdGFzay5qcyk7CisgICAgaWYg
KHRhc2sudHlwZSAhPSBDb250YWluZXJOb25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0
YXNrKTsKK30KKworT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBPYmpjQ29udGFpbmVyQ29u
dmVydG9yOjp0YWtlKCkKK3sKKyAgICBBU1NFUlQoIWlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICBU
YXNrIGxhc3QgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3Qo
KTsKKyAgICByZXR1cm4gbGFzdDsKK30KKworc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6
OlRhc2sgb2JqZWN0VG9WYWx1ZVdpdGhvdXRDb3B5KEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2Jq
ZWN0KQoreworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJD
b252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCkpLCBDb250YWluZXJOb25lIH07CisKKyAgICBpZiAoIWNsYXNz
X2NvbmZvcm1zVG9Qcm90b2NvbChvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSwgb2JqY19nZXRQcm90
b2NvbCgiSlNFeHBvcnQiKSkpIHsKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpb
TlNBcnJheSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAwKSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgICAgICBp
ZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAg
ICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNPYmpl
Y3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApLCBDb250YWluZXJE
aWN0aW9uYXJ5IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdWxs
IGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2speyBvYmplY3QsIEpTVmFsdWVNYWtlTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpKSwgQ29udGFpbmVyTm9uZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xh
c3M6W0pTVmFsdWUgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNv
bnZlcnRvcjo6VGFzayl7IG9iamVjdCwgKChKU1ZhbHVlICopb2JqZWN0KS0+bV92YWx1ZSwgQ29u
dGFpbmVyTm9uZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TQXJy
YXkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgMCwgTlVMTCwgMCksIENvbnRhaW5lckFycmF5IH07CisKKyAgICAgICAgaWYgKFtv
YmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgICAgICBy
ZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFr
ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCAwKSwgQ29udGFpbmVyRGljdGlv
bmFyeSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pIHsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilvYmplY3QpOworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiBqcyA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCks
IHN0cmluZyk7CisgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKKyAgICAgICAg
ICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwganMsIENv
bnRhaW5lck5vbmUgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9m
Q2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxUcnVlID0g
QFlFUzsKKyAgICAgICAgICAgIGlmIChvYmplY3QgPT0gbGl0ZXJhbFRydWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdHJ1ZSksIENv
bnRhaW5lck5vbmUgfTsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxGYWxzZSA9IEBOTzsKKyAgICAg
ICAgICAgIGlmIChvYmplY3QgPT0gbGl0ZXJhbEZhbHNlKQorICAgICAgICAgICAgICAgIHJldHVy
biAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VCb29s
ZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZhbHNlKSwgQ29udGFpbmVyTm9u
ZSB9OworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsg
b2JqZWN0LCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBbKE5TTnVtYmVyKilvYmplY3QgZG91YmxlVmFsdWVdKSwgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEYXRlIGNsYXNz
XV0pIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBbKE5TRGF0ZSAqKW9iamVjdCB0aW1l
SW50ZXJ2YWxTaW5jZTE5NzBdKTsKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpT
T2JqZWN0TWFrZURhdGUoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3Vt
ZW50LCAwKTsKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFz
ayl7IG9iamVjdCwgcmVzdWx0LCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHZhbHVl
SW50ZXJuYWxWYWx1ZShbY29udGV4dCB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF0pLCBDb250YWlu
ZXJOb25lIH07Cit9CisKK0pTVmFsdWVSZWYgb2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKmNvbnRl
eHQsIGlkIG9iamVjdCkKK3sKKyAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2sg
PSBvYmplY3RUb1ZhbHVlV2l0aG91dENvcHkoY29udGV4dCwgb2JqZWN0KTsKKyAgICBpZiAodGFz
ay50eXBlID09IENvbnRhaW5lck5vbmUpCisgICAgICAgIHJldHVybiB0YXNrLmpzOworCisgICAg
T2JqY0NvbnRhaW5lckNvbnZlcnRvciBjb252ZXJ0b3IoY29udGV4dCk7CisgICAgY29udmVydG9y
LmFkZCh0YXNrKTsKKyAgICBBU1NFUlQoIWNvbnZlcnRvci5pc1dvcmtMaXN0RW1wdHkoKSk7CisK
KyAgICBkbyB7CisgICAgICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3VycmVudCA9
IGNvbnZlcnRvci50YWtlKCk7CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgY3VycmVudC5qcykpOworICAgICAgICBKU09iamVj
dFJlZiBqcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBjdXJyZW50LmpzLCAwKTsKKworICAgICAgICBpZiAoY3VycmVudC50eXBlID09IENvbnRhaW5l
ckFycmF5KSB7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNz
OltOU0FycmF5IGNsYXNzXV0pOworICAgICAgICAgICAgTlNBcnJheSAqIGFycmF5ID0gKE5TQXJy
YXkgKiljdXJyZW50Lm9iamM7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2FycmF5
IGNvdW50XTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwg
Y291bnQ7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIGluZGV4LCBjb252ZXJ0b3Iu
Y29udmVydChbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleF0pLCAwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyRGljdGlvbmFy
eSk7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNzOltOU0Rp
Y3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnkg
PSAoTlNEaWN0aW9uYXJ5KiljdXJyZW50Lm9iamM7CisgICAgICAgICAgICBOU0VudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBbZGljdGlvbmFyeSBrZXlFbnVtZXJhdG9yXTsKKyAgICAgICAgICAgIHdo
aWxlIChpZCBrZXkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICAgICAgICAg
IGlmIChba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKWtleSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIHByb3BlcnR5TmFt
ZSwgY29udmVydG9yLmNvbnZlcnQoW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV0pLCAwLCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
IH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAgcmV0dXJuIHRh
c2suanM7Cit9CisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUgKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUtPm1fdmFsdWU7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1
ZVdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCopY29udGV4
dAoreworICAgIHJldHVybiBbW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlIGlu
Q29udGV4dDpjb250ZXh0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKEpTVmFsdWUgKilpbml0V2l0
aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0Cit7
CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIG9iamNfaW5pdFdlYWsoJm1fd2Vha0NvbnRleHQs
IGNvbnRleHQpOworCisgICAgW3N1cGVyIGluaXRdOworICAgIFtjb250ZXh0IHByb3RlY3Q6dmFs
dWVdOworICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RydWN0
IFN0cnVjdFRhZ0hhbmRsZXIgeworICAgIFNFTCB0eXBlVG9WYWx1ZVNFTDsKKyAgICBTRUwgdmFs
dWVUb1R5cGVTRUw7Cit9OworCitzdGF0aWMgU3RydWN0VGFnSGFuZGxlciogZ2V0U3RydWN0VGFn
SGFuZGxlcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBzdGF0aWMgU3BpbkxvY2sg
Z2V0U3RydWN0VGFnSGFuZGxlckxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBTcGlu
TG9ja0hvbGRlciBsb2NrSG9sZGVyKCZnZXRTdHJ1Y3RUYWdIYW5kbGVyTG9jayk7CisKKyAgICB0
eXBlZGVmIFdURjo6SGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN0cnVjdFRhZ0hhbmRsZXI+
IFN0cnVjdEhhbmRsZXJzOworICAgIHN0YXRpYyBTdHJ1Y3RIYW5kbGVycyAqbV9zdHJ1Y3RIYW5k
bGVycyA9IDA7CisKKyAgICBpZiAoIW1fc3RydWN0SGFuZGxlcnMpIHsKKyAgICAgICAgbV9zdHJ1
Y3RIYW5kbGVycyA9IG5ldyBTdHJ1Y3RIYW5kbGVycygpOworCisgICAgICAgIC8vIFN0ZXAgMTog
ZmluZCBhbGwgdmFsdWVXaXRoPEZvbz46aW5Db250ZXh0OiBjbGFzcyBtZXRob2RzIGluIEpTVmFs
dWUuCisgICAgICAgIHNpemVfdCB2YWx1ZVdpdGhNaW5MZW4gPSBzdHJsZW4oInZhbHVlV2l0aFg6
aW5Db250ZXh0OiIpOworICAgICAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhvYmplY3RfZ2V0Q2xh
c3MoW0pTVmFsdWUgY2xhc3NdKSwgXihNZXRob2QgbWV0aG9kKXsKKyAgICAgICAgICAgIFNFTCBz
ZWwgPSBtZXRob2RfZ2V0TmFtZShtZXRob2QpOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZSA9IHNlbF9nZXROYW1lKHNlbCk7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG5h
bWUpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbHVlV2l0aDxGb28+OmNvbnRleHQ6Cisg
ICAgICAgICAgICBpZiAobGVuIDwgdmFsdWVXaXRoTWluTGVuIHx8IHN0cm5jbXAobmFtZSwgInZh
bHVlV2l0aCIsIDkpIHx8IHN0cm5jbXAobmFtZSArIGxlbiAtIDExLCAiOmluQ29udGV4dDoiLCAx
MSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFsg
aWQsIFNFTCwgPHR5cGU+LCA8Y29udGV4dFR5cGU+IF0KKyAgICAgICAgICAgIGlmIChtZXRob2Rf
Z2V0TnVtYmVyT2ZBcmd1bWVudHMobWV0aG9kKSAhPSA0KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGNoYXIgaWRUeXBlWzNdOworICAgICAgICAgICAgLy8gQ2hlY2sgMm5k
IGFyZ3VtZW50IHR5cGUgaXMgIkAiCisgICAgICAgICAgICBjaGFyKiBzZWNvbmRUeXBlID0gbWV0
aG9kX2NvcHlBcmd1bWVudFR5cGUobWV0aG9kLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJjbXAo
c2Vjb25kVHlwZSwgIkAiKSkgeworICAgICAgICAgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJlZShz
ZWNvbmRUeXBlKTsKKyAgICAgICAgICAgIC8vIENoZWNrIHJlc3VsdCB0eXBlIGlzIGFsc28gIkAi
CisgICAgICAgICAgICBtZXRob2RfZ2V0UmV0dXJuVHlwZShtZXRob2QsIGlkVHlwZSwgMyk7Cisg
ICAgICAgICAgICBpZiAoc3RyY21wKGlkVHlwZSwgIkAiKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBjaGFyKiB0eXBlID0gbWV0aG9kX2NvcHlBcmd1bWVudFR5cGUobWV0
aG9kLCAyKTsKKyAgICAgICAgICAgIG1fc3RydWN0SGFuZGxlcnMtPmFkZChXVEY6OlN0cmluZyh0
eXBlKS5pbXBsKCksIChTdHJ1Y3RUYWdIYW5kbGVyKXsgc2VsLCAwIH0pOworICAgICAgICAgICAg
ZnJlZSh0eXBlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU3RlcCAyOiBmaW5kIGFsbCB0
bzxGb28+IGluc3RhbmNlIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90IG1pbkxl
blZhbHVlID0gc3RybGVuKCJ0b1giKTsKKyAgICAgICAgZm9yRWFjaE1ldGhvZEluQ2xhc3MoW0pT
VmFsdWUgY2xhc3NdLCBeKE1ldGhvZCBtZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9IG1l
dGhvZF9nZXROYW1lKG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2Vs
X2dldE5hbWUoc2VsKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7Cisg
ICAgICAgICAgICAvLyBDaGVjayBmb3IgdG88Rm9vPgorICAgICAgICAgICAgaWYgKGxlbiA8IG1p
bkxlblZhbHVlIHx8IHN0cm5jbXAobmFtZSwgInRvIiwgMikpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFsgaWQsIFNFTCBdCisgICAgICAgICAgICBp
ZiAobWV0aG9kX2dldE51bWJlck9mQXJndW1lbnRzKG1ldGhvZCkgIT0gMikKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIG1hdGNoaW5nIHZhbHVl
V2l0aDxGb28+OmNvbnRleHQ6IG1ldGhvZC4KKyAgICAgICAgICAgIGNoYXIqIHR5cGUgPSBtZXRo
b2RfY29weVJldHVyblR5cGUobWV0aG9kKTsKKworICAgICAgICAgICAgU3RydWN0SGFuZGxlcnM6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5nKHR5cGUp
LmltcGwoKSk7CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgU3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworCisgICAg
ICAgICAgICAvLyBjaGVjayB0aGF0IHN0cmxlbig8Zm9vPikgPT0gc3RybGVuKDxGb28+KQorICAg
ICAgICAgICAgY29uc3QgY2hhciogdmFsdWVXaXRoTmFtZSA9IHNlbF9nZXROYW1lKGhhbmRsZXIu
dHlwZVRvVmFsdWVTRUwpOworICAgICAgICAgICAgc2l6ZV90IHZhbHVlV2l0aExlbiA9IHN0cmxl
bih2YWx1ZVdpdGhOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVdpdGhMZW4gLSB2YWx1ZVdp
dGhNaW5MZW4gIT0gbGVuIC0gbWluTGVuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCA8Rm9vPiA9PSA8Rm9vPgorICAgICAgICAgICAgaWYg
KHN0cm5jbXAodmFsdWVXaXRoTmFtZSArIDksIG5hbWUgKyAyLCBsZW4gLSBtaW5MZW5WYWx1ZSAt
IDEpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGhhbmRsZXIudmFsdWVU
b1R5cGVTRUwgPSBzZWw7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFN0ZXAgMzogY2xlYW4g
dXAgLSByZW1vdmUgZW50cmllcyB3aGVyZSB3ZSBmb3VuZCBwcm9zcGVjdGl2ZSB2YWx1ZVdpdGg8
Rm9vPjppbkNvbnRleHQ6IGNvbnZlcnNpb25zLCBidXQgbm8gbWF0Y2hpbmcgdG88Rm9vPiBtZXRo
b2RzLgorICAgICAgICB0eXBlZGVmIFdURjo6SGFzaFNldDxSZWZQdHI8V1RGOjpTdHJpbmdJbXBs
PiA+IFJlbW92ZVNldDsKKyAgICAgICAgUmVtb3ZlU2V0IHJlbW92ZVNldDsKKyAgICAgICAgZm9y
IChTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxlcnMtPmJlZ2lu
KCk7IGl0ZXIgIT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICAg
ICAgU3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAg
aWYgKCFoYW5kbGVyLnZhbHVlVG9UeXBlU0VMKQorICAgICAgICAgICAgICAgIHJlbW92ZVNldC5h
ZGQoaXRlci0+a2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoUmVtb3ZlU2V0OjppdGVy
YXRvciBpdGVyID0gcmVtb3ZlU2V0LmJlZ2luKCk7IGl0ZXIgIT0gcmVtb3ZlU2V0LmVuZCgpOyAr
K2l0ZXIpCisgICAgICAgICAgICBtX3N0cnVjdEhhbmRsZXJzLT5yZW1vdmUoKml0ZXIpOworICAg
IH0KKworICAgIFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5kbGVy
cy0+ZmluZChXVEY6OlN0cmluZyhlbmNvZGVkVHlwZSkuaW1wbCgpKTsKKyAgICBpZiAoaXRlciA9
PSBtX3N0cnVjdEhhbmRsZXJzLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
ICZpdGVyLT52YWx1ZTsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTooY29u
c3QgY2hhciAqKXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRsZXIqIGhhbmRsZXIgPSBn
ZXRTdHJ1Y3RUYWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJuIGhhbmRsZXIgPyBoYW5k
bGVyLT50eXBlVG9WYWx1ZVNFTCA6IG5pbDsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yVmFsdWVU
b1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRsZXIq
IGhhbmRsZXIgPSBnZXRTdHJ1Y3RUYWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJuIGhh
bmRsZXIgPyBoYW5kbGVyLT52YWx1ZVRvVHlwZVNFTCA6IG5pbDsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIFtjb250ZXh0IHVucHJvdGVjdDptX3ZhbHVlXTsKKyAgICBvYmpj
X2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
Ky0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpCisgICAgICAgIHJldHVybiBbd3JhcHBlZCBkZXNj
cmlwdGlvbl07CisgICAgcmV0dXJuIFtzZWxmIHRvU3RyaW5nXTsKK30KKworTlNJbnZvY2F0aW9u
KiB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCit7Cisg
ICAgU0VMIHNlbGVjdG9yID0gW0pTVmFsdWUgc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOmVuY29k
ZWRUeXBlXTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNv
bnN0IGNoYXIqIG1ldGhvZFR5cGVzID0gbWV0aG9kX2dldFR5cGVFbmNvZGluZyhjbGFzc19nZXRD
bGFzc01ldGhvZChbSlNWYWx1ZSBjbGFzc10sIHNlbGVjdG9yKSk7CisgICAgTlNJbnZvY2F0aW9u
KiBpbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVy
ZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11d
OworICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICByZXR1cm4gaW52
b2NhdGlvbjsKK30KKworTlNJbnZvY2F0aW9uKiB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29u
c3QgY2hhciogZW5jb2RlZFR5cGUpCit7CisgICAgU0VMIHNlbGVjdG9yID0gW0pTVmFsdWUgc2Vs
ZWN0b3JGb3JWYWx1ZVRvU3RydWN0OmVuY29kZWRUeXBlXTsKKyAgICBpZiAoIXNlbGVjdG9yKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIqIG1ldGhvZFR5cGVzID0gbWV0aG9k
X2dldFR5cGVFbmNvZGluZyhjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbSlNWYWx1ZSBjbGFzc10s
IHNlbGVjdG9yKSk7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2NhdGlv
biBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0
dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNldFNlbGVj
dG9yOnNlbGVjdG9yXTsKKyAgICByZXR1cm4gaW52b2NhdGlvbjsKK30KKworQGVuZAorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFs
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9ydCAiQVBJ
SlNWYWx1ZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTVmFs
dWUoSW50ZXJuYWwpCisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUqKTsK
KworKyAoSlNWYWx1ZSopdmFsdWVXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0OworLSAoSlNWYWx1ZSopaW5pdFdpdGhWYWx1ZTooSlNWYWx1
ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisKK0pTVmFsdWVSZWYg
b2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKmNvbnRleHQsIGlkIG9iamVjdCk7CitpZCB2YWx1ZVRv
T2JqZWN0KEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSk7CitpZCB2YWx1ZVRv
TnVtYmVyKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKK2lkIHZh
bHVlVG9EYXRlKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0FycmF5KEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQg
dmFsdWVUb0RpY3Rpb25hcnkoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
dmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKysgKFNFTClzZWxlY3RvckZvclN0cnVj
dFRvVmFsdWU6KGNvbnN0IGNoYXIgKilzdHJ1Y3RUYWc7CisrIChTRUwpc2VsZWN0b3JGb3JWYWx1
ZVRvU3RydWN0Oihjb25zdCBjaGFyICopc3RydWN0VGFnOworCitAZW5kCisKK05TSW52b2NhdGlv
biogdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKTsKK05T
SW52b2NhdGlvbiogdmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9yKGNvbnN0IGNoYXIqIGVuY29kZWRU
eXBlKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisvLyBBbiBpbnN0YW5jZSBvZiBKU1Zp
cnR1YWxNYWNoaW5lIHJlcHJlc2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCAib2JqZWN0IHNwYWNl
IgorLy8gb3Igc2V0IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuIFRocmVhZCBzYWZldHkgaXMgc3Vw
cG9ydGVkIGJ5IGxvY2tpbmcgdGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUsIHdpdGggY29uY3VycmVu
dCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBzdXBwb3J0ZWQgYnkgYWxsb2NhdGluZworLy8gc2VwYXJh
dGUgaW5zdGFuY2VzIG9mIEpTVmlydHVhbE1hY2hpbmUuCitOU19DTEFTU19BVkFJTEFCTEUoMTBf
OSwgTkEpCitAaW50ZXJmYWNlIEpTVmlydHVhbE1hY2hpbmUgOiBOU09iamVjdAorCistIChpZClp
bml0OworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oIgorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZSB7Cisg
ICAgSlNDb250ZXh0R3JvdXBSZWYgbV9ncm91cDsKK30KKworLSAoaWQpaW5pdAoreworICAgIFtz
dXBlciBpbml0XTsKKyAgICBtX2dyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICB0
b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICB0b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSAwOworICAgIEpT
Q29udGV4dEdyb3VwUmVsZWFzZShtX2dyb3VwKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0pTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1h
Y2hpbmUgKnZpcnR1YWxNYWNoaW5lKQoreworICAgIHJldHVybiB2aXJ0dWFsTWFjaGluZS0+bV9n
cm91cDsKK30KKworQGVuZAorCisjZW5kaWYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5B
QkxFRAorCitAaW50ZXJmYWNlIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCisKK0pTQ29udGV4
dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZp
cnR1YWxNYWNoaW5lKTsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1dyYXBwZXJNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmg+CisjaW1wb3J0IDxKU1ZhbHVlSW50ZXJuYWwuaD4KKyNpbXBvcnQgPG9iamMvb2Jq
Yy1ydW50aW1lLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNX
cmFwcGVyTWFwIDogTlNPYmplY3QKKworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworCistIChKU1ZhbHVlKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CisK
K0BlbmQKKworaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFs
dWVSZWYpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFw
cGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFw
cGVyTWFwLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dy
YXBwZXJNYXAubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNp
bXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNp
bXBvcnQgIk9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJh
cy5oIgorI2ltcG9ydCA8d3RmL1RDU3BpbkxvY2suaD4KKyNpbXBvcnQgInd0Zi9WZWN0b3IuaCIK
KyNpbXBvcnQgPC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3Jr
L1ByaXZhdGVIZWFkZXJzL05TQmxvY2suaD4KKworc3RhdGljIHZvaWQgd3JhcHBlckZpbmFsaXpl
KEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBbKGlkKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmpl
Y3QpIHJlbGVhc2VdOworfQorCisvLyBBbGwgd3JhcHBlciBvYmplY3RzIGFuZCBjb25zdHJ1Y3Rv
ciBvYmplY3RzIGRlcml2ZSBmcm9tIHRoaXMgdHlwZSwgc28gd2UgY2FuIGRldGVjdCAmIHVud3Jh
cCBPYmplY3RpdmUtQyBpbnN0YW5jZXMvQ2xhc3Nlcy4KK3N0YXRpYyBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIFNwaW5Mb2NrIGluaXRMb2NrID0gU1BJTkxPQ0tfSU5J
VElBTElaRVI7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmaW5pdExvY2spOworCisg
ICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSAwOworCisgICAgaWYgKCFjbGFzc1JlZikg
eworICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOworICAgICAgICBkZWZpbml0
aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NO
YW1lID0gIm9iamNfY2xhc3MiOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gd3JhcHBl
ckZpbmFsaXplOworICAgICAgICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24p
OworICAgIH0KKworICAgIHJldHVybiBjbGFzc1JlZjsKK30KKworLy8gRGVmYXVsdCBjb252ZXJz
aW9uIG9mIHNlbGVjdG9ycyB0byBwcm9wZXJ0eSBuYW1lcy4KKy8vIEFsbCBzZW1pY29sb25zIGFy
ZSByZW1vdmVkLCBsb3dlcmNhc2UgbGV0dGVycyBmb2xsb3dpbmcgYSBzZW1pY29sb24gYXJlIGNh
cGl0YWxpemVkLgorc3RhdGljIE5TU3RyaW5nKiBzZWxlY3RvclRvUHJvcGVydHlOYW1lKGNvbnN0
IGNoYXIqIHN0YXJ0KQoreworICAgIC8vIFVzZSAnaW5kZXgnIHRvIGNoZWNrIGZvciBjb2xvbnMs
IGlmIHRoZXJlIGFyZSBub24sIHRoaXMgaXMgZWFzeSEKKyAgICBjb25zdCBjaGFyKiBmaXJzdENv
bG9uID0gaW5kZXgoc3RhcnQsICc6Jyk7CisgICAgaWYgKCFmaXJzdENvbG9uKQorICAgICAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnN0YXJ0XTsKKworICAgIC8vICdo
ZWFkZXInIGlzIHRoZSBsZW5ndGggb2Ygc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCBjb2xvbi4KKyAg
ICBzaXplX3QgaGVhZGVyID0gZmlyc3RDb2xvbiAtIHN0YXJ0OworICAgIC8vIFRoZSBuZXcgc3Ry
aW5nIG5lZWRzIHRvIGJlIGxvbmcgZW5vdWdoIHRvIGhvbGQgJ2hlYWRlcicsIHBsdXMgdGhlIHJl
bWFpbmRlciBvZiB0aGUgc3RyaW5nLCBleGNsdWRpbmcKKyAgICAvLyBhdCBsZWFzdCBvbmUgJzon
LCBidXQgaW5jbHVkaW5nIGEgJ1wwJy4gKFRoaXMgaXMgY29uc2VydmF0aXZlIGlmIHRoZXJlIGFy
ZSBtb3JlIHRoYW4gb25lICc6JykuCisgICAgY2hhciogYnVmZmVyID0gKGNoYXIqKW1hbGxvYyho
ZWFkZXIgKyBzdHJsZW4oZmlyc3RDb2xvbiArIDEpICsgMSk7CisgICAgLy8gQ29weSAnaGVhZGVy
JyBjaGFyYWN0ZXJzLCBzZXQgb3V0cHV0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhpcyAmIGlu
cHV0IHRvIHBvaW50IHBhc3QgdGhlIGZpcnN0ICc6Jy4KKyAgICBtZW1jcHkoYnVmZmVyLCBzdGFy
dCwgaGVhZGVyKTsKKyAgICBjaGFyKiBvdXRwdXQgPSBidWZmZXIgKyBoZWFkZXI7CisgICAgY29u
c3QgY2hhciogaW5wdXQgPSBzdGFydCArIGhlYWRlciArIDE7CisKKyAgICAvLyBPbiBlbnRyeSB0
byB0aGUgbG9vcCwgd2UgaGF2ZSBhbHJlYWR5IHNraXBwZWQgb3ZlciBhICc6JyBmcm9tIHRoZSBp
bnB1dC4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFyIGM7CisgICAgICAgIC8vIFNr
aXAgb3ZlciBhbnkgYWRkaXRpb25hbCAnOidzLiBXZSdsbCBsZWF2ZSBjIGhvbGRpbmcgdGhlIG5l
eHQgY2hhcmFjdGVyIGFmdGVyIHRoZQorICAgICAgICAvLyBsYXN0ICc6JywgYW5kIGlucHV0IHBv
aW50aW5nIHBhc3QgYy4KKyAgICAgICAgd2hpbGUgKChjID0gKihpbnB1dCsrKSkgPT0gJzonKTsK
KyAgICAgICAgLy8gQ29weSB0aGUgY2hhcmFjdGVyLCBjb252ZXJ0aW5nIHRvIHVwcGVyIGNhc2Ug
aWYgbmVjZXNzYXJ5LgorICAgICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIHdlIGNvcHkgaXMgJ1ww
JywgdGhlbiB3ZSdyZSBkb25lIQorICAgICAgICBpZiAoISgqKG91dHB1dCsrKSA9IHRvdXBwZXIo
YykpKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAvLyBMb29wIG92ZXIgY2hhcmFj
dGVycyBvdGhlciB0aGFuICc6Jy4KKyAgICAgICAgd2hpbGUgKChjID0gKihpbnB1dCsrKSkgIT0g
JzonKSB7CisgICAgICAgICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAv
LyBJZiB0aGUgY2hhcmFjdGVyIHdlIGNvcHkgaXMgJ1wwJywgdGhlbiB3ZSdyZSBkb25lIQorICAg
ICAgICAgICAgaWYgKCEoKihvdXRwdXQrKykgPSBjKSkKKyAgICAgICAgICAgICAgICBnb3RvIGRv
bmU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlJ3ZlIGNvbnN1bWVk
IGEgJzonIC0gd2FzaCwgcmluc2UsIHJlcGVhdC4KKyAgICB9Citkb25lOgorICAgIE5TU3RyaW5n
KiByZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YnVmZmVyXTsKKyAgICBm
cmVlKGJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gTWFrZSBhbiBvYmplY3Qg
dGhhdCBpcyBpbiBhbGwgd2F5cyBhcmUgY29tcGxldGVseSB2YW5pbGxhIEphdmFTY3JpcHQgb2Jq
ZWN0LAorLy8gb3RoZXIgdGhhbiB0aGF0IGl0IGhhcyBhIG5hdGl2ZSBicmFuZCBzZXQgdGhhdCB3
aWxsIGJlIGRpc3BsYXllZCBieSB0aGUgZGVmYXVsdAorLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZyBjb212ZXJzaW9uLgorc3RhdGljIEpTVmFsdWUqIGNyZWF0ZU9iamVjdFdpdGhDdXN0b21C
cmFuZChKU0NvbnRleHQqIGNvbnRleHQsIE5TU3RyaW5nKiBicmFuZCwgSlNDbGFzc1JlZiBwYXJl
bnRDbGFzcyA9IDAsIHZvaWQqIHByaXZhdGVEYXRhID0gMCkKK3sKKyAgICBKU0NsYXNzRGVmaW5p
dGlvbiBkZWZpbml0aW9uOworICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0
eTsKKyAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9IFticmFuZCBVVEY4U3RyaW5nXTsKKyAgICBk
ZWZpbml0aW9uLnBhcmVudENsYXNzID0gcGFyZW50Q2xhc3M7CisgICAgSlNDbGFzc1JlZiBjbGFz
c1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIEpTT2JqZWN0UmVmIHJlc3Vs
dCA9IEpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBjbGFzc1Jl
ZiwgcHJpdmF0ZURhdGEpOworICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKKyAgICByZXR1
cm4gW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4
dF07Cit9CisKKy8vIExvb2sgZm9yIEBvcHRpb25hbCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5
cGUgY29udGFpbmluZyBhIHNlbGVjdG9yIHRvIHByb3BlcnR5CisvLyBuYW1lIG1hcHBpbmcsIHNl
cGFyYXRlZCBieSBhIF9fSlNfRVhQT1JUX0FTX18gZGVsaW1pdGVyLgorc3RhdGljIE5TTXV0YWJs
ZURpY3Rpb25hcnkqIGNyZWF0ZVJlbmFtZU1hcChQcm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNJ
bnN0YW5jZU1ldGhvZCkKK3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZW5hbWVNYXAgPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworCisgICAgZm9yRWFjaE1ldGhvZElu
UHJvdG9jb2wocHJvdG9jb2wsIE5PLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNvbnN0
IGNoYXIqKXsKKyAgICAgICAgTlNTdHJpbmcqIHJlbmFtZSA9IEAoc2VsX2dldE5hbWUoc2VsKSk7
CisgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbcmVuYW1lIHJhbmdlT2ZTdHJpbmc6QCJfX0pTX0VY
UE9SVF9BU19fIl07CisgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOU1N0cmluZyogc2VsZWN0b3IgPSBbcmVuYW1l
IHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICBOU1VJbnRlZ2VyIGJl
Z2luID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7CisgICAgICAgIE5TVUludGVnZXIg
bGVuZ3RoID0gW3JlbmFtZSBsZW5ndGhdIC0gYmVnaW4gLSAxOworICAgICAgICBOU1N0cmluZyog
bmFtZSA9IFtyZW5hbWUgc3Vic3RyaW5nV2l0aFJhbmdlOihOU1JhbmdlKXsgYmVnaW4sIGxlbmd0
aCB9XTsKKyAgICAgICAgcmVuYW1lTWFwW3NlbGVjdG9yXSA9IG5hbWU7CisgICAgfSk7CisKKyAg
ICByZXR1cm4gcmVuYW1lTWFwOworfQorCitpbmxpbmUgdm9pZCBwdXROb25FbnVtZXJhYmxlKEpT
VmFsdWUqIGJhc2UsIE5TU3RyaW5nKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQorewor
ICAgIFtiYXNlIGRlZmluZVByb3BlcnR5OnByb3BlcnR5TmFtZSBkZXNjcmlwdG9yOkB7CisgICAg
ICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yVmFsdWVLZXk6IHZhbHVlLAorICAgICAgICBKU1Byb3Bl
cnR5RGVzY3JpcHRvcldyaXRhYmxlS2V5OiBAWUVTLAorICAgICAgICBKU1Byb3BlcnR5RGVzY3Jp
cHRvckVudW1lcmFibGVLZXk6IEBOTywKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JDb25m
aWd1cmFibGVLZXk6IEBZRVMKKyAgICB9XTsKK30KKworLy8gVGhpcyBtZXRob2Qgd2lsbCBpdGVy
YXRlIG92ZXIgdGhlIHNldCBvZiByZXF1aXJlZCBtZXRob2RzIGluIHRoZSBwcm90b2NvbCwgYW5k
OgorLy8gICogRGV0ZXJtaW5lIGEgcHJvcGVydHkgbmFtZSAoZWl0aGVyIHZpYSBhIHJlbmFtZU1h
cCBvciBkZWZhdWx0IGNvbnZlcnNpb24pLgorLy8gICogSWYgYW4gYWNjZXNzb3JNYXAgaXMgcHJv
dmlkZWQsIGFuZCBjb25hdGlucyBhIHRoaXMgbmFtZSwgc3RvcmUgdGhlIG1ldGhvZCBpbiB0aGUg
bWFwLgorLy8gICogT3RoZXJ3aXNlLCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgYWxyZWFkeSBjb25h
dGluIGEgcHJvcGVydHkgd2l0aCBuYW1lLCBjcmVhdGUgaXQuCitzdGF0aWMgdm9pZCBjb3B5TWV0
aG9kc1RvT2JqZWN0KEpTQ29udGV4dCogY29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2Nv
bCogcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgSlNWYWx1ZSogb2JqZWN0LCBOU011
dGFibGVEaWN0aW9uYXJ5KiBhY2Nlc3Nvck1ldGhvZHMgPSBuaWwpCit7CisgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSogcmVuYW1lTWFwID0gY3JlYXRlUmVuYW1lTWFwKHByb3RvY29sLCBpc0luc3Rh
bmNlTWV0aG9kKTsKKworICAgIGZvckVhY2hNZXRob2RJblByb3RvY29sKHByb3RvY29sLCBZRVMs
IGlzSW5zdGFuY2VNZXRob2QsIF4oU0VMIHNlbCwgY29uc3QgY2hhciogdHlwZXMpeworICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lQ1N0ciA9IHNlbF9nZXROYW1lKHNlbCk7CisgICAgICAgIE5TU3Ry
aW5nKiBuYW1lID0gQChuYW1lQ1N0cik7CisgICAgICAgIGlmIChhY2Nlc3Nvck1ldGhvZHMgJiYg
YWNjZXNzb3JNZXRob2RzW25hbWVdKSB7CisgICAgICAgICAgICBKU09iamVjdFJlZiBtZXRob2Qg
PSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChjb250ZXh0LCBvYmpjQ2xhc3MsIHByb3Rv
Y29sLCBpc0luc3RhbmNlTWV0aG9kLCBzZWwsIHR5cGVzKTsKKyAgICAgICAgICAgIGlmICghbWV0
aG9kKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9k
c1tuYW1lXSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOm1ldGhvZCBpbkNvbnRleHQ6Y29udGV4
dF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gcmVuYW1lTWFwW25hbWVd
OworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxlY3Rv
clRvUHJvcGVydHlOYW1lKG5hbWVDU3RyKTsKKyAgICAgICAgICAgIGlmIChbb2JqZWN0IGhhc1By
b3BlcnR5Om5hbWVdKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9i
amNDbGFzcywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOworICAgICAg
ICAgICAgaWYgKG1ldGhvZCkKKyAgICAgICAgICAgICAgICBwdXROb25FbnVtZXJhYmxlKG9iamVj
dCwgbmFtZSwgW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0
XSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIFtyZW5hbWVNYXAgcmVsZWFzZV07Cit9CisK
K3N0YXRpYyBib29sIHBhcnNlUHJvcGVydHlBdHRyaWJ1dGVzKG9iamNfcHJvcGVydHlfdCBwcm9w
ZXJ0eSwgY2hhciomIGdldHRlck5hbWUsIGNoYXIqJiBzZXR0ZXJOYW1lKQoreworICAgIGJvb2wg
cmVhZG9ubHkgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudDsKKyAgICBvYmpj
X3Byb3BlcnR5X2F0dHJpYnV0ZV90KiBhdHRyaWJ1dGVzID0gcHJvcGVydHlfY29weUF0dHJpYnV0
ZUxpc3QocHJvcGVydHksICZhdHRyaWJ1dGVDb3VudCk7CisgICAgaWYgKGF0dHJpYnV0ZUNvdW50
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKCooYXR0cmlidXRlc1tpXS5uYW1lKSkgeworICAgICAg
ICAgICAgY2FzZSAnRyc6CisgICAgICAgICAgICAgICAgZ2V0dGVyTmFtZSA9IHN0cmR1cChhdHRy
aWJ1dGVzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgJ1MnOgorICAgICAgICAgICAgICAgIHNldHRlck5hbWUgPSBzdHJkdXAoYXR0cmlidXRlc1tp
XS52YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdSJzoK
KyAgICAgICAgICAgICAgICByZWFkb25seSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGZyZWUoYXR0cmlidXRlcyk7CisgICAgfQorICAgIHJl
dHVybiByZWFkb25seTsKK30KKworc3RhdGljIGNoYXIqIG1ha2VTZXR0ZXJOYW1lKGNvbnN0IGNo
YXIqIG5hbWUpCit7CisgICAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAg
Y2hhciogc2V0dGVyTmFtZSA9IChjaGFyKiltYWxsb2MobmFtZUxlbmd0aCArIDUpOyAvLyAic2V0
IiBOYW1lICI6XDAiCisgICAgc2V0dGVyTmFtZVswXSA9ICdzJzsKKyAgICBzZXR0ZXJOYW1lWzFd
ID0gJ2UnOworICAgIHNldHRlck5hbWVbMl0gPSAndCc7CisgICAgc2V0dGVyTmFtZVszXSA9IHRv
dXBwZXIoKm5hbWUpOworICAgIG1lbWNweShzZXR0ZXJOYW1lICsgNCwgbmFtZSArIDEsIG5hbWVM
ZW5ndGggLSAxKTsKKyAgICBzZXR0ZXJOYW1lW25hbWVMZW5ndGggKyAzXSA9ICc6JzsKKyAgICBz
ZXR0ZXJOYW1lW25hbWVMZW5ndGggKyA0XSA9ICdcMCc7CisgICAgcmV0dXJuIHNldHRlck5hbWU7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ29udGV4dCogY29u
dGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2NvbCogcHJvdG9jb2wsIEpTVmFsdWUqIHByb3Rv
dHlwZVZhbHVlKQoreworICAgIC8vIEZpcnN0IGdhdGhlciBwcm9wcmV0aWVzIGludG8gdGhpcyBs
aXN0LCB0aGVuIGhhbmRsZSB0aGUgbWV0aG9kcyAoY2FwdHVyaW5nIHRoZSBhY2Nlc3NvciBtZXRo
b2RzKS4KKyAgICBzdHJ1Y3QgUHJvcGVydHkgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwor
ICAgICAgICBjaGFyKiBnZXR0ZXJOYW1lOworICAgICAgICBjaGFyKiBzZXR0ZXJOYW1lOworICAg
IH07CisgICAgX19ibG9jayBXVEY6OlZlY3RvcjxQcm9wZXJ0eT4gcHJvcGVydHlMaXN0OworCisg
ICAgLy8gTWFwIHJlY29yZGluZyB0aGUgbWV0aG9kcyB1c2VkIGFzIGdldHRlcnMvc2V0dGVycy4K
KyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphY2Nlc3Nvck1ldGhvZHMgPSBbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIC8vIFVzZWZ1bCB2YWx1ZS4KKyAgICBKU1ZhbHVl
KiB1bmRlZmluZWQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4
dF07CisKKyAgICBmb3JFYWNoUHJvcGVydHlJblByb3RvY29sKHByb3RvY29sLCBeKG9iamNfcHJv
cGVydHlfdCBwcm9wZXJ0eSl7CisgICAgICAgIGNoYXIqIGdldHRlck5hbWUgPSAwOworICAgICAg
ICBjaGFyKiBzZXR0ZXJOYW1lID0gMDsKKyAgICAgICAgYm9vbCByZWFkb25seSA9IHBhcnNlUHJv
cGVydHlBdHRyaWJ1dGVzKHByb3BlcnR5LCBnZXR0ZXJOYW1lLCBzZXR0ZXJOYW1lKTsKKyAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IHByb3BlcnR5X2dldE5hbWUocHJvcGVydHkpOworCisgICAg
ICAgIC8vIEFkZCB0aGUgbmFtZXMgb2YgdGhlIGdldHRlciAmIHNldHRlciBtZXRob2RzIHRvIAor
ICAgICAgICBpZiAoIWdldHRlck5hbWUpCisgICAgICAgICAgICBnZXR0ZXJOYW1lID0gc3RyZHVw
KG5hbWUpOworICAgICAgICBhY2Nlc3Nvck1ldGhvZHNbQChnZXR0ZXJOYW1lKV0gPSB1bmRlZmlu
ZWQ7CisgICAgICAgIGlmICghcmVhZG9ubHkpIHsKKyAgICAgICAgICAgIGlmICghc2V0dGVyTmFt
ZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJOYW1lID0gbWFrZVNldHRlck5hbWUobmFtZSk7Cisg
ICAgICAgICAgICBhY2Nlc3Nvck1ldGhvZHNbQChzZXR0ZXJOYW1lKV0gPSB1bmRlZmluZWQ7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBBZGQgdGhlIHByb3BlcnRpZXMgdG8gYSBsaXN0LgorICAg
ICAgICBwcm9wZXJ0eUxpc3QuYXBwZW5kKChQcm9wZXJ0eSl7IG5hbWUsIGdldHRlck5hbWUsIHNl
dHRlck5hbWUgfSk7CisgICAgfSk7CisKKyAgICAvLyBDb3B5IG1ldGhvZHMgdG8gdGhlIHByb3Rv
dHlwZSwgY2FwdHVyaW5nIGFjY2Vzc29ycyBpbiB0aGUgYWNjZXNzb3JNZXRob2RzIG1hcC4KKyAg
ICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9jb2wsIFlFUywg
cHJvdG90eXBlVmFsdWUsIGFjY2Vzc29yTWV0aG9kcyk7CisKKyAgICAvLyBJdGVyYXRlIHRoZSBw
cm9wZXJ0eUxpc3QgJiBnZW5lcmF0ZSBhY2Nlc3NvciBwcm9wZXJ0aWVzLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFByb3Bl
cnR5JiBwcm9wZXJ0eSA9IHByb3BlcnR5TGlzdFtpXTsKKworICAgICAgICBKU1ZhbHVlKiBnZXR0
ZXIgPSBhY2Nlc3Nvck1ldGhvZHNbQChwcm9wZXJ0eS5nZXR0ZXJOYW1lKV07CisgICAgICAgIGZy
ZWUocHJvcGVydHkuZ2V0dGVyTmFtZSk7CisgICAgICAgIEFTU0VSVCghW2dldHRlciBpc1VuZGVm
aW5lZF0pOworCisgICAgICAgIEpTVmFsdWUqIHNldHRlciA9IHVuZGVmaW5lZDsKKyAgICAgICAg
aWYgKHByb3BlcnR5LnNldHRlck5hbWUpIHsKKyAgICAgICAgICAgIHNldHRlciA9IGFjY2Vzc29y
TWV0aG9kc1tAKHByb3BlcnR5LnNldHRlck5hbWUpXTsKKyAgICAgICAgICAgIGZyZWUocHJvcGVy
dHkuc2V0dGVyTmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoIVtzZXR0ZXIgaXNVbmRlZmluZWRd
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW3Byb3RvdHlwZVZhbHVlIGRlZmluZVBy
b3BlcnR5OkAocHJvcGVydHkubmFtZSkgZGVzY3JpcHRvcjpAeworICAgICAgICAgICAgSlNQcm9w
ZXJ0eURlc2NyaXB0b3JHZXRLZXk6IGdldHRlciwKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNj
cmlwdG9yU2V0S2V5OiBzZXR0ZXIsCisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckVu
dW1lcmFibGVLZXk6IEBOTywKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmln
dXJhYmxlS2V5OiBAWUVTCisgICAgICAgIH1dOworICAgIH0KK30KKworQGludGVyZmFjZSBKU09i
akNDbGFzc0luZm8gOiBOU09iamVjdCB7CisgICAgSlNDb250ZXh0KiBtX2NvbnRleHQ7CisgICAg
Q2xhc3MgbV9jbGFzczsKKyAgICBib29sIG1fYmxvY2s7CisgICAgSlNDbGFzc1JlZiBtX2NsYXNz
UmVmOworICAgIEpTVmFsdWUqIG1fcHJvdG90eXBlOworICAgIEpTVmFsdWUqIG1fY29uc3RydWN0
b3I7Cit9CisKKy0oaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xh
c3M6KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNz
SW5mbzsKKy0oSlNWYWx1ZSopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OworLSAoSlNWYWx1
ZSopY29uc3RydWN0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTT2JqQ0NsYXNzSW5m
bworCistKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0IGZvckNsYXNzOihD
bGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8K
K3sKKyAgICBbc3VwZXIgaW5pdF07CisKKyAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSBjbGFz
c19nZXROYW1lKGNscyk7CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NsYXNzID0g
Y2xzOworICAgIG1fYmxvY2sgPSBbY2xzIGlzU3ViY2xhc3NPZkNsYXNzOltOU0Jsb2NrIGNsYXNz
XV07CisgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKKyAgICBkZWZpbml0aW9uID0g
a0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBjbGFz
c05hbWU7CisgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IHdyYXBwZXJDbGFzcygpOworICAg
IG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKworICAgIEFTU0VSVCgo
Y2xzID09IFtOU09iamVjdCBjbGFzc10pID09ICFzdXBlckNsYXNzSW5mbyk7CisgICAgaWYgKCFz
dXBlckNsYXNzSW5mbykgeworICAgICAgICBtX2NvbnN0cnVjdG9yID0gW2NvbnRleHRbQCJPYmpl
Y3QiXSByZXRhaW5dOworICAgICAgICBtX3Byb3RvdHlwZSA9IFttX2NvbnN0cnVjdG9yW0AicHJv
dG90eXBlIl0gcmV0YWluXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHBy
b3RvdHlwZS9jb25zdHJ1Y3RvciBwYWlyLgorICAgICAgICBtX3Byb3RvdHlwZSA9IGNyZWF0ZU9i
amVjdFdpdGhDdXN0b21CcmFuZChjb250ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVzUHJvdG90eXBlIiwgY2xhc3NOYW1lXSk7CisgICAgICAgIG1fY29uc3RydWN0b3IgPSBjcmVh
dGVPYmplY3RXaXRoQ3VzdG9tQnJhbmQoY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlc0NvbnN0cnVjdG9yIiwgY2xhc3NOYW1lXSwgd3JhcHBlckNsYXNzKCksIFtjbHMgcmV0
YWluXSk7CisgICAgICAgIHB1dE5vbkVudW1lcmFibGUobV9wcm90b3R5cGUsIEAiY29uc3RydWN0
b3IiLCBtX2NvbnN0cnVjdG9yKTsKKyAgICAgICAgcHV0Tm9uRW51bWVyYWJsZShtX2NvbnN0cnVj
dG9yLCBAInByb3RvdHlwZSIsIG1fcHJvdG90eXBlKTsKKworICAgICAgICBQcm90b2NvbCogZXhw
b3J0UHJvdG9jb2wgPSBvYmpjX2dldFByb3RvY29sKCJKU0V4cG9ydCIpOworICAgICAgICBmb3JF
YWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChjbHMsIGV4cG9ydFByb3RvY29sLCBeKFBy
b3RvY29sKiBwcm90b2NvbCl7CisgICAgICAgICAgICBjb3B5UHJvdG90eXBlUHJvcGVydGllcyhj
b250ZXh0LCBjbHMsIHByb3RvY29sLCBtX3Byb3RvdHlwZSk7CisgICAgICAgICAgICBjb3B5TWV0
aG9kc1RvT2JqZWN0KGNvbnRleHQsIGNscywgcHJvdG9jb2wsIE5PLCBtX2NvbnN0cnVjdG9yKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU2V0IFtQcm90b3R5cGVdLgorICAgICAgICBtX3By
b3RvdHlwZVtAIl9fcHJvdG9fXyJdID0gc3VwZXJDbGFzc0luZm8tPm1fcHJvdG90eXBlOworICAg
IH0KKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBKU0Ns
YXNzUmVsZWFzZShtX2NsYXNzUmVmKTsKKyAgICBbbV9wcm90b3R5cGUgcmVsZWFzZV07CisgICAg
W21fY29uc3RydWN0b3IgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistKEpT
VmFsdWUqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAoreworICAgIEFTU0VSVChbb2JqZWN0
IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pOworICAgIEFTU0VSVChtX2Jsb2NrID09IFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbTlNCbG9jayBjbGFzc11dKTsKKyAgICBpZiAobV9ibG9jaykgeworICAg
ICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9j
ayhtX2NvbnRleHQsIG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDptX2NvbnRleHRdOworICAgIH0KKworICAgIEpTVmFs
dWVSZWYgcHJvdG90eXBlVmFsdWUgPSB2YWx1ZUludGVybmFsVmFsdWUobV9wcm90b3R5cGUpOwor
ICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRl
eHQpLCBwcm90b3R5cGVWYWx1ZSkpOworICAgIEpTT2JqZWN0UmVmIHByb3RvdHlwZSA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29udGV4dCksIHByb3RvdHlwZVZh
bHVlLCAwKTsKKworICAgIEpTT2JqZWN0UmVmIHdyYXBwZXIgPSBKU09iamVjdE1ha2UoY29udGV4
dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBtX2NsYXNzUmVmLCBbb2JqZWN0IHJldGFpbl0p
OworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9jb250
ZXh0KSwgd3JhcHBlciwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
VmFsdWU6d3JhcHBlciBpbkNvbnRleHQ6bV9jb250ZXh0XTsKK30KKworLSAoSlNWYWx1ZSopY29u
c3RydWN0b3IKK3sKKyAgICByZXR1cm4gbV9jb25zdHJ1Y3RvcjsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gSlNXcmFwcGVyTWFwIHsKKyAgICBKU0NvbnRleHQgKm1fY29udGV4dDsKKyAg
ICBOU011dGFibGVEaWN0aW9uYXJ5KiBtX2NsYXNzTWFwOworfQorCistIChpZClpbml0V2l0aENv
bnRleHQ6KEpTQ29udGV4dCopY29udGV4dAoreworICAgIFtzdXBlciBpbml0XTsKKyAgICBtX2Nv
bnRleHQgPSBjb250ZXh0OworICAgIG1fY2xhc3NNYXAgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbbV9jbGFzc01hcCByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KEpTT2JqQ0NsYXNzSW5mbyopY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKWNscworeworICAgIGlm
ICghY2xzKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxy
ZWFkeSBjcmVhdGVkIGEgSlNPYmpDQ2xhc3NJbmZvIGZvciB0aGlzIENsYXNzLgorICAgIGlmIChK
U09iakNDbGFzc0luZm8qIGNsYXNzSW5mbyA9IChKU09iakNDbGFzc0luZm8qKW1fY2xhc3NNYXBb
Y2xzXSkKKyAgICAgICAgcmV0dXJuIGNsYXNzSW5mbzsKKworICAgIC8vIFNraXAgaW50ZXJuYWwg
Y2xhc3NlcyBiZWdpbmluZyB3aXRoICdfJyAtIGp1c3QgY29weSBsaW5rIHRvIHRoZSBwYXJlbnQg
Y2xhc3MncyBpbmZvLgorICAgIGlmICgnXycgPT0gKmNsYXNzX2dldE5hbWUoY2xzKSkKKyAgICAg
ICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNz
X2dldFN1cGVyY2xhc3MoY2xzKV07CisKKyAgICByZXR1cm4gbV9jbGFzc01hcFtjbHNdID0gW1tb
SlNPYmpDQ2xhc3NJbmZvIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6bV9jb250ZXh0IGZvckNsYXNz
OmNscyBzdXBlckNsYXNzSW5mbzpbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBl
cmNsYXNzKGNscyldXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKEpTVmFsdWUqKXdyYXBwZXJGb3JP
YmplY3Q6KGlkKW9iamVjdAoreworICAgIEpTVmFsdWUqIHdyYXBwZXIgPSBvYmpjX2dldEFzc29j
aWF0ZWRPYmplY3Qob2JqZWN0LCBtX2NvbnRleHQpOworICAgIGlmICh3cmFwcGVyICYmIHdyYXBw
ZXIuY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBpZiAoY2xhc3NfaXNN
ZXRhQ2xhc3Mob2JqZWN0X2dldENsYXNzKG9iamVjdCkpKQorICAgICAgICB3cmFwcGVyID0gW1tz
ZWxmIGNsYXNzSW5mb0ZvckNsYXNzOihDbGFzcylvYmplY3RdIGNvbnN0cnVjdG9yXTsKKyAgICBl
bHNlIHsKKyAgICAgICAgSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBbc2VsZiBjbGFzc0lu
Zm9Gb3JDbGFzczpbb2JqZWN0IGNsYXNzXV07CisgICAgICAgIHdyYXBwZXIgPSBbY2xhc3NJbmZv
IHdyYXBwZXJGb3JPYmplY3Q6b2JqZWN0XTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5MQorICAgIC8vIFRoaXMgZ2Vu
ZXJhbCBhcHByb2FjaCB0byB3cmFwcGVyIGNhY2hpbmcgaXMgcHJldHR5IGVmZmVjdGl2ZSwgYnV0
IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBwcm9ibGVtczoKKyAgICAvLyAoMSkgRm9yIGltbW9ydGFs
IG9iamVjdHMgSlNWYWx1ZXMgd2lsbCBlZmZlY3RpdmVseSBsZWFqIGFuZCB0aGlzIHJlc3VsdHMg
aW4gZXJyb3Igb3V0cHV0IGJlaW5nIGxvZ2dlZCAtIHdlIHNob3VsZCBhdm9pZCBhZGRpbmcgYXNz
b2NpYXRlZCBvYmplY3RzIHRvIGltbW9ydGFsIG9iamVjdHMuCisgICAgLy8gKDIpIEEgbG9uZyBs
aXZlZCBvYmplY3QgbWF5IHJhY2sgdXAgbWFueSBKU1ZhbHVlcy4gV2hlbiB0aGUgY29udGV4dHMg
YXJlIHJlbGVhc2VkIHRoZXNlIHdpbGwgdW5wcm9jdGVjdCB0aGUgYXNzb2NpYXRlZCBKYXZhU2Ny
aXB0IG9iamVjdHMsCisgICAgLy8gICAgIGJ1dCBzdGlsbCwgd291bGQgcHJvYmFibHkgbmljZXIg
aWYgd2UgbWFkZSBpdCBzbyB0aGF0IG9ubHkgb25lIGFzc29jaWF0ZWQgb2JqZWN0IHdhcyByZXF1
aXJlZCwgYnJvYWRjYXN0aW5nIG9iamVjdCBkZWFsbG9jLgorICAgIG9iamNfc2V0QXNzb2NpYXRl
ZE9iamVjdChvYmplY3QsIG1fY29udGV4dCwgd3JhcHBlciwgT0JKQ19BU1NPQ0lBVElPTl9SRVRB
SU4pOworICAgIHJldHVybiB3cmFwcGVyOworfQorCitAZW5kCisKK2lkIHRyeVVud3JhcE9iamNP
YmplY3QoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7Cisg
ICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsICZleGNlcHRpb24pOworICAgIC8v
QVNTRVJUKCFleGNlcHRpb24pOworICAgIGlmIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRl
eHQsIG9iamVjdCwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gKGlkKUpTT2JqZWN0
R2V0UHJpdmF0ZShvYmplY3QpOworICAgIGlmIChpZCB0YXJnZXQgPSB0cnlVbndyYXBCbG9jayhj
b250ZXh0LCBvYmplY3QpKQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIHJldHVybiBuaWw7
Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZhU2NyaXB0
Q29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlw
dENvcmUuaAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
YXZhU2NyaXB0Q29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw0ICsyOSwxMyBAQAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZkNGLmg+CiAKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQg
IkpTQ29udGV4dC5oIgorI2ltcG9ydCAiQVBJSlNWYWx1ZS5oIgorI2ltcG9ydCAiSlNWaXJ0dWFs
TWFjaGluZS5oIgorI2ltcG9ydCAiSlNFeHBvcnQuaCIKKworI2VuZGlmCisKICNlbmRpZiAvKiBK
YXZhU2NyaXB0Q29yZV9oICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakND
YWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQ
SV9FTkFCTEVECisKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpT
Q29udGV4dCosIENsYXNzLCBQcm90b2NvbCosIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMLCBj
b25zdCBjaGFyKiB0eXBlcyk7CitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJs
b2NrKEpTQ29udGV4dCosIGlkKTsKKworaWQgdHJ5VW53cmFwQmxvY2soSlNHbG9iYWxDb250ZXh0
UmVmLCBKU09iamVjdFJlZik7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUu
aCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2lt
cG9ydCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1wb3J0ICJKU0Jsb2NrQWRh
cHRvci5oIgorI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBl
ck1hcC5oIgorI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJPYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgIm9i
amMvcnVudGltZS5oIgorI2ltcG9ydCA8L3Vzci9sb2NhbC9pbmNsdWRlL0Jsb2NrX3ByaXZhdGUu
aD4KKyNpbXBvcnQgIi91c3IvbG9jYWwvaW5jbHVkZS9vYmpjL29iamMtaW50ZXJuYWwuaCIKKyNp
bXBvcnQgInd0Zi9SZXRhaW5QdHIuaCIKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+Q2FsbGJhY2tBcmd1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiwgTlNJbnRlZ2VyLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1Zh
bHVlUmVmKikgPSAwOworCisgICAgT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+IG1fbmV4dDsKK307
CisKK0NhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KCkKK3sKK30KKworY2xhc3Mg
Q2FsbGJhY2tBcmd1bWVudEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0gSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCk7CisgICAgICAgIFtpbnZv
Y2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEludGVn
ZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJ
bnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4
dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
ICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbikpOwor
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIENhbGxiYWNr
QXJndW1lbnREb3VibGUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1i
ZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1i
ZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRKU1ZhbHVlIDogcHVibGlj
IENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiog
aW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgSlNWYWx1
ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50SWQgOiBw
dWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0
aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29u
dGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBp
ZCB2YWx1ZSA9IHZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnQpOworICAgICAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
fQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MgOiBwdWJsaWMgQ2FsbGJhY2tB
cmd1bWVudCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoQ2xhc3MgY2xz
KQorICAgICAgICA6IENhbGxiYWNrQXJndW1lbnQoKQorICAgICAgICAsIG1fY2xhc3MoY2xzKQor
ICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmV0YWluXTsKKyAgICB9CisKKyAgICB+Q2FsbGJhY2tB
cmd1bWVudE9mQ2xhc3MoKQorICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmVsZWFzZV07CisgICAg
fQorCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0
eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAgaWQgb2JqZWN0
ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KTsKKyAgICAgICAgaWYgKG9iamVj
dCAmJiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pIHsKKyAgICAgICAgICAgIFtpbnZv
Y2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoSlNWYWx1ZUlzTnVsbChj
dHgsIGFyZ3VtZW50KSB8fCBKU1ZhbHVlSXNVbmRlZmluZWQoY3R4LCBhcmd1bWVudCkpIHsKKyAg
ICAgICAgICAgIG9iamVjdCA9IG5pbDsKKyAgICAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBl
RXJyb3IodG9KUyhjdHgpLCAiQXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggT2JqZWN0aXZlLUMgQ2xh
c3MiKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsYXNzIG1fY2xhc3M7Cit9OworCitjbGFz
cyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIg
YXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRv
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRp
b24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1
bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5n
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAg
ICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb1N0cmluZyhjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24g
c2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisK
K2NsYXNzIENhbGxiYWNrQXJndW1lbnROU0RhdGUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVn
ZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVu
dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1
ZVRvRGF0ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0
aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJn
dW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU0FycmF5
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAg
ICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0FycmF5KGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBz
ZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKwor
Y2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeSA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZCB2YWx1ZSA9
IHZhbHVlVG9EaWN0aW9uYXJ5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3Vt
ZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUg
YXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudFN0cnVjdCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBDYWxs
YmFja0FyZ3VtZW50U3RydWN0KE5TSW52b2NhdGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNv
bnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgICAgICA6IG1fY29udmVyc2lvbkludm9jYXRpb24o
Y29udmVyc2lvbkludm9jYXRpb24pCisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2Nh
dGlvbiByZXRhaW5dOworICAgICAgICBOU1VJbnRlZ2VyIHNpemUsIGFsaWdubWVudDsKKyAgICAg
ICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29kZWRUeXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7
CisgICAgICAgIC0tYWxpZ25tZW50OworICAgICAgICBtX2FsbG9jYXRpb24gPSAoY2hhciopbWFs
bG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAgICAgICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2FsbG9jYXRpb24pICsgYWxp
Z25tZW50KSAmIH5hbGlnbm1lbnQpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFj
a0FyZ3VtZW50U3RydWN0KCkKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9u
IHJlbGVhc2VdOworICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVt
YmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYq
KQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZv
Y2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52
b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZvY2F0aW9uIHNl
dEFyZ3VtZW50Om1fYnVmZmVyIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAgY2hh
ciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3MgQ2FsbGJh
Y2tBcmd1bWVudEJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJs
aWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soSlNCbG9ja0FkYXB0b3IqIGFk
YXB0b3IpCisgICAgICAgIDogbV9hZGFwdG9yKGFkYXB0b3IpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjaygpCisgICAgeworICAg
ICAgICBbbV9hZGFwdG9yIHJlbGVhc2VdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisg
ICAgeworICAgICAgICBpZCBibG9jayA9IFttX2FkYXB0b3IgYmxvY2tGcm9tVmFsdWU6YXJndW1l
bnQgaW5Db250ZXh0OmNvbnRleHQgd2l0aEV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICBb
aW52b2NhdGlvbiBzZXRBcmd1bWVudDomYmxvY2sgYXRJbmRleDphcmd1bWVudE51bWJlcl07Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEpTQmxvY2tBZGFwdG9yKiBtX2FkYXB0b3I7Cit9OworCitj
bGFzcyBBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDYWxsYmFj
a0FyZ3VtZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgUmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnREb3VibGU8VD47CisgICAgfQorCisgICAgc3Rh
dGljIFJlc3VsdFR5cGUgdHlwZUJvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxs
YmFja0FyZ3VtZW50Qm9vbGVhbjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
Vm9pZCgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSWQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SWQ7CisgICAgfQorCisgICAgc3Rh
dGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIq
IGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAg
ICAgIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoY29weSk7CisgICAgICAgIGlmICghY2xzKQor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICBpZiAoY2xzID09IFtKU1ZhbHVlIGNs
YXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEpTVmFsdWU7Cisg
ICAgICAgIGlmIChjbHMgPT0gW05TU3RyaW5nIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOworICAgICAgICBpZiAoY2xzID09IFtOU051bWJl
ciBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnROU051bWJl
cjsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNEYXRlIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVy
biBuZXcgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZTsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNBcnJh
eSBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnROU0FycmF5
OworICAgICAgICBpZiAoY2xzID09IFtOU0RpY3Rpb25hcnkgY2xhc3NdKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5OworCisgICAgICAgIHJldHVy
biBuZXcgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoY2xzKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVzdWx0VHlwZSB0eXBlQmxvY2soY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkK
KyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIHJl
dHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soW1tKU0Jsb2NrQWRhcHRvciBh
bGxvY10gaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZyb21Qcm90b2NvbDpjb3B5XSk7CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBiZWdpbiwgY29u
c3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5k
KTsKKyAgICAgICAgaWYgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHZhbHVlVG9UeXBlSW52
b2NhdGlvbkZvcihjb3B5KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9Cit9
OworCitjbGFzcyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FsbGJh
Y2tSZXN1bHQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5T
SW52b2NhdGlvbiosIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7Cit9OworCitjbGFzcyBD
YWxsYmFja1Jlc3VsdFZvaWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgorICAg
IHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiBjb250ZXh0
LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICB9Cit9OworCitjbGFzcyBD
YWxsYmFja1Jlc3VsdElkIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlOworICAgICAg
ICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgICAgICByZXR1cm4gb2Jq
ZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIENhbGxiYWNrUmVzdWx0TnVtZXJpYyA6IHB1YmxpYyBDYWxsYmFja1Jlc3Vs
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAg
ICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgKGRvdWJsZSl2YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1
bHRCb29sZWFuIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIFtp
bnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpOworICAg
IH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0U3RydWN0IDogcHVibGljIENhbGxiYWNrUmVz
dWx0IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0ludm9jYXRpb24qIGNv
bnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKKyAgICAgICAgOiBt
X2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQorICAgIHsKKyAgICAg
ICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWluXTsKKyAgICAgICAgTlNVSW50ZWdlciBz
aXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlw
ZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9h
bGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsgYWxpZ25tZW50KTsKKyAgICAgICAgbV9i
dWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50KTsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB+Q2FsbGJhY2tSZXN1bHRTdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21f
Y29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9u
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24q
IGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisgICAgeworICAg
ICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2FsbG9jYXRpb25dOworCisgICAgICAg
IFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4
OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDomY29udGV4
dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBpbnZva2VXaXRo
VGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAgICAgSlNWYWx1ZSogdmFsdWU7CisgICAg
ICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAg
ICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAgY2hhciogbV9i
dWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3MgUmVzdWx0VHlwZURl
bGVnYXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENhbGxiYWNrUmVzdWx0KiBSZXN1bHRUeXBl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
SW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0TnVtZXJp
YzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZXN1
bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jl
c3VsdE51bWVyaWM8VD47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJvb2wo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdEJvb2xlYW47CisgICAg
fQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFZvaWQ7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5
cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHRJZCgp
OworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVPZkNsYXNzKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHRJ
ZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFy
KiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0
SWQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNo
YXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBj
b3B5KGJlZ2luLCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0g
dHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBD
YWxsYmFja1Jlc3VsdFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICB9Cit9OworCitlbnVtIENhbGxiYWNrVHlwZSB7CisgICAgQ2FsbGJhY2tJbnN0YW5j
ZU1ldGhvZCwKKyAgICBDYWxsYmFja0NsYXNzTWV0aG9kLAorICAgIENhbGxiYWNrQmxvY2sKK307
CisKK2NsYXNzIE9iakNDYWxsYmFja0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBPYmpDQ2FsbGJh
Y2tGdW5jdGlvbihKU0NvbnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwg
Q2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NPd25QdHI8Q2FsbGJh
Y2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVzdWx0PiByZXN1bHQp
CisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisg
ICAgICAgICwgbV9pbnN0YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFpbl0pCisgICAgICAg
ICwgbV9pbnZvY2F0aW9uKGludm9jYXRpb24pCisgICAgICAgICwgbV9hcmd1bWVudHMoYXJndW1l
bnRzKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2QgfHwgaW5zdGFuY2VDbGFzcyk7CisgICAgfQor
CisgICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFttX2luc3RhbmNl
Q2xhc3MgcmVsZWFzZV07CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4dCAq
Y29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAg
ICBKU0NvbnRleHQqIGNvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5n
ZXQoKTsKKyAgICB9CisKKyAgICBpZCB3cmFwcGVkQmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdHlwZSA9PSBDYWxsYmFja0Jsb2NrID8gW21faW52b2NhdGlvbiB0YXJnZXRdIDogbmls
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWFrQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAg
Q2FsbGJhY2tUeXBlIG1fdHlwZTsKKyAgICBDbGFzcyBtX2luc3RhbmNlQ2xhc3M7CisgICAgV1RG
OjpSZXRhaW5QdHI8TlNJbnZvY2F0aW9uPiBtX2ludm9jYXRpb247CisgICAgT3duUHRyPENhbGxi
YWNrQXJndW1lbnQ+IG1fYXJndW1lbnRzOworICAgIE93blB0cjxDYWxsYmFja1Jlc3VsdD4gbV9y
ZXN1bHQ7Cit9OworCitzdGF0aWMgdm9pZCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplKEpT
T2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBkZWxldGUgKE9iakNDYWxsYmFja0Z1bmN0aW9uKilK
U09iamVjdEdldFByaXZhdGUob2JqZWN0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY2FsbGVyQ29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgLy8gUmV0YWtlIHRoZSBBUEkgbG9jayAtIHdlIG5lZWQgdGhpcyBmb3Ig
YSBmZXcgcmVhc29uczoKKyAgICAvLyAoMSkgV2UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IHRoZSBD
LUFQSSdzIGNvbmZ1c2luZyBkcm9wcy1sb2Nrcy1vbmNlIHBvbGljeSAtIHNob3VsZCBvbmx5IGRy
b3AgbG9ja3MgaWYgd2UgY2FuIGRvIHNvIHJlY3Vyc2l2ZXkuCisgICAgLy8gKDIpIFdlJ3JlIGNh
bGluZyBzb21lIEpTQyBpbnRlcm5hbHMgdGhhdCByZXF1aXJlIHVzIHRvIGJlIG9uIHRoZSAnaW5z
aWRlJyAtIGUuZy4gY3JlYXRlVHlwZUVycm9yLgorICAgIC8vICgzKSBXZSBuZWVkIHRvIGJlIGxv
Y2tlZCAocGVyIGNvbnRleHQgd291bGQgYmUgZmluZSkgYWdhaW5zdCBjb25mbGljdGluZyB1c2dh
ZSBvZiB0aGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb24ncyBOU0ludm9jYXRpb24uCisgICAgSlNDOjpB
UElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY2FsbGVyQ29udGV4dCkpOworCisgICAgT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gKE9iakNDYWxsYmFja0Z1bmN0aW9uKilKU09iamVj
dEdldFByaXZhdGUoZnVuY3Rpb24pOworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IGNhbGxiYWNr
LT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk0CisgICAgICAgIC8vIFJh
dGhlciB0aGFuIHJlcXVpcmluZyB0aGF0IHRoZSBjb250ZXh0IGJlIHJldGFpbmVkLCBpdCB3b3Vs
ZCBwcm9iYWJseSBiZSBtb3JlCisgICAgICAgIC8vIGFwcHJvcHJpYXRlIHRvIHVzZSBhIG5ldyBK
U0NvbnRleHQgaW5zdGFuY2UgKGNyZWF0aW5nIG9uZSBpZiBuZWNlc3NhcnkpLgorICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjYWxsZXJDb250ZXh0
KSwgIk9iamVjdGl2ZS1DIGNhbGxiYWNrIGZ1bmN0aW9uIGNvbnRleHQgcmVsZWFzZWQiKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjYWxsZXJDb250ZXh0KTsKKyAgICB9
CisKKyAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOworICAgIEpTVmFsdWVSZWYgcmVzdWx0
OworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbY29udGV4dCBiZWdpbkNhbGxiYWNr
V2l0aERhdGE6JmNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6dGhpc09iamVjdCBhcmd1bWVudENvdW50
OmFyZ3VtZW50Q291bnQgYXJndW1lbnRzOmFyZ3VtZW50c107CisgICAgICAgIHJlc3VsdCA9IGNh
bGxiYWNrLT5jYWxsKGNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50
cywgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKQorICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0LmV4Y2VwdGlvbik7Cisg
ICAgICAgIFtjb250ZXh0IGVuZENhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YV07CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBKU0NsYXNzUmVmIG9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2xhc3MoKQoreworICAgIHN0YXRpYyBTcGluTG9jayBpbml0TG9jayA9IFNQSU5M
T0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJmluaXRMb2Nr
KTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gMDsKKworICAgIGlmICghY2xh
c3NSZWYpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKKyAgICAgICAg
ZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9u
LmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7CisgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBv
YmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplOworICAgICAgICBkZWZpbml0aW9uLmNhbGxBc0Z1
bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbjsKKyAgICAgICAgY2xh
c3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y2xhc3NSZWY7Cit9CisKK0pTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoSlND
b250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpOworCisgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7CisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6IHsKKyAgICAgICAgaWQgdGFy
Z2V0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIHRoaXNPYmplY3QpOworICAgICAgICBpZiAo
IXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFzc10pIHsKKyAg
ICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGN0
eCksICJzZWxmIHR5cGUgY2hlY2sgZmFpbGVkIGZvciBPYmplY3RpdmUtQyBpbnN0YW5jZSBtZXRo
b2QiKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAg
ICAgICAgfQorICAgICAgICBbbV9pbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRdOworICAgIH0K
KyAgICBjYXNlIENhbGxiYWNrQ2xhc3NNZXRob2Q6CisgICAgICAgIGZpcnN0QXJndW1lbnQgPSAy
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxiYWNrQmxvY2s6CisgICAgICAgIGZpcnN0
QXJndW1lbnQgPSAxOworICAgIH0KKworICAgIHNpemVfdCBhcmd1bWVudE51bWJlciA9IDA7Cisg
ICAgZm9yIChDYWxsYmFja0FyZ3VtZW50KiBhcmd1bWVudCA9IG1fYXJndW1lbnRzLmdldCgpOyBh
cmd1bWVudDsgYXJndW1lbnQgPSBhcmd1bWVudC0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIEpT
VmFsdWVSZWYgdmFsdWUgPSBhcmd1bWVudE51bWJlciA8IGFyZ3VtZW50Q291bnQgPyBhcmd1bWVu
dHNbYXJndW1lbnROdW1iZXJdIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICAgICAg
YXJndW1lbnQtPnNldChtX2ludm9jYXRpb24uZ2V0KCksIGFyZ3VtZW50TnVtYmVyICsgZmlyc3RB
cmd1bWVudCwgY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmICgqZXhjZXB0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAg
ICAgICsrYXJndW1lbnROdW1iZXI7CisgICAgfQorCisgICAgW21faW52b2NhdGlvbiBpbnZva2Vd
OworCisgICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9pbnZvY2F0aW9uLmdldCgpLCBjb250ZXh0
LCBleGNlcHRpb24pOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xh
c3MoKQoreworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jlc3VsdEZhbHNl
LAorICAgICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0VW5rbm93bgor
ICAgIH07CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVja1Jlc3VsdFVu
a25vd247CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgeworICAgICAgICBp
ZCBibG9jayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07CisgICAgICAg
IGNoZWNrID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihfQmxvY2tfc2ln
bmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBDaGVja1Jlc3Vs
dEZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK2lubGluZSBib29s
IHNraXBOdW1iZXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIGlmICghaXNkaWdpdCgq
cG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUoaXNkaWdpdCgqKytw
b3NpdGlvbikpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgSlNPYmplY3RSZWYgb2Jq
Q0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9uKEpTQ29udGV4dCogY29udGV4dCwgTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFz
cywgY29uc3QgY2hhciogc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzKQoreworICAgIGNvbnN0IGNo
YXIqIHBvc2l0aW9uID0gc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzOworCisgICAgT3duUHRyPENh
bGxiYWNrUmVzdWx0PiByZXN1bHQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPFJlc3VsdFR5cGVE
ZWxlZ2F0ZT4ocG9zaXRpb24pKTsKKyAgICBpZiAoIXJlc3VsdCB8fCAhc2tpcE51bWJlcihwb3Np
dGlvbikpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6CisgICAgY2FzZSBDYWxsYmFja0NsYXNzTWV0aG9k
OgorICAgICAgICBpZiAoJ0AnICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBOdW1iZXIocG9zaXRp
b24pIHx8ICc6JyAhPSAqKHBvc2l0aW9uKyspIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbGJhY2tC
bG9jazoKKyAgICAgICAgaWYgKCgnQCcgIT0gKihwb3NpdGlvbisrKSkgfHwgKCc/JyAhPSAqKHBv
c2l0aW9uKyspKSB8fCAhc2tpcE51bWJlcihwb3NpdGlvbikgfHwgKCFibG9ja1NpZ25hdHVyZUNv
bnRhaW5zQ2xhc3MoKSAmJiBzdHJjaHIocG9zaXRpb24sICdAJykpKQorICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgT3duUHRyPENhbGxiYWNrQXJn
dW1lbnQ+IGFyZ3VtZW50cyA9IDA7CisgICAgT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+KiBuZXh0
QXJndW1lbnQgPSAmYXJndW1lbnRzOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQgPSAwOwor
ICAgIHdoaWxlICgqcG9zaXRpb24pIHsKKyAgICAgICAgT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+
IGFyZ3VtZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxBcmd1bWVudFR5cGVEZWxlZ2F0ZT4o
cG9zaXRpb24pKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCB8fCAhc2tpcE51bWJlcihwb3NpdGlv
bikpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICpuZXh0QXJndW1lbnQgPSBh
cmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRBcmd1bWVudCA9ICYoKm5leHRBcmd1bWVu
dCktPm1fbmV4dDsKKyAgICAgICAgKythcmd1bWVudENvdW50OworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODkyCisgICAg
Ly8gVGhlIHJlc3VsdCBzaG91bGQgYmUgYSByZWd1bGFyIGhvc3QgZnVuY3Rpb24sIHJhdGhlciB0
aGFuIGEgY2FsbGFibGUgQyBBUEkgb2JqZWN0LgorICAgIC8vIFBhdGNoIGluIHRoZSByaWdodCBs
ZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5vdywgYnV0IHNob3VsZCBmaXggdGhpcy4K
KyAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY3VycmVudGx5IGZhaWxzLCBzaW5j
ZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBmdW5jdG9uLCBidXQgY2FsbCAmIGFwcGx5
IGRvIHdvcmsuCisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU09iamVjdE1ha2Uo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFz
cygpLCBuZXcgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgaW52b2NhdGlvbiwgdHlwZSwg
aW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVzdWx0LnJlbGVhc2UoKSkpOwor
ICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVuY3Rpb25PYmpl
Y3QgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHZhbHVlW0AibGVuZ3RoIl0gPSBAKGFyZ3VtZW50
Q291bnQpOworICAgIHZhbHVlW0AiX19wcm90b19fIl0gPSBjb250ZXh0W0AiRnVuY3Rpb24iXVtA
InByb3RvdHlwZSJdOworICAgIHZhbHVlW0AidG9TdHJpbmciXSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiKGZ1bmN0aW9uKCl7IHJldHVybiAnIgorICAgICAgICAiZnVuY3Rpb24gPE9iamVj
dGl2ZS1DPigpIHsiICJcXG4iCisgICAgICAgICIgICAgW25hdGl2ZSBjb2RlXSIgICAgICAgICAg
IlxcbiIKKyAgICAgICAgIn0iICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxuIgorICAgICIn
fSkiXTsKKyAgICByZXR1cm4gZnVuY3Rpb25PYmplY3Q7Cit9CisKK0pTT2JqZWN0UmVmIG9iakND
YWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCogY29udGV4dCwgQ2xhc3MgY2xzLCBQ
cm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMIHNlbCwgY29uc3Qg
Y2hhciogdHlwZXMpCit7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2Nh
dGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2ln
bmF0dXJlV2l0aE9iakNUeXBlczp0eXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9y
OnNlbF07CisgICAgaWYgKCFpc0luc3RhbmNlTWV0aG9kKQorICAgICAgICBbaW52b2NhdGlvbiBz
ZXRUYXJnZXQ6Y2xzXTsKKyAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0
aW9uKGNvbnRleHQsIGludm9jYXRpb24sIGlzSW5zdGFuY2VNZXRob2QgPyBDYWxsYmFja0luc3Rh
bmNlTWV0aG9kIDogQ2FsbGJhY2tDbGFzc01ldGhvZCwgaXNJbnN0YW5jZU1ldGhvZCA/IGNscyA6
IG5pbCwgX3Byb3RvY29sX2dldE1ldGhvZFR5cGVFbmNvZGluZyhwcm90b2NvbCwgc2VsLCBZRVMs
IGlzSW5zdGFuY2VNZXRob2QpKTsKK30KKworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JCbG9jayhKU0NvbnRleHQqIGNvbnRleHQsIGlkIHRhcmdldCkKK3sKKyAgICBpZiAoIV9C
bG9ja19oYXNfc2lnbmF0dXJlKHRhcmdldCkpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0
IGNoYXIqIHNpZ25hdHVyZSA9IF9CbG9ja19zaWduYXR1cmUodGFyZ2V0KTsKKyAgICBOU0ludm9j
YXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2ln
bmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOnNpZ25hdHVy
ZV1dOworICAgIFtpbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRdOworICAgIHJldHVybiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlvbiwgQ2FsbGJh
Y2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOworfQorCitpZCB0cnlVbndyYXBCbG9jayhKU0dsb2Jh
bENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIGlmICghSlNW
YWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCBvYmplY3QsIG9iakNDYWxsYmFja0Z1bmN0aW9u
Q2xhc3MoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuICgoT2JqQ0NhbGxiYWNr
RnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKS0+d3JhcHBlZEJsb2NrKCk7Cit9
CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpjUnVudGltZUV4
dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqY1J1bnRp
bWVFeHRyYXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2Jq
Y1J1bnRpbWVFeHRyYXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CisKK2lubGluZSBib29sIHByb3RvY29sSW1wbGVtZW50c1Byb3RvY29sKFByb3RvY29s
KiBjYW5kaWRhdGUsIFByb3RvY29sKiB0YXJnZXQpCit7CisgICAgdW5zaWduZWQgcHJvdG9jb2xQ
cm90b2NvbHNDb3VudDsKKyAgICBQcm90b2NvbCoqIHByb3RvY29sUHJvdG9jb2xzID0gcHJvdG9j
b2xfY29weVByb3RvY29sTGlzdChjYW5kaWRhdGUsICZwcm90b2NvbFByb3RvY29sc0NvdW50KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9jb2xQcm90b2NvbHNDb3VudDsgKytp
KSB7CisgICAgICAgIGlmIChwcm90b2NvbF9pc0VxdWFsKHByb3RvY29sUHJvdG9jb2xzW2ldLCB0
YXJnZXQpKSB7CisgICAgICAgICAgICBmcmVlKHByb3RvY29sUHJvdG9jb2xzKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUocHJvdG9jb2xQcm90
b2NvbHMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIHZvaWQgZm9yRWFjaFByb3Rv
Y29sSW1wbGVtZW50aW5nUHJvdG9jb2woUHJvdG9jb2wqIGJhc2UsIFByb3RvY29sKiBwcm90b2Nv
bCwgdm9pZCAoXmNhbGxiYWNrKShQcm90b2NvbCopKQoreworICAgIEFTU0VSVChiYXNlKTsKKyAg
ICBBU1NFUlQocHJvdG9jb2wpOworCisgICAgdW5zaWduZWQgcHJvdG9jb2xzQ291bnQ7CisgICAg
UHJvdG9jb2wqKiBwcm90b2NvbHMgPSBwcm90b2NvbF9jb3B5UHJvdG9jb2xMaXN0KGJhc2UsICZw
cm90b2NvbHNDb3VudCk7CisgICAgaWYgKHByb3RvY29sc0NvdW50KSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNDb3VudDsgKytpKSB7CisgICAgICAgICAgICBp
ZiAocHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2wocHJvdG9jb2xzW2ldLCBwcm90b2NvbCkpCisg
ICAgICAgICAgICAgICAgY2FsbGJhY2socHJvdG9jb2xzW2ldKTsKKyAgICAgICAgICAgIGZvckVh
Y2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKHByb3RvY29sc1tpXSwgcHJvdG9jb2wsIGNh
bGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHByb3RvY29scyk7CisgICAgfQorfQor
CitpbmxpbmUgdm9pZCBmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChDbGFzcyBi
YXNlLCBQcm90b2NvbCogcHJvdG9jb2wsIHZvaWQgKF5jYWxsYmFjaykoUHJvdG9jb2wqKSkKK3sK
KyAgICBBU1NFUlQoYmFzZSk7CisgICAgQVNTRVJUKHByb3RvY29sKTsKKworICAgIHVuc2lnbmVk
IHByb3RvY29sc0NvdW50OworICAgIFByb3RvY29sKiogcHJvdG9jb2xzID0gY2xhc3NfY29weVBy
b3RvY29sTGlzdChiYXNlLCAmcHJvdG9jb2xzQ291bnQpOworICAgIGlmIChwcm90b2NvbHNDb3Vu
dCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9jb2xzQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgaWYgKHByb3RvY29sSW1wbGVtZW50c1Byb3RvY29sKHByb3RvY29s
c1tpXSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3RvY29sc1tpXSk7
CisgICAgICAgICAgICBmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChwcm90b2Nv
bHNbaV0sIHByb3RvY29sLCBjYWxsYmFjayk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShwcm90
b2NvbHMpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgZm9yRWFjaE1ldGhvZEluQ2xhc3MoQ2xh
c3MgY2xzLCB2b2lkICheY2FsbGJhY2spKE1ldGhvZCBtZXRob2QpKQoreworICAgIHVuc2lnbmVk
IGNvdW50OworICAgIE1ldGhvZCogbWV0aG9kcyA9IGNsYXNzX2NvcHlNZXRob2RMaXN0KGNscywg
JmNvdW50KTsKKyAgICBpZiAoY291bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBjYWxsYmFjayhtZXRob2RzW2ldKTsKKyAgICAg
ICAgZnJlZShtZXRob2RzKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hNZXRob2RJ
blByb3RvY29sKFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc1JlcXVpcmVkTWV0aG9kLCBCT09M
IGlzSW5zdGFuY2VNZXRob2QsIHZvaWQgKF5jYWxsYmFjaykoU0VMLCBjb25zdCBjaGFyKikpCit7
CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9u
KiBtZXRob2RzID0gcHJvdG9jb2xfY29weU1ldGhvZERlc2NyaXB0aW9uTGlzdChwcm90b2NvbCwg
aXNSZXF1aXJlZE1ldGhvZCwgaXNJbnN0YW5jZU1ldGhvZCwgJmNvdW50KTsKKyAgICBpZiAoY291
bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAg
ICAgICAgICBjYWxsYmFjayhtZXRob2RzW2ldLm5hbWUsIG1ldGhvZHNbaV0udHlwZXMpOworICAg
ICAgICBmcmVlKG1ldGhvZHMpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgZm9yRWFjaFByb3Bl
cnR5SW5Qcm90b2NvbChQcm90b2NvbCogcHJvdG9jb2wsIHZvaWQgKF5jYWxsYmFjaykob2JqY19w
cm9wZXJ0eV90KSkKK3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBvYmpjX3Byb3BlcnR5X3Qq
IHByb3BlcnRpZXMgPSBwcm90b2NvbF9jb3B5UHJvcGVydHlMaXN0KHByb3RvY29sLCAmY291bnQp
OworICAgIGlmIChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnRpZXNbaV0pOworICAgICAgICBm
cmVlKHByb3BlcnRpZXMpOworICAgIH0KK30KKwordGVtcGxhdGU8Y2hhciBvcGVuLCBjaGFyIGNs
b3NlPgordm9pZCBza2lwUGFpcihjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgTlNVSW50
ZWdlciBjb3VudCA9IDE7CisgICAgZG8geworICAgICAgICBjaGFyIGMgPSAqKHBvc2l0aW9uKysp
OworICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2Vw
dGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIHJlYXNvbjpAIk1h
bGZvcm1lZCB0eXBlIGVuY29kaW5nIiB1c2VySW5mbzpuaWxdOworICAgICAgICBpZiAoYyA9PSBv
cGVuKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSBjbG9zZSkK
KyAgICAgICAgICAgIC0tY291bnQ7CisgICAgfSB3aGlsZSAoY291bnQpOworfQorCitjbGFzcyBT
dHJpbmdSYW5nZSB7CitwdWJsaWM6CisgICAgU3RyaW5nUmFuZ2UoY29uc3QgY2hhciogYmVnaW4s
IGNvbnN0IGNoYXIqIGVuZCkgOiBtX3B0cihzdHJuZHVwKGJlZ2luLCBlbmQgLSBiZWdpbikpIHt9
CisgICAgflN0cmluZ1JhbmdlKCkgeyBmcmVlKG1fcHRyKTsgfQorICAgIG9wZXJhdG9yIGNvbnN0
IGNoYXIqKCkgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBjb25zdCBjaGFyKiBnZXQoKSB7IHJldHVy
biBtX3B0cjsgfQorCitwcml2YXRlOgorICAgIGNoYXIqIG1fcHRyOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVsZWdhdGVUeXBlPgordHlwZW5hbWUgRGVsZWdhdGVUeXBlOjpSZXN1bHRUeXBl
IHBhcnNlT2JqQ1R5cGUoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIEFTU0VSVCgqcG9z
aXRpb24pOworCisgICAgc3dpdGNoICgqKHBvc2l0aW9uKyspKSB7CisgICAgY2FzZSAnYyc6Cisg
ICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGNoYXI+KCk7
CisgICAgY2FzZSAnaSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5
cGVJbnRlZ2VyPGludD4oKTsKKyAgICBjYXNlICdzJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRl
VHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8c2hvcnQ+KCk7CisgICAgY2FzZSAnbCc6CisgICAg
ICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGxvbmc+KCk7Cisg
ICAgY2FzZSAncSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVE
b3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigpOworICAgIGNhc2UgJ0MnOgorICAgICAgICByZXR1
cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBjaGFyPigpOwor
ICAgIGNhc2UgJ0knOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBl
SW50ZWdlcjx1bnNpZ25lZCBpbnQ+KCk7CisgICAgY2FzZSAnUyc6CisgICAgICAgIHJldHVybiBE
ZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPHVuc2lnbmVkIHNob3J0PigpOworICAg
IGNhc2UgJ0wnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50
ZWdlcjx1bnNpZ25lZCBsb25nPigpOworICAgIGNhc2UgJ1EnOgorICAgICAgICByZXR1cm4gRGVs
ZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlRG91YmxlPHVuc2lnbmVkIGxvbmcgbG9uZz4oKTsKKyAg
ICBjYXNlICdmJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZURv
dWJsZTxmbG9hdD4oKTsKKyAgICBjYXNlICdkJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlw
ZTo6dGVtcGxhdGUgdHlwZURvdWJsZTxkb3VibGU+KCk7CisgICAgY2FzZSAnQic6CisgICAgICAg
IHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVCb29sKCk7CisgICAgY2FzZSAndic6CisgICAgICAg
IHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVWb2lkKCk7CisgICAgCisgICAgY2FzZSAnQCc6IC8v
IEFuIG9iamVjdCAod2hldGhlciBzdGF0aWNhbGx5IHR5cGVkIG9yIHR5cGVkIGlkKQorICAgIHsK
KyAgICAgICAgaWYgKHBvc2l0aW9uWzBdID09ICc/JyAmJiBwb3NpdGlvblsxXSA9PSAnPCcpIHsK
KyAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdp
biA9IHBvc2l0aW9uOworICAgICAgICAgICAgc2tpcFBhaXI8JzwnLCc+Jz4ocG9zaXRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJsb2NrKGJlZ2luLCBwb3NpdGlv
biAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpwb3NpdGlvbiA9PSAnIicpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHBv
c2l0aW9uID0gaW5kZXgocG9zaXRpb24sICciJyk7CisgICAgICAgICAgICByZXR1cm4gRGVsZWdh
dGVUeXBlOjp0eXBlT2ZDbGFzcyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICB9CisKKyAgICBjYXNlICd7
JzogeyAvLyB7bmFtZT10eXBlLi4ufSBBIHN0cnVjdHVyZQorICAgICAgICBjb25zdCBjaGFyKiBi
ZWdpbiA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgc2tpcFBhaXI8J3snLCd9Jz4ocG9zaXRpb24p
OworICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlU3RydWN0KGJlZ2luLCBwb3NpdGlv
bik7CisgICAgfQorCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgQyBzdHJpbmdzLCBhcnJheXMsIHBv
aW50ZXJzLCB1bmlvbnMsIGJpdGZpZWxkcywgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgY2FzZSAn
Kic6IC8vIEEgY2hhcmFjdGVyIHN0cmluZyAoY2hhciAqKQorICAgIGNhc2UgJ1snOiAvLyBbYXJy
YXkgdHlwZV0gQW4gYXJyYXkKKyAgICBjYXNlICcoJzogLy8gKG5hbWU9dHlwZS4uLikgQSB1bmlv
bgorICAgIGNhc2UgJ2InOiAvLyBibnVtIEEgYml0IGZpZWxkIG9mIG51bSBiaXRzCisgICAgY2Fz
ZSAnXic6IC8vIF50eXBlIEEgcG9pbnRlciB0byB0eXBlCisgICAgY2FzZSAnPyc6IC8vIEFuIHVu
a25vd24gdHlwZSAoYW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNvZGUgaXMgdXNlZCBmb3IgZnVu
Y3Rpb24gcG9pbnRlcnMpCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgT2JqZWN0aXZlLUMgQ2xhc3Ms
IFNFTAorICAgIGNhc2UgJyMnOiAvLyBBIGNsYXNzIG9iamVjdCAoQ2xhc3MpCisgICAgY2FzZSAn
Oic6IC8vIEEgbWV0aG9kIHNlbGVjdG9yIChTRUwpCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkuYwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEyIEBAIHN0YXRp
YyBkb3VibGUgbmFuKGNvbnN0IGNoYXIqKQogCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykK
K3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisjZW5kaWYKKwogc3RhdGljIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0Owotc3RhdGljIGludCBmYWlsZWQ7CitpbnQgZmFpbGVkOwogc3Rh
dGljIHZvaWQgYXNzZXJ0RXF1YWxzQXNCb29sZWFuKEpTVmFsdWVSZWYgdmFsdWUsIGJvb2wgZXhw
ZWN0ZWRWYWx1ZSkKIHsKICAgICBpZiAoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkg
IT0gZXhwZWN0ZWRWYWx1ZSkgewpAQCAtMTA0MCw2ICsxMDQ0LDEwIEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiBhcmd2W10pCiAgICAgOjpTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworI2VuZGlmCisKICAgICBj
b25zdCBjaGFyICpzY3JpcHRQYXRoID0gInRlc3RhcGkuanMiOwogICAgIGlmIChhcmdjID4gMSkg
ewogICAgICAgICBzY3JpcHRQYXRoID0gYXJndlsxXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQg
IkphdmFTY3JpcHRDb3JlLmgiCisKKy8vIEZvciBfQmxvY2tfaGFzX3NpZ25hdHVyZSAmIF9CbG9j
a19zaWduYXR1cmUKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgX19jcGx1c3BsdXMgMAor
I2VuZGlmCisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUvQmxvY2tfcHJpdmF0ZS5oPgorCitl
eHRlcm4gaW50IGZhaWxlZDsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisKKyNpZiBK
U19PQkpDX0FQSV9FTkFCTEVECisKK0Bwcm90b2NvbCBQYXJlbnRPYmplY3QgPEpTRXhwb3J0Pgor
QGVuZAorCitAaW50ZXJmYWNlIFBhcmVudE9iamVjdCA6IE5TT2JqZWN0PFBhcmVudE9iamVjdD4K
KysgKE5TU3RyaW5nICopcGFyZW50VGVzdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFBhcmVu
dE9iamVjdAorKyAoTlNTdHJpbmcgKilwYXJlbnRUZXN0Cit7CisgICAgcmV0dXJuIFtzZWxmIGRl
c2NyaXB0aW9uXTsKK30KK0BlbmQKKworQHByb3RvY29sIFRlc3RPYmplY3QgPEpTRXhwb3J0Pgor
QHByb3BlcnR5IGludCB2YXJpYWJsZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIGludCBzaXg7CitA
cHJvcGVydHkgQ0dQb2ludCBwb2ludDsKKysgKE5TU3RyaW5nICopY2xhc3NUZXN0OworKyAoTlNT
dHJpbmcgKilwYXJlbnRUZXN0OworLSAoTlNTdHJpbmcgKilnZXRTdHJpbmc7CitKU0V4cG9ydEFz
KHRlc3RBcmd1bWVudFR5cGVzLAorLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBlc1dpdGhJ
bnQ6KGludClpIGRvdWJsZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzooTlNTdHJp
bmcqKXMgbnVtYmVyOihOU051bWJlciopbiBhcnJheTooTlNBcnJheSopYSBkaWN0aW9uYXJ5OihO
U0RpY3Rpb25hcnkqKW8KKyk7CistICh2b2lkKWNhbGxiYWNrOih2b2lkKF4pKGludCkpYmxvY2s7
CitAZW5kCisKK0BpbnRlcmZhY2UgVGVzdE9iamVjdCA6IFBhcmVudE9iamVjdCA8VGVzdE9iamVj
dD4KK0Bwcm9wZXJ0eSBpbnQgc2l4OworKyAoaWQpdGVzdE9iamVjdDsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RPYmplY3QKK0BzeW50aGVzaXplIHZhcmlhYmxlOworQHN5bnRoZXNpemUg
c2l4OworQHN5bnRoZXNpemUgcG9pbnQ7CisrIChpZCl0ZXN0T2JqZWN0Cit7CisgICAgcmV0dXJu
IFtbW1Rlc3RPYmplY3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKysgKE5TU3RyaW5n
ICopY2xhc3NUZXN0Cit7CisgICAgcmV0dXJuIEAiY2xhc3NUZXN0IC0gb2theSI7Cit9CistIChO
U1N0cmluZyAqKWdldFN0cmluZworeworICAgIHJldHVybiBAIjQyIjsKK30KKy0gKE5TU3RyaW5n
ICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6KGRvdWJsZSlkIGJvb2xl
YW46KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNOdW1iZXIqKW4gYXJyYXk6
KE5TQXJyYXkqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCit7CisgICAgcmV0dXJuIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQsJWcsJWQsJUAsJWQsJUAsJUAiLCBpLCBkLCBi
PT1ZRVM/dHJ1ZTpmYWxzZSxzLFtuIGludFZhbHVlXSxhWzFdLG9bQCJ4Il1dOworfQorLSAodm9p
ZCljYWxsYmFjazoodm9pZCheKShpbnQpKWJsb2NrCit7CisgICAgYmxvY2soNDIpOworfQorQGVu
ZAorCitib29sIHRlc3RYWVpUZXN0ZWQgPSBmYWxzZTsKKworQHByb3RvY29sIFRleHRYWVogPEpT
RXhwb3J0PgorQHByb3BlcnR5IGludCB4OworQHByb3BlcnR5IChyZWFkb25seSkgaW50IHk7Cist
ICh2b2lkKXRlc3Q6KE5TU3RyaW5nICopbWVzc2FnZTsKK0BlbmQKKworQGludGVyZmFjZSBUZXh0
WFlaIDogTlNPYmplY3QgPFRleHRYWVo+CitAcHJvcGVydHkgaW50IHg7CitAcHJvcGVydHkgaW50
IHk7CitAcHJvcGVydHkgaW50IHo7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0WFlaCitA
c3ludGhlc2l6ZSB4OworQHN5bnRoZXNpemUgeTsKK0BzeW50aGVzaXplIHo7CistICh2b2lkKXRl
c3Q6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHRlc3RYWVpUZXN0ZWQgPSBbbWVzc2FnZSBp
c0VxdWFsOkAidGVzdCJdICYmIHggPT0gMTMgJiB5ID09IDQgJiYgeiA9PSA1OworfQorQGVuZAor
CitzdGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFz
c2VkKQoreworICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNz
ZWQgPyBAIlBBU1NFRCIgOiBAIkZBSUxFRCIpOworICAgIGlmICghcGFzc2VkKQorICAgICAgICBm
YWlsZWQgPSAxOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3Mo
KQoreworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jlc3VsdEZhbHNlLAor
ICAgICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0VW5rbm93bgorICAg
IH07CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVja1Jlc3VsdFVua25v
d247CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgeworICAgICAgICBpZCBi
bG9jayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07CisgICAgICAgIGNo
ZWNrID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihfQmxvY2tfc2lnbmF0
dXJlKGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBDaGVja1Jlc3VsdEZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK3ZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQoreworICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKwor
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tK
U0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdOworICAgICAgICBjaGVja1Jl
c3VsdChAIjIgKyAyIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0KTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlR3byBwbHVzIHR3byBpcyAlQCIsIFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiMiArIDIiXV07CisgICAgICAgIGNoZWNrUmVzdWx0KEAic3RyaW5n
V2l0aEZvcm1hdCIsIFtyZXN1bHQgaXNFcXVhbDpAIlR3byBwbHVzIHR3byBpcyA0Il0pOworICAg
IH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4
dFtAIm1lc3NhZ2UiXSA9IEAiSGVsbG8iOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAIm1lc3NhZ2UgKyAnLCBXb3JsZCEnIl07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiSGVsbG8sIFdvcmxkISIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAi
SGVsbG8sIFdvcmxkISJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiKHsgeDo0MiB9KSJdOworICAgICAgICBpZCBvYmogPSBbcmVzdWx0IHRvT2JqZWN0XTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVyYWwiLCBbb2JqIGlzS2lu
ZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgaWQgbnVtID0gKE5TRGlj
dGlvbmFyeSopb2JqW0AieCJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkNoZWNrIG51bWVyaWMg
bGl0ZXJhbCIsIFtudW0gaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBfX2Jsb2NrIGlu
dCByZXN1bHQ7CisgICAgICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0gPSBeKGludCB2YWx1
ZSl7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICBjaGVj
a1Jlc3VsdChAImJsb2NrQ2FsbGJhY2siLCByZXN1bHQgPT0gNDIpOworICAgIH0KKworICAgIGlm
IChibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKSkgeworICAgICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgX19ibG9jayBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgICAgICAgICAgY29udGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4oTlNTdHJp
bmcgKnZhbHVlKXsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbQCI0MiIgaXNFcXVhbFRvU3Ry
aW5nOnZhbHVlXSA9PSBZRVM7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJibG9ja0NhbGxiYWNrKE5TU3RyaW5nICopIiwgcmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZQorICAgICAgICBOU0xvZyhAIlNraXBwaW5nICdibG9ja0NhbGxiYWNrKE5TU3Ry
aW5nICopJyB0ZXN0IGNhc2UiKTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIhY29udGV4dC5leGNlcHRpb24iLCAhY29udGV4dC5l
eGNlcHRpb24pOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkg
VEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOworICAgICAg
ICBjaGVja1Jlc3VsdChAImNvbnRleHQuZXhjZXB0aW9uIiwgY29udGV4dC5leGNlcHRpb24pOwor
ICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX19i
bG9jayBib29sIGNhdWdodCA9IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRs
ZXIgPSBeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7CisgICAgICAg
ICAgICAodm9pZCljb250ZXh0OworICAgICAgICAgICAgKHZvaWQpZXhjZXB0aW9uOworICAgICAg
ICAgICAgY2F1Z2h0ID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFY
ICFAIyQlXiYqKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU0NvbnRleHQuZXhjZXB0aW9u
SGFuZGxlciIsIGNhdWdodCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisgICAgICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAgICAgICAg
ICAgIGNvbnRleHQuZXhjZXB0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVz
c2FnZTpAIlNvbWV0aGluZyB3ZW50IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAg
ICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
InZhciByZXN1bHQ7IHRyeSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0Nh
dWdodCBleGNlcHRpb24nOyB9Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhy
b3cgaW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbW3Jlc3VsdCB0b1N0
cmluZ10gaXNFcXVhbDpAIkNhdWdodCBleGNlcHRpb24iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0
KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSBub3QgdGhyb3duIHRvIE9iamVjdGl2ZS1D
IiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKKyAgICAgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAg
ICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9U
IFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgfTsKKyAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0
OyB0cnkgeyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhjZXB0
aW9uJzsgfSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGluIGNhbGxi
YWNrIC0gd2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1
YWw6QCJDYXVnaHQgZXhjZXB0aW9uIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0
IHRocm93IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFjb250ZXh0
LmV4Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAiZnVuY3Rp
b24gc3VtKGFycmF5KSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDsgXAorICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IGFycmF5W2ldOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAor
ICAgICAgICAgICAgfSJdOworICAgICAgICBKU1ZhbHVlICphcnJheSA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE9iamVjdDpAW0AxMywgQDIsIEA3XSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpT
VmFsdWUgKnN1bUZ1bmN0aW9uID0gY29udGV4dFtAInN1bSJdOworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbc3VtRnVuY3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsgYXJyYXkgXV07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAic3VtKFsxMywgMiwgN10pIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSAy
Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBKU1ZhbHVlICptdWxBZGRGdW5jdGlvbiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OgorICAg
ICAgICAgICAgQCIoZnVuY3Rpb24oYXJyYXksIG9iamVjdCkgeyBcCisgICAgICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IFtdOyBcCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkg
XAorICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSAqIG9iamVjdC54ICsg
b2JqZWN0LnkpOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAg
ICAgfSkiXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW211bEFkZEZ1bmN0aW9uIGNhbGxX
aXRoQXJndW1lbnRzOkBbIEBbIEAyLCBANCwgQDggXSwgQHsgQCJ4IjpAMC41LCBAInkiOkA0MiB9
IF1dOworICAgICAgICBjaGVja1Jlc3VsdChAIm11bEFkZEZ1bmN0aW9uIiwgW1tyZXN1bHQgdG9T
dHJpbmddIGlzRXF1YWw6QCI0Myw0NCw0NiJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZh
bHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKworICAgICAgICBvYmplY3RbQCJw
b2ludCJdID0gQHsgQCJ4IjpAMSwgQCJ5IjpAMiB9OworICAgICAgICBvYmplY3RbQCJwb2ludCJd
W0AieCJdID0gQDM7CisgICAgICAgIENHUG9pbnQgcG9pbnQgPSBbb2JqZWN0W0AicG9pbnQiXSB0
b1BvaW50XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0b1BvaW50IiwgcG9pbnQueCA9PSAzICYm
IHBvaW50LnkgPT0gMik7CisKKyAgICAgICAgb2JqZWN0W0B7IEAidG9TdHJpbmciOl57IHJldHVy
biBAImZvbyI7IH0gfV0gPSBAImJhciI7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidG9TdHJpbmcg
aW4gb2JqZWN0IGxpdGVyYWwgdXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRv
U3RyaW5nXSBpc0VxdWFsOkAiYmFyIl0pOworCisgICAgICAgIG9iamVjdFtbQCJmb29iYXIiIHN1
YnN0cmluZ1RvSW5kZXg6M11dID0gQCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChAInN1YnN0
cmluZyB1c2VkIGFzIHN1YnNjcmlwdCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmddIGlzRXF1
YWw6QCJiYXIiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBUZXh0WFlaICp0ZXN0WFlaID0gW1tUZXh0WFlaIGFsbG9jXSBpbml0XTsKKyAg
ICAgICAgY29udGV4dFtAInRlc3RYWVoiXSA9IHRlc3RYWVo7CisgICAgICAgIHRlc3RYWVoueCA9
IDM7CisgICAgICAgIHRlc3RYWVoueSA9IDQ7CisgICAgICAgIHRlc3RYWVoueiA9IDU7CisgICAg
ICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ID0gMTM7IHRlc3RYWVoueSA9
IDE0OyJdOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoudGVzdCgn
dGVzdCcpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHRlc3RYWVpUZXN0ZWQi
LCB0ZXN0WFlaVGVzdGVkKTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnggKyAnLCcgKyB0ZXN0WFlaLnkgKyAnLCcgKyB0ZXN0WFla
LnoiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gcmVzdWx0IiwgW1tyZXN1bHQg
dG9TdHJpbmddIGlzRXF1YWw6QCIxMyw0LHVuZGVmaW5lZCJdKTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtjb250ZXh0W0AiT2JqZWN0Il1b
QCJwcm90b3R5cGUiXSBkZWZpbmVQcm9wZXJ0eTpAImdldHRlclByb3BlcnR5IiBkZXNjcmlwdG9y
OkB7CisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTpeeworICAgICAgICAg
ICAgICAgIHJldHVybiBbSlNDb250ZXh0IGN1cnJlbnRUaGlzXVtAIngiXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE9iamVjdDpAeyBAIngiOkAxMDEgfSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGlu
dCByZXN1bHQgPSBbb2JqZWN0IFtAImdldHRlclByb3BlcnR5Il0gdG9JbnQzMl07CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiZ2V0dGVyUHJvcGVydHkiLCByZXN1bHQgPT0gMTAxKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJj
b25jYXRlbmF0ZSJdID0gXnsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFyZ3VtZW50cyA9IFtKU0Nv
bnRleHQgY3VycmVudEFyZ3VtZW50c107CisgICAgICAgICAgICBpZiAoIVthcmd1bWVudHMgY291
bnRdKQorICAgICAgICAgICAgICAgIHJldHVybiBAIiI7CisgICAgICAgICAgICBOU1N0cmluZyAq
bWVzc2FnZSA9IFthcmd1bWVudHNbMF0gZGVzY3JpcHRpb25dOworICAgICAgICAgICAgZm9yIChO
U1VJbnRlZ2VyIGluZGV4ID0gMTsgaW5kZXggPCBbYXJndW1lbnRzIGNvdW50XTsgKytpbmRleCkK
KyAgICAgICAgICAgICAgICBtZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QCAlQCIsIG1lc3NhZ2UsIGFyZ3VtZW50c1tpbmRleF1dOworICAgICAgICAgICAgcmV0dXJuIG1l
c3NhZ2U7CisgICAgICAgIH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiY29uY2F0ZW5hdGUoJ0hlbGxvLCcsICdXb3JsZCEnKSJdOworICAgICAg
ICBjaGVja1Jlc3VsdChAImNvbmNhdGVuYXRlIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJI
ZWxsbywgV29ybGQhIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgY29udGV4dFtAImZvbyJdID0gQFlFUzsKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiQFlFUyBpcyBib29sZWFuIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1
YWw6QCJib29sZWFuIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RP
YmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAg
ICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmco
dGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdCki
LCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdF0iXSk7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0
T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNv
bnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJvdG9f
XykiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdC5fX3Byb3RvX18p
IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RQcm90b3R5
cGVdIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKyAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcoVGVz
dE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVzdE9iamVjdCkiLCBb
W3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdENvbnN0cnVjdG9y
XSJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OltUZXN0T2JqZWN0
IGNsYXNzXSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVl
IHRvT2JqZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10iLCBbdmFsdWUgdG9PYmplY3RdID09IFtU
ZXN0T2JqZWN0IGNsYXNzXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmplY3QgY2xh
c3NdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
IlRlc3RPYmplY3QucGFyZW50VGVzdCgpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGVzdE9i
amVjdC5wYXJlbnRUZXN0KCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIlRlc3RPYmplY3Qi
XSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAg
ICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QSJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgY29udGV4
dFtAInRlc3RPYmplY3RCIl0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3RBID09IHRlc3RPYmplY3RCIl07
CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdEEgPT0gdGVzdE9iamVjdEIiLCBbcmVz
dWx0IHRvQm9vbF0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmpl
Y3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAg
ICAgdGVzdE9iamVjdC5wb2ludCA9IChDR1BvaW50KXszLDR9OworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSBKU09OLnN0cmlu
Z2lmeSh0ZXN0T2JqZWN0LnBvaW50KTsgdGVzdE9iamVjdC5wb2ludCA9IHt4OjEyLHk6MTR9OyBy
ZXN1bHQiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0gcmVzdWx0
IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJ7XCJ4XCI6MyxcInlcIjo0fSJdKTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0ge3g6MTIseToxNH0iLCB0ZXN0
T2JqZWN0LnBvaW50LnggPT0gMTIgJiYgdGVzdE9iamVjdC5wb2ludC55ID09IDE0KTsKKyAgICB9
CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmpl
Y3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgdGVzdE9i
amVjdC5zaXggPSA2OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVj
dDsKKyAgICAgICAgY29udGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkpeyByZXR1cm4geCAq
IHk7IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAibXVsKHRlc3RPYmplY3Quc2l4LCA3KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIm11bCh0
ZXN0T2JqZWN0LnNpeCwgNykiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRl
c3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRl
c3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il1b
QCJ2YXJpYWJsZSJdID0gQDQ7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKyt0
ZXN0T2JqZWN0LnZhcmlhYmxlIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiKyt0ZXN0T2JqZWN0
LnZhcmlhYmxlIiwgdGVzdE9iamVjdC52YXJpYWJsZSA9PSA1KTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0g
QHsgQCJ4IjpANiwgQCJ5IjpANyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAicG9pbnQueCArICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10g
aXNFcXVhbDpAIjYsNyJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInBv
aW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicG9pbnQueCAr
ICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJdKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RP
YmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCBbcmVzdWx0IHRv
SW50MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2Jq
ZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAg
ICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVj
dC50ZXN0QXJndW1lbnRUeXBlcygxMDEsMC41LHRydWUsJ2ZvbycsNjY2LFtmYWxzZSwnYmFyJyxm
YWxzZV0se3g6J2Jheid9KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QudGVz
dEFyZ3VtZW50VHlwZXMiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIjEwMSwwLjUsMSxmb28s
NjY2LGJhcixiYXoiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9i
amVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAg
ICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmpl
Y3QuZ2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0
ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCB0b0ludDMyXSA9
PSA0Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Cisg
ICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjaGVj
a1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIHByZSIsICFjb250ZXh0LmV4
Y2VwdGlvbik7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5n
ZXRTdHJpbmcuY2FsbCh7fSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0Lmdl
dFN0cmluZy5jYWxsKHt9KSBwb3N0IiwgY29udGV4dC5leGNlcHRpb24pOworICAgIH0KKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVz
dE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVz
dE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0gMDsgdGVzdE9iamVjdC5jYWxsYmFjayhm
dW5jdGlvbih4KXsgcmVzdWx0ID0geDsgfSk7IHJlc3VsdCJdOworICAgICAgICBjaGVja1Jlc3Vs
dChAInRlc3RPYmplY3QuY2FsbGJhY2siLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9
CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1
YWxNYWNoaW5lXTsKKyAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhE
b3VibGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1
ZS5jb250ZXh0ID09IGNvbnRleHQyIiwgdmFsdWUuY29udGV4dCA9PSBjb250ZXh0Mik7CisgICAg
ICAgIGNvbnRleHQxW0AicGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRzIl0gPSB2YWx1ZTsKKyAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQxIGV2YWx1YXRlU2NyaXB0OkAicGFzc1ZhbHVl
QmV0d2VlbkNvbnRleHRzIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0LmNvbnRleHQg
PT0gY29udGV4dDEiLCByZXN1bHQuY29udGV4dCA9PSBjb250ZXh0MSk7CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiW3ZhbHVlIGlzRXF1YWxUb09iamVjdDpyZXN1bHRdIiwgW3ZhbHVlIGlzRXF1YWxU
b09iamVjdDpyZXN1bHRdKTsKKyAgICAgICAgW2NvbnRleHQxIHJlbGVhc2VdOworICAgICAgICBb
Y29udGV4dDIgcmVsZWFzZV07CisgICAgfQorfQorCisjZWxzZQorCit2b2lkIHRlc3RPYmplY3Rp
dmVDQVBJKCkKK3sKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw2ICs1
NDAsNyBAQAogCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMjBFRTc5Qjc0
MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi87IH07CiAJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4
MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlB
Y2Nlc3MuY3BwICovOyB9OwogCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQ0VGREQw
RjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk4NkQyMjIxQTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFw
aS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEMjIy
MTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLzsgfTsKIAkJODZEM0IyQzMxMDE1NkJE
RTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJCRjEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1i
bGVyLmNwcCAqLzsgfTsKIAkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0Iy
QzAxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAv
KiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNz
ZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NDgsNiArNTQ5LDE4IEBACiAJCTg2RDNCM0M0MTAx
NTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRj
aEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9v
bC5jcHAgKi87IH07CiAJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTExNkIw
MEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyog
QVBJSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjEzMTY3QkFCRDcwMDZE
NzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjE0MTY3QkFC
RDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxNTE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpT
VmlydHVhbE1hY2hpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CisJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwODE2N0JBQjg3
MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tICovOyB9OworCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2
MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRl
cm5hbC5oICovOyB9OworCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFw
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2
MEIxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLzsgfTsKKwkJODZFM0M2MTkx
NjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3Jh
cHBlck1hcC5oICovOyB9OworCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBE
MTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLm1tICovOyB9OworCQk4NkUzQzYxQjE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUlu
dGVybmFsLmggKi87IH07CisJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi87IH07CisJ
CTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjExMTY3
QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgfTsKIAkJODZF
ODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFF
IC8qIEpTU3RyaW5nQnVpbGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3Iu
Y3BwICovOyB9OwogCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJG
QTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC01NjksNiAr
NTgyLDExIEBACiAJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlE
QzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNB
M0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9k
ZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkx
MzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLzsgfTsKKwkJODZGM0VFQkIxNjhD
REU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9j
a0FkYXB0b3IuaCAqLzsgfTsKKwkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tB
ZGFwdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZGM0VFQjgxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovOyB9OworCQk4
NkYzRUVCRDE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI5MTY4Q0NGNzUw
MDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OworCQk4NkYzRUVCRTE2OENE
RTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyog
T2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi87IH07CisJCTg2RjNFRUJGMTY4Q0RFOTMwMDc3Qjky
QSAvKiBPYmpjUnVudGltZUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0
cmFzLmggKi87IH07CiAJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZG
QTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi87IH07CiAJCTg2
RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RTkwMTQyQkJCMkUwMDE3NzNC
NyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLzsgfTsKIAkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYz
IC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuY3BwICovOyB9OwpAQCAtMTM3OCw2ICsxMzk2LDcgQEAKIAkJODZDQzg1QTIwRUU3OUI3NDAw
Mjg4NjgyIC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSklUQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVF
N0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gdGVzdGFwaS5tOyBwYXRoID0gQVBJL3Rl
c3RzL3Rlc3RhcGkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQkYxMDE1
NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBUk1Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NkQzQjJDMDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTUFzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVy
V2l0aENvbnN0YW50UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3Nl
bWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzg2LDYgKzE0MDUsMTggQEAKIAkJODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJl
cGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkRCNjQ2MzBGOTVDNkZDMDBE
N0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RTExNkIwMEZFNzVBQzgwMEI1MTJC
QyAvKiBDb2RlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29k
ZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA2MTY3QkFC
ODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDcx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2
MDgxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEpTQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dEludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4
cG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEgLyogSlNX
cmFwcGVyTWFwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNX
cmFwcGVyTWFwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQzE2N0JB
Qjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTV3JhcHBlck1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUz
QzYwRDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEpTVmFsdWUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hp
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBKU1ZpcnR1YWxNYWNoaW5lLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAx
QUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVC
RjJGOTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWVDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2RUJGMkZBMTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZUNvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA3LDYgKzE0MzgsMTEgQEAKIAkJ
ODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklULmg7IHBhdGggPSBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0Ez
RTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHTm9kZS5oOyBwYXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NvcmVCb2FyZC5oOyBwYXRo
ID0gZGZnL0RGR1Njb3JlQm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZG
M0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jsb2NrQWRhcHRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCODE2OENDRjc1MDA3N0I5MkEgLyog
SlNCbG9ja0FkYXB0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBKU0Jsb2NrQWRhcHRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VF
QjkxNjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE9i
akNDYWxsYmFja0Z1bmN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY3
NUVGQjE1MUMwNjJGMDA3QzlCQTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdF
eHBDYWNoZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhw
Q2FjaGVkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZEMTUx
QzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NzgsNiArMTkxNCw3IEBACiAJCQkJMTQ0MDA1MTcwQTUzMUNC
NTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFGNTlDIC8q
IHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5q
cyAqLywKKwkJCQk4NkQyMjIxOTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tICovLAogCQkJ
CTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gdGVzdHM7CkBAIC0yMDQ1LDYgKzIwODIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgyQjc4QTBBNDMwNUFCMDA1MTdDRkMgLyogQVBJQ2Fz
dC5oICovLAorCQkJCTg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8s
CiAJCQkJODY1RjQwODcxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggKi8sCiAJCQkJMUNB
QThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJCQkxQ0FBOEI0QjBE
MzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLywKQEAgLTIwNTMsNiArMjA5MSw4
IEBACiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJ
MTQyNzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAogCQkJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCisJCQkJODZGM0VFQjcxNjhDQ0Y3
NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggKi8sCisJCQkJODZGM0VFQjgxNjhDQ0Y3NTAw
NzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhE
MjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKIAkJCQkxNDQwRjg5MDBB
NTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLywKQEAgLTIwNjIsOSAr
MjEwMiwxMyBAQAogCQkJCUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmggKi8sCiAJCQkJMTQ0MEZDRTIwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xh
c3NSZWYuY3BwICovLAogCQkJCTE0NDBGQ0UxMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVm
LmggKi8sCisJCQkJODZFM0M2MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovLAor
CQkJCTg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi8sCisJCQkJODZF
M0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8sCiAJCQkJMTRC
RDVBMjkwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgKi8sCiAJCQkJMTRCRDVB
MkEwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5oICovLAogCQkJCTE0OENEMUQ3MTA4
Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8sCisJCQkJODZFM0M2MEEx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi8sCiAJCQkJMTQ4MkI3RTIwQTQzMDc2MDAw
NTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLywKIAkJCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdD
RkMgLyogSlNPYmplY3RSZWYuaCAqLywKIAkJCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyog
SlNPYmplY3RSZWZQcml2YXRlLmggKi8sCkBAIC0yMDc3LDExICsyMTIxLDIxIEBACiAJCQkJMTQ4
MkI3NEIwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmggKi8sCiAJCQkJMTQ2QUFCMzcw
QjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwICovLAogCQkJCTE0NkFBQjJBMEI2
NkE4NDkwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmggKi8sCisJCQkJODZFM0M2MEQxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gKi8sCisJCQkJODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmFsdWVJbnRlcm5hbC5oICovLAogCQkJCTE0QkQ1QTJCMEEzRTkxRjYwMEJBRjU5QyAv
KiBKU1ZhbHVlUmVmLmNwcCAqLywKIAkJCQkxNDgyQjZFQTBBNDMwMEIzMDA1MTdDRkMgLyogSlNW
YWx1ZVJlZi5oICovLAorCQkJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLmggKi8sCisJCQkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1h
Y2hpbmUubW0gKi8sCisJCQkJODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyRTM3MTE2QTY5N0IwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyQjdBMTE2NkNERUEwMDNCMDcx
MiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCAqLywKIAkJCQlBNzQ4MkI3OTExNjZD
REVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oICovLAorCQkJCTg2RTND
NjBCMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi8sCisJCQkJODZFM0M2MEMx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oICovLAorCQkJCTg2RjNFRUI5MTY4Q0NG
NzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovLAorCQkJCTg2RjNFRUJBMTY4
Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSAqLywKKwkJCQk4NkYzRUVC
NjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThG
NjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1
MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAogCQkJCTVERTNEMEY0MERE
OERERkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKQEAgLTMyMDUsNiArMzI1
OSwxNyBAQAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVD
MjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBF
NTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjEyMTY3
QkFCRDcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYx
MzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUz
QzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2
RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAorCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJN
YXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1Zh
bHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYw
QSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RjNF
RUJCMTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODZGM0VFQkQxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQk4NkYzRUVCRjE2OENERTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVF
eHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzUyOCw2ICszNTkzLDcgQEAKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxNDQwRjYxMDBBNEY4NTY3
MDAwNUYwNjEgLyogdGVzdGFwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJODZEMjIyMUExNjdFRjk0
NDAwMjRDODA0IC8qIHRlc3RhcGkubSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzgyNSw2ICszODkxLDEy
IEBACiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUVGOTFFMTY4NzhGN0EwMDNF
NUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MTYxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjE4MTY3
QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkUz
QzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2
RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFj
a0Z1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NSw2ICsxODUsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwCiAgICAgLCBtX3RpbWVvdXRDb3VudCg1MTIpCiAjZW5kaWYKICAgICAsIG1fbmV3U3RyaW5n
c1NpbmNlTGFzdEhhc2hDb25zdCgwKQorICAgICwgbV9hcGlEYXRhKDApCiAjaWYgRU5BQkxFKEFT
U0VNQkxFUikKICAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihleGVjdXRh
YmxlQWxsb2NhdG9yKSkKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNiAr
NDUzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkaXNjYXJkQWxsQ29kZSgpOwogCisgICAgICAgIHZvaWQgKm1fYXBpRGF0YTsKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcg
QEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRAogICAgICwgbV93ZWFr
UmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdl
YWtSYW5kb21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiAo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAgLCBtX2V2
YWxFbmFibGVkKHRydWUpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSkKKyAgICAsIG1fYXBpRGF0YSgwKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEz
ODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KICAgICAg
ICAgYm9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CiAKKyAgICAgICAgdm9pZCogbV9hcGlE
YXRhOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNp
dCBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSogPSAwKTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODYwMCkKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTIt
MTItMzEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAg
ICAgIE9iamVjdGl2ZS1DIEFQSSBmb3IgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuY3BwOgor
ICAgICAgICAoV1RGOjpXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAgICAgKiB3
dGYvV1RGVGhyZWFkRGF0YS5oOgorICAgICAgICAoV1RGVGhyZWFkRGF0YSk6CisgICAgICAgICAg
ICAtIEFkZGVkIG1fYXBpRGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZvciB1c2Ug
YnkgdGhlIEFQSS4KKwogMjAxMi0xMi0yOCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVt
ZW50YXRpb246IGluc3RydW1lbnQgbm90IGluc3RydW1lbnRlZCBtZW1iZXJzLgpJbmRleDogU291
cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1dURlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVz
cGFjZSBXVEYgewogVGhyZWFkU3BlY2lmaWM8V1RGVGhyZWFkRGF0YT4qIFdURlRocmVhZERhdGE6
OnN0YXRpY0RhdGE7CiAKIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQotICAgIDogbV9h
dG9taWNTdHJpbmdUYWJsZSgwKQorICAgIDogbV9hcGlEYXRhKDApCisgICAgLCBtX2F0b21pY1N0
cmluZ1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcigwKQogI2lm
IFVTRShKU0MpCiAgICAgLCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpTQzo6SWRlbnRp
ZmllclRhYmxlKCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxMzg2MDAp
CisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw2ICsxMjMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNDKQogCisgICAg
dm9pZCogbV9hcGlEYXRhOworCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0
b21pY1N0cmluZ1RhYmxlOwogICAgIEF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciBtX2F0b21p
Y1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180986</attachid>
            <date>2013-01-01 00:48:54 -0800</date>
            <delta_ts>2013-01-01 10:16:10 -0800</delta_ts>
            <desc>Style fixes</desc>
            <filename>105889.2.patch</filename>
            <type>text/plain</type>
            <size>224772</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAY2xh
c3MgSlNDb250ZXh0OworCisvLyBBIEpTVmFsdWUgaXMgYSByZWZlcmVuY2UgdG8gYSB2YWx1ZSB3
aXRoaW4gdGhlIEphdmFTY3JpcHQgb2JqZWN0IHNwYWNlIG9mIGEKKy8vIEpTVmlydHVhbE1hY2hp
bmUuIEFsbCBpbnN0YW5jZXMgb2YgSlNWYWx1ZSBvcmlnaW5hdGUgZnJvbSBhIEpTQ29udGV4dCwg
YW5kCisvLyBob2xkIGEgd2VhayByZWZlcmVuY2UgdG8gdGhpcyBKU0NvbnRleHQuIFdoZXJlIGFu
IGluc3RhbmNlIG1ldGhvZCBpcyBpbnZva2VkCisvLyB1cG9uIGEgSlNWYWx1ZSwgYW5kIHRoaXMg
cmV0dXJucyBhbm90aGVyIEpTVmFsdWUsIHRoZSByZXR1cm5lZCBKU1ZhbHVlIHdpbGwKKy8vIG9y
aWdpbmF0ZSBmcm9tIHRoZSBzYW1lIEpTQ29udGV4dCBhcyB0aGUgSlNWYWx1ZSBvbiB3aGljaCB0
aGUgbWV0aG9kIHdhcworLy8gaW52b2tlZC4KKy8vCisvLyBUaGUgSlNDb250ZXh0IGlzIHVzZWQg
dG8gbWFuYWdlIHRoZSBsaWZlLWN5Y2xlIG9mIHRoZSByZWZlcmVjZWQgSmF2YVNjcmlwdAorLy8g
dmFsdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFNvIGxvbmcgYXMgdGhlIEpTQ29udGV4
dCBpcyBiZWluZyByZXRhaW5lZAorLy8gdGhlIEpTVmFsdWUgd2lsbCBjb250aW51ZSB0byBrZWVw
IHRoZSByZWZlcmVuY2QgdmFsdWUgd2l0aGluIHRoZSBKYXZhU2NyaXB0CisvLyB2aXJ0dWFsIG1h
Y2hpbmUgYWxpdmUuIFdoZW4gdGhlIEpTQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggYSBKU1ZhbHVl
IGlzCisvLyBkZWFsbG9jYXRlZCB0aGUgd2VhayBjb250ZXh0IHByb3BlcnR5IG9mIHRoZSBKU1Zh
bHVlIHdpbGwgYmVjb21lIG5pbC4gQWZ0ZXIKKy8vIHRoaXMgb2NjdXJzIHRoZSB2YWx1ZSB3aXRo
aW4gdGhlIEphdmFTY3JpcHQgdmlydHVhbCBtYWNoaW5lIGlzIG5vIGxvbmdlcgorLy8gYmVpbmcg
bWFpbnRhaW5lZCBieSB0aGlzIEpTVmFsdWUsIGFuZCB0aGUgSlNWYWx1ZSBpbnN0YW5jZSBtYXkg
bm8gbG9uZ2VyIGJ5CisvLyB1c2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoaXMgdmFsdWUuIEZvciBh
bnkgbWV0aG9kIGludm9rZWQgb24gaW5zdGFuY2Ugb2YKKy8vIEpTVmFsdWUgd2l0aCBhIG5pbCBj
b250ZXh0LCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEgbmlsL3plcm8vZmFsc2UgcmVzdWx0Lgor
Ly8KKy8vIEZvciBhbGwgbWV0aG9kcyB0YWtpbmcgYXJndW1lbnRzIG9mIHR5cGUgaWQsIGFyZ3Vt
ZW50cyB3aWxsIGJlIGNvbnZlcnRlZAorLy8gaW50byBhIEphdmFTY3JpcHQgdmFsdWUgYWNjb3Jk
aW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBiZWxvdy4KKy8vIEFsbCBKYXZhU2NyaXB0
IHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBKU1ZpcnR1YWxNYWNoaW5l
CisvLyAodGhlIGFzc29jaWF0ZWQgSlNWaXJ0dWFsTWFjaGluZSBpcyBhdmFpYmxlIGluZGlyZWN0
bHkgdmlhIHRoZSBjb250ZXh0CisvLyBwcm9wZXJ0eSkuIEFuIGluc3RhbmNlIG9mIEpTVmFsdWUg
bWF5IG9ubHkgYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvCisvLyBtZXRob2RzIG9uIGluc3Rh
bmNlcyBvZiBKU1ZhbHVlIGFuZCBKU0NvbnRleHQgdGhhdCBiZWxvbmcgdG8gdGhlIHNhbWUKKy8v
IEpTVmlydHVhbE1hY2hpbmUgLSBwYXNzaW5nIGEgSlNWYWx1ZSB0byBhIG1ldGhvZCBvbiBhbiBv
YmplY3Qgb3JpZ2luYXRpbmcKKy8vIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGluZSB3
aWxsIHJlc3VsdCBpbiBhbiBPYmplY3RpdmUtQyBleGNlcHRpb24KKy8vIGJlaW5nIHJhaXNlZC4K
Ky8vCisvLyBDb252ZXJzaW9uIGJldHdlZW4gT2JqZWN0aXZlLUMgYW5kIEphdmFTY3JpcHQgdHlw
ZXMuCisvLworLy8gV2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gSmF2YVNjcmlwdCB2YWx1ZXMgYW5k
IE9iamVjdGl2ZS1DIG9iamVjdHMgYSBjb3B5IGlzCisvLyBwZXJmb3JtZWQuIFZhbHVlcyBvZiB0
eXBlcyBsaXN0ZWQgYmVsb3cgYXJlIGNvcGllZCB0byB0aGUgY29ycmVzcG9uZGluZworLy8gdHlw
ZXMgb24gY29udmVyc2lvbiBpbiBlYWNoIGRpcmVjdGlvbi4gRm9yIE5TRGljdGlvbmFyaWVzLCBl
bnRyaWVzIGluIHRoZQorLy8gZGljdGlvbmFyeSB0aGF0IGFyZSBrZXllZCBieSBzdHJpbmdzIGFy
ZSBjb3BpZWQgb250byBhIEphdmFTY3JpcHQgb2JqZWN0LgorLy8gRm9yIGRpY3Rpb25hcmllcyBh
bmQgYXJyYXlzLCBjb252ZXJzaW9uIGlzIHJlY3Vyc2l2ZSwgd2l0aCB0aGUgc2FtZSBvYmplY3QK
Ky8vIGNvbnZlcnNpb24gYmVpbmcgYXBwbGllZCB0byBhbGwgZW50cmllcyBpbiB0aGUgY29sbGVj
dGlvbi4KKy8vCisvLyAgIE9iamVjdGl2ZS1DIHR5cGUgIHwgICBKYXZhU2NyaXB0IHR5cGUKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICBu
aWwgICAgICAgICB8ICAgICB1bmRlZmluZWQKKy8vICAgICAgICBOU051bGwgICAgICAgfCAgICAg
ICAgbnVsbAorLy8gICAgICAgTlNTdHJpbmcgICAgICB8ICAgICAgIHN0cmluZworLy8gICAgICAg
TlNOdW1iZXIgICAgICB8ICAgbnVtYmVyLCBib29sZWFuCisvLyAgICAgTlNEaWN0aW9uYXJ5ICAg
IHwgICBPYmplY3Qgb2JqZWN0CisvLyAgICAgICBOU0FycmF5ICAgICAgIHwgICAgQXJyYXkgb2Jq
ZWN0CisvLyAgICAgICAgTlNEYXRlICAgICAgIHwgICAgIERhdGUgb2JqZWN0CisvLyAgICAgICBO
U0Jsb2NrICogICAgIHwgICBGdW5jdGlvbiBvYmplY3QgKgorLy8gICAgICAgICAgaWQgKiogICAg
ICB8ICAgV3JhcHBlciBvYmplY3QgKioKKy8vICAgICAgICBDbGFzcyAqKiogICAgfCBDb25zdHJ1
Y3RvciBvYmplY3QgKioqCisvLworLy8gKiBJbnN0YW5jZXMgb2YgTlNCbG9jayB3aXRoIHN1cHBv
cnRlZCBhcmd1bWVudHMgdHlwZXMgd2lsbCBiZSBwcmVzZW50ZWQgdG8KKy8vIEphdmFTY3JpcHQg
YXMgYSBjYWxsYWJsZSBGdW5jdGlvbiBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1
cHBvcnRlZAorLy8gYXJndW1lbnQgdHlwZXMgc2VlIEpTRXhwb3J0LmguIElmIGEgSmF2YVNjcmlw
dCBGdW5jdGlvbiBvcmlnaW5hdGluZyBmcm9tIGFuCisvLyBPYmplY3RpdmUtQyBibG9jayBpcyBj
b252ZXJ0ZWQgYmFjayB0byBhbiBPYmplY3RpdmUtQyBvYmplY3QgdGhlIGJsb2NrIHdpbGwKKy8v
IGJlIHJldHVybmVkLiBBbGwgb3RoZXIgSmF2YVNjcmlwdCBmdW5jdGlvbnMgd2lsbCBiZSBjb252
ZXJ0ZWQgaW4gdGhlIHNhbWUKKy8vIG1hbm5lciBhcyBhIEphdmFTY3JpcHQgb2JqZWN0IG9mIHR5
cGUgT2JqZWN0LgorLy8KKy8vICoqIEZvciBPYmplY3RpdmUtQyBpbnN0YW5jZXMgdGhhdCBkbyBu
b3QgZGVyaXZlIGZyb20gdGhlIHNldCBvZiB0eXBlcyBsaXN0ZWQKKy8vIGFib3ZlLCBhIHdyYXBw
ZXIgb2JqZWN0IHRvIHByb3ZpZGUgYSByZXRhaW5pbmcgaGFuZGxlIHRvIHRoZSBPYmplY3RpdmUt
QworLy8gaW5zdGFuY2UgZnJvbSBKYXZhU2NyaXB0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0
aGVzZSB3cmFwcGVyIG9iamVjdHMsIHNlZQorLy8gSlNFeHBvcnQuaC4gV2hlbiBhIEphdmFTY3Jp
cHQgd3JhcHBlciBvYmplY3QgaXMgY29udmVydGVkIGJhY2sgdG8gT2JqZWN0aXZlLUMKKy8vIHRo
ZSBPYmplY3RpdmUtQyBpbnN0YW5jZSBiZWluZyByZXRhaW5lZCBieSB0aGUgd3JhcHBlciBpcyBy
ZXR1cm5lZC4KKy8vCisvLyAqKiogRm9yIE9iamVjdGl2ZS1DIENsYXNzIG9iamVjdHMgYSBjb25z
dHJ1Y3RvciBvYmplY3QgY29udGFpbmluZyBleHBvcnRlZAorLy8gY2xhc3MgbWV0aG9kcyB3aWxs
IGJlIHJldHVybmVkLiBTZWUgSlNFeHBvcnQuaCBzb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorLy8g
Y29uc3RydWN0b3Igb2JqZWN0cy4KK05TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRl
cmZhY2UgSlNWYWx1ZSA6IE5TT2JqZWN0CisKKy8vIENyZWF0ZSBhIEpTVmFsdWUgYnkgY29udmVy
dGluZyBhbiBPYmplY3RpdmUtQyBvYmplY3QuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoT2JqZWN0
OihpZCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBDcmVhdGUgYSBK
YXZhU2NyaXB0IHZhbHVlIGZyb20gYW4gT2JqZWN0aXZlLUMgcHJpbWl0aXZlIHR5cGUuCisrIChK
U1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9PTCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQ7CisrIChKU1ZhbHVlICopdmFsdWVXaXRoRG91YmxlOihkb3VibGUpdmFsdWUgaW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aEludDMy
OihpbnQzMl90KXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhVSW50MzI6KHVpbnQzMl90KXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0
ICopY29udGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgaW4gdGhpcyBjb250ZXh0
LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdSZWd1bGFyRXhwcmVzc2lv
bkZyb21QYXR0ZXJuOihOU1N0cmluZyAqKXBhdHRlcm4gZmxhZ3M6KE5TU3RyaW5nICopZmxhZ3Mg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5l
d0Vycm9yRnJvbU1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQ7CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTnVsbEluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6
KEpTQ29udGV4dCAqKWNvbnRleHQ7CisKKy8vIENvbnZlcnQgdGhpcyB2YWx1ZSB0byBhIGNvcnJl
c3BvbmRpbmcgT2JqZWN0aXZlLUMgb2JqZWN0LCBhY2NvcmRpbmcgdG8gdGhlCisvLyBjb252ZXJz
aW9uIHNwZWNpZmllZCBhYm92ZS4KKy0gKGlkKXRvT2JqZWN0OworLy8gQ29udmVydCB0aGlzIHZh
bHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGlmIHRoZSByZXN1bHQg
aXMKKy8vIG5vdCBvZiB0aGUgc3BlY2lmaWVkIGNsYXNzIHRoZW4gbmlsIHdpbGwgYmUgcmV0dXJu
ZWQuCistIChpZCl0b09iamVjdE9mQ2xhc3M6KENsYXNzKWNsczsKKy8vIFRoZSB2YWx1ZSBpcyBj
b3BpZWQgdG8gYSBib29sZWFuIGFjY29yZGluZyB0byB0aGUgY29udmVyc2lvbiBzcGVjaWZpZWQg
YnkgdGhlCisvLyBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoQk9PTCl0b0Jvb2w7CisvLyBUaGUg
dmFsdWUgaXMgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgY29udmVyc2lvbiBz
cGVjaWZpZWQgYnkgdGhlCisvLyBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoZG91YmxlKXRvRG91
YmxlOworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhbiBpbnRlZ2VyIGFjY29yZGluZyB0byB0
aGUgY29udmVyc2lvbiBzcGVjaWZpZWQgYnkKKy8vIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgor
LSAoaW50MzJfdCl0b0ludDMyOworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhbiBpbnRlZ2Vy
IGFjY29yZGluZyB0byB0aGUgY29udmVyc2lvbiBzcGVjaWZpZWQgYnkKKy8vIHRoZSBKYXZhU2Ny
aXB0IGxhbmd1YWdlLgorLSAodWludDMyX3QpdG9VSW50MzI7CisvLyBJZiB0aGUgdmFsdWUgaXMg
YSBib29sZWFuLCBhIE5TTnVtYmVyIHZhbHVlIG9mIEBZRVMgb3IgQE5PIHdpbGwgYmUgcmV0dXJu
ZWQuCisvLyBGb3IgYWxsIG90aGVyIHR5cGVzIHRoZSB2YWx1ZSB3aWxsIGJlIGNvcGllZCB0byBh
IG51bWJlciBhY2NvcmRpbmcgdG8gdGhlCisvLyBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUg
SmF2YVNjcmlwdCBsYW5ndWFnZS4KKy0gKE5TTnVtYmVyICopdG9OdW1iZXI7CisvLyBUaGUgdmFs
dWUgaXMgY29waWVkIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgY29udmVyc2lvbiBzcGVj
aWZpZWQgYnkgdGhlCisvLyBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNTdHJpbmcgKil0b1N0
cmluZzsKKy8vIFRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcmVwcmVzZW50aW5n
IGEgdGltZSBpbnRlcnZhbCBzaW5jZSAxOTcwLAorLy8gYW5kIGEgbmV3IE5TRGF0ZSBpbnN0YW5j
ZSBpcyByZXR1cm5lZC4KKy0gKE5TRGF0ZSAqKXRvRGF0ZTsKKy8vIElmIHRoZSB2YWx1ZSBpcyBu
dWxsIG9yIHVuZGVmaW5lZCB0aGVuIG5pbCBpcyByZXR1cm5lZC4KKy8vIElmIHRoZSB2YWx1ZSBp
cyBub3QgYW4gb2JqZWN0IHRoZW4gYSBKYXZhU2NyaXB0IFR5cGVFcnJvciB3aWxsIGJlIHRocm93
bi4KKy8vIFRoZSBwcm9wZXJ0eSAibGVuZ3RoIiBpcyByZWFkIGZyb20gdGhlIG9iamVjdCwgY29u
dmVydGVkIHRvIGFuIHVuc2lnbmVkCisvLyBpbnRlZ2VyLCBhbmQgYW4gTlNBcnJheSBvZiB0aGlz
IHNpemUgaXMgYWxsb2NhdGVkLiBQcm9wZXJ0aWVzIGNvcnJlc3BvbmRpbmcKKy8vIHRvIGluZGlj
aWVzIHdpdGhpbiB0aGUgYXJyYXkgYm91bmRzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBhcnJheSwg
d2l0aAorLy8gT2JqZWN0aXZlLUMgb2JqZWN0cyBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCBKU1Zh
bHVlcyBhcyBzcGVjaWZpZWQuCistIChOU0FycmF5ICopdG9BcnJheTsKKy8vIElmIHRoZSB2YWx1
ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuIG5pbCBpcyByZXR1cm5lZC4KKy8vIElmIHRoZSB2
YWx1ZSBpcyBub3QgYW4gb2JqZWN0IHRoZW4gYSBKYXZhU2NyaXB0IFR5cGVFcnJvciB3aWxsIGJl
IHRocm93bi4KKy8vIEFsbCBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUg
Y29waWVkIHRvIHRoZSBkaWN0aW9uYXJ5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNv
bnZlcnRlZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TRGljdGlv
bmFyeSAqKXRvRGljdGlvbmFyeTsKKworLy8gQWNjZXNzIGEgcHJvcGVydHkgZnJvbSB0aGUgdmFs
dWUuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBKYXZhU2NyaXB0IHZhbHVlCisvLyAndW5k
ZWZpbmVkJyBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuCistIChKU1ZhbHVlICopdmFs
dWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFNldCBhIHByb3BlcnR5IG9u
IHRoZSB2YWx1ZS4KKy0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGZvclByb3BlcnR5OihOU1N0
cmluZyAqKXByb3BlcnR5OworLy8gRGVsZXRlIGEgcHJvcGVydHkgZnJvbSB0aGUgdmFsdWUsIHJl
dHVybnMgWUVTIGlmIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwuCistIChCT09MKWRlbGV0ZVByb3Bl
cnR5OihOU1N0cmluZyAqKXByb3BlcnR5OworLy8gUmV0dXJucyBZRVMgaWYgcHJvcGVydHkgaXMg
cHJlc2VudCBvbiB0aGUgdmFsdWUuCisvLyBUaGlzIG1ldGhvZCBoYXMgdGhlIHNhbWUgZnVuY3Rp
b24gYXMgdGhlIEphdmFTY3JpcHQgb3BlcmF0b3IgImluIi4KKy0gKEJPT0wpaGFzUHJvcGVydHk6
KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBjcmVh
dGUgYSBkYXRhIG9yIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdDsKKy8vIHRoaXMgbWV0
aG9kIG9wZXJhdGVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgT2JqZWN0LmRlZmluZVByb3BlcnR5
IG1ldGhvZCBpbgorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ2F1YWdlLgorLSAodm9pZClkZWZpbmVQ
cm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eSBkZXNjcmlwdG9yOihpZClkZXNjcmlwdG9yOwor
CisvLyBBY2Nlc3MgYW4gaW5kZXhlZCBwcm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRo
b2Qgd2lsbCByZXR1cm4gdGhlCisvLyBKYXZhU2NyaXB0IHZhbHVlICd1bmRlZmluZWQnIGlmIG5v
IHByb3BlcnR5IGV4aXN0cyBhdCB0aGF0IGluZGV4LgorLSAoSlNWYWx1ZSAqKXZhbHVlQXRJbmRl
eDooTlNVSW50ZWdlcilpbmRleDsKKy8vIFNldCBhbiBpbmRleGVkIHByb3BlcnR5IG9uIHRoZSB2
YWx1ZS4KKy0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5k
ZXg7CisKKy8vIEFsbCBKYXZhU2NyaXB0IHZhbHVlcyBhcmUgcHJlY2lzZWx5IG9uZSBvZiB0aGVz
ZSB0eXBlcy4KKy0gKEJPT0wpaXNVbmRlZmluZWQ7CistIChCT09MKWlzTnVsbDsKKy0gKEJPT0wp
aXNCb29sZWFuOworLSAoQk9PTClpc051bWJlcjsKKy0gKEJPT0wpaXNTdHJpbmc7CistIChCT09M
KWlzT2JqZWN0OworCisvLyBUaGlzIG1ldGhvZCBoYXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgdGhl
IEphdmFTY3JpcHQgb3BlcmF0b3IgIj09PSIuCistIChCT09MKWlzRXF1YWxUb09iamVjdDooaWQp
dmFsdWU7CisvLyBUaGlzIG1ldGhvZCBoYXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgdGhlIEphdmFT
Y3JpcHQgb3BlcmF0b3IgIj09Ii4KKy0gKEJPT0wpaXNFcXVhbFdpdGhUeXBlQ29lcmNpb25Ub09i
amVjdDooaWQpdmFsdWU7CisvLyBUaGlzIG1ldGhvZCBoYXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMg
dGhlIEphdmFTY3JpcHQgb3BlcmF0b3IgImluc3RhbmNlb2YiLgorLSAoQk9PTClpc0luc3RhbmNl
T2Y6KGlkKXZhbHVlOworCisvLyBDYWxsIHRoaXMgdmFsdWUgYXMgYSBmdW5jdGlvbiBwYXNzaW5n
IHRoZSBzcGVjaWZpZWQgInRoaXMiIHZhbHVlIGFuZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICop
Y2FsbFdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7CisvLyBDYWxsIHRoaXMgdmFs
dWUgYXMgYSBjb25zdHJ1Y3RvciBwYXNzaW5nIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLgorLSAo
SlNWYWx1ZSAqKWNvbnN0cnVjdFdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Cisv
LyBBY2Nlc3MgdGhlIHByb3BlcnR5IG5hbWVkICJtZXRob2QiIGZyb20gdGhpcyB2YWx1ZTsgY2Fs
bCB0aGUgdmFsdWUgcmVzdWx0aW5nCisvLyBmcm9tIHRoZSBwcm9wZXJ0eSBhY2Nlc3MgYXMgYSBm
dW5jdGlvbiwgcGFzc2luZyB0aGlzIHZhbHVlIGFzIHRoZSAidGhpcyIKKy8vIHZhbHVlLCBhbmQg
dGhlIHNwZWNpZmllZCBhZ3J1bWVudHMuCistIChKU1ZhbHVlICopaW52b2tlTWV0aG9kOihOU1N0
cmluZyAqKW1ldGhvZCB3aXRoQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzOworCisvLyBU
aGUgSlNDb250ZXh0IHRoYXQgdGhpcyB2YWx1ZSBvcmlnaW5hdGVzIGZyb20uCitAcHJvcGVydHko
cmVhZG9ubHksIHdlYWspIEpTQ29udGV4dCAqY29udGV4dDsKKworQGVuZAorCisvLyBPYmplY3Rp
dmUtQyBtZXRob2RzIGV4cG9ydGVkIHRvIEphdmFTY3JpcHQgbWF5IGhhdmUgYXJndW1lbnQgYW5k
L29yIHJldHVybgorLy8gdmFsdWVzIG9mIHN0cnVjdCB0eXBlcyBpZiB0aGUgc3RydWN0IGlmIGNv
bnZlcnNpb24gdG8gYW5kIGZyb20gdGhlIHN0cnVjdAorLy8gaXMgc3VwcG9ydGVkIGJ5IEpTVmFs
dWUuIFN1cHBvcnQgaXMgcHJvdmlkZWQgZm9yIGFueSB0eXBlcyB3aGVyZSBKU1ZhbHVlCisvLyBj
b250YWlucyBib3RoIGEgY2xhc3MgbWV0aG9kICJ2YWx1ZVdpdGg8VHlwZT46aW5Db250ZXh0OiIs
IGFuZCBhbmQgaW5zdGFuY2UKKy8vIG1ldGhvZCAidG88VHlwZT4iIC0gd2hlcmUgdGhlIHN0cmlu
ZyAiPFR5cGU+IiBpbiB0aGVzZSBzZWxlY3RvciBuYW1lcyBtYXRjaCwKKy8vIHdpdGggdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIHRoZSBmb3JtZXIgYmVpbmcgb2YgdGhlIHNhbWUgc3RydWN0IHR5cGUg
YXMgdGhlCisvLyByZXR1cm4gdHlwZSBvZiB0aGUgbGF0dGVyLgorLy8gU3VwcG9ydCBpcyBwcm92
aWRlZCBmb3Igc3RydWN0cyBvZiB0eXBlIENHUG9pbnQsIE5TUmFuZ2UsIENHUmVjdCBhbmQgQ0dT
aXplLgorQGludGVyZmFjZSBKU1ZhbHVlKFN0cnVjdFN1cHBvcnQpCisKKy8vIFRoaXMgbWV0aG9k
IHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBw
cm9wZXJ0aWVzCisvLyBuYW1lZCAieCIgYW5kICJ5Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgQ0dQ
b2ludC4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhQb2ludDooQ0dQb2ludClwb2ludCBpbkNvbnRl
eHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3bHkg
YWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcworLy8gbmFt
ZWQgImxvY2F0aW9uIiBhbmQgImxlbmd0aCIsIHdpdGggdmFsdWVzIGZyb20gdGhlIE5TUmFuZ2Uu
CisrIChKU1ZhbHVlICopdmFsdWVXaXRoUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgaW5Db250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0OworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9j
YXRlZCBKYXZhU2NyaXB0IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4
IiwgInkiLCAid2lkdGgiLCBhbmQgImhlaWdodCIsIHdpdGggdmFsdWVzIGZyb20gdGhlIENHUmVj
dC4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSZWN0OihDR1JlY3QpcmVjdCBpbkNvbnRleHQ6KEpT
Q29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3bHkgYWxsb2Nh
dGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcworLy8gbmFtZWQgIndp
ZHRoIiBhbmQgImhlaWdodCIsIHdpdGggdmFsdWVzIGZyb20gdGhlIENHU2l6ZS4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhTaXplOihDR1NpemUpc2l6ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQ7CisKKy8vIENvbnZlcnQgYSB2YWx1ZSB0byB0eXBlIENHUG9pbnQgYnkgcmVhZGluZyBw
cm9wZXJ0aWVzIG5hbWVkICJ4IiBhbmQgInkiIGZyb20KKy8vIHRoaXMgdmFsdWUsIGFuZCBjb252
ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUG9pbnQpdG9Qb2ludDsKKy8vIENv
bnZlcnQgYSB2YWx1ZSB0byB0eXBlIE5TUmFuZ2UgYnkgYWNjZXNzaW5nIHByb3BlcnRpZXMgbmFt
ZWQgImxvY2F0aW9uIiBhbmQKKy8vICJsZW5ndGgiIGZyb20gdGhpcyB2YWx1ZSBjb252ZXJ0aW5n
IHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKE5TUmFuZ2UpdG9SYW5nZTsKKy8vIENvbnZlcnQg
YSB2YWx1ZSB0byB0eXBlIENHUmVjdCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiLCAi
eSIsICJ3aWR0aCIsCisvLyBhbmQgImhlaWdodCIgZnJvbSB0aGlzIHZhbHVlLCBhbmQgY29udmVy
dGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1JlY3QpdG9SZWN0OworLy8gQ29udmVy
dCBhIHZhbHVlIHRvIHR5cGUgQ0dSYW5nZSBieSBhY2Nlc3NpbmcgcHJvcGVydGllcyBuYW1lZCAi
d2lkdGgiIGFuZAorLy8gImhlaWdodCIgZnJvbSB0aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJl
c3VsdHMgdG8gZG91YmxlLgorLSAoQ0dTaXplKXRvU2l6ZTsKKworQGVuZAorCisvLyBJbnN0YW5j
ZXMgb2YgSlNWYWx1ZSBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIG9yZGVyIHRv
IGVuYWJsZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkgYW5kIGluZGV4
LCBmb3IgZXhhbXBsZToKKy8vCisvLyAgICBKU1ZhbHVlICpvYmplY3RBLCAqb2JqZWN0QjsKKy8v
ICAgIEpTVmFsdWUgKnYxID0gb2JqZWN0W0AiWCJdOyAvLyBHZXQgdmFsdWUgZm9yIHByb3BlcnR5
ICJYIiBmcm9tICdvYmplY3QnLgorLy8gICAgSlNWYWx1ZSAqdjIgPSBvYmplY3RbNDJdOyAgIC8v
IEdldCB2YWx1ZSBmb3IgaW5kZXggNDIgZnJvbSAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFtAIlki
XSA9IHYxOyAgICAgICAgICAvLyBBc3NpZ24gJ3YxJyB0byBwcm9wZXJ0eSAiWSIgb2YgJ29iamVj
dCcuCisvLyAgICBvYmplY3RbMTAxXSA9IHYyOyAgICAgICAgICAgLy8gQXNzaWduICd2MicgdG8g
aW5kZXggMTAxIG9mICdvYmplY3QnLgorLy8KKy8vIEFuIG9iamVjdCBrZXkgcGFzc2VkIGFzIGEg
c3Vic2NyaXB0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgSmF2YVNjaXB0IHZhbHVlLAorLy8gYW5k
IHRoZW4gdGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB1c2VkIGFzIGEgcHJvcGVydHkg
bmFtZS4KK0BpbnRlcmZhY2UgSlNWYWx1ZShTdWJzY3JpcHRTdXBwb3J0KQorCistIChKU1ZhbHVl
ICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleTsKKy0gKEpTVmFsdWUgKilvYmplY3RB
dEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXg7CistICh2b2lkKXNldE9iamVjdDoo
aWQpb2JqZWN0IGZvcktleWVkU3Vic2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CistICh2b2lk
KXNldE9iamVjdDooaWQpb2JqZWN0IGF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRl
eDsKKworQGVuZAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
Ky8vIFRoZXNlIGtleXMgbWF5IGFzc2lzdCBpbiBjcmVhdGluZyBhIHByb3BlcnR5IGRlc2NyaXB0
b3IgZm9yIHVzZSB3aXRoIHRoZQorLy8gZGVmaW5lUHJvcGVydHkgbWV0aG9kIG9uIEpTVmFsdWUu
CisvLyBQcm9wZXJ0eSBkZXNjcmlwdG9ycyBtdXN0IGZpdCBvbmUgb2YgdGhyZWUgZGVzY3JpcHRp
b25zOgorLy8gRGF0YSBEZXNjcmlwdG9yOgorLy8gIC0gQSBkZXNjcmlwdG9yIGNvbnRhaW5pbmcg
b25lIG9yIGJvdGggb2YgdGhlIGtleXMgInZhbHVlIiBhbmQgIndyaXRhYmxlIiwKKy8vICAgIGFu
ZCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFi
bGUiIGFuZAorLy8gICAgImNvbmZpZ3VyYWJsZSIuIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBub3Qg
Y29udGFpbiBlaXRoZXIgdGhlICJnZXQiIG9yCisvLyAgICAic2V0IiBrZXkuCisvLyAgICBBIGRh
dGEgZGVzY3JpcHRvciBtYXkgYmUgdXNlZCB0byBjcmVhdGUgb3IgbW9kaWZ5IHRoZSBhdHRyaWJ1
dGVzIG9mIGEKKy8vICAgIGRhdGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IChyZXBsYWNpbmcgYW55
IGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5KS4KKy8vIEFjY2Vzc29yIERlc2NyaXB0b3I6Cisv
LyAgLSBBIGRlc2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAiZ2V0
IiBhbmQgInNldCIsIGFuZAorLy8gICAgb3B0aW9uYWxseSBjb250YWluaW5nIG9uZSBvciBib3Ro
IG9mIHRoZSBrZXlzICJlbnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBbiBh
Y2Nlc3NvciBkZXNjcmlwdG9yIG1heSBub3QgY29udGFpbiBlaXRoZXIgdGhlICJ2YWx1ZSIKKy8v
ICAgIG9yICJ3cml0YWJsZSIga2V5LgorLy8gICAgQW4gYWNjZXNzb3IgZGVzY3JpcHRvciBtYXkg
YmUgdXNlZCB0byBjcmVhdGUgb3IgbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mCisvLyAgICBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eSBvbiBhbiBvYmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgZGF0
YSBwcm9wZXJ0eSkuCisvLyBHZW5lcmljIERlc2NyaXB0b3I6CisvLyAgLSBBIGRlc2NyaXB0b3Ig
Y29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAg
ICAiY29uZmlndXJhYmxlIi4gQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGFu
eSBvZiB0aGUga2V5cworLy8gICAgInZhbHVlIiwgIiB3cml0YWJsZSIsICJnZXQiLCBvciAic2V0
Ii4KKy8vICAgIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUg
YXR0cmlidXRlcyBvZiBhbiBleGlzdGluZworLy8gICAgZGF0YSBvciBhY2Nlc3NvciBwcm9wZXJ0
eSwgb3IgdG8gY3JlYXRlIGEgbmV3IGRhdGEgcHJvcGVydHkuCitKU19FWFBPUlQgZXh0ZXJuIE5T
U3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JXcml0YWJsZUtleTsKK0pTX0VYUE9S
VCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvckVudW1lcmFibGVL
ZXk7CitKU19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0
b3JDb25maWd1cmFibGVLZXk7CitKU19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgSlNQ
cm9wZXJ0eURlc2NyaXB0b3JWYWx1ZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBj
b25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJp
bmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleTsKKworI2lmZGVmIF9fY3BsdXNw
bHVzCit9IC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQmFzZS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNCArMTM1LDggQEAgSlNf
RVhQT1JUIHZvaWQgSlNHYXJiYWdlQ29sbGVjdChKU0NvbnRleAogfQogI2VuZGlmCiAKKy8qIEVu
YWJsZSB0aGUgT2JqZWN0aXZlLUMgQVBJIGZvciBwbGF0Zm9ybXMgd2l0aCBhIG1vZGVybiBydW50
aW1lLiAqLworI3VuZGVmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNkZWZpbmUgSlNfT0JKQ19BUElf
RU5BQkxFRCAoZGVmaW5lZChfX09CSkNfXykgJiYgZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZp
bmVkKF9faTM4Nl9fKSkKKwogI2VuZGlmIC8qIEpTQmFzZV9oICovCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNC
bG9ja0FkYXB0b3IgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJv
bVByb3RvY29sOihjb25zdCBjaGFyICopc2lnbmF0dXJlOworLSAoaWQpYmxvY2tGcm9tVmFsdWU6
KEpTVmFsdWVSZWYpYXJndW1lbnQgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IHdpdGhF
eGNlcHRpb246KEpTVmFsdWVSZWYgKilleGNlcHRpb247CisKK0BlbmQKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0
Q29yZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0Lmgi
CisjaW1wb3J0ICJBUElTaGltcy5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkpTQmxv
Y2tBZGFwdG9yLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNX
cmFwcGVyTWFwLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJ3dGYvT3duUHRy
LmgiCisjaW1wb3J0IDwvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1l
d29yay9Qcml2YXRlSGVhZGVycy9OU0Jsb2NrLmg+CisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1
ZGUvQmxvY2tfcHJpdmF0ZS5oPgorCitleHRlcm4gIkMiIHsKK2lkIF9fTlNNYWtlU3BlY2lhbEZv
cndhcmRpbmdDYXB0dXJlQmxvY2soY29uc3QgY2hhciAqc2lnbmF0dXJlLCB2b2lkICheaGFuZGxl
cikoTlNJbnZvY2F0aW9uICppbnYpKTsKK307CisKK2NsYXNzIEJsb2NrQXJndW1lbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnQoKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiosIE5TSW50ZWdlciwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiop
ID0gMDsKKworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBtX25leHQ7Cit9OworCitCbG9ja0Fy
Z3VtZW50Ojp+QmxvY2tBcmd1bWVudCgpCit7Cit9CisKK2NsYXNzIEJsb2NrQXJndW1lbnRCb29s
ZWFuIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEpTVmFsdWVSZWYgZ2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsK
KyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnRO
dW1iZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgQmxvY2tBcmd1bWVudE51bWVyaWMgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7
CitwdWJsaWM6CisgICAgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiop
CisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVu
dDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSk7CisgICAg
fQorfTsKKworY2xhc3MgQmxvY2tBcmd1bWVudElkIDogcHVibGljIEJsb2NrQXJndW1lbnQgewor
cHVibGljOgorICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJ
bnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQor
ICAgIHsKKyAgICAgICAgaWQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50
OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICAgICAgcmV0dXJuIG9iamVjdFRv
VmFsdWUoY29udGV4dCwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIEJsb2NrQXJndW1lbnRT
dHJ1Y3QgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgQmxvY2tBcmd1bWVu
dFN0cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBl
bmNvZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25J
bnZvY2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWlu
XTsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6
ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAt
LWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsg
YWxpZ25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+
YWxpZ25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QmxvY2tBcmd1bWVudFN0cnVj
dCgpCisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAg
ICAgICAgZnJlZShtX2FsbG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTVmFs
dWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVt
YmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgW2lu
dm9jYXRpb24gZ2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0SW5kZXg6YXJndW1lbnROdW1iZXJd
OworCisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYWxsb2Nh
dGlvbiBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1
bWVudDomY29udGV4dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlv
biBpbnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAgICAgSlNWYWx1ZSog
dmFsdWU7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2
YWx1ZV07CisgICAgICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247Cisg
ICAgY2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3Mg
QmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCbG9ja0Fy
Z3VtZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0
aWMgUmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IEJsb2NrQXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAgIHN0YXRpYyBSZXN1
bHRUeXBlIHR5cGVCb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVu
dEJvb2xlYW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVPZkNsYXNzKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVCbG9jayhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1
cm4gbmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVTdHJ1Y3QoY29uc3Qg
Y2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1Jhbmdl
IGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9jYXRpb24qIGludm9jYXRpb24g
PSB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgICAgICByZXR1cm4gbmV3
IEJsb2NrQXJndW1lbnRTdHJ1Y3QoaW52b2NhdGlvbiwgY29weSk7CisgICAgICAgIHJldHVybiBu
aWw7CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkJsb2NrUmVzdWx0KCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldChO
U0ludm9jYXRpb24qLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikgPSAwOwor
fTsKKworY2xhc3MgQmxvY2tSZXN1bHRWb2lkIDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBK
U1ZhbHVlUmVmKikKKyAgICB7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEJsb2NrUmVzdWx0SW50ZWdlciA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6Cisg
ICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAg
ICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbikpOworICAgICAgICBbaW52b2Nh
dGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBCbG9ja1Jlc3VsdERvdWJsZSA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAg
eworICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIHJlc3VsdCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24g
c2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja1Jlc3VsdEJv
b2xlYW4gOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3Vs
dCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0gSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQpOworICAgICAgICBb
aW52b2NhdGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307CisKK2NsYXNzIEJs
b2NrUmVzdWx0U3RydWN0IDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBCbG9j
a1Jlc3VsdFN0cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBj
aGFyKiBlbmNvZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZl
cnNpb25JbnZvY2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24g
cmV0YWluXTsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5T
R2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAg
ICAgICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhz
aXplICsgYWxpZ25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNo
YXIqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVu
dCkgJiB+YWxpZ25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QmxvY2tSZXN1bHRT
dHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07
CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYg
cmVzdWx0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAg
W21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1ZV07CisgICAgICAg
IFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVmZmVyXTsKKyAgICAg
ICAgW2ludm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1f
YnVmZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK0BpbXBsZW1lbnRhdGlvbiBK
U0Jsb2NrQWRhcHRvciB7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc2lnbmF0dXJl
V2l0aE9mZnNldHM7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc2lnbmF0dXJlV2l0
aG91dE9mZnNldHM7CisgICAgT3duUHRyPEJsb2NrUmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBPd25Q
dHI8QmxvY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgc2l6ZV90IG1fYXJndW1lbnRDb3Vu
dDsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBvZmZzZXQgaW5mb3JtYXRpb24gYmFj
ayBpbnRvIGEgYm9jayBzaWduYXR1cmUuCitzdGF0aWMgTlNTdHJpbmcqIGJ1aWxkQmxvY2tTaWdu
YXR1cmUoTlNTdHJpbmcqIHByZWZpeCwgY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVu
ZCwgTlNVSW50ZWdlciYgb2Zmc2V0LCBOU1N0cmluZyogcG9zdGZpeCkKK3sKKyAgICBTdHJpbmdS
YW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgIE5TU3RyaW5nKiByZXN1bHQgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVAJXMlbHUlQCIsIHByZWZpeCwgY29weS5nZXQoKSwgb2Zmc2V0
LCBwb3N0Zml4XTsKKyAgICBOU1VJbnRlZ2VyIHNpemU7CisgICAgTlNHZXRTaXplQW5kQWxpZ25t
ZW50KGNvcHksICZzaXplLCAwKTsKKyAgICBpZiAoc2l6ZSA8IDQpCisgICAgICAgIHNpemUgPSA0
OworICAgIG9mZnNldCArPSBzaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKGlkKWlu
aXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIqKWVuY29kZWRUeXBl
Cit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV9zaWduYXR1cmVXaXRob3V0T2Zmc2V0cyA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbmNvZGVkVHlwZV07CisgICAgbV9hcmd1
bWVudENvdW50ID0gMDsKKworICAgIC8vIEN1cnJlbnRseSBvbmx5IGFkYXB0aW5nIEphdmFTY3Jp
cHQgZnVuY3Rpb25zIHRvIGJsb2NrcyByZXR1cm5pbmcgdm9pZC4KKyAgICBjb25zdCBjaGFyKiBy
ZXN1bHRUeXBlQmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICBpZiAoKmVuY29kZWRUeXBlKysgIT0g
J3YnKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICBPd25QdHI8QmxvY2tSZXN1bHQ+IHJlc3Vs
dCA9IGFkb3B0UHRyKG5ldyBCbG9ja1Jlc3VsdFZvaWQpOworICAgIGNvbnN0IGNoYXIqIHJlc3Vs
dFR5cGVFbmQgPSBlbmNvZGVkVHlwZTsKKworICAgIGlmIChlbmNvZGVkVHlwZVswXSAhPSAnQCcg
fHwgZW5jb2RlZFR5cGVbMV0gIT0gJz8nKSB7CisgICAgICAgIHJldHVybiBzZWxmOworICAgIH0K
KyAgICBlbmNvZGVkVHlwZSArPSAyOworCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGEg
YmxvY2sgaXMgdGhlIGJsb3hrIGl0c2VsZi4KKyAgICBOU1N0cmluZyogc2lnbmF0dXJlID0gQCJA
PzAiOworICAgIE5TVUludGVnZXIgb2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsKKworICAgIE93blB0
cjxCbG9ja0FyZ3VtZW50PiBhcmd1bWVudHMgPSAwOworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50
PiogbmV4dEFyZ3VtZW50ID0gJmFyZ3VtZW50czsKKyAgICB3aGlsZSAoKmVuY29kZWRUeXBlKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gZW5jb2RlZFR5cGU7CisgICAgICAgIE93blB0
cjxCbG9ja0FyZ3VtZW50PiBhcmd1bWVudCA9IGFkb3B0UHRyKHBhcnNlT2JqQ1R5cGU8QmxvY2tB
cmd1bWVudFR5cGVEZWxlZ2F0ZT4oZW5jb2RlZFR5cGUpKTsKKyAgICAgICAgaWYgKCFhcmd1bWVu
dCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmOworICAgICAgICBjb25zdCBjaGFyKiBlbmQgPSBl
bmNvZGVkVHlwZTsKKworICAgICAgICAvLyBBcHBlbmQgdGhlIHR5cGUgJiBzdGFjayBvZmZzZXQg
b2YgdGhpcyBhcmd1bWVudCB0byB0aGUgc2lnbmF0dXJlIHN0cmluZy4KKyAgICAgICAgc2lnbmF0
dXJlID0gYnVpbGRCbG9ja1NpZ25hdHVyZShzaWduYXR1cmUsIGJlZ2luLCBlbmQsIG9mZnNldCwg
QCIiKTsKKworICAgICAgICAqbmV4dEFyZ3VtZW50ID0gYXJndW1lbnQucmVsZWFzZSgpOworICAg
ICAgICBuZXh0QXJndW1lbnQgPSAmKCpuZXh0QXJndW1lbnQpLT5tX25leHQ7CisgICAgICAgICsr
bV9hcmd1bWVudENvdW50OworICAgIH0KKworICAgIC8vIFByZWZpYyB0aGUgc2lnbmF0dXJlIHdp
dGggdGhlIHJldHVybiB0eXBlICYgdG90YWwgc3RhY2tmcmFtZSBzaXplLgorICAgIC8vICh0aGlz
IGNhbGwgd2lsbCBhbHNvIGFkZCB0aGUgcmV0dXJuIHR5cGUgc2l6ZSB0byB0aGUgb2Zmc2V0LAor
ICAgIC8vIHdoaWNoIGlzIGEgbm9uc2VzbmUsIGJ1dCBoYXJtbGVzcyBzaW5jZSB0aGlzIGlzIHRo
ZSBsYXN0IHVzZSkuCisgICAgc2lnbmF0dXJlID0gYnVpbGRCbG9ja1NpZ25hdHVyZShAIiIsIHJl
c3VsdFR5cGVCZWdpbiwgcmVzdWx0VHlwZUVuZCwgb2Zmc2V0LCBzaWduYXR1cmUpOworCisgICAg
bV9zaWduYXR1cmVXaXRoT2Zmc2V0cyA9IHNpZ25hdHVyZTsKKyAgICBtX3Jlc3VsdCA9IHJlc3Vs
dC5yZWxlYXNlKCk7CisgICAgbV9hcmd1bWVudHMgPSBhcmd1bWVudHMucmVsZWFzZSgpOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy8vIFRoZSBKU0Jsb2NrQWRhcHRvciBzdG9yZXMgdGhlIHR5
cGUgc3RyaW5nIHRha2VuIGZyb20gdGhlIHByb3RvY29sLiBUaGlzIHN0cmluZworLy8gZG9lcyBu
b3QgY29udGFpbiBpbnZvY2F0aW9uIGxheW91dCBpbmZvcm1hdGlvbi4gVGhlIHNpZ25hdHVyZSBm
cm9tIHRoZSBibG9jaworLy8gZG9lcyBjb250YWluIHRoZSBzdGFja2ZyYW1lIG9mZnNldHMuIFNr
aXAgdGhlc2Ugd2hlbiBjb21wYXJpbmcgc3RyaW5ncy4KKy0gKGJvb2wpYmxvY2tNYXRjaGVzU2ln
bmF0dXJlOihpZClibG9jaworeworICAgIGlmICghX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2sp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB3aXRob3V0T2Zmc2V0
cz0gW21fc2lnbmF0dXJlV2l0aG91dE9mZnNldHMgVVRGOFN0cmluZ107CisgICAgY29uc3QgY2hh
ciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZShibG9jayk7CisKKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICB3aGlsZSAoaXNkaWdpdCgqd2l0aG91dE9mZnNldHMpKQorICAgICAgICAg
ICAgKyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKnNpZ25hdHVyZSkp
CisgICAgICAgICAgICArK3NpZ25hdHVyZTsKKyAgICAgICAgCisgICAgICAgIGlmICgqd2l0aG91
dE9mZnNldHMgIT0gKnNpZ25hdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCEqd2l0aG91dE9mZnNldHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgKyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgKytzaWduYXR1cmU7CisgICAgfQorfQorCist
IChpZClibG9ja0Zyb21WYWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29u
dGV4dCopY29udGV4dCB3aXRoRXhjZXB0aW9uOihKU1ZhbHVlUmVmKilleGNlcHRpb24KK3sKKyAg
ICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KTsKKworICAgIC8vIENoZWNrIGZvciBudWxsL3VuZGVmaW5lZC4KKyAgICBpZiAoSlNWYWx1ZUlz
VW5kZWZpbmVkKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc051bGwoY3R4LCBhcmd1bWVudCkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IDA7Cisg
ICAgaWYgKGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY3R4LCBhcmd1bWVudCkpIHsK
KyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIE9iamVjdGl2ZS1DIGJsb2Nr
LgorICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0Jsb2NrIGNsYXNzXV0pIHsK
KyAgICAgICAgICAgIGlmIChbc2VsZiBibG9ja01hdGNoZXNTaWduYXR1cmU6b2JqZWN0XSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisgICAgfSBlbHNlIGlmICht
X3NpZ25hdHVyZVdpdGhPZmZzZXRzICYmIEpTVmFsdWVJc09iamVjdChjdHgsIGFyZ3VtZW50KSkg
eworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0
aW9uCisgICAgICAgIC8vIChhbmQgdGhhdCB3ZXJlIGFibGUgdG8gY3JlYXRlIGEgZm9yd2FyZGlu
ZyBibG9jayBmb3IgdGhpcyBzaWduYXR1cmUpLgorICAgICAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYg
KEpTT2JqZWN0SXNGdW5jdGlvbihjdHgsIG9iamVjdCkpCisgICAgICAgICAgICBmdW5jdGlvbiA9
IG9iamVjdDsKKyAgICB9CisKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgIEpTQzo6QVBJ
RW50cnlTaGltIGVudHJ5U2hpbSh0b0pTKGN0eCkpOworICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAiSW52YWxpZCBhcmd1bWVudCBzdXBw
bGllZCBmb3IgT2JqZWN0aXZlLUMgYmxvY2siKSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzLgorICAgIEpTQmxvY2tBZGFwdG9yKiBhZGFw
dG9yID0gc2VsZjsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OmZ1bmN0aW9uIGluQ29udGV4dDpjb250ZXh0XTsKKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk1CisgICAgLy8gQ3VycmVudGx5IG9u
bHkgc3VwcG9ydGluZyB2b2lkIGZ1bmN0aW9ucy4KKyAgICByZXR1cm4gX19OU01ha2VTcGVjaWFs
Rm9yd2FyZGluZ0NhcHR1cmVCbG9jayhbbV9zaWduYXR1cmVXaXRoT2Zmc2V0cyBVVEY4U3RyaW5n
XSwgXihOU0ludm9jYXRpb24gKmludm9jYXRpb24peworICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NAorICAgICAgICAvLyBSYXRo
ZXIgdGhhbiByZXF1aXJpbmcgdGhhdCB0aGUgY29udGV4dCBiZSByZXRhaW5lZCwgaXQgd291bGQg
cHJvYmFibHkgYmUgbW9yZQorICAgICAgICAvLyBhcHByb3ByaWF0ZSB0byB1c2UgYSBuZXcgSlND
b250ZXh0IGluc3RhbmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAgLy8g
SXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB0aHJvdyBhIEpTIGV4Y2VwdGlvbiBoZXJlLCBi
dXQgd2l0aG91dCBhIGNvbnRleHQgd2UgaGF2ZQorICAgICAgICAvLyBub3RoaW5nIHRvIHdvcmsg
d2l0aC4KKyAgICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gdmFsdWUuY29udGV4dDsKKyAgICAg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKU0dsb2JhbENv
bnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKworICAgICAg
ICBKU1ZhbHVlUmVmIGFyZ3NbYWRhcHRvci0+bV9hcmd1bWVudENvdW50XTsKKworICAgICAgICBz
aXplX3QgYXJndW1lbnROdW1iZXIgPSAwOworICAgICAgICBCbG9ja0FyZ3VtZW50KiBhcmd1bWVu
dHMgPSBhZGFwdG9yLT5tX2FyZ3VtZW50cy5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0FyZ3Vt
ZW50KiBhcmd1bWVudCA9IGFyZ3VtZW50czsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJndW1lbnQt
Pm1fbmV4dC5nZXQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwor
ICAgICAgICAgICAgYXJnc1thcmd1bWVudE51bWJlcl0gPSBhcmd1bWVudC0+Z2V0KGludm9jYXRp
b24sIGFyZ3VtZW50TnVtYmVyICsgMSwgY29udGV4dCwgJmV4Y2VwdGlvbik7CisgICAgICAgICAg
ICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvbl07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICArK2FyZ3VtZW50TnVtYmVyOworICAgICAgICB9Cisg
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnROdW1iZXI7CisKKyAgICAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGN0eCwgSlNWYWx1ZVRvT2JqZWN0KGN0eCwgdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCks
IDAsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0
aW9uKSB7CisgICAgICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworfQorCitAZW5kCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MDgsMTAgKzUwOCwxMCBAQCB2b2lkKiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldFBy
aXZhCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmluaGVyaXRzKEpTQ2xhc3NSZWYgYykgY29uc3QKIHsKLSAgICBmb3IgKEpTQ2xhc3NSZWYg
anNDbGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRD
bGFzcykKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7
IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoanNDbGFzcyA9
PSBjKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKwor
I2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKK0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworCisvLyBBbiBpbnN0YW5j
ZSBvZiBKU0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0aW9uIGVudmlyb25t
ZW50LCBhbGwKKy8vIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNlIHdpdGhpbiBhIGNv
bnRleHQuCisvLyBKU0NvbnRleHQgaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNs
ZSBvZiBvYmplY3RzIHdpdGhpbiB0aGUKKy8vIEphdmFTY3JpcHQgdmlydHVhbCBtYWNoaW5lLiBF
dmVyeSBpbnN0YW5jZSBvZiBKU1ZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCBhCisvLyBKU0NvbnRl
eHQgdmlhIGEgd2VhayByZWZlcmVuY2UuIFRoZSBKU1ZhbHVlIHdpbGwga2VlcCB0aGUgSmF2YVNj
cmlwdCB2YWx1ZSBpdAorLy8gcmVmZXJlbmNlcyBhbGl2ZSBzbyBsb25nIGFzIHRoZSBKU0NvbnRl
eHQgaXMgYWxzbyByZXRhaW5lZC4gV2hlbiBhbiBpbnN0YW5jZQorLy8gb2YgSlNDb250ZXh0IGlz
IGRlYWxsb2NhdGVkIGFuZCB0aGUgd2VhayByZWZlcmVuY2VzIHRvIGl0IGFyZSBjbGVhcmVkIHRo
ZQorLy8gSlNWYWx1ZXMgdGhhdCBoYWQgYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0
IHdpbGwgYmUgaW52YWxpZGF0ZWQsIGFuZAorLy8gd2lsbCBjZWFzZSB0byBrZWVwIHRoZSB2YWx1
ZXMgd2l0aGluIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBhbGl2ZS4KK05TX0NMQVNTX0FWQUlMQUJM
RSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNDb250ZXh0LgorLSAoaWQpaW5pdDsKKy8vIENyZWF0ZSBhIEpTQ29udGV4dCBpbiB0aGUg
c3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKy0gKGlkKWluaXRXaXRoVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworLy8gRXZhbHVhdGUgYSBzdHJp
bmcgb2YgSmF2YVNjcmlwdCBjb2RlLgorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0
cmluZyAqKXNjcmlwdDsKKworLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgb2Jq
ZWN0IG9mIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorLy8gSW5zdGFuY2VzIG9m
IEpTQ29udGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVybiBhIHJlZmVyZW5j
ZSB0byB0aGUKKy8vIFdpbmRvd1Byb3h5IG9iamVjdC4KKy0gKEpTVmFsdWUgKilnbG9iYWxPYmpl
Y3Q7CisKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gT2JqZWN0
aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJhY2sgZnJvbSBKYXZh
U2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIGNvbnRleHQuIE91dHNpZGUgb2YKKy8v
IGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4K
KysgKEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0OworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNh
bGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAor
Ly8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNr
J3MgdGhpcyB2YWx1ZS4gT3V0c2lkZQorLy8gb2YgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQg
dGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoSlNWYWx1ZSAqKWN1cnJlbnRUaGlzOwor
Ly8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBi
bG9jayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQg
dG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgYXJndW1lbnRzLCBvYmplY3RzCisvLyBpbiB0aGUg
cmV0dXJuZWQgYXJyYXkgYXJlIGluc3RhbmNlcyBvZiBKU1ZhbHVlLiBPdXRzaWRlIG9mIGEgY2Fs
bGJhY2sgZnJvbQorLy8gSmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisr
IChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50czsKKworLy8gVGhlICJleGNlcHRpb24iIHByb3Bl
cnR5IG1heSBiZSB1c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0byBKYXZhU2NyaXB0LgorLy8g
QmVmb3JlIGEgY2FsbGJhY2sgaXMgbWFkZSBmcm9tIEphdmFTY3JpcHQgdG8gYW4gT2JqZWN0aXZl
LUMgYmxvY2sgb3IgbWV0aG9kLAorLy8gdGhlIHByaW9yIHZhbHVlIG9mIHRoZSBleGNlcHRpb24g
cHJvcGVydHkgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIHRoZSBwcm9wZXJ0eQorLy8gd2lsbCBiZSBz
ZXQgdG8gbmlsLiBBZnRlciB0aGUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCB0aGUgbmV3IHZhbHVl
IG9mIHRoZQorLy8gZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcmVhZCwgYW5kIHByaW9yIHZh
bHVlIHJlc3RvcmVkLiBJZiB0aGUgbmV3IHZhbHVlCisvLyBvZiBleGNlcHRpb24gaXMgbm90IG5p
bCwgdGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIHRoYXQgdmFsdWUgYmVpbmcgdGhyb3duLgor
Ly8gVGhpcyBwcm9wZXJ0eSBtYXkgYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZvciB1bmNhdWdodCBl
eGNlcHRpb25zIGFyaXNpbmcgZnJvbQorLy8gQVBJIGZ1bmN0aW9uIGNhbGxzIChzaW5jZSB0aGUg
ZGVmYXVsdCBiZWhhdmlvdXIgb2YgImV4Y2VwdGlvbkhhbmRsZXIiIGlzIHRvCisvLyBhc3NpZ24g
YW50IHVuY2F1Z2h0IGV4Y2VwdGlvbiB0byB0aGlzIHByb3BlcnR5KS4KKy8vIElmIGEgSlNWYWx1
ZSBvcmdpbmF0aW5nIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGluZSB0aGlzIHRoaXMg
Y29udGV4dAorLy8gaXMgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSwgYW4gT2JqZWN0aXZlLUMg
ZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorQHByb3BlcnR5KHJldGFpbikgSlNWYWx1ZSAqZXhj
ZXB0aW9uOworCisvLyBJZiBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uIHJlc3VsdHMgaW4gYW4g
dW5jYXVnaHQgSmF2YVNjcmlwdCBleGNlcHRpb24sIHRoZQorLy8gImV4Y2VwdGlvbkhhbmRsZXIi
IGJsb2NrIHdpbGwgYmUgaW52b2tlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHRo
ZQorLy8gZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzdG9yZSB0aGUgZXhjZXB0aW9uIHRvIHRoZSBl
eGNlcHRpb24gcHJvcGVydHkgb24KKy8vIGNvbnRleHQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIGRl
ZmF1bHQgYmVoYXZpb3VyIGlzIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucworLy8gb2NjdXJpbmcg
d2l0aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhyb3duIHVwb24gcmV0
dXJuLgorLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3VsdCBpbiBhbGwgdW5j
YXVnaHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQorLy8gdGhlIEFQSSBiZWluZyBzaWxlbnRseSBj
b25zdW1lZC4KK0Bwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5kbGVyKShKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CisKKy8vIEFsbCBpbnN0YW5jZXMgb2Yg
SlNDb250ZXh0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgSlNWaXJ0dWFsTWFjaGluZS4g
VGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUgcHJvdmlkZXMgYW4gIm9iamVjdCBzcGFjZSIgb3Igc2V0
IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuCitAcHJvcGVydHkocmVhZG9ubHksIHJldGFpbikgSlNW
aXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmU7CisKK0BlbmQKKworLy8gSW5zdGFuY2VzIG9m
IEpTQ29udGV4dCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIG9yZGVyIHRvIGVu
YWJsZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkgYW5kIGluZGV4LCBm
b3IgZXhhbXBsZToKKy8vCisvLyAgICBKU0NvbnRleHQgKmNvbnRleHQ7CisvLyAgICBKU1ZhbHVl
ICp2ID0gY29udGV4dFtAIlgiXTsgLy8gR2V0IHZhbHVlIGZvciAiWCIgZnJvbSB0aGUgZ2xvYmFs
IG9iamVjdC4KKy8vICAgIGNvbnRleHRbQCJZIl0gPSB2OyAgICAgICAgICAvLyBBc3NpZ24gJ3Yn
IHRvICJZIiBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vCisvLyBBbiBvYmplY3Qga2V5IHBhc3Nl
ZCBhcyBhIHN1YnNjcmlwdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEphdmFTY2lwdCB2YWx1ZSwK
Ky8vIGFuZCB0aGVuIHRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdXNlZCB0byByZXNv
bHZlIGEgcHJvcGVydHkgb2YgdGhlCisvLyBnbG9iYWwgb2JqZWN0LgorQGludGVyZmFjZSBKU0Nv
bnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vi
c2NyaXB0OihpZClrZXk7CistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vi
c2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNp
bmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPG9iamMvb2JqYy1pbnRlcm5hbC5oPgorCisjaWYg
SlNfT0JKQ19BUElfRU5BQkxFRAorCit0eXBlZGVmIFdURjo6SGFzaE1hcDxKU1ZhbHVlUmVmLCBz
aXplX3Q+IFByb3RlY3RNYXA7CisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgeworICAgIEpT
VmlydHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNHbG9iYWxDb250ZXh0UmVm
IG1fY29udGV4dDsKKyAgICBKU1dyYXBwZXJNYXAgKm1fd3JhcHBlck1hcDsKKyAgICBQcm90ZWN0
TWFwIG1fcHJvdGVjdGVkOworfQorCitAc3ludGhlc2l6ZSBleGNlcHRpb247CitAc3ludGhlc2l6
ZSBleGNlcHRpb25IYW5kbGVyOworCistIChpZClpbml0Cit7CisgICAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmlydHVhbE1hY2hpbmU6W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdXTsKK30KKworLSAoaWQpaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFs
TWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lCit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV92
aXJ0dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRhaW5dOworICAgIG1fY29udGV4dCA9
IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUo
dmlydHVhbE1hY2hpbmUpLCAwKTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBh
bGxvY10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRpb24gPSBuaWw7
CisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFs
dWUgKmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0
aW9uVmFsdWU7CisgICAgfTsKKworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCistIChKU1Zh
bHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0Cit7CisgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb25WYWx1ZSA9IDA7CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0SlMgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpc2NyaXB0KTsKKyAgICBKU1ZhbHVlUmVm
IHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUywgMCwgMCwgMCwg
JmV4Y2VwdGlvblZhbHVlKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0SlMpOworCisgICAg
aWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5
RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworfQorCistIChKU1ZhbHVlICopZ2xvYmFs
T2JqZWN0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChtX2NvbnRleHQpIGluQ29udGV4dDpzZWxmXTsKK30KKworKyAoSlNDb250
ZXh0ICopY3VycmVudENvbnRleHQKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0g
d3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAoQ2FsbGJhY2tEYXRh
ICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvbnRl
eHQgOiBuaWw7Cit9CisKKysgKEpTVmFsdWUgKiljdXJyZW50VGhpcworeworICAgIFdURlRocmVh
ZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJhY2tEYXRhICpl
bnRyeSA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKworICAgIGlmICgh
ZW50cnktPmN1cnJlbnRUaGlzKQorICAgICAgICBlbnRyeS0+Y3VycmVudFRoaXMgPSBbW0pTVmFs
dWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6ZW50cnktPnRoaXNWYWx1ZSBpbkNvbnRleHQ6W0pTQ29u
dGV4dCBjdXJyZW50Q29udGV4dF1dOworCisgICAgcmV0dXJuIGVudHJ5LT5jdXJyZW50VGhpczsK
K30KKworKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRh
JiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkg
PSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBpZiAoIWVudHJ5
LT5jdXJyZW50QXJndW1lbnRzKSB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0Nv
bnRleHQgY3VycmVudENvbnRleHRdOworICAgICAgICBzaXplX3QgY291bnQgPSBlbnRyeS0+YXJn
dW1lbnRDb3VudDsKKyAgICAgICAgSlNWYWx1ZSAqIGFyZ3NbY291bnRdOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0wOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3NbaV0gPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTplbnRyeS0+YXJndW1lbnRzW2ldIGluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgZW50cnktPmN1cnJlbnRBcmd1bWVudHMgPSBbW05TQXJyYXkgYWxsb2NdIGlu
aXRXaXRoT2JqZWN0czphcmdzIGNvdW50OmNvdW50XTsKKyAgICB9CisKKyAgICByZXR1cm4gZW50
cnktPmN1cnJlbnRBcmd1bWVudHM7Cit9CisKKy0gKEpTVmlydHVhbE1hY2hpbmUqKXZpcnR1YWxN
YWNoaW5lCit7CisgICAgcmV0dXJuIG1fdmlydHVhbE1hY2hpbmU7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQorCistIChKU1ZhbHVlICop
b2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleQoreworICAgIHJldHVybiBbc2VsZiBnbG9i
YWxPYmplY3RdW2tleV07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5
ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIFtzZWxmIGdsb2JhbE9iamVj
dF1ba2V5XSA9IG9iamVjdDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0
KEludGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChK
U0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fY29udGV4dDsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm1fYXBpRGF0YSA9IDA7CisKKyAgICBQcm90ZWN0TWFwOjppdGVyYXRvciBpdGVy
YXRvciA9IG1fcHJvdGVjdGVkLmJlZ2luKCk7CisgICAgUHJvdGVjdE1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9wcm90ZWN0ZWQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVy
YXRvcikKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIGl0ZXJhdG9yLT5rZXkp
OworCisgICAgW21fd3JhcHBlck1hcCByZWxlYXNlXTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWxl
YXNlKG1fY29udGV4dCk7CisgICAgW21fdmlydHVhbE1hY2hpbmUgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZill
eGNlcHRpb25WYWx1ZQoreworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxmLCBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2VsZl0pOworfQorCist
IChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlv
blZhbHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OnNlbGZdOworfQor
CistIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvblZh
bHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICBy
ZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0Rh
dGEgKiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVu
dENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYg
Kilhcmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFk
RGF0YSgpOworICAgIFtzZWxmIHJldGFpbl07CisgICAgQ2FsbGJhY2tEYXRhICpwcmV2U3RhY2sg
PSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgKmNhbGxiYWNrRGF0
YSA9IChDYWxsYmFja0RhdGEpeyBwcmV2U3RhY2ssIHNlbGYsIFtzZWxmLmV4Y2VwdGlvbiByZXRh
aW5dLCB0aGlzVmFsdWUsIG5pbCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBuaWwgfTsKKyAg
ICB0aHJlYWREYXRhLm1fYXBpRGF0YSA9IGNhbGxiYWNrRGF0YTsKKyAgICBzZWxmLmV4Y2VwdGlv
biA9IG5pbDsKK30KKworLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEg
KiljYWxsYmFja0RhdGEKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhy
ZWFkRGF0YSgpOworICAgIHNlbGYuZXhjZXB0aW9uID0gY2FsbGJhY2tEYXRhLT5wcmVzZXJ2ZWRF
eGNlcHRpb247CisgICAgW2NhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0aW9uIHJlbGVhc2Vd
OworICAgIFtjYWxsYmFja0RhdGEtPmN1cnJlbnRUaGlzIHJlbGVhc2VdOworICAgIFtjYWxsYmFj
a0RhdGEtPmN1cnJlbnRBcmd1bWVudHMgcmVsZWFzZV07CisgICAgdGhyZWFkRGF0YS5tX2FwaURh
dGEgPSBjYWxsYmFja0RhdGEtPm5leHQ7CisgICAgW3NlbGYgcmVsZWFzZV07Cit9CisKKy0gKHZv
aWQpcHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIC8vIExvY2sgYWNjZXNzIHRvIG1f
cHJvdGVjdGVkCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOwor
CisgICAgUHJvdGVjdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcHJvdGVjdGVkLmFkZCh2YWx1
ZSwgMSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBKU1ZhbHVlUHJvdGVj
dChtX2NvbnRleHQsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKK30KKworLSAodm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUKK3sKKyAg
ICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RlZAorICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2sodG9KUyhtX2NvbnRleHQpKTsKKworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9wcm90ZWN0ZWQuZmluZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZSA9PSAx
KSB7CisgICAgICAgIG1fcHJvdGVjdGVkLnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QobV9jb250ZXh0LCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIC0taXRlcmF0
b3ItPnZhbHVlOworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0
Cit7CisgICAgLy8gTG9jayBhY2Nlc3MgdG8gbV93cmFwcGVyTWFwCisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworICAgIHJldHVybiBbbV93cmFwcGVyTWFwIHdy
YXBwZXJGb3JPYmplY3Q6b2JqZWN0XTsKK30KKworQGVuZAorCitXZWFrQ29udGV4dFJlZjo6V2Vh
a0NvbnRleHRSZWYoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfaW5pdFdlYWsoJm1f
d2Vha0NvbnRleHQsIGNvbnRleHQpOworfQorCitXZWFrQ29udGV4dFJlZjo6fldlYWtDb250ZXh0
UmVmKCkKK3sKKyAgICBvYmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsKK30KKworSlND
b250ZXh0ICogV2Vha0NvbnRleHRSZWY6OmdldCgpCit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdl
YWsoJm1fd2Vha0NvbnRleHQpOworfQorCit2b2lkIFdlYWtDb250ZXh0UmVmOjpzZXQoSlNDb250
ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfc3RvcmVXZWFrKCZtX3dlYWtDb250ZXh0LCBjb250
ZXh0KTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVE
CisKKyNpbXBvcnQgIkpTQ29udGV4dC5oIgorCitzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBD
YWxsYmFja0RhdGEgKm5leHQ7CisgICAgSlNDb250ZXh0ICpjb250ZXh0OworICAgIEpTVmFsdWUg
KnByZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHRoaXNWYWx1ZTsKKyAgICBKU1Zh
bHVlICpjdXJyZW50VGhpczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudDsKKyAgICBjb25zdCBK
U1ZhbHVlUmVmICphcmd1bWVudHM7CisgICAgTlNBcnJheSAqY3VycmVudEFyZ3VtZW50czsKK307
CisKK2NsYXNzIFdlYWtDb250ZXh0UmVmIHsKK3B1YmxpYzoKKyAgICBXZWFrQ29udGV4dFJlZihK
U0NvbnRleHQqID0gbmlsKTsKKyAgICB+V2Vha0NvbnRleHRSZWYoKTsKKworICAgIEpTQ29udGV4
dCAqIGdldCgpOworICAgIHZvaWQgc2V0KEpTQ29udGV4dCopOworCitwcml2YXRlOgorICAgIEpT
Q29udGV4dCAqbV93ZWFrQ29udGV4dDsKK307CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0KEludGVy
bmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0NvbnRl
eHQgKik7CisKKy0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbjsK
Ky0gKEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0
aW9uOworLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRp
b247CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxs
YmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVudENvdW50Oihz
aXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYgKilhcmd1bWVu
dHM7CistICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNr
RGF0YTsKKworLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworLSAodm9pZCl1bnBy
b3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWU7CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0
OihpZClvYmplY3Q7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTRXhwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0V4cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworLy8gV2hlbiBhbiBKYXZhU2NyaXB0IHZhbHVlIGlz
IGNyZWF0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhbiBPYmplY3RpdmUtQyBjbGFzcworLy8gZm9y
IHdoaWNoIG5vIGNvcHlpbmcgY29udmVyc2lvbiBpcyBzcGVjaWZpZWQgYSBKYXZhU2NyaXB0IHdy
YXBwZXIgb2JqZWN0IHdpbGwKKy8vIGJlIGNyZWF0ZWQuCisvLworLy8gSW4gSmF2YVNjcmlwdCBp
bmhlcml0YW5jZSBpcyBzdXBwb3J0ZWQgdmlhIGEgY2hhaW4gb2YgcHJvdG90eXBlIG9iamVjdHMs
IGFuZAorLy8gZm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MgKGFuZCBwZXIgSlNDb250ZXh0KSBh
biBvYmplY3QgYXBwcm9wcmlhdGUgZm9yIHVzZQorLy8gYXMgYSBwcm90b3R5cGUgd2lsbCBiZSBw
cm92aWRlZC4gRm9yIHRoZSBjbGFzcyBOU09iamVjdCB0aGUgcHJvdG90eXBlIG9iamVjdAorLy8g
d2lsbCBiZSB0aGUgSmF2YVNjcmlwdCBjb250ZXh0J3MgT2JqZWN0IFByb3RvdHlwZS4gRm9yIGFs
bCBvdGhlciBPYmplY3RpdmUtQworLy8gY2xhc3NlcyBhIFByb3RvdHlwZSBvYmplY3Qgd2lsbCBi
ZSBjcmVhdGVkLiBUaGUgUHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbgorLy8gT2JqZWN0aXZl
LUMgY2xhc3Mgd2lsbCBoYXZlIGl0cyBpbnRlcm5hbCBbUHJvdG90eXBlXSBwcm9wZXJ0eSBzZXQg
dG8gcG9pbnQgdG8KKy8vIHRoZSBQcm90b3R5cGUgb2JqZWN0IG9mIHRoZSBPYmplY3RpdmUtQyBj
bGFzcydzIHN1cGVyY2xhc3MuIEFzIHN1Y2ggdGhlCisvLyBwcm90b3R5cGUgY2hhaW4gZm9yIGEg
SmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCB3aWxsIHJlZmxlY3QgdGhlIHdyYXBwZWQKKy8vIE9i
amVjdGl2ZS1DIHR5cGUncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisvLworLy8gSW4gYWRkaXRp
b24gdG8gdGhlIFByb3RvdHlwZSBvYmplY3QgYSBKYXZhU2NyaXB0IENvbnN0cnVjdG9yIG9iamVj
dCB3aWxsIGFsc28KKy8vIGJlIHByb2R1Y2VkIGZvciBlYWNoIE9iamVjdGl2ZS1DIGNsYXNzLiBU
aGUgQ29uc3RydWN0b3Igb2JqZWN0IGhhcyBhIHByb3BlcnR5CisvLyBuYW1lZCAncHJvdG90eXBl
JyB0aGF0IHJlZmVyZW5jZXMgdGhlIFByb3RvdHlwZSBvYmplY3QsIGFuZCB0aGUgUHJvdG90eXBl
CisvLyBvYmplY3QgaGFzIGEgcHJvcGVydHkgbmFtZWQgJ2NvbnN0cnVjdG9yJyB0aGF0IHJlZmVy
ZW5jZXMgdGhlIENvbnN0cnVjdG9yLgorLy8gVGhlIENvbnN0cnVjdG9yIG9iamVjdCBpcyBub3Qg
Y2FsbGFibGUuCisvLworLy8gQnkgZGVmYXVsdCBubyBtZXRob2RzIG9yIHByb3BlcnRpZXMgb2Yg
dGhlIE9iamVjdGl2ZS1DIGNsYXNzIHdpbGwgYmUgZXhwb3NlZAorLy8gdG8gSmF2YVNjcmlwdCwg
aG93ZXZlciBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIG1heSBleHBsaWNpdGx5IGJlIGV4cG9ydGVk
LgorLy8gRm9yIGVhY2ggcHJvdG9jb2wgdGhhdCBhIGNsYXNzIGNvbmZvcm1zIHRvLCBpZiB0aGUg
cHJvdG9jb2wgaW5jb3Jwb3JhdGVzIHRoZQorLy8gcHJvdG9jb2wgSlNFeHBvcnQsIHRoZW4gdGhl
IHByb3RvY29sIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIG1ldGhvZHMKKy8vIGFu
ZCBwcm9wZXJ0aWVzIHRvIGJlIGV4cG9ydGVkIHRvIEphdmFTY3JpcHQuCisvLworLy8gRm9yIGVh
Y2ggaW5zdGFuY2UgbWV0aG9kIGJlaW5nIGV4cG9ydGVkLCBhIGNvcnJlc3BvbmRpbmcgSmF2YVNj
cmlwdCBmdW5jdGlvbgorLy8gd2lsbCBiZSBhc3NpZ25lZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBQ
cm90b3R5cGUgb2JqZWN0LCBmb3IgZWFjaCBPYmplY3RpdmUtQworLy8gcHJvcGVydHkgYmVpbmcg
ZXhwb3J0ZWQgYSBKYXZhU2NyaXB0IGFjY2Vzc29yIHByb3BlcnR5IHdpbGwgYmUgY3JlYXRlZCBv
biB0aGUKKy8vIFByb3RvdHlwZSwgYW5kIGZvciBlYWNoIGNsYXNzIG1ldGhvZCBleHBvcnRlZCBh
IEphdmFTY3JpcHQgZnVuY3Rpb24gd2lsbCBiZQorLy8gY3JlYXRlZCBvbiB0aGUgQ29uc3RydWN0
b3Igb2JqZWN0LiBGb3IgZXhhbXBsZToKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlDbGFzc0phdmFT
Y3JpcHRNZXRob2RzIDxKU0V4cG9ydD4KKy8vICAgIC0gKHZvaWQpZm9vOworLy8gICAgQGVuZAor
Ly8KKy8vICAgIEBpbnRlcmZhY2UgTXlDbGFzcyA6IE5TT2JqZWN0IDxNeUNsYXNzSmF2YVNjcmlw
dE1ldGhvZHM+CisvLyAgICAtICh2b2lkKWZvbzsKKy8vICAgIC0gKHZvaWQpYmFyOworLy8gICAg
QGVuZAorLy8KKy8vIElmIGFuIGluc3RhbmNlIG9mIE15Q2xhc3MgaXMgY29udmVydGVkIHRvIGEg
SmF2YVNjcmlwdCB2YWx1ZSwgdGhlIHJlc3VsdGluZworLy8gd3JhcHBlciBvYmplY3Qgd2lsbCAo
dmlhIGl0cyBwcm90b3R5cGUpIGV4cG9ydCB0aGUgbWV0aG9kICJmb28iIHRvIEphdmFTY3JpcHQs
CisvLyBzaW5jZSB0aGUgY2xhc3MgY29uZm9ybXMgdG8gdGhlIE15Q2xhc3NKYXZhU2NyaXB0RXhw
b3J0cyBwcm90b2NvbCwgYW5kIHRoaXMKKy8vIHByb3RvY29sIGluY29ycG9yYXRlcyBKU0V4cG9y
dC4gImJhciIgd2lsbCBub3QgYmUgZXhwb3J0ZWQuCisvLworLy8gUHJvcGVydGllcywgYXJndW1l
bnRzLCBhbmQgcmV0dXJuIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIGFyZQorLy8gc3Vw
cG9ydGVkOgorLy8KKy8vIFByaW1pdGl2ZSBudW1iZXJzOiBzaWduZWQgdmFsdWVzIG9mIHVwIHRv
IDMyLWJpdHMgYXJlIGNvbnZlcnRlZCBpbiBhIG1hbm5lcgorLy8gICAgY29uc2lzdGVudCB3aXRo
IHZhbHVlV2l0aEludDMyL3RvSW50MzIsIHVuc2lnbmVkIHZhbHVlcyBvZiB1cCB0byAzMi1iaXRz
CisvLyAgICBhcmUgY29udmVydGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB2YWx1ZVdp
dGhVSW50MzIvdG9VSW50MzIsIGFsbAorLy8gICAgb3RoZXIgbnVtZXJpYyB2YWx1ZXMgYXJlIGNv
bnZlcnRlZCBjb25zaXN0ZW50bHkgd2l0aCB2YWx1ZVdpdGhEb3VibGUvCisvLyAgICB0b0RvdWJs
ZS4KKy8vIEJPT0w6IHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRoIHZhbHVl
V2l0aEJvb2wvdG9Cb29sLgorLy8gaWQ6IHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRs
eSB3aXRoIHZhbHVlV2l0aE9iamVjdC90b09iamVjdC4KKy8vIDxPYmplY3RpdmUtQyBDbGFzcz46
IC0gd2hlcmUgdGhlIHR5cGUgaXMgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWVkIE9iamVjdGl2ZS1D
CisvLyAgICBjbGFzcywgY29udmVyc2lvbiBpcyBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoT2Jq
ZWN0T2ZDbGFzcy90b09iamVjdC4KKy8vIHN0cnVjdCB0eXBlczogQyBzdHJ1Y3QgdHlwZXMgYXJl
IHN1cHBvcnRlZCwgd2hlcmUgSlNWYWx1ZSBwcm92aWRlcyBzdXBwb3J0CisvLyAgICBmb3IgdGhl
IGdpdmVuIHR5cGUuIFN1cHBvcnQgaXMgYnVpbHQgaW4gZm9yIENHUG9pbnQsIE5TUmFuZ2UsIENH
UmVjdCwgYW5kCisvLyAgICBDR1NpemU7IHNlZSBKU1ZhbHVlU3RydWN0U3VwcG9ydC5oIGZvciBp
bmZvcm1hdGlvbiBvbiBob3cgdG8gYWRkIHN1cHBvcnQKKy8vICAgIGZvciBhZGRpdGlvbmFsIHR5
cGVzLgorLy8gYmxvY2sgdHlwZXM6IEluIGFkZGl0aW9uIHRvIHN1cHBvcnQgcHJvdmlkZWQgYnkg
dmFsdWVXaXRoT2JqZWN0L3RvT2JqZWN0IGZvcgorLy8gICAgYmxvY2sgdHlwZXMsIGlmIGEgSmF2
YVNjcmlwdCBGdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHdoZXJlIHRoZQorLy8g
ICAgdHlwZSByZXF1aXJlZCBpcyBhIGJsb2NrIHdpdGggYSB2b2lkIHJldHVybiB2YWx1ZSAoYW5k
IHdoZXJlIHRoZSBibG9jaydzCisvLyAgICBhcmd1bWVudHMgYXJlIGFsbCBvZiBzdXBwb3J0ZWQg
dHlwZXMpLCB0aGVuIGEgc3BlY2lhbCBhZGFwdG9yIGJsb2NrCisvLyAgICB3aWxsIGJlIGNyZWF0
ZWQsIGFsbG93aW5nIHRoZSB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byBiZSB1c2VkIGluIHRo
ZQorLy8gICAgcGxhY2Ugb2YgYSBibG9jay4KKy8vCisvLyBGb3IgYW55IGludGVyZmFjZSB0aGF0
IGNvbmZvcm1zIHRvIEpTRXhwb3J0IHRoZSBub3JtYWwgY29weWluZyBjb252ZXJzaW9uIGZvcgor
Ly8gYnVpbHQgaW4gdHlwZXMgd2lsbCBiZSBpbmhpYml0ZWQgLSBzbywgZm9yIGV4YW1wbGUsIGlm
IGFuIGluc3RhbmNlIHRoYXQKKy8vIGRlcml2ZXMgZnJvbSBOU1N0cmluZyBieSBjb25mb3JtcyB0
byBKU0V4cG9ydCBpcyBwYXNzZWQgdG8gdmFsdWVXaXRoT2JqZWN0OiwKKy8vIGEgd3JhcHBlciBv
YmplY3QgZm9yIHRoZSBPYmplY3RpdmUtQyBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCByYXRoZXIg
dGhhbiBhCisvLyBKYXZhU2NyaXB0IHN0cmluZyBwcmltaXRpdmUuCitAcHJvdG9jb2wgSlNFeHBv
cnQKK0BlbmQKKworLy8gV2hlbiBhIHNlbGVjdG9yIHRoYXQgdGFrZXMgb25lIG9yIG1vcmUgYXJn
dW1lbnRzIGlzIGNvbnZlcnRlZCB0byBhIEphdmFTY3JpcHQKKy8vIHByb3BlcnR5IG5hbWUsIGJ5
IGRlZmF1bHQgYSBwcm9wZXJ0eSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHBlcmZvcm1pbmcg
dGhlCisvLyBmb2xsb3dpbmcgY29udmVyc2lvbjoKKy8vICAtIEFsbCBzZW1pY29sb25zIGFyZSBy
ZW1vdmVkIGZyb20gdGhlIHNlbGVjdG9yCisvLyAgLSBBbnkgbG93ZXJjYXNlIGxldHRlciB0aGF0
IGhhZCBmb2xsb3dlZCBhIHNlbWljb2xvbiB3aWxsIGJlIGNhcGl0YWxpemVkLgorLy8gVW5kZXIg
dGhlIGRlZmF1bHQgY29udmVyc2lvbiBhIHNlbGVjdG9yICJkb0Zvbzp3aXRoQmFyOiIgd2lsbCBi
ZSBleHBvcnRlZCBhcworLy8gImRvRm9vV2l0aEJhciIuIFRoZSBkZWZhdWx0IGNvbnZlcnNpb24g
bWF5IGJlIG92ZXJyaWRlbiB1c2luZyB0aGUgSlNFeHBvcnRBcworLy8gbWFjcm8sIGZvciBleGFt
cGxlIHRvIGV4cG9ydCBhIG1ldGhvZCAiZG9Gb286d2l0aEJhcjoiIGFzICJkb0ZvbyI6CisvLwor
Ly8gICAgQHByb3RvY29sIE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcyA8SlNFeHBvcnQ+CisvLyAg
ICBKU0V4cG9ydEFzKGRvRm9vLAorLy8gICAgLSAodm9pZClkb0ZvbzooaWQpZm9vIHdpdGhCYXI6
KGlkKWJhcgorLy8gICAgKTsKKy8vICAgIEBlbmQKKy8vCisvLyBOb3RlIHRoYXQgdGhlIEpTRXhw
b3J0IG1hY3JvIG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzZWxlY3RvciB0aGF0IHRha2VzIG9u
ZQorLy8gb3IgbW9yZSBhcmd1bWVudC4KKyNkZWZpbmUgSlNFeHBvcnRBcyhQcm9wZXJ0eU5hbWUs
IFNlbGVjdG9yKSBcCisgICAgQG9wdGlvbmFsIFNlbGVjdG9yIF9fSlNfRVhQT1JUX0FTX18jI1By
b3BlcnR5TmFtZTooaWQpYXJndW1lbnQ7IEByZXF1aXJlZCBTZWxlY3RvcgorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJBUElTaGlt
cy5oIgorI2ltcG9ydCAiRGF0ZUluc3RhbmNlLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9y
dCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1w
b3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJh
cy5oIgorI2ltcG9ydCAiSlNWYWx1ZS5oIgorI2ltcG9ydCAid3RmL0hhc2hNYXAuaCIKKyNpbXBv
cnQgInd0Zi9IYXNoU2V0LmgiCisjaW1wb3J0ICJ3dGYvVmVjdG9yLmgiCisjaW1wb3J0IDx3dGYv
VENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL3RleHQvV1RGU3RyaW5nLmgiCisjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW1wb3J0ICJvYmpjL29iamMtaW50ZXJuYWwuaCIKKwor
I2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVz
Y3JpcHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJv
cGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CitOU1N0cmluZyAq
IGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5ID0gQCJjb25maWd1cmFi
bGUiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5ID0gQCJ2
YWx1ZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5ID0gQCJn
ZXQiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleSA9IEAic2V0
IjsKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUgeworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsK
KyAgICBKU0NvbnRleHQgKm1fd2Vha0NvbnRleHQ7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdp
dGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAg
IHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZh
bHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDoo
Qk9PTCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoRG91YmxlOihkb3VibGUpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVN
YWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRl
eHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFs
dWVXaXRoVUludDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRl
eHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1i
ZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250
ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNP
YmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApIGluQ29udGV4
dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTpKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBO
VUxMLCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3
UmVndWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihO
U1N0cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIEpT
U3RyaW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpcGF0dGVybik7CisgICAgSlNTdHJpbmdSZWYgZmxhZ3NTdHJpbmcgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpZmxhZ3MpOworICAgIEpTVmFsdWVSZWYg
YXJndW1lbnRzWzJdID0geyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBwYXR0ZXJuU3RyaW5nKSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgZmxhZ3NTdHJpbmcpIH07CisgICAgSlNTdHJpbmdSZWxlYXNl
KHBhdHRlcm5TdHJpbmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShmbGFnc1N0cmluZyk7CisKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlUmVnRXhwKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDIsIGFyZ3VtZW50cywgMCkgaW5Db250ZXh0OmNv
bnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICBK
U1N0cmluZ1JlZiBzdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdS
ZWYpbWVzc2FnZSk7CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAgSlNTdHJpbmdS
ZWxlYXNlKHN0cmluZyk7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNP
YmplY3RNYWtlRXJyb3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3Vt
ZW50LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTnVs
bEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bGwoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVuZGVm
aW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKGlkKXRvT2JqZWN0Cit7
CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIG1fdmFsdWUpOworfQorLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHMKK3sKKyAg
ICBpZCByZXN1bHQgPSBbc2VsZiB0b09iamVjdF07CisgICAgcmV0dXJuIFtyZXN1bHQgaXNLaW5k
T2ZDbGFzczpjbHNdID8gcmVzdWx0IDogbmlsOworfQorCistIChCT09MKXRvQm9vbAoreworICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4
dCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoZG91YmxlKXRvRG91YmxlCit7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChpbnQz
Ml90KXRvSW50MzIKK3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKFtzZWxmIHRvRG91YmxlXSk7
Cit9CistICh1aW50MzJfdCl0b1VJbnQzMgoreworICAgIHJldHVybiBKU0M6OnRvVUludDMyKFtz
ZWxmIHRvRG91YmxlXSk7Cit9CistIChOU051bWJlciAqKXRvTnVtYmVyCit7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJl
c3VsdCA9IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92
YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQg
bm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5T
U3RyaW5nICopdG9TdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9u
XTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNEYXRlICopdG9EYXRlCit7CisgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlk
IHJlc3VsdCA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0
IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChO
U0FycmF5ICopdG9BcnJheQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvQXJyYXkoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TRGljdGlvbmFyeSAqKXRvRGljdGlvbmFyeQor
eworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQor
ICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCistIChKU1ZhbHVlICopdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilw
cm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU1Zh
bHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVh
c2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZh
bHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistICh2b2lkKXNl
dFZhbHVlOihpZCl2YWx1ZSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sK
KyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAg
ICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikg
eworICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdp
dGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU09iamVjdFNldFBy
b3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgb2Jq
ZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5n
UmVsZWFzZShuYW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0IG5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorfQorLSAo
Qk9PTClkZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisK
KyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKXByb3BlcnR5TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdERlbGV0ZVBy
b3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4
Y2VwdGlvbikgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9PTCloYXNQcm9w
ZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsK
KworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250
ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1Jl
ZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5
TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSkgPyBZRVMgOiBOTzsKKyAgICBKU1N0
cmluZ1JlbGVhc2UobmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKHZvaWQpZGVmaW5l
UHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHkgZGVzY3JpcHRvcjooaWQpZGVzY3JpcHRvcgor
eworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIFtbY29udGV4dCBnbG9iYWxPYmplY3RdW0AiT2Jq
ZWN0Il0gaW52b2tlTWV0aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVudHM6QFsgc2Vs
ZiwgcHJvcGVydHksIGRlc2NyaXB0b3IgXV07Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUF0SW5k
ZXg6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBj
b250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBp
ZiAoaW5kZXggIT0gKHVuc2lnbmVkKWluZGV4KQorICAgICAgICBbc2VsZiB2YWx1ZUZvclByb3Bl
cnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRv
U3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RS
ZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJl
dHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAg
IEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsICZleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAodm9pZClzZXRWYWx1
ZTooaWQpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHNldFZhbHVlOnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3Vi
bGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdFNldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsICh1bnNp
Z25lZClpbmRleCwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNVbmRlZmlu
ZWQKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1
cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051bGwKK3sKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRl
eHQgJiYgSlNWYWx1ZUlzTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3Zh
bHVlKSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNCb29sZWFuCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFs
dWVJc0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8g
WUVTIDogTk87Cit9CistIChCT09MKWlzTnVtYmVyCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc051bWJl
cihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsK
K30KKy0gKEJPT0wpaXNTdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBj
b250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9P
TClpc09iamVjdAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOwor
ICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CisKKy0gKEJPT0wpaXNFcXVh
bFRvT2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNv
bnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0
dXJuIEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCks
IG1fdmFsdWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpKSA/IFlFUyA6IE5POworfQor
LSAoQk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQoreworICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAg
IEJPT0wgcmVzdWx0ID0gSlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24p
ID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0
IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZhbHVlCit7CisgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gTk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYg
Y29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpleGNlcHRpb25dOworCisgICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJbnN0YW5jZU9m
Q29uc3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgY29u
c3RydWN0b3IsICZleGNlcHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChKU1ZhbHVlICopY2FsbFdpdGhBcmd1bWVu
dHM6KE5TQXJyYXkgKilhcmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29u
dGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNV
SW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFsdWVSZWYgYXJn
dW1lbnRzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoY29u
dGV4dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRp
b246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIDAsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBcnJh
eSAqKWFyZ3MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJbnRlZ2VyIGFy
Z3VtZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbYXJn
dW1lbnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCBbYXJn
cyBvYmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAg
ICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikK
KyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25dOworCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
cihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0
dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07
Cit9CistIChKU1ZhbHVlICopaW52b2tlTWV0aG9kOihOU1N0cmluZyAqKW1ldGhvZCB3aXRoQXJn
dW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50cyBjb3VudF07CisgICAg
SlNWYWx1ZVJlZiBhcmdzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBvYmplY3RUb1ZhbHVl
KGNvbnRleHQsIFthcmd1bWVudHMgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgdGhpc09iamVjdCA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9t
Tm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNT
dHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7CisgICAgSlNWYWx1
ZVJlZiBmdW5jID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVh
c2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZh
bHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNPYmplY3RSZWYgb2Jq
ZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZ1
bmMsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29u
dGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVS
ZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1
ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU0NvbnRl
eHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQp
OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN0cnVjdFN1cHBvcnQpCisK
Ky0gKENHUG9pbnQpdG9Qb2ludAoreworICAgIHJldHVybiAoQ0dQb2ludCl7CisgICAgICAgIFtz
ZWxmW0AieCJdIHRvRG91YmxlXSwKKyAgICAgICAgW3NlbGZbQCJ5Il0gdG9Eb3VibGVdCisgICAg
fTsKK30KKworLSAoTlNSYW5nZSl0b1JhbmdlCit7CisgICAgcmV0dXJuIChOU1JhbmdlKXsKKyAg
ICAgICAgKE5TVUludGVnZXIpW3NlbGZbQCJsb2NhdGlvbiJdIHRvRG91YmxlXSwKKyAgICAgICAg
KE5TVUludGVnZXIpW3NlbGZbQCJsZW5ndGgiXSB0b0RvdWJsZV0KKyAgICB9OworfQorCistIChD
R1JlY3QpdG9SZWN0Cit7CisgICAgcmV0dXJuIChDR1JlY3QpeworICAgICAgICBbc2VsZiB0b1Bv
aW50XSwKKyAgICAgICAgW3NlbGYgdG9TaXplXQorICAgIH07Cit9CisKKy0gKENHU2l6ZSl0b1Np
emUKK3sKKyAgICByZXR1cm4gKENHU2l6ZSl7CisgICAgICAgIFtzZWxmW0Aid2lkdGgiXSB0b0Rv
dWJsZV0sCisgICAgICAgIFtzZWxmW0AiaGVpZ2h0Il0gdG9Eb3VibGVdCisgICAgfTsKK30KKwor
KyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6
QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBvaW50LnhdLAorICAg
ICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueV0KKyAgICB9IGluQ29u
dGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJhbmdlOihOU1Jhbmdl
KXJhbmdlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJsb2NhdGlvbiI6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpyYW5nZS5sb2NhdGlvbl0sCisgICAgICAgIEAibGVuZ3RoIjpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OnJhbmdlLmxlbmd0aF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0
XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0IGluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhP
YmplY3Q6QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJlY3Qub3Jp
Z2luLnhdLAorICAgICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmln
aW4ueV0sCisgICAgICAgIEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5z
aXplLndpZHRoXSwKKyAgICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
cmVjdC5zaXplLmhlaWdodF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAg
ICAgQCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLndpZHRoXSwKKyAgICAg
ICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWlnaHRdCisgICAg
fSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTVmFs
dWUoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2Ny
aXB0OihpZClrZXkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVsoTlNP
YmplY3QqKWtleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgIGtl
eSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0
cmluZ107CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKyAgICB9CisKKyAgICByZXR1cm4g
W3NlbGYgdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCistIChKU1ZhbHVl
ICopb2JqZWN0QXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgcmV0
dXJuIFtzZWxmIHZhbHVlQXRJbmRleDppbmRleF07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0Oihp
ZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFsdWVXaXRoT2Jq
ZWN0OmtleSBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBpZiAoIWtleSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBzZXRWYWx1ZTpvYmplY3Qg
Zm9yUHJvcGVydHk6KE5TU3RyaW5nICopa2V5XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlk
KW9iamVjdCBhdEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBbc2Vs
ZiBzZXRWYWx1ZTpvYmplY3QgYXRJbmRleDppbmRleF07Cit9CisKK0BlbmQKKworaW5saW5lIGJv
b2wgaXNEYXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQp
Cit7CisgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4dCkpOworICAg
IHJldHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6OkRhdGVJbnN0YW5jZTo6c19pbmZv
KTsKK30KKworaW5saW5lIGJvb2wgaXNBcnJheShKU09iamVjdFJlZiBvYmplY3QsIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0
b0pTKGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpK
U0FycmF5OjpzX2luZm8pOworfQorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShJbnRlcm5hbCkK
KworZW51bSBDb252ZXJzaW9uVHlwZSB7CisgICAgQ29udGFpbmVyTm9uZSwKKyAgICBDb250YWlu
ZXJBcnJheSwKKyAgICBDb250YWluZXJEaWN0aW9uYXJ5Cit9OworCitjbGFzcyBKU0NvbnRhaW5l
ckNvbnZlcnRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBKU1ZhbHVl
UmVmIGpzOworICAgICAgICBpZCBvYmpjOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOwor
ICAgIH07CisKKyAgICBKU0NvbnRhaW5lckNvbnZlcnRvcihKU0dsb2JhbENvbnRleHRSZWYgY29u
dGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAg
aWQgY29udmVydChKU1ZhbHVlUmVmIHByb3BlcnR5KTsKKyAgICB2b2lkIGFkZChUYXNrIHRhc2sp
OworICAgIFRhc2sgdGFrZSgpOworICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4g
IW1fd29ya2xpc3Quc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxDb250ZXh0UmVm
IG1fY29udGV4dDsKKyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1fb2JqZWN0TWFw
OworICAgIFdURjo6VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitpbmxpbmUgaWQgSlND
b250YWluZXJDb252ZXJ0b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBXVEY6
Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmplY3RNYXAuZmlu
ZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9vYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKKworICAgIFRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhv
dXRDb3B5KG1fY29udGV4dCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuanMpCisgICAgICAgIGFk
ZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQub2JqYzsKK30KKwordm9pZCBKU0NvbnRhaW5l
ckNvbnZlcnRvcjo6YWRkKFRhc2sgdGFzaykKK3sKKyAgICBtX29iamVjdE1hcC5hZGQodGFzay5q
cywgdGFzay5vYmpjKTsKKyAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5vbmUpCisgICAg
ICAgIG1fd29ya2xpc3QuYXBwZW5kKHRhc2spOworfQorCitKU0NvbnRhaW5lckNvbnZlcnRvcjo6
VGFzayBKU0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJUKCFpc1dvcmtM
aXN0RW1wdHkoKSk7CisgICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgbV93
b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBKU0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHkoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFKU1ZhbHVl
SXNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlkIHByaW1pdGl2ZTsKKyAgICAg
ICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgcHJp
bWl0aXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVTIDogQE5POwor
ICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKSB7CisgICAg
ICAgICAgICAvLyBOb3JtYWxpemUgdGhlIG51bWJlciwgc28gaXQgd2lsbCB1bmlxdWUgY29ycmVj
dGx5IGluIHRoZSBoYXNoIG1hcCAtCisgICAgICAgICAgICAvLyBpdCdzIG5pY2VyIG5vdCB0byBs
ZWFrIHRoaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIQorICAgICAgICAgICAgdmFs
dWUgPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
dmFsdWUsIDApKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCldOworICAgICAgICB9IGVs
c2UgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8v
IFdvdWxkIGJlIG5pY2UgdG8gdW5pcXVlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgICAgIEpTU3Ry
aW5nUmVmIGpzc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7
CisgICAgICAgICAgICBOU1N0cmluZyAqIHN0cmluZ05TID0gKE5TU3RyaW5nICopSlNTdHJpbmdD
b3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNzdHJpbmcpOworICAgICAgICAgICAg
SlNTdHJpbmdSZWxlYXNlKGpzc3RyaW5nKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtzdHJp
bmdOUyBhdXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzTnVsbChjb250
ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBwcmltaXRpdmUgPSBbTlNOdWxsIG51bGxdOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgdmFsdWUpKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IG5pbDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUsIHByaW1pdGl2
ZSwgQ29udGFpbmVyTm9uZSB9OworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CisKKyAgICBpZiAoaWQgd3JhcHBlZCA9
IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIChK
U0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgd3JhcHBlZCwgQ29udGFpbmVyTm9u
ZSB9OworCisgICAgaWYgKGlzRGF0ZShvYmplY3QsIGNvbnRleHQpKQorICAgICAgICByZXR1cm4g
KEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNEYXRlIGRhdGVXaXRoVGlt
ZUludGVydmFsU2luY2UxOTcwOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvYmplY3QsIDApXSwg
Q29udGFpbmVyTm9uZSB9OworCisgICAgaWYgKGlzQXJyYXkob2JqZWN0LCBjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgW05TTXV0
YWJsZUFycmF5IGFycmF5XSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgIHJldHVybiAoSlNDb250
YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rp
b25hcnldLCBDb250YWluZXJEaWN0aW9uYXJ5IH07Cit9CisKK3N0YXRpYyBpZCBjb250YWluZXJW
YWx1ZVRvT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0NvbnRhaW5lckNvbnZl
cnRvcjo6VGFzayB0YXNrKQoreworICAgIEFTU0VSVCh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9u
ZSk7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3IgY29udmVydG9yKGNvbnRleHQpOworICAgIGNv
bnZlcnRvci5hZGQodGFzayk7CisgICAgQVNTRVJUKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5
KCkpOworICAgIAorICAgIGRvIHsKKyAgICAgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sg
Y3VycmVudCA9IHRhc2sgPSBjb252ZXJ0b3IudGFrZSgpOworICAgICAgICBBU1NFUlQoSlNWYWx1
ZUlzT2JqZWN0KGNvbnRleHQsIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmplY3RSZWYganMg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY3VycmVudC5qcywgMCk7CisKKyAgICAgICAgaWYg
KGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAgICAgQVNTRVJUKFtj
dXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNNdXRhYmxlQXJyYXkgY2xhc3NdXSk7CisgICAg
ICAgICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSAoTlNNdXRhYmxlQXJyYXkgKiljdXJyZW50
Lm9iamM7CisgICAgICAgIAorICAgICAgICAgICAgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyaW5nID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gSlNDOjp0b1VJbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqcywgbGVuZ3RoU3RyaW5nLCAwKSwgMCkpOworICAg
ICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGxlbmd0aFN0cmluZyk7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlk
IG9iamMgPSBjb252ZXJ0b3IuY29udmVydChKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250
ZXh0LCBqcywgaSwgMCkpOworICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6b2JqYyA/
IG9iamMgOiBbTlNOdWxsIG51bGxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TTXV0YWJs
ZURpY3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpk
aWN0aW9uYXJ5ID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKiljdXJyZW50Lm9iamM7CisKKyAgICAg
ICAgICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lQXJyYXkgPSBKU09iamVj
dENvcHlQcm9wZXJ0eU5hbWVzKGNvbnRleHQsIGpzKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5n
dGggPSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocHJvcGVydHlOYW1lQXJyYXkpOworCisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdl
dE5hbWVBdEluZGV4KHByb3BlcnR5TmFtZUFycmF5LCBpKTsKKyAgICAgICAgICAgICAgICBpZiAo
aWQgb2JqYyA9IGNvbnZlcnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
anMsIHByb3BlcnR5TmFtZSwgMCkpKQorICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W1so
TlNTdHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwcm9w
ZXJ0eU5hbWUpIGF1dG9yZWxlYXNlXV0gPSBvYmpjOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZShwcm9wZXJ0eU5hbWVBcnJheSk7CisgICAg
ICAgIH0KKworICAgIH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisg
ICAgcmV0dXJuIHRhc2sub2JqYzsKK30KKworaWQgdmFsdWVUb09iamVjdChKU0NvbnRleHQgKmNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29udGFpbmVyTm9u
ZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5vYmpjOworICAgIHJldHVybiBjb250YWluZXJWYWx1
ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3VsdCk7Cit9CisK
K2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
dmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24p
OworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1
ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNz
XV0pCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1
ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIHZhbHVlKSA/IEBZRVMgOiBATk87CisKKyAgICBkb3VibGUgcmVzdWx0ID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZToqZXhjZXB0aW9uID8gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKSA6IHJlc3VsdF07Cit9CitpZCB2YWx1ZVRvU3RyaW5nKEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBl
ZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChb
d3JhcHBlZCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcmV0
dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWYganNzdHJpbmcgPSBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0
aW9uKSB7CisgICAgICAgIEFTU0VSVCghanNzdHJpbmcpOworICAgICAgICByZXR1cm4gbmlsOwor
ICAgIH0KKworICAgIE5TU3RyaW5nKiBzdHJpbmdOUyA9IFsoTlNTdHJpbmcgKilKU1N0cmluZ0Nv
cHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZykgYXV0b3JlbGVhc2VdOwor
ICAgIEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJuIHN0cmluZ05TOworfQor
aWQgdmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
ICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkp
IHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKQor
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgZG91YmxlIHJlc3VsdCA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4g
KmV4Y2VwdGlvbiA/IG5pbCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6
cmVzdWx0XTsKK30KK2lkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNv
bnRleHQsIHZhbHVlKSkgeworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNB
cnJheSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAg
aWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBjb250
YWluZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7
IHZhbHVlLCBbTlNNdXRhYmxlQXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheX0pOworCisgICAg
aWYgKCEoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVk
KGNvbnRleHQsIHZhbHVlKSkpCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0aXZlIHRvIE5T
QXJyYXkiKSk7CisgICAgcmV0dXJuIG5pbDsKK30KK2lkIHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9
IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3Jh
cHBlZCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJl
dHVybiB3cmFwcGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
dmFsdWUpKQorICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0LCAo
SlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZURpY3Rpb25hcnkg
ZGljdGlvbmFyeV0sIENvbnRhaW5lckRpY3Rpb25hcnl9KTsKKworICAgIGlmICghKEpTVmFsdWVJ
c051bGwoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1
ZSkpKQorICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9K
Uyhjb250ZXh0KSwgIkNhbm5vdCBjb252ZXJ0IHByaW1pdGl2ZSB0byBOU0RpY3Rpb25hcnkiKSk7
CisgICAgcmV0dXJuIG5pbDsKK30KKworY2xhc3MgT2JqY0NvbnRhaW5lckNvbnZlcnRvciB7Citw
dWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBpZCBvYmpjOworICAgICAgICBKU1Zh
bHVlUmVmIGpzOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07CisKKyAgICBP
YmpjQ29udGFpbmVyQ29udmVydG9yKEpTQ29udGV4dCAqY29udGV4dCkKKyAgICAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjb252ZXJ0KGlk
IG9iamVjdCk7CisgICAgdm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRha2UoKTsKKyAg
ICBib29sIGlzV29ya0xpc3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQor
Citwcml2YXRlOgorICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIFdURjo6SGFzaE1hcDxp
ZCwgSlNWYWx1ZVJlZj4gbV9vYmplY3RNYXA7CisgICAgV1RGOjpWZWN0b3I8VGFzaz4gbV93b3Jr
bGlzdDsKK307CisKK0pTVmFsdWVSZWYgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6Y29udmVydChp
ZCBvYmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBhdXRvIGl0ID0gbV9vYmpl
Y3RNYXAuZmluZChvYmplY3QpOworICAgIGlmIChpdCAhPSBtX29iamVjdE1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKworICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShtX2NvbnRleHQsIG9iamVjdCk7Cisg
ICAgYWRkKHRhc2spOworICAgIHJldHVybiB0YXNrLmpzOworfQorCit2b2lkIE9iamNDb250YWlu
ZXJDb252ZXJ0b3I6OmFkZChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2spCit7Cisg
ICAgbV9vYmplY3RNYXAuYWRkKHRhc2sub2JqYywgdGFzay5qcyk7CisgICAgaWYgKHRhc2sudHlw
ZSAhPSBDb250YWluZXJOb25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKK30K
KworT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBPYmpjQ29udGFpbmVyQ29udmVydG9yOjp0
YWtlKCkKK3sKKyAgICBBU1NFUlQoIWlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICBUYXNrIGxhc3Qg
PSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICBy
ZXR1cm4gbGFzdDsKK30KKworc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgb2Jq
ZWN0VG9WYWx1ZVdpdGhvdXRDb3B5KEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQorewor
ICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6
OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCkpLCBDb250YWluZXJOb25lIH07CisKKyAgICBpZiAoIWNsYXNzX2NvbmZvcm1z
VG9Qcm90b2NvbChvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSwgb2JqY19nZXRQcm90b2NvbCgiSlNF
eHBvcnQiKSkpIHsKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNr
KXsgb2JqZWN0LCBKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCAwLCBOVUxMLCAwKSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgICAgICBpZiAoW29iamVj
dCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVy
biAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApLCBDb250YWluZXJEaWN0aW9uYXJ5
IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdWxsIGNsYXNzXV0p
CisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmpl
Y3QsIEpTVmFsdWVNYWtlTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKSwgQ29u
dGFpbmVyTm9uZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W0pTVmFs
dWUgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
VGFzayl7IG9iamVjdCwgKChKU1ZhbHVlICopb2JqZWN0KS0+bV92YWx1ZSwgQ29udGFpbmVyTm9u
ZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3Nd
XSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9i
amVjdCwgSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
MCwgTlVMTCwgMCksIENvbnRhaW5lckFycmF5IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNL
aW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKE9i
amNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFrZShjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCAwKSwgQ29udGFpbmVyRGljdGlvbmFyeSB9Owor
CisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsK
KyAgICAgICAgICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3Ry
aW5nKChDRlN0cmluZ1JlZilvYmplY3QpOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBqcyA9IEpT
VmFsdWVNYWtlU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHN0cmluZyk7
CisgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVy
biAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwganMsIENvbnRhaW5lck5v
bmUgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05T
TnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxUcnVlID0gQFlFUzsKKyAg
ICAgICAgICAgIGlmIChvYmplY3QgPT0gbGl0ZXJhbFRydWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVlTWFrZUJv
b2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdHJ1ZSksIENvbnRhaW5lck5v
bmUgfTsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxGYWxzZSA9IEBOTzsKKyAgICAgICAgICAgIGlm
IChvYmplY3QgPT0gbGl0ZXJhbEZhbHNlKQorICAgICAgICAgICAgICAgIHJldHVybiAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZhbHNlKSwgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBK
U1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBbKE5TTnVt
YmVyKilvYmplY3QgZG91YmxlVmFsdWVdKSwgQ29udGFpbmVyTm9uZSB9OworICAgICAgICB9CisK
KyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEYXRlIGNsYXNzXV0pIHsKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBbKE5TRGF0ZSAqKW9iamVjdCB0aW1lSW50ZXJ2YWxT
aW5jZTE5NzBdKTsKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0TWFr
ZURhdGUoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3VtZW50LCAwKTsK
KyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVj
dCwgcmVzdWx0LCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHZhbHVlSW50ZXJuYWxW
YWx1ZShbY29udGV4dCB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF0pLCBDb250YWluZXJOb25lIH07
Cit9CisKK0pTVmFsdWVSZWYgb2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKmNvbnRleHQsIGlkIG9i
amVjdCkKK3sKKyAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2sgPSBvYmplY3RU
b1ZhbHVlV2l0aG91dENvcHkoY29udGV4dCwgb2JqZWN0KTsKKyAgICBpZiAodGFzay50eXBlID09
IENvbnRhaW5lck5vbmUpCisgICAgICAgIHJldHVybiB0YXNrLmpzOworCisgICAgT2JqY0NvbnRh
aW5lckNvbnZlcnRvciBjb252ZXJ0b3IoY29udGV4dCk7CisgICAgY29udmVydG9yLmFkZCh0YXNr
KTsKKyAgICBBU1NFUlQoIWNvbnZlcnRvci5pc1dvcmtMaXN0RW1wdHkoKSk7CisKKyAgICBkbyB7
CisgICAgICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3VycmVudCA9IGNvbnZlcnRv
ci50YWtlKCk7CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgY3VycmVudC5qcykpOworICAgICAgICBKU09iamVjdFJlZiBqcyA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBjdXJyZW50
LmpzLCAwKTsKKworICAgICAgICBpZiAoY3VycmVudC50eXBlID09IENvbnRhaW5lckFycmF5KSB7
CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pOworICAgICAgICAgICAgTlNBcnJheSAqIGFycmF5ID0gKE5TQXJyYXkgKiljdXJy
ZW50Lm9iamM7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2FycmF5IGNvdW50XTsK
KyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsr
aW5kZXgpCisgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIGluZGV4LCBjb252ZXJ0b3IuY29udmVydChb
YXJyYXkgb2JqZWN0QXRJbmRleDppbmRleF0pLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyRGljdGlvbmFyeSk7CisgICAg
ICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkg
Y2xhc3NdXSk7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSAoTlNEaWN0
aW9uYXJ5KiljdXJyZW50Lm9iamM7CisgICAgICAgICAgICBOU0VudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBbZGljdGlvbmFyeSBrZXlFbnVtZXJhdG9yXTsKKyAgICAgICAgICAgIHdoaWxlIChpZCBr
ZXkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICAgICAgICAgIGlmIChba2V5
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAgICAgICAgICAgICAg
SlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENG
U3RyaW5nUmVmKWtleSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIHByb3BlcnR5TmFtZSwgY29udmVy
dG9yLmNvbnZlcnQoW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV0pLCAwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIH0gd2hpbGUg
KCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAgcmV0dXJuIHRhc2suanM7Cit9
CisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUgKiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdmFsdWUtPm1fdmFsdWU7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhWYWx1
ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dAoreworICAg
IHJldHVybiBbW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlIGluQ29udGV4dDpj
b250ZXh0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihK
U1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0Cit7CisgICAgQVNT
RVJUKHZhbHVlKTsKKworICAgIG9iamNfaW5pdFdlYWsoJm1fd2Vha0NvbnRleHQsIGNvbnRleHQp
OworCisgICAgW3N1cGVyIGluaXRdOworICAgIFtjb250ZXh0IHByb3RlY3Q6dmFsdWVdOworICAg
IG1fdmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RydWN0IFN0cnVjdFRh
Z0hhbmRsZXIgeworICAgIFNFTCB0eXBlVG9WYWx1ZVNFTDsKKyAgICBTRUwgdmFsdWVUb1R5cGVT
RUw7Cit9OworCitzdGF0aWMgU3RydWN0VGFnSGFuZGxlciogZ2V0U3RydWN0VGFnSGFuZGxlcihj
b25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBzdGF0aWMgU3BpbkxvY2sgZ2V0U3RydWN0
VGFnSGFuZGxlckxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBTcGluTG9ja0hvbGRl
ciBsb2NrSG9sZGVyKCZnZXRTdHJ1Y3RUYWdIYW5kbGVyTG9jayk7CisKKyAgICB0eXBlZGVmIFdU
Rjo6SGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN0cnVjdFRhZ0hhbmRsZXI+IFN0cnVjdEhh
bmRsZXJzOworICAgIHN0YXRpYyBTdHJ1Y3RIYW5kbGVycyAqbV9zdHJ1Y3RIYW5kbGVycyA9IDA7
CisKKyAgICBpZiAoIW1fc3RydWN0SGFuZGxlcnMpIHsKKyAgICAgICAgbV9zdHJ1Y3RIYW5kbGVy
cyA9IG5ldyBTdHJ1Y3RIYW5kbGVycygpOworCisgICAgICAgIC8vIFN0ZXAgMTogZmluZCBhbGwg
dmFsdWVXaXRoPEZvbz46aW5Db250ZXh0OiBjbGFzcyBtZXRob2RzIGluIEpTVmFsdWUuCisgICAg
ICAgIHNpemVfdCB2YWx1ZVdpdGhNaW5MZW4gPSBzdHJsZW4oInZhbHVlV2l0aFg6aW5Db250ZXh0
OiIpOworICAgICAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhvYmplY3RfZ2V0Q2xhc3MoW0pTVmFs
dWUgY2xhc3NdKSwgXihNZXRob2QgbWV0aG9kKXsKKyAgICAgICAgICAgIFNFTCBzZWwgPSBtZXRo
b2RfZ2V0TmFtZShtZXRob2QpOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9n
ZXROYW1lKHNlbCk7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbHVlV2l0aDxGb28+OmNvbnRleHQ6CisgICAgICAgICAg
ICBpZiAobGVuIDwgdmFsdWVXaXRoTWluTGVuIHx8IHN0cm5jbXAobmFtZSwgInZhbHVlV2l0aCIs
IDkpIHx8IHN0cm5jbXAobmFtZSArIGxlbiAtIDExLCAiOmluQ29udGV4dDoiLCAxMSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFsgaWQsIFNFTCwg
PHR5cGU+LCA8Y29udGV4dFR5cGU+IF0KKyAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0TnVtYmVy
T2ZBcmd1bWVudHMobWV0aG9kKSAhPSA0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGNoYXIgaWRUeXBlWzNdOworICAgICAgICAgICAgLy8gQ2hlY2sgMm5kIGFyZ3VtZW50
IHR5cGUgaXMgIkAiCisgICAgICAgICAgICBjaGFyKiBzZWNvbmRUeXBlID0gbWV0aG9kX2NvcHlB
cmd1bWVudFR5cGUobWV0aG9kLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoc2Vjb25kVHlw
ZSwgIkAiKSkgeworICAgICAgICAgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJlZShzZWNvbmRUeXBl
KTsKKyAgICAgICAgICAgIC8vIENoZWNrIHJlc3VsdCB0eXBlIGlzIGFsc28gIkAiCisgICAgICAg
ICAgICBtZXRob2RfZ2V0UmV0dXJuVHlwZShtZXRob2QsIGlkVHlwZSwgMyk7CisgICAgICAgICAg
ICBpZiAoc3RyY21wKGlkVHlwZSwgIkAiKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBjaGFyKiB0eXBlID0gbWV0aG9kX2NvcHlBcmd1bWVudFR5cGUobWV0aG9kLCAyKTsK
KyAgICAgICAgICAgIG1fc3RydWN0SGFuZGxlcnMtPmFkZChXVEY6OlN0cmluZyh0eXBlKS5pbXBs
KCksIChTdHJ1Y3RUYWdIYW5kbGVyKXsgc2VsLCAwIH0pOworICAgICAgICAgICAgZnJlZSh0eXBl
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU3RlcCAyOiBmaW5kIGFsbCB0bzxGb28+IGlu
c3RhbmNlIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90IG1pbkxlblZhbHVlID0g
c3RybGVuKCJ0b1giKTsKKyAgICAgICAgZm9yRWFjaE1ldGhvZEluQ2xhc3MoW0pTVmFsdWUgY2xh
c3NdLCBeKE1ldGhvZCBtZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9IG1ldGhvZF9nZXRO
YW1lKG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2VsX2dldE5hbWUo
c2VsKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAg
ICAvLyBDaGVjayBmb3IgdG88Rm9vPgorICAgICAgICAgICAgaWYgKGxlbiA8IG1pbkxlblZhbHVl
IHx8IHN0cm5jbXAobmFtZSwgInRvIiwgMikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIFsgaWQsIFNFTCBdCisgICAgICAgICAgICBpZiAobWV0aG9k
X2dldE51bWJlck9mQXJndW1lbnRzKG1ldGhvZCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIG1hdGNoaW5nIHZhbHVlV2l0aDxGb28+
OmNvbnRleHQ6IG1ldGhvZC4KKyAgICAgICAgICAgIGNoYXIqIHR5cGUgPSBtZXRob2RfY29weVJl
dHVyblR5cGUobWV0aG9kKTsKKworICAgICAgICAgICAgU3RydWN0SGFuZGxlcnM6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5nKHR5cGUpLmltcGwoKSk7
CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJ1
Y3RIYW5kbGVycy0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
U3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworCisgICAgICAgICAgICAv
LyBjaGVjayB0aGF0IHN0cmxlbig8Zm9vPikgPT0gc3RybGVuKDxGb28+KQorICAgICAgICAgICAg
Y29uc3QgY2hhciogdmFsdWVXaXRoTmFtZSA9IHNlbF9nZXROYW1lKGhhbmRsZXIudHlwZVRvVmFs
dWVTRUwpOworICAgICAgICAgICAgc2l6ZV90IHZhbHVlV2l0aExlbiA9IHN0cmxlbih2YWx1ZVdp
dGhOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVdpdGhMZW4gLSB2YWx1ZVdpdGhNaW5MZW4g
IT0gbGVuIC0gbWluTGVuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCA8Rm9vPiA9PSA8Rm9vPgorICAgICAgICAgICAgaWYgKHN0cm5jbXAo
dmFsdWVXaXRoTmFtZSArIDksIG5hbWUgKyAyLCBsZW4gLSBtaW5MZW5WYWx1ZSAtIDEpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGhhbmRsZXIudmFsdWVUb1R5cGVTRUwg
PSBzZWw7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFN0ZXAgMzogY2xlYW4gdXAgLSByZW1v
dmUgZW50cmllcyB3aGVyZSB3ZSBmb3VuZCBwcm9zcGVjdGl2ZSB2YWx1ZVdpdGg8Rm9vPjppbkNv
bnRleHQ6IGNvbnZlcnNpb25zLCBidXQgbm8gbWF0Y2hpbmcgdG88Rm9vPiBtZXRob2RzLgorICAg
ICAgICB0eXBlZGVmIFdURjo6SGFzaFNldDxSZWZQdHI8V1RGOjpTdHJpbmdJbXBsPiA+IFJlbW92
ZVNldDsKKyAgICAgICAgUmVtb3ZlU2V0IHJlbW92ZVNldDsKKyAgICAgICAgZm9yIChTdHJ1Y3RI
YW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIg
IT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgU3RydWN0
VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgaWYgKCFoYW5k
bGVyLnZhbHVlVG9UeXBlU0VMKQorICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoaXRlci0+
a2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoUmVtb3ZlU2V0OjppdGVyYXRvciBpdGVy
ID0gcmVtb3ZlU2V0LmJlZ2luKCk7IGl0ZXIgIT0gcmVtb3ZlU2V0LmVuZCgpOyArK2l0ZXIpCisg
ICAgICAgICAgICBtX3N0cnVjdEhhbmRsZXJzLT5yZW1vdmUoKml0ZXIpOworICAgIH0KKworICAg
IFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5kbGVycy0+ZmluZChX
VEY6OlN0cmluZyhlbmNvZGVkVHlwZSkuaW1wbCgpKTsKKyAgICBpZiAoaXRlciA9PSBtX3N0cnVj
dEhhbmRsZXJzLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZpdGVyLT52
YWx1ZTsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTooY29uc3QgY2hhciAq
KXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRsZXIqIGhhbmRsZXIgPSBnZXRTdHJ1Y3RU
YWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJuIGhhbmRsZXIgPyBoYW5kbGVyLT50eXBl
VG9WYWx1ZVNFTCA6IG5pbDsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yVmFsdWVUb1N0cnVjdDoo
Y29uc3QgY2hhciAqKXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRsZXIqIGhhbmRsZXIg
PSBnZXRTdHJ1Y3RUYWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJuIGhhbmRsZXIgPyBo
YW5kbGVyLT52YWx1ZVRvVHlwZVNFTCA6IG5pbDsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIFtjb250ZXh0IHVucHJvdGVjdDptX3ZhbHVlXTsKKyAgICBvYmpjX2Rlc3Ryb3lX
ZWFrKCZtX3dlYWtDb250ZXh0KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKE5TU3Ry
aW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAo
aWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgbV92YWx1ZSkpCisgICAgICAgIHJldHVybiBbd3JhcHBlZCBkZXNjcmlwdGlvbl07
CisgICAgcmV0dXJuIFtzZWxmIHRvU3RyaW5nXTsKK30KKworTlNJbnZvY2F0aW9uKiB0eXBlVG9W
YWx1ZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCit7CisgICAgU0VMIHNl
bGVjdG9yID0gW0pTVmFsdWUgc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOmVuY29kZWRUeXBlXTsK
KyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIq
IG1ldGhvZFR5cGVzID0gbWV0aG9kX2dldFR5cGVFbmNvZGluZyhjbGFzc19nZXRDbGFzc01ldGhv
ZChbSlNWYWx1ZSBjbGFzc10sIHNlbGVjdG9yKSk7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRo
b2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11dOworICAgIFtp
bnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICByZXR1cm4gaW52b2NhdGlvbjsK
K30KKworTlNJbnZvY2F0aW9uKiB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciog
ZW5jb2RlZFR5cGUpCit7CisgICAgU0VMIHNlbGVjdG9yID0gW0pTVmFsdWUgc2VsZWN0b3JGb3JW
YWx1ZVRvU3RydWN0OmVuY29kZWRUeXBlXTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIqIG1ldGhvZFR5cGVzID0gbWV0aG9kX2dldFR5cGVF
bmNvZGluZyhjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbSlNWYWx1ZSBjbGFzc10sIHNlbGVjdG9y
KSk7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0
aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9i
akNUeXBlczptZXRob2RUeXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVj
dG9yXTsKKyAgICByZXR1cm4gaW52b2NhdGlvbjsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9ydCAiQVBJSlNWYWx1ZS5o
IgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTVmFsdWUoSW50ZXJu
YWwpCisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUqKTsKKworKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dDsKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZh
bHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworSlNWYWx1ZVJlZiBvYmplY3RU
b1ZhbHVlKEpTQ29udGV4dCAqLCBpZCk7CitpZCB2YWx1ZVRvT2JqZWN0KEpTQ29udGV4dCAqLCBK
U1ZhbHVlUmVmKTsKK2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVl
UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENv
bnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRv
RGF0ZShKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CitpZCB2YWx1ZVRvQXJyYXkoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0RpY3Rpb25hcnkoSlNHbG9iYWxDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisrIChTRUwpc2VsZWN0
b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFnOworKyAoU0VMKXNlbGVj
dG9yRm9yVmFsdWVUb1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZzsKKworQGVuZAorCitO
U0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVk
VHlwZSk7CitOU0ludm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFy
KiBlbmNvZGVkVHlwZSk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5B
QkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworLy8gQW4gaW5zdGFu
Y2Ugb2YgSlNWaXJ0dWFsTWFjaGluZSByZXByZXNlbnRzIGEgc2luZ2xlIEphdmFTY3JpcHQgIm9i
amVjdCBzcGFjZSIKKy8vIG9yIHNldCBvZiBleGVjdXRpb24gcmVzb3VyY2VzLiBUaHJlYWQgc2Fm
ZXR5IGlzIHN1cHBvcnRlZCBieSBsb2NraW5nIHRoZQorLy8gdmlydHVhbCBtYWNoaW5lLCB3aXRo
IGNvbmN1cnJlbnQgSmF2YVNjcmlwdCBleGVjdXRpb24gc3VwcG9ydGVkIGJ5IGFsbG9jYXRpbmcK
Ky8vIHNlcGFyYXRlIGluc3RhbmNlcyBvZiBKU1ZpcnR1YWxNYWNoaW5lLgorTlNfQ0xBU1NfQVZB
SUxBQkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZpcnR1YWxNYWNoaW5lIDogTlNPYmplY3QK
KworLSAoaWQpaW5pdDsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorCisj
aWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKworQGltcGxlbWVudGF0aW9uIEpTVmlydHVhbE1h
Y2hpbmUgeworICAgIEpTQ29udGV4dEdyb3VwUmVmIG1fZ3JvdXA7Cit9CisKKy0gKGlkKWluaXQK
K3sKKyAgICBbc3VwZXIgaW5pdF07CisgICAgbV9ncm91cCA9IEpTQ29udGV4dEdyb3VwQ3JlYXRl
KCk7CisgICAgdG9KUyhtX2dyb3VwKS0+bV9hcGlEYXRhID0gc2VsZjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5h
bCkKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2dyb3VwKS0+bV9hcGlEYXRhID0g
MDsKKyAgICBKU0NvbnRleHRHcm91cFJlbGVhc2UobV9ncm91cCk7CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCitKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShK
U1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSkKK3sKKyAgICByZXR1cm4gdmlydHVhbE1h
Y2hpbmUtPm1fZ3JvdXA7Cit9CisKK0BlbmQKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZS5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lmIEpTX09C
SkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQor
CitKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxN
YWNoaW5lKik7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTV3JhcHBlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNXcmFwcGVyTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTV3JhcHBlck1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5oPgorI2ltcG9ydCA8SlNWYWx1ZUludGVybmFsLmg+CisjaW1wb3J0IDxvYmpjL29iamMtcnVu
dGltZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTV3JhcHBl
ck1hcCA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKKworQGVu
ZAorCitpZCB0cnlVbndyYXBPYmpjT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJl
Zik7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBl
ck1hcC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9y
dCAiSmF2YVNjcmlwdENvcmUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9y
dCAiT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgi
CisjaW1wb3J0IDx3dGYvVENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL1ZlY3Rvci5oIgorI2lt
cG9ydCA8L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcmsvUHJp
dmF0ZUhlYWRlcnMvTlNCbG9jay5oPgorCitzdGF0aWMgdm9pZCB3cmFwcGVyRmluYWxpemUoSlNP
YmplY3RSZWYgb2JqZWN0KQoreworICAgIFsoaWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkg
cmVsZWFzZV07Cit9CisKKy8vIEFsbCB3cmFwcGVyIG9iamVjdHMgYW5kIGNvbnN0cnVjdG9yIG9i
amVjdHMgZGVyaXZlIGZyb20gdGhpcyB0eXBlLCBzbyB3ZSBjYW4gZGV0ZWN0ICYgdW53cmFwIE9i
amVjdGl2ZS1DIGluc3RhbmNlcy9DbGFzc2VzLgorc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNs
YXNzKCkKK3sKKyAgICBzdGF0aWMgU3BpbkxvY2sgaW5pdExvY2sgPSBTUElOTE9DS19JTklUSUFM
SVpFUjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZpbml0TG9jayk7CisKKyAgICBz
dGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IDA7CisKKyAgICBpZiAoIWNsYXNzUmVmKSB7Cisg
ICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgICAgIGRlZmluaXRpb24g
PSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUg
PSAib2JqY19jbGFzcyI7CisgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSB3cmFwcGVyRmlu
YWxpemU7CisgICAgICAgIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNsYXNzUmVmOworfQorCisvLyBEZWZhdWx0IGNvbnZlcnNpb24g
b2Ygc2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgorLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJl
bW92ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRh
bGl6ZWQuCitzdGF0aWMgTlNTdHJpbmcqIHNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hh
ciogc3RhcnQpCit7CisgICAgLy8gVXNlICdpbmRleCcgdG8gY2hlY2sgZm9yIGNvbG9ucywgaWYg
dGhlcmUgYXJlIG5vbiwgdGhpcyBpcyBlYXN5IQorICAgIGNvbnN0IGNoYXIqIGZpcnN0Q29sb24g
PSBpbmRleChzdGFydCwgJzonKTsKKyAgICBpZiAoIWZpcnN0Q29sb24pCisgICAgICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhcnRdOworCisgICAgLy8gJ2hlYWRl
cicgaXMgdGhlIGxlbmd0aCBvZiBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IGNvbG9uLgorICAgIHNp
emVfdCBoZWFkZXIgPSBmaXJzdENvbG9uIC0gc3RhcnQ7CisgICAgLy8gVGhlIG5ldyBzdHJpbmcg
bmVlZHMgdG8gYmUgbG9uZyBlbm91Z2ggdG8gaG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWlu
ZGVyIG9mIHRoZSBzdHJpbmcsIGV4Y2x1ZGluZworICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1
dCBpbmNsdWRpbmcgYSAnXDAnLiAoVGhpcyBpcyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1v
cmUgdGhhbiBvbmUgJzonKS4KKyAgICBjaGFyKiBidWZmZXIgPSAoY2hhciopbWFsbG9jKGhlYWRl
ciArIHN0cmxlbihmaXJzdENvbG9uICsgMSkgKyAxKTsKKyAgICAvLyBDb3B5ICdoZWFkZXInIGNo
YXJhY3RlcnMsIHNldCBvdXRwdXQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGlzICYgaW5wdXQg
dG8gcG9pbnQgcGFzdCB0aGUgZmlyc3QgJzonLgorICAgIG1lbWNweShidWZmZXIsIHN0YXJ0LCBo
ZWFkZXIpOworICAgIGNoYXIqIG91dHB1dCA9IGJ1ZmZlciArIGhlYWRlcjsKKyAgICBjb25zdCBj
aGFyKiBpbnB1dCA9IHN0YXJ0ICsgaGVhZGVyICsgMTsKKworICAgIC8vIE9uIGVudHJ5IHRvIHRo
ZSBsb29wLCB3ZSBoYXZlIGFscmVhZHkgc2tpcHBlZCBvdmVyIGEgJzonIGZyb20gdGhlIGlucHV0
LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgLy8gU2tpcCBv
dmVyIGFueSBhZGRpdGlvbmFsICc6J3MuIFdlJ2xsIGxlYXZlIGMgaG9sZGluZyB0aGUgbmV4dCBj
aGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgIC8vIGxhc3QgJzonLCBhbmQgaW5wdXQgcG9pbnRp
bmcgcGFzdCBjLgorICAgICAgICB3aGlsZSAoKGMgPSAqKGlucHV0KyspKSA9PSAnOicpOworICAg
ICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIsIGNvbnZlcnRpbmcgdG8gdXBwZXIgY2FzZSBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAnXDAnLCB0
aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgIGlmICghKCoob3V0cHV0KyspID0gdG91cHBlcihjKSkp
CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIC8vIExvb3Agb3ZlciBjaGFyYWN0ZXJz
IG90aGVyIHRoYW4gJzonLgorICAgICAgICB3aGlsZSAoKGMgPSAqKGlucHV0KyspKSAhPSAnOicp
IHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC8vIElm
IHRoZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAnXDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAg
ICAgICBpZiAoISgqKG91dHB1dCsrKSA9IGMpKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQgYSAn
OicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgorICAgIH0KK2RvbmU6CisgICAgTlNTdHJpbmcqIHJl
c3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpidWZmZXJdOworICAgIGZyZWUo
YnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBNYWtlIGFuIG9iamVjdCB0aGF0
IGlzIGluIGFsbCB3YXlzIGFyZSBjb21wbGV0ZWx5IHZhbmlsbGEgSmF2YVNjcmlwdCBvYmplY3Qs
CisvLyBvdGhlciB0aGFuIHRoYXQgaXQgaGFzIGEgbmF0aXZlIGJyYW5kIHNldCB0aGF0IHdpbGwg
YmUgZGlzcGxheWVkIGJ5IHRoZSBkZWZhdWx0CisvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
IGNvbXZlcnNpb24uCitzdGF0aWMgSlNWYWx1ZSogY3JlYXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5k
KEpTQ29udGV4dCogY29udGV4dCwgTlNTdHJpbmcqIGJyYW5kLCBKU0NsYXNzUmVmIHBhcmVudENs
YXNzID0gMCwgdm9pZCogcHJpdmF0ZURhdGEgPSAwKQoreworICAgIEpTQ2xhc3NEZWZpbml0aW9u
IGRlZmluaXRpb247CisgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5Owor
ICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gW2JyYW5kIFVURjhTdHJpbmddOworICAgIGRlZmlu
aXRpb24ucGFyZW50Q2xhc3MgPSBwYXJlbnRDbGFzczsKKyAgICBKU0NsYXNzUmVmIGNsYXNzUmVm
ID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGNsYXNzUmVmLCBw
cml2YXRlRGF0YSk7CisgICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOworICAgIHJldHVybiBb
W0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsK
K30KKworLy8gTG9vayBmb3IgQG9wdGlvbmFsIHByb3BlcnRpZXMgaW4gdGhlIHByb3RvdHlwZSBj
b250YWluaW5nIGEgc2VsZWN0b3IgdG8gcHJvcGVydHkKKy8vIG5hbWUgbWFwcGluZywgc2VwYXJh
dGVkIGJ5IGEgX19KU19FWFBPUlRfQVNfXyBkZWxpbWl0ZXIuCitzdGF0aWMgTlNNdXRhYmxlRGlj
dGlvbmFyeSogY3JlYXRlUmVuYW1lTWFwKFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3Rh
bmNlTWV0aG9kKQoreworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlbmFtZU1hcCA9IFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisKKyAgICBmb3JFYWNoTWV0aG9kSW5Qcm90
b2NvbChwcm90b2NvbCwgTk8sIGlzSW5zdGFuY2VNZXRob2QsIF4oU0VMIHNlbCwgY29uc3QgY2hh
ciopeworICAgICAgICBOU1N0cmluZyogcmVuYW1lID0gQChzZWxfZ2V0TmFtZShzZWwpKTsKKyAg
ICAgICAgTlNSYW5nZSByYW5nZSA9IFtyZW5hbWUgcmFuZ2VPZlN0cmluZzpAIl9fSlNfRVhQT1JU
X0FTX18iXTsKKyAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIE5TU3RyaW5nKiBzZWxlY3RvciA9IFtyZW5hbWUgc3Vi
c3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlvbl07CisgICAgICAgIE5TVUludGVnZXIgYmVnaW4g
PSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKKyAgICAgICAgTlNVSW50ZWdlciBsZW5n
dGggPSBbcmVuYW1lIGxlbmd0aF0gLSBiZWdpbiAtIDE7CisgICAgICAgIE5TU3RyaW5nKiBuYW1l
ID0gW3JlbmFtZSBzdWJzdHJpbmdXaXRoUmFuZ2U6KE5TUmFuZ2UpeyBiZWdpbiwgbGVuZ3RoIH1d
OworICAgICAgICByZW5hbWVNYXBbc2VsZWN0b3JdID0gbmFtZTsKKyAgICB9KTsKKworICAgIHJl
dHVybiByZW5hbWVNYXA7Cit9CisKK2lubGluZSB2b2lkIHB1dE5vbkVudW1lcmFibGUoSlNWYWx1
ZSogYmFzZSwgTlNTdHJpbmcqIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAg
W2Jhc2UgZGVmaW5lUHJvcGVydHk6cHJvcGVydHlOYW1lIGRlc2NyaXB0b3I6QHsKKyAgICAgICAg
SlNQcm9wZXJ0eURlc2NyaXB0b3JWYWx1ZUtleTogdmFsdWUsCisgICAgICAgIEpTUHJvcGVydHlE
ZXNjcmlwdG9yV3JpdGFibGVLZXk6IEBZRVMsCisgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9y
RW51bWVyYWJsZUtleTogQE5PLAorICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3Vy
YWJsZUtleTogQFlFUworICAgIH1dOworfQorCisvLyBUaGlzIG1ldGhvZCB3aWxsIGl0ZXJhdGUg
b3ZlciB0aGUgc2V0IG9mIHJlcXVpcmVkIG1ldGhvZHMgaW4gdGhlIHByb3RvY29sLCBhbmQ6Cisv
LyAgKiBEZXRlcm1pbmUgYSBwcm9wZXJ0eSBuYW1lIChlaXRoZXIgdmlhIGEgcmVuYW1lTWFwIG9y
IGRlZmF1bHQgY29udmVyc2lvbikuCisvLyAgKiBJZiBhbiBhY2Nlc3Nvck1hcCBpcyBwcm92aWRl
ZCwgYW5kIGNvbmF0aW5zIGEgdGhpcyBuYW1lLCBzdG9yZSB0aGUgbWV0aG9kIGluIHRoZSBtYXAu
CisvLyAgKiBPdGhlcndpc2UsIGlmIHRoZSBvYmplY3QgZG9lc24ndCBhbHJlYWR5IGNvbmF0aW4g
YSBwcm9wZXJ0eSB3aXRoIG5hbWUsIGNyZWF0ZSBpdC4KK3N0YXRpYyB2b2lkIGNvcHlNZXRob2Rz
VG9PYmplY3QoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29sKiBw
cm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBKU1ZhbHVlKiBvYmplY3QsIE5TTXV0YWJs
ZURpY3Rpb25hcnkqIGFjY2Vzc29yTWV0aG9kcyA9IG5pbCkKK3sKKyAgICBOU011dGFibGVEaWN0
aW9uYXJ5KiByZW5hbWVNYXAgPSBjcmVhdGVSZW5hbWVNYXAocHJvdG9jb2wsIGlzSW5zdGFuY2VN
ZXRob2QpOworCisgICAgZm9yRWFjaE1ldGhvZEluUHJvdG9jb2wocHJvdG9jb2wsIFlFUywgaXNJ
bnN0YW5jZU1ldGhvZCwgXihTRUwgc2VsLCBjb25zdCBjaGFyKiB0eXBlcyl7CisgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWVDU3RyID0gc2VsX2dldE5hbWUoc2VsKTsKKyAgICAgICAgTlNTdHJpbmcq
IG5hbWUgPSBAKG5hbWVDU3RyKTsKKyAgICAgICAgaWYgKGFjY2Vzc29yTWV0aG9kcyAmJiBhY2Nl
c3Nvck1ldGhvZHNbbmFtZV0pIHsKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9i
akNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9jb2ws
IGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOworICAgICAgICAgICAgaWYgKCFtZXRob2Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYWNjZXNzb3JNZXRob2RzW25h
bWVdID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSByZW5hbWVNYXBbbmFtZV07Cisg
ICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGVjdG9yVG9Q
cm9wZXJ0eU5hbWUobmFtZUNTdHIpOworICAgICAgICAgICAgaWYgKFtvYmplY3QgaGFzUHJvcGVy
dHk6bmFtZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSlNPYmplY3RS
ZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoY29udGV4dCwgb2JqY0Ns
YXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1ldGhvZCwgc2VsLCB0eXBlcyk7CisgICAgICAgICAg
ICBpZiAobWV0aG9kKQorICAgICAgICAgICAgICAgIHB1dE5vbkVudW1lcmFibGUob2JqZWN0LCBu
YW1lLCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdKTsK
KyAgICAgICAgfQorICAgIH0pOworCisgICAgW3JlbmFtZU1hcCByZWxlYXNlXTsKK30KKworc3Rh
dGljIGJvb2wgcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZXMob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5
LCBjaGFyKiYgZ2V0dGVyTmFtZSwgY2hhciomIHNldHRlck5hbWUpCit7CisgICAgYm9vbCByZWFk
b25seSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZUNvdW50OworICAgIG9iamNfcHJv
cGVydHlfYXR0cmlidXRlX3QqIGF0dHJpYnV0ZXMgPSBwcm9wZXJ0eV9jb3B5QXR0cmlidXRlTGlz
dChwcm9wZXJ0eSwgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBpZiAoYXR0cmlidXRlQ291bnQpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoKihhdHRyaWJ1dGVzW2ldLm5hbWUpKSB7CisgICAgICAgICAg
ICBjYXNlICdHJzoKKyAgICAgICAgICAgICAgICBnZXR0ZXJOYW1lID0gc3RyZHVwKGF0dHJpYnV0
ZXNbaV0udmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn
Uyc6CisgICAgICAgICAgICAgICAgc2V0dGVyTmFtZSA9IHN0cmR1cChhdHRyaWJ1dGVzW2ldLnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1InOgorICAg
ICAgICAgICAgICAgIHJlYWRvbmx5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZnJlZShhdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlYWRvbmx5OworfQorCitzdGF0aWMgY2hhciogbWFrZVNldHRlck5hbWUoY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICBzaXplX3QgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBjaGFy
KiBzZXR0ZXJOYW1lID0gKGNoYXIqKW1hbGxvYyhuYW1lTGVuZ3RoICsgNSk7IC8vICJzZXQiIE5h
bWUgIjpcMCIKKyAgICBzZXR0ZXJOYW1lWzBdID0gJ3MnOworICAgIHNldHRlck5hbWVbMV0gPSAn
ZSc7CisgICAgc2V0dGVyTmFtZVsyXSA9ICd0JzsKKyAgICBzZXR0ZXJOYW1lWzNdID0gdG91cHBl
cigqbmFtZSk7CisgICAgbWVtY3B5KHNldHRlck5hbWUgKyA0LCBuYW1lICsgMSwgbmFtZUxlbmd0
aCAtIDEpOworICAgIHNldHRlck5hbWVbbmFtZUxlbmd0aCArIDNdID0gJzonOworICAgIHNldHRl
ck5hbWVbbmFtZUxlbmd0aCArIDRdID0gJ1wwJzsKKyAgICByZXR1cm4gc2V0dGVyTmFtZTsKK30K
Kworc3RhdGljIHZvaWQgY29weVByb3RvdHlwZVByb3BlcnRpZXMoSlNDb250ZXh0KiBjb250ZXh0
LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29sKiBwcm90b2NvbCwgSlNWYWx1ZSogcHJvdG90eXBl
VmFsdWUpCit7CisgICAgLy8gRmlyc3QgZ2F0aGVyIHByb3ByZXRpZXMgaW50byB0aGlzIGxpc3Qs
IHRoZW4gaGFuZGxlIHRoZSBtZXRob2RzIChjYXB0dXJpbmcgdGhlIGFjY2Vzc29yIG1ldGhvZHMp
LgorICAgIHN0cnVjdCBQcm9wZXJ0eSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAg
ICAgIGNoYXIqIGdldHRlck5hbWU7CisgICAgICAgIGNoYXIqIHNldHRlck5hbWU7CisgICAgfTsK
KyAgICBfX2Jsb2NrIFdURjo6VmVjdG9yPFByb3BlcnR5PiBwcm9wZXJ0eUxpc3Q7CisKKyAgICAv
LyBNYXAgcmVjb3JkaW5nIHRoZSBtZXRob2RzIHVzZWQgYXMgZ2V0dGVycy9zZXR0ZXJzLgorICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmFjY2Vzc29yTWV0aG9kcyA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOworCisgICAgLy8gVXNlZnVsIHZhbHVlLgorICAgIEpTVmFsdWUqIHVu
ZGVmaW5lZCA9IFtKU1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsK
KworICAgIGZvckVhY2hQcm9wZXJ0eUluUHJvdG9jb2wocHJvdG9jb2wsIF4ob2JqY19wcm9wZXJ0
eV90IHByb3BlcnR5KXsKKyAgICAgICAgY2hhciogZ2V0dGVyTmFtZSA9IDA7CisgICAgICAgIGNo
YXIqIHNldHRlck5hbWUgPSAwOworICAgICAgICBib29sIHJlYWRvbmx5ID0gcGFyc2VQcm9wZXJ0
eUF0dHJpYnV0ZXMocHJvcGVydHksIGdldHRlck5hbWUsIHNldHRlck5hbWUpOworICAgICAgICBj
b25zdCBjaGFyKiBuYW1lID0gcHJvcGVydHlfZ2V0TmFtZShwcm9wZXJ0eSk7CisKKyAgICAgICAg
Ly8gQWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2V0dGVyICYgc2V0dGVyIG1ldGhvZHMgdG8gCisgICAg
ICAgIGlmICghZ2V0dGVyTmFtZSkKKyAgICAgICAgICAgIGdldHRlck5hbWUgPSBzdHJkdXAobmFt
ZSk7CisgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKGdldHRlck5hbWUpXSA9IHVuZGVmaW5lZDsK
KyAgICAgICAgaWYgKCFyZWFkb25seSkgeworICAgICAgICAgICAgaWYgKCFzZXR0ZXJOYW1lKQor
ICAgICAgICAgICAgICAgIHNldHRlck5hbWUgPSBtYWtlU2V0dGVyTmFtZShuYW1lKTsKKyAgICAg
ICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKHNldHRlck5hbWUpXSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUgcHJvcGVydGllcyB0byBhIGxpc3QuCisgICAgICAg
IHByb3BlcnR5TGlzdC5hcHBlbmQoKFByb3BlcnR5KXsgbmFtZSwgZ2V0dGVyTmFtZSwgc2V0dGVy
TmFtZSB9KTsKKyAgICB9KTsKKworICAgIC8vIENvcHkgbWV0aG9kcyB0byB0aGUgcHJvdG90eXBl
LCBjYXB0dXJpbmcgYWNjZXNzb3JzIGluIHRoZSBhY2Nlc3Nvck1ldGhvZHMgbWFwLgorICAgIGNv
cHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgWUVTLCBwcm90
b3R5cGVWYWx1ZSwgYWNjZXNzb3JNZXRob2RzKTsKKworICAgIC8vIEl0ZXJhdGUgdGhlIHByb3Bl
cnR5TGlzdCAmIGdlbmVyYXRlIGFjY2Vzc29yIHByb3BlcnRpZXMuCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm9wZXJ0eUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUHJvcGVydHkm
IHByb3BlcnR5ID0gcHJvcGVydHlMaXN0W2ldOworCisgICAgICAgIEpTVmFsdWUqIGdldHRlciA9
IGFjY2Vzc29yTWV0aG9kc1tAKHByb3BlcnR5LmdldHRlck5hbWUpXTsKKyAgICAgICAgZnJlZShw
cm9wZXJ0eS5nZXR0ZXJOYW1lKTsKKyAgICAgICAgQVNTRVJUKCFbZ2V0dGVyIGlzVW5kZWZpbmVk
XSk7CisKKyAgICAgICAgSlNWYWx1ZSogc2V0dGVyID0gdW5kZWZpbmVkOworICAgICAgICBpZiAo
cHJvcGVydHkuc2V0dGVyTmFtZSkgeworICAgICAgICAgICAgc2V0dGVyID0gYWNjZXNzb3JNZXRo
b2RzW0AocHJvcGVydHkuc2V0dGVyTmFtZSldOworICAgICAgICAgICAgZnJlZShwcm9wZXJ0eS5z
ZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVCghW3NldHRlciBpc1VuZGVmaW5lZF0pOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbcHJvdG90eXBlVmFsdWUgZGVmaW5lUHJvcGVy
dHk6QChwcm9wZXJ0eS5uYW1lKSBkZXNjcmlwdG9yOkB7CisgICAgICAgICAgICBKU1Byb3BlcnR5
RGVzY3JpcHRvckdldEtleTogZ2V0dGVyLAorICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0
b3JTZXRLZXk6IHNldHRlciwKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVy
YWJsZUtleTogQE5PLAorICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JDb25maWd1cmFi
bGVLZXk6IEBZRVMKKyAgICAgICAgfV07CisgICAgfQorfQorCitAaW50ZXJmYWNlIEpTT2JqQ0Ns
YXNzSW5mbyA6IE5TT2JqZWN0IHsKKyAgICBKU0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBDbGFz
cyBtX2NsYXNzOworICAgIGJvb2wgbV9ibG9jazsKKyAgICBKU0NsYXNzUmVmIG1fY2xhc3NSZWY7
CisgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7CisgICAgSlNWYWx1ZSogbV9jb25zdHJ1Y3RvcjsK
K30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xhc3M6
KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5m
bzsKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CistIChKU1ZhbHVl
ICopY29uc3RydWN0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTT2JqQ0NsYXNzSW5m
bworCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dCBmb3JDbGFzczoo
Q2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihKU09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZv
Cit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xh
c3NfZ2V0TmFtZShjbHMpOworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jbGFzcyA9
IGNsczsKKyAgICBtX2Jsb2NrID0gW2NscyBpc1N1YmNsYXNzT2ZDbGFzczpbTlNCbG9jayBjbGFz
c11dOworICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlvbiA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gY2xh
c3NOYW1lOworICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSB3cmFwcGVyQ2xhc3MoKTsKKyAg
ICBtX2NsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBBU1NFUlQo
KGNscyA9PSBbTlNPYmplY3QgY2xhc3NdKSA9PSAhc3VwZXJDbGFzc0luZm8pOworICAgIGlmICgh
c3VwZXJDbGFzc0luZm8pIHsKKyAgICAgICAgbV9jb25zdHJ1Y3RvciA9IFtjb250ZXh0W0AiT2Jq
ZWN0Il0gcmV0YWluXTsKKyAgICAgICAgbV9wcm90b3R5cGUgPSBbbV9jb25zdHJ1Y3RvcltAInBy
b3RvdHlwZSJdIHJldGFpbl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBw
cm90b3R5cGUvY29uc3RydWN0b3IgcGFpci4KKyAgICAgICAgbV9wcm90b3R5cGUgPSBjcmVhdGVP
YmplY3RXaXRoQ3VzdG9tQnJhbmQoY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlc1Byb3RvdHlwZSIsIGNsYXNzTmFtZV0pOworICAgICAgICBtX2NvbnN0cnVjdG9yID0gY3Jl
YXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRleHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIHdyYXBwZXJDbGFzcygpLCBbY2xzIHJl
dGFpbl0pOworICAgICAgICBwdXROb25FbnVtZXJhYmxlKG1fcHJvdG90eXBlLCBAImNvbnN0cnVj
dG9yIiwgbV9jb25zdHJ1Y3Rvcik7CisgICAgICAgIHB1dE5vbkVudW1lcmFibGUobV9jb25zdHJ1
Y3RvciwgQCJwcm90b3R5cGUiLCBtX3Byb3RvdHlwZSk7CisKKyAgICAgICAgUHJvdG9jb2wqIGV4
cG9ydFByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNFeHBvcnQiKTsKKyAgICAgICAgZm9y
RWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2woY2xzLCBleHBvcnRQcm90b2NvbCwgXihQ
cm90b2NvbCogcHJvdG9jb2wpeworICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3BlcnRpZXMo
Y29udGV4dCwgY2xzLCBwcm90b2NvbCwgbV9wcm90b3R5cGUpOworICAgICAgICAgICAgY29weU1l
dGhvZHNUb09iamVjdChjb250ZXh0LCBjbHMsIHByb3RvY29sLCBOTywgbV9jb25zdHJ1Y3Rvcik7
CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFNldCBbUHJvdG90eXBlXS4KKyAgICAgICAgbV9w
cm90b3R5cGVbQCJfX3Byb3RvX18iXSA9IHN1cGVyQ2xhc3NJbmZvLT5tX3Byb3RvdHlwZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgSlND
bGFzc1JlbGVhc2UobV9jbGFzc1JlZik7CisgICAgW21fcHJvdG90eXBlIHJlbGVhc2VdOworICAg
IFttX2NvbnN0cnVjdG9yIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
SlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAoreworICAgIEFTU0VSVChbb2Jq
ZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pOworICAgIEFTU0VSVChtX2Jsb2NrID09IFtvYmpl
Y3QgaXNLaW5kT2ZDbGFzczpbTlNCbG9jayBjbGFzc11dKTsKKyAgICBpZiAobV9ibG9jaykgewor
ICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JC
bG9jayhtX2NvbnRleHQsIG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDptX2NvbnRleHRdOworICAgIH0KKworICAgIEpT
VmFsdWVSZWYgcHJvdG90eXBlVmFsdWUgPSB2YWx1ZUludGVybmFsVmFsdWUobV9wcm90b3R5cGUp
OworICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChtX2Nv
bnRleHQpLCBwcm90b3R5cGVWYWx1ZSkpOworICAgIEpTT2JqZWN0UmVmIHByb3RvdHlwZSA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29udGV4dCksIHByb3RvdHlw
ZVZhbHVlLCAwKTsKKworICAgIEpTT2JqZWN0UmVmIHdyYXBwZXIgPSBKU09iamVjdE1ha2UoY29u
dGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBtX2NsYXNzUmVmLCBbb2JqZWN0IHJldGFp
bl0pOworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9j
b250ZXh0KSwgd3JhcHBlciwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoVmFsdWU6d3JhcHBlciBpbkNvbnRleHQ6bV9jb250ZXh0XTsKK30KKworLSAoSlNWYWx1ZSAq
KWNvbnN0cnVjdG9yCit7CisgICAgcmV0dXJuIG1fY29uc3RydWN0b3I7Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7
CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogbV9jbGFzc01hcDsKK30KKworLSAoaWQpaW5pdFdp
dGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICBbc3VwZXIgaW5pdF07CisgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NsYXNzTWFwID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW21fY2xhc3NNYXAgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNsYXNzOihDbGFzcyljbHMKK3sKKyAg
ICBpZiAoIWNscykKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIENoZWNrIGlmIHdlJ3Zl
IGFscmVhZHkgY3JlYXRlZCBhIEpTT2JqQ0NsYXNzSW5mbyBmb3IgdGhpcyBDbGFzcy4KKyAgICBp
ZiAoSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSAoSlNPYmpDQ2xhc3NJbmZvKiltX2NsYXNz
TWFwW2Nsc10pCisgICAgICAgIHJldHVybiBjbGFzc0luZm87CisKKyAgICAvLyBTa2lwIGludGVy
bmFsIGNsYXNzZXMgYmVnaW5pbmcgd2l0aCAnXycgLSBqdXN0IGNvcHkgbGluayB0byB0aGUgcGFy
ZW50IGNsYXNzJ3MgaW5mby4KKyAgICBpZiAoJ18nID09ICpjbGFzc19nZXROYW1lKGNscykpCisg
ICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpj
bGFzc19nZXRTdXBlcmNsYXNzKGNscyldOworCisgICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9
IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0Om1fY29udGV4dCBmb3JD
bGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0
U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2VdOworfQorCistIChKU1ZhbHVlICopd3JhcHBl
ckZvck9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNWYWx1ZSogd3JhcHBlciA9IG9iamNfZ2V0
QXNzb2NpYXRlZE9iamVjdChvYmplY3QsIG1fY29udGV4dCk7CisgICAgaWYgKHdyYXBwZXIgJiYg
d3JhcHBlci5jb250ZXh0KQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKworICAgIGlmIChjbGFz
c19pc01ldGFDbGFzcyhvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSkpCisgICAgICAgIHdyYXBwZXIg
PSBbW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKW9iamVjdF0gY29uc3RydWN0b3JdOwor
ICAgIGVsc2UgeworICAgICAgICBKU09iakNDbGFzc0luZm8qIGNsYXNzSW5mbyA9IFtzZWxmIGNs
YXNzSW5mb0ZvckNsYXNzOltvYmplY3QgY2xhc3NdXTsKKyAgICAgICAgd3JhcHBlciA9IFtjbGFz
c0luZm8gd3JhcHBlckZvck9iamVjdDpvYmplY3RdOworICAgIH0KKworICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODkxCisgICAgLy8gVGhp
cyBnZW5lcmFsIGFwcHJvYWNoIHRvIHdyYXBwZXIgY2FjaGluZyBpcyBwcmV0dHkgZWZmZWN0aXZl
LCBidXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHByb2JsZW1zOgorICAgIC8vICgxKSBGb3IgaW1t
b3J0YWwgb2JqZWN0cyBKU1ZhbHVlcyB3aWxsIGVmZmVjdGl2ZWx5IGxlYWogYW5kIHRoaXMgcmVz
dWx0cyBpbiBlcnJvciBvdXRwdXQgYmVpbmcgbG9nZ2VkIC0gd2Ugc2hvdWxkIGF2b2lkIGFkZGlu
ZyBhc3NvY2lhdGVkIG9iamVjdHMgdG8gaW1tb3J0YWwgb2JqZWN0cy4KKyAgICAvLyAoMikgQSBs
b25nIGxpdmVkIG9iamVjdCBtYXkgcmFjayB1cCBtYW55IEpTVmFsdWVzLiBXaGVuIHRoZSBjb250
ZXh0cyBhcmUgcmVsZWFzZWQgdGhlc2Ugd2lsbCB1bnByb2N0ZWN0IHRoZSBhc3NvY2lhdGVkIEph
dmFTY3JpcHQgb2JqZWN0cywKKyAgICAvLyAgICAgYnV0IHN0aWxsLCB3b3VsZCBwcm9iYWJseSBu
aWNlciBpZiB3ZSBtYWRlIGl0IHNvIHRoYXQgb25seSBvbmUgYXNzb2NpYXRlZCBvYmplY3Qgd2Fz
IHJlcXVpcmVkLCBicm9hZGNhc3Rpbmcgb2JqZWN0IGRlYWxsb2MuCisgICAgb2JqY19zZXRBc3Nv
Y2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0LCB3cmFwcGVyLCBPQkpDX0FTU09DSUFUSU9O
X1JFVEFJTik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK0BlbmQKKworaWQgdHJ5VW53cmFw
T2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkK
K3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVm
IG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgLy9BU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgaWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3Mo
Y29udGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiAoaWQpSlNP
YmplY3RHZXRQcml2YXRlKG9iamVjdCk7CisgICAgaWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJs
b2NrKGNvbnRleHQsIG9iamVjdCkpCisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgcmV0dXJu
IG5pbDsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFT
Y3JpcHRDb3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZh
U2NyaXB0Q29yZS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0phdmFTY3JpcHRDb3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDQgKzI5LDEzIEBACiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KIAorI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2lt
cG9ydCAiSlNDb250ZXh0LmgiCisjaW1wb3J0ICJBUElKU1ZhbHVlLmgiCisjaW1wb3J0ICJKU1Zp
cnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0ICJKU0V4cG9ydC5oIgorCisjZW5kaWYKKwogI2VuZGlm
IC8qIEphdmFTY3JpcHRDb3JlX2ggKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lmIEpTX09C
SkNfQVBJX0VOQUJMRUQKKworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRo
b2QoSlNDb250ZXh0KiwgQ2xhc3MsIFByb3RvY29sKiwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBT
RUwsIGNvbnN0IGNoYXIqIHR5cGVzKTsKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9u
Rm9yQmxvY2soSlNDb250ZXh0KiwgaWQpOworCitpZCB0cnlVbndyYXBCbG9jayhKU0dsb2JhbENv
bnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0
Q29yZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0Lmgi
CisjaW1wb3J0ICJBUElTaGltcy5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkpTQmxv
Y2tBZGFwdG9yLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNX
cmFwcGVyTWFwLmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIk9iakND
YWxsYmFja0Z1bmN0aW9uLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgorI2ltcG9y
dCAib2JqYy9ydW50aW1lLmgiCisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUvQmxvY2tfcHJp
dmF0ZS5oPgorI2ltcG9ydCAiL3Vzci9sb2NhbC9pbmNsdWRlL29iamMvb2JqYy1pbnRlcm5hbC5o
IgorI2ltcG9ydCAid3RmL1JldGFpblB0ci5oIgorCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldChOU0ludm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpTVmFsdWVSZWYs
IEpTVmFsdWVSZWYqKSA9IDA7CisKKyAgICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gbV9uZXh0
OworfTsKKworQ2FsbGJhY2tBcmd1bWVudDo6fkNhbGxiYWNrQXJndW1lbnQoKQoreworfQorCitj
bGFzcyBDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbiA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdl
ciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50
LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50KTsKKyAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDYWxsYmFja0FyZ3VtZW50
SW50ZWdlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlND
b250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVUb051
bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9u
KSk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3Vt
ZW50TnVtYmVyXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2Fs
bGJhY2tBcmd1bWVudERvdWJsZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVu
dE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24p
OworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVu
dE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEpTVmFsdWUgOiBw
dWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0
aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29u
dGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5k
ZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRJ
ZCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAg
ICAgIGlkIHZhbHVlID0gdmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudCk7CisgICAgICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsK
KyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyhDbGFz
cyBjbHMpCisgICAgICAgIDogQ2FsbGJhY2tBcmd1bWVudCgpCisgICAgICAgICwgbV9jbGFzcyhj
bHMpCisgICAgeworICAgICAgICBbbV9jbGFzcyByZXRhaW5dOworICAgIH0KKworICAgIH5DYWxs
YmFja0FyZ3VtZW50T2ZDbGFzcygpCisgICAgeworICAgICAgICBbbV9jbGFzcyByZWxlYXNlXTsK
KyAgICB9CisKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdl
ciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICBpZCBv
YmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgYXJndW1lbnQpOworICAgICAgICBpZiAo
b2JqZWN0ICYmIFtvYmplY3QgaXNLaW5kT2ZDbGFzczptX2NsYXNzXSkgeworICAgICAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChKU1ZhbHVlSXNO
dWxsKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjdHgsIGFyZ3VtZW50KSkg
eworICAgICAgICAgICAgb2JqZWN0ID0gbmlsOworICAgICAgICAgICAgW2ludm9jYXRpb24gc2V0
QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGN0eCksICJBcmd1bWVudCBkb2VzIG5vdCBtYXRjaCBPYmplY3RpdmUt
QyBDbGFzcyIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xhc3MgbV9jbGFzczsKK307CisK
K2NsYXNzIENhbGxiYWNrQXJndW1lbnROU051bWJlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50
ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZCB2YWx1ZSA9IHZh
bHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4
Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4
OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNT
dHJpbmcgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvU3RyaW5nKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2Nh
dGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQor
fTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZCB2YWx1ZSA9
IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBl
eGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRl
eDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5T
QXJyYXkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvQXJyYXkoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0
aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9
OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDogcHVibGljIENhbGxiYWNr
QXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlv
biwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVS
ZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIGlkIHZh
bHVlID0gdmFsdWVUb0RpY3Rpb25hcnkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
YXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2
YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFj
a0FyZ3VtZW50U3RydWN0IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAg
IENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlv
biwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2Nh
dGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25J
bnZvY2F0aW9uIHJldGFpbl07CisgICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50Owor
ICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25t
ZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFy
KiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikg
KyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkNh
bGxiYWNrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9j
YXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1l
bnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1
ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgW21fY29udmVyc2lv
bkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1ZV07CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVmZmVyXTsKKyAgICAgICAgW2ludm9jYXRp
b24gc2V0QXJndW1lbnQ6bV9idWZmZXIgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQor
Citwcml2YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAg
ICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitjbGFzcyBD
YWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsK
K3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayhKU0Jsb2NrQWRhcHRv
ciogYWRhcHRvcikKKyAgICAgICAgOiBtX2FkYXB0b3IoYWRhcHRvcikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgfkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKCkKKyAgICB7
CisgICAgICAgIFttX2FkYXB0b3IgcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKKyAgICB7CisgICAgICAgIGlkIGJsb2NrID0gW21fYWRhcHRvciBibG9ja0Zyb21WYWx1ZTph
cmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dCB3aXRoRXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZibG9jayBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNCbG9ja0FkYXB0b3IqIG1fYWRhcHRvcjsKK307
CisKK2NsYXNzIEFyZ3VtZW50VHlwZURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENh
bGxiYWNrQXJndW1lbnQqIFJlc3VsdFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJbnRlZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQ2FsbGJhY2tBcmd1bWVudEludGVnZXI8VD47CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlRG91YmxlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudERvdWJsZTxUPjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IENhbGxiYWNrQXJndW1lbnRCb29sZWFuOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRJZDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFzcyhjb25zdCBjaGFyKiBiZWdpbiwgY29uc3Qg
Y2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsK
KyAgICAgICAgQ2xhc3MgY2xzID0gb2JqY19nZXRDbGFzcyhjb3B5KTsKKyAgICAgICAgaWYgKCFj
bHMpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgIGlmIChjbHMgPT0gW0pTVmFs
dWUgY2xhc3NdKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SlNWYWx1
ZTsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNTdHJpbmcgY2xhc3NdKQorICAgICAgICAgICAgcmV0
dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmc7CisgICAgICAgIGlmIChjbHMgPT0gW05T
TnVtYmVyIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5T
TnVtYmVyOworICAgICAgICBpZiAoY2xzID09IFtOU0RhdGUgY2xhc3NdKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEYXRlOworICAgICAgICBpZiAoY2xzID09IFtO
U0FycmF5IGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5T
QXJyYXk7CisgICAgICAgIGlmIChjbHMgPT0gW05TRGljdGlvbmFyeSBjbGFzc10pCisgICAgICAg
ICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk7CisKKyAgICAgICAg
cmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyhjbHMpOworICAgIH0KKworICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciog
ZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayhbW0pTQmxvY2tBZGFw
dG9yIGFsbG9jXSBpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3RvY29sOmNvcHldKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJlZ2lu
LCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2lu
LCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVUb1R5
cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0Fy
Z3VtZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5D
YWxsYmFja1Jlc3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBn
ZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiopID0gMDsKK307CisKK2Ns
YXNzIENhbGxiYWNrUmVzdWx0Vm9pZCA6IHB1YmxpYyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQqIGNv
bnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpOworICAgIH0KK307CisKK2Ns
YXNzIENhbGxiYWNrUmVzdWx0SWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWU7Cisg
ICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVy
biBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tSZXN1bHROdW1lcmljIDogcHVibGljIENhbGxiYWNr
UmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlv
biogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7Cisg
ICAgICAgIFQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1
ZV07CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpLCAoZG91YmxlKXZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFj
a1Jlc3VsdEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgorICAgIHZp
cnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAgICAg
ICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSk7
CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1bHRTdHJ1Y3QgOiBwdWJsaWMgQ2FsbGJh
Y2tSZXN1bHQgeworcHVibGljOgorICAgIENhbGxiYWNrUmVzdWx0U3RydWN0KE5TSW52b2NhdGlv
biogY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgICAg
ICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAgewor
ICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJbnRl
Z2VyIHNpemUsIGFsaWdubWVudDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29k
ZWRUeXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAgICAg
ICBtX2FsbG9jYXRpb24gPSAoY2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAgICAg
ICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtX2FsbG9jYXRpb24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFja1Jlc3VsdFN0cnVjdCgpCisgICAgeworICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAgICAgICAgZnJlZShtX2FsbG9j
YXRpb24pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2Nh
dGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7
CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYWxsb2NhdGlvbl07CisKKyAg
ICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0
SW5kZXg6Ml07CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZj
b250ZXh0IGF0SW5kZXg6M107CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGludm9r
ZVdpdGhUYXJnZXQ6W0pTVmFsdWUgY2xhc3NdXTsKKworICAgICAgICBKU1ZhbHVlKiB2YWx1ZTsK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBjaGFy
KiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitjbGFzcyBSZXN1bHRU
eXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQ2FsbGJhY2tSZXN1bHQqIFJlc3Vs
dFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVJbnRlZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHRO
dW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGlj
IFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxi
YWNrUmVzdWx0TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
Qm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0Qm9vbGVhbjsK
KyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlVm9pZCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0Vm9pZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVz
dWx0VHlwZSB0eXBlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3Vs
dElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jl
c3VsdElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJsb2NrKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tS
ZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVTdHJ1Y3QoY29u
c3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1Jh
bmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9jYXRpb24qIGludm9jYXRp
b24gPSB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgICAgICByZXR1cm4g
bmV3IENhbGxiYWNrUmVzdWx0U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1
cm4gbmlsOworICAgIH0KK307CisKK2VudW0gQ2FsbGJhY2tUeXBlIHsKKyAgICBDYWxsYmFja0lu
c3RhbmNlTWV0aG9kLAorICAgIENhbGxiYWNrQ2xhc3NNZXRob2QsCisgICAgQ2FsbGJhY2tCbG9j
aworfTsKKworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24geworcHVibGljOgorICAgIE9iakND
YWxsYmFja0Z1bmN0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFzcywgUGFzc093blB0cjxD
YWxsYmFja0FyZ3VtZW50PiBhcmd1bWVudHMsIFBhc3NPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJl
c3VsdCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3R5cGUodHlw
ZSkKKyAgICAgICAgLCBtX2luc3RhbmNlQ2xhc3MoW2luc3RhbmNlQ2xhc3MgcmV0YWluXSkKKyAg
ICAgICAgLCBtX2ludm9jYXRpb24oaW52b2NhdGlvbikKKyAgICAgICAgLCBtX2FyZ3VtZW50cyhh
cmd1bWVudHMpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCB8fCBpbnN0YW5jZUNsYXNzKTsKKyAg
ICB9CisKKyAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgW21faW5z
dGFuY2VDbGFzcyByZWxlYXNlXTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGNhbGwoSlNDb250
ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
KworICAgIEpTQ29udGV4dCogY29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250
ZXh0LmdldCgpOworICAgIH0KKworICAgIGlkIHdyYXBwZWRCbG9jaygpCisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlID09IENhbGxiYWNrQmxvY2sgPyBbbV9pbnZvY2F0aW9uIHRhcmdldF0g
OiBuaWw7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYWtDb250ZXh0UmVmIG1fY29udGV4dDsK
KyAgICBDYWxsYmFja1R5cGUgbV90eXBlOworICAgIENsYXNzIG1faW5zdGFuY2VDbGFzczsKKyAg
ICBXVEY6OlJldGFpblB0cjxOU0ludm9jYXRpb24+IG1faW52b2NhdGlvbjsKKyAgICBPd25QdHI8
Q2FsbGJhY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgT3duUHRyPENhbGxiYWNrUmVzdWx0
PiBtX3Jlc3VsdDsKK307CisKK3N0YXRpYyB2b2lkIG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxp
emUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIGRlbGV0ZSAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBv
YmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxsZXJDb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICAvLyBSZXRha2UgdGhlIEFQSSBsb2NrIC0gd2UgbmVlZCB0aGlz
IGZvciBhIGZldyByZWFzb25zOgorICAgIC8vICgxKSBXZSBkb24ndCB3YW50IHRvIHN1cHBvcnQg
dGhlIEMtQVBJJ3MgY29uZnVzaW5nIGRyb3BzLWxvY2tzLW9uY2UgcG9saWN5IC0gc2hvdWxkIG9u
bHkgZHJvcCBsb2NrcyBpZiB3ZSBjYW4gZG8gc28gcmVjdXJzaXZleS4KKyAgICAvLyAoMikgV2Un
cmUgY2FsaW5nIHNvbWUgSlNDIGludGVybmFscyB0aGF0IHJlcXVpcmUgdXMgdG8gYmUgb24gdGhl
ICdpbnNpZGUnIC0gZS5nLiBjcmVhdGVUeXBlRXJyb3IuCisgICAgLy8gKDMpIFdlIG5lZWQgdG8g
YmUgbG9ja2VkIChwZXIgY29udGV4dCB3b3VsZCBiZSBmaW5lKSBhZ2FpbnN0IGNvbmZsaWN0aW5n
IHVzZ2FlIG9mIHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbidzIE5TSW52b2NhdGlvbi4KKyAgICBK
U0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250ZXh0KSk7CisKKyAgICBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24qKUpT
T2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbik7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gY2Fs
bGJhY2stPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTQKKyAgICAgICAg
Ly8gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRleHQgYmUgcmV0YWluZWQsIGl0
IHdvdWxkIHByb2JhYmx5IGJlIG1vcmUKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgdG8gdXNlIGEg
bmV3IEpTQ29udGV4dCBpbnN0YW5jZSAoY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeSkuCisgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNhbGxlckNv
bnRleHQpLCAiT2JqZWN0aXZlLUMgY2FsbGJhY2sgZnVuY3Rpb24gY29udGV4dCByZWxlYXNlZCIp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNhbGxlckNvbnRleHQpOwor
ICAgIH0KKworICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7CisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQ7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtjb250ZXh0IGJlZ2luQ2Fs
bGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTp0aGlzT2JqZWN0IGFyZ3VtZW50
Q291bnQ6YXJndW1lbnRDb3VudCBhcmd1bWVudHM6YXJndW1lbnRzXTsKKyAgICAgICAgcmVzdWx0
ID0gY2FsbGJhY2stPmNhbGwoY29udGV4dCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJn
dW1lbnRzLCBleGNlcHRpb24pOworICAgICAgICBpZiAoY29udGV4dC5leGNlcHRpb24pCisgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdmFsdWVJbnRlcm5hbFZhbHVlKGNvbnRleHQuZXhjZXB0aW9u
KTsKKyAgICAgICAgW2NvbnRleHQgZW5kQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhXTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpTQ2xhc3NSZWYgb2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DbGFzcygpCit7CisgICAgc3RhdGljIFNwaW5Mb2NrIGluaXRMb2NrID0g
U1BJTkxPQ0tfSU5JVElBTElaRVI7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmaW5p
dExvY2spOworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSAwOworCisgICAgaWYg
KCFjbGFzc1JlZikgeworICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOworICAg
ICAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGRlZmlu
aXRpb24uY2xhc3NOYW1lID0gIkZ1bmN0aW9uIjsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6
ZSA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemU7CisgICAgICAgIGRlZmluaXRpb24uY2Fs
bEFzRnVuY3Rpb24gPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uOworICAgICAg
ICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0KKworICAgIHJl
dHVybiBjbGFzc1JlZjsKK30KKworSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y2Fs
bChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCk7CisKKyAgICBzaXplX3QgZmlyc3RBcmd1bWVudDsKKyAgICBzd2l0Y2gg
KG1fdHlwZSkgeworICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDogeworICAgICAgICBp
ZCB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgdGhpc09iamVjdCk7CisgICAgICAg
IGlmICghdGFyZ2V0IHx8ICFbdGFyZ2V0IGlzS2luZE9mQ2xhc3M6bV9pbnN0YW5jZUNsYXNzXSkg
eworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRv
SlMoY3R4KSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9iamVjdGl2ZS1DIGluc3RhbmNl
IG1ldGhvZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OworICAgICAgICB9CisgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07Cisg
ICAgfQorICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKKyAgICAgICAgZmlyc3RBcmd1bWVu
dCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbGJhY2tCbG9jazoKKyAgICAgICAg
Zmlyc3RBcmd1bWVudCA9IDE7CisgICAgfQorCisgICAgc2l6ZV90IGFyZ3VtZW50TnVtYmVyID0g
MDsKKyAgICBmb3IgKENhbGxiYWNrQXJndW1lbnQqIGFyZ3VtZW50ID0gbV9hcmd1bWVudHMuZ2V0
KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQuZ2V0KCkpIHsKKyAgICAg
ICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IGFyZ3VtZW50TnVtYmVyIDwgYXJndW1lbnRDb3VudCA/IGFy
Z3VtZW50c1thcmd1bWVudE51bWJlcl0gOiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworICAg
ICAgICBhcmd1bWVudC0+c2V0KG1faW52b2NhdGlvbi5nZXQoKSwgYXJndW1lbnROdW1iZXIgKyBm
aXJzdEFyZ3VtZW50LCBjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCpl
eGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
KyAgICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICB9CisKKyAgICBbbV9pbnZvY2F0aW9uIGlu
dm9rZV07CisKKyAgICByZXR1cm4gbV9yZXN1bHQtPmdldChtX2ludm9jYXRpb24uZ2V0KCksIGNv
bnRleHQsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBib29sIGJsb2NrU2lnbmF0dXJlQ29udGFp
bnNDbGFzcygpCit7CisgICAgZW51bSBDaGVja1Jlc3VsdCB7CisgICAgICAgIENoZWNrUmVzdWx0
RmFsc2UsCisgICAgICAgIENoZWNrUmVzdWx0VHJ1ZSwKKyAgICAgICAgQ2hlY2tSZXN1bHRVbmtu
b3duCisgICAgfTsKKyAgICBzdGF0aWMgZW51bSBDaGVja1Jlc3VsdCBjaGVjayA9IENoZWNrUmVz
dWx0VW5rbm93bjsKKyAgICBpZiAoY2hlY2sgPT0gQ2hlY2tSZXN1bHRVbmtub3duKSB7CisgICAg
ICAgIGlkIGJsb2NrID0gXihOU1N0cmluZyAqc3RyaW5nKXsgcmV0dXJuIHN0cmluZzsgfTsKKyAg
ICAgICAgY2hlY2sgPSBfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykgJiYgc3Ryc3RyKF9CbG9j
a19zaWduYXR1cmUoYmxvY2spLCAiTlNTdHJpbmciKSA/IENoZWNrUmVzdWx0VHJ1ZSA6IENoZWNr
UmVzdWx0RmFsc2U7CisgICAgfQorICAgIHJldHVybiAoYm9vbCljaGVjazsKK30KKworaW5saW5l
IGJvb2wgc2tpcE51bWJlcihjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgaWYgKCFpc2Rp
Z2l0KCpwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB3aGlsZShpc2RpZ2l0
KCorK3Bvc2l0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBKU09iamVjdFJl
ZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oSlNDb250ZXh0KiBjb250ZXh0LCBO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIENhbGxiYWNrVHlwZSB0eXBlLCBDbGFzcyBpbnN0YW5j
ZUNsYXNzLCBjb25zdCBjaGFyKiBzaWduYXR1cmVXaXRoT2JqY0NsYXNzZXMpCit7CisgICAgY29u
c3QgY2hhciogcG9zaXRpb24gPSBzaWduYXR1cmVXaXRoT2JqY0NsYXNzZXM7CisKKyAgICBPd25Q
dHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0UHRyKHBhcnNlT2JqQ1R5cGU8UmVzdWx0
VHlwZURlbGVnYXRlPihwb3NpdGlvbikpOworICAgIGlmICghcmVzdWx0IHx8ICFza2lwTnVtYmVy
KHBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDoKKyAgICBjYXNlIENhbGxiYWNrQ2xhc3NN
ZXRob2Q6CisgICAgICAgIGlmICgnQCcgIT0gKihwb3NpdGlvbisrKSB8fCAhc2tpcE51bWJlcihw
b3NpdGlvbikgfHwgJzonICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBOdW1iZXIocG9zaXRpb24p
KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxs
YmFja0Jsb2NrOgorICAgICAgICBpZiAoKCdAJyAhPSAqKHBvc2l0aW9uKyspKSB8fCAoJz8nICE9
ICoocG9zaXRpb24rKykpIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSB8fCAoIWJsb2NrU2lnbmF0
dXJlQ29udGFpbnNDbGFzcygpICYmIHN0cmNocihwb3NpdGlvbiwgJ0AnKSkpCisgICAgICAgICAg
ICByZXR1cm4gbmlsOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBPd25QdHI8Q2FsbGJh
Y2tBcmd1bWVudD4gYXJndW1lbnRzID0gMDsKKyAgICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4q
IG5leHRBcmd1bWVudCA9ICZhcmd1bWVudHM7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudCA9
IDA7CisgICAgd2hpbGUgKCpwb3NpdGlvbikgeworICAgICAgICBPd25QdHI8Q2FsbGJhY2tBcmd1
bWVudD4gYXJndW1lbnQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPEFyZ3VtZW50VHlwZURlbGVn
YXRlPihwb3NpdGlvbikpOworICAgICAgICBpZiAoIWFyZ3VtZW50IHx8ICFza2lwTnVtYmVyKHBv
c2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgKm5leHRBcmd1bWVu
dCA9IGFyZ3VtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV4dEFyZ3VtZW50ID0gJigqbmV4dEFy
Z3VtZW50KS0+bV9uZXh0OworICAgICAgICArK2FyZ3VtZW50Q291bnQ7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTIK
KyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIHJlZ3VsYXIgaG9zdCBmdW5jdGlvbiwgcmF0
aGVyIHRoYW4gYSBjYWxsYWJsZSBDIEFQSSBvYmplY3QuCisgICAgLy8gUGF0Y2ggaW4gdGhlIHJp
Z2h0IGxlbmd0aCAmIFtQcm90b3R5cGVdIHZhbHVlcyBmb3Igbm93LCBidXQgc2hvdWxkIGZpeCB0
aGlzLgorICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyBjdXJyZW50bHkgZmFpbHMs
IHNpbmNlIHRoaXMgaXMgbm90IHlldCBhIHN1YmNsYXNzIG9mIGZ1bmN0b24sIGJ1dCBjYWxsICYg
YXBwbHkgZG8gd29yay4KKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmpDQ2FsbGJhY2tGdW5jdGlv
bkNsYXNzKCksIG5ldyBPYmpDQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCB0
eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1bWVudHMucmVsZWFzZSgpLCByZXN1bHQucmVsZWFzZSgp
KSk7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5jdGlv
bk9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgdmFsdWVbQCJsZW5ndGgiXSA9IEAoYXJn
dW1lbnRDb3VudCk7CisgICAgdmFsdWVbQCJfX3Byb3RvX18iXSA9IGNvbnRleHRbQCJGdW5jdGlv
biJdW0AicHJvdG90eXBlIl07CisgICAgdmFsdWVbQCJ0b1N0cmluZyJdID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKXsgcmV0dXJuICciCisgICAgICAgICJmdW5jdGlvbiA8
T2JqZWN0aXZlLUM+KCkgeyIgIlxcbiIKKyAgICAgICAgIiAgICBbbmF0aXZlIGNvZGVdIiAgICAg
ICAgICAiXFxuIgorICAgICAgICAifSIgICAgICAgICAgICAgICAgICAgICAgICAgICJcXG4iCisg
ICAgIid9KSJdOworICAgIHJldHVybiBmdW5jdGlvbk9iamVjdDsKK30KKworSlNPYmplY3RSZWYg
b2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBj
bHMsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBTRUwgc2VsLCBj
b25zdCBjaGFyKiB0eXBlcykKK3sKKyAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJ
bnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOnR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0U2Vs
ZWN0b3I6c2VsXTsKKyAgICBpZiAoIWlzSW5zdGFuY2VNZXRob2QpCisgICAgICAgIFtpbnZvY2F0
aW9uIHNldFRhcmdldDpjbHNdOworICAgIHJldHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvcklu
dm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlvbiwgaXNJbnN0YW5jZU1ldGhvZCA/IENhbGxiYWNr
SW5zdGFuY2VNZXRob2QgOiBDYWxsYmFja0NsYXNzTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9kID8g
Y2xzIDogbmlsLCBfcHJvdG9jb2xfZ2V0TWV0aG9kVHlwZUVuY29kaW5nKHByb3RvY29sLCBzZWws
IFlFUywgaXNJbnN0YW5jZU1ldGhvZCkpOworfQorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCogY29udGV4dCwgaWQgdGFyZ2V0KQoreworICAgIGlm
ICghX0Jsb2NrX2hhc19zaWduYXR1cmUodGFyZ2V0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Y29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZSh0YXJnZXQpOworICAgIE5T
SW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlvbldpdGhNZXRo
b2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6c2ln
bmF0dXJlXV07CisgICAgW2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07CisgICAgcmV0dXJu
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCBD
YWxsYmFja0Jsb2NrLCBuaWwsIHNpZ25hdHVyZSk7Cit9CisKK2lkIHRyeVVud3JhcEJsb2NrKEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgaWYg
KCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIG9iamVjdCwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25DbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gKChPYmpDQ2Fs
bGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpLT53cmFwcGVkQmxvY2so
KTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50
aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpj
UnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KKworaW5saW5lIGJvb2wgcHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2woUHJv
dG9jb2wqIGNhbmRpZGF0ZSwgUHJvdG9jb2wqIHRhcmdldCkKK3sKKyAgICB1bnNpZ25lZCBwcm90
b2NvbFByb3RvY29sc0NvdW50OworICAgIFByb3RvY29sKiogcHJvdG9jb2xQcm90b2NvbHMgPSBw
cm90b2NvbF9jb3B5UHJvdG9jb2xMaXN0KGNhbmRpZGF0ZSwgJnByb3RvY29sUHJvdG9jb2xzQ291
bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbFByb3RvY29sc0NvdW50
OyArK2kpIHsKKyAgICAgICAgaWYgKHByb3RvY29sX2lzRXF1YWwocHJvdG9jb2xQcm90b2NvbHNb
aV0sIHRhcmdldCkpIHsKKyAgICAgICAgICAgIGZyZWUocHJvdG9jb2xQcm90b2NvbHMpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZShwcm90b2Nv
bFByb3RvY29scyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdm9pZCBmb3JFYWNo
UHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChQcm90b2NvbCogYmFzZSwgUHJvdG9jb2wqIHBy
b3RvY29sLCB2b2lkICheY2FsbGJhY2spKFByb3RvY29sKikpCit7CisgICAgQVNTRVJUKGJhc2Up
OworICAgIEFTU0VSVChwcm90b2NvbCk7CisKKyAgICB1bnNpZ25lZCBwcm90b2NvbHNDb3VudDsK
KyAgICBQcm90b2NvbCoqIHByb3RvY29scyA9IHByb3RvY29sX2NvcHlQcm90b2NvbExpc3QoYmFz
ZSwgJnByb3RvY29sc0NvdW50KTsKKyAgICBpZiAocHJvdG9jb2xzQ291bnQpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0NvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChwcm90b2NvbHNbaV0sIHByb3RvY29s
KSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm90b2NvbHNbaV0pOworICAgICAgICAgICAg
Zm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wocHJvdG9jb2xzW2ldLCBwcm90b2Nv
bCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIGZyZWUocHJvdG9jb2xzKTsKKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKENs
YXNzIGJhc2UsIFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxiYWNrKShQcm90b2NvbCop
KQoreworICAgIEFTU0VSVChiYXNlKTsKKyAgICBBU1NFUlQocHJvdG9jb2wpOworCisgICAgdW5z
aWduZWQgcHJvdG9jb2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbHMgPSBjbGFzc19j
b3B5UHJvdG9jb2xMaXN0KGJhc2UsICZwcm90b2NvbHNDb3VudCk7CisgICAgaWYgKHByb3RvY29s
c0NvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNDb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBpZiAocHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2wocHJv
dG9jb2xzW2ldLCBwcm90b2NvbCkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2socHJvdG9jb2xz
W2ldKTsKKyAgICAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKHBy
b3RvY29sc1tpXSwgcHJvdG9jb2wsIGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBmcmVl
KHByb3RvY29scyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JFYWNoTWV0aG9kSW5DbGFz
cyhDbGFzcyBjbHMsIHZvaWQgKF5jYWxsYmFjaykoTWV0aG9kIG1ldGhvZCkpCit7CisgICAgdW5z
aWduZWQgY291bnQ7CisgICAgTWV0aG9kKiBtZXRob2RzID0gY2xhc3NfY29weU1ldGhvZExpc3Qo
Y2xzLCAmY291bnQpOworICAgIGlmIChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhvZHNbaV0pOwor
ICAgICAgICBmcmVlKG1ldGhvZHMpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgZm9yRWFjaE1l
dGhvZEluUHJvdG9jb2woUHJvdG9jb2wqIHByb3RvY29sLCBCT09MIGlzUmVxdWlyZWRNZXRob2Qs
IEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgdm9pZCAoXmNhbGxiYWNrKShTRUwsIGNvbnN0IGNoYXIq
KSkKK3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBzdHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3Jp
cHRpb24qIG1ldGhvZHMgPSBwcm90b2NvbF9jb3B5TWV0aG9kRGVzY3JpcHRpb25MaXN0KHByb3Rv
Y29sLCBpc1JlcXVpcmVkTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9kLCAmY291bnQpOworICAgIGlm
IChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
KyAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhvZHNbaV0ubmFtZSwgbWV0aG9kc1tpXS50eXBlcyk7
CisgICAgICAgIGZyZWUobWV0aG9kcyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JFYWNo
UHJvcGVydHlJblByb3RvY29sKFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxiYWNrKShv
YmpjX3Byb3BlcnR5X3QpKQoreworICAgIHVuc2lnbmVkIGNvdW50OworICAgIG9iamNfcHJvcGVy
dHlfdCogcHJvcGVydGllcyA9IHByb3RvY29sX2NvcHlQcm9wZXJ0eUxpc3QocHJvdG9jb2wsICZj
b3VudCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydGllc1tpXSk7CisgICAg
ICAgIGZyZWUocHJvcGVydGllcyk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjaGFyIG9wZW4sIGNo
YXIgY2xvc2U+Cit2b2lkIHNraXBQYWlyKGNvbnN0IGNoYXIqJiBwb3NpdGlvbikKK3sKKyAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gMTsKKyAgICBkbyB7CisgICAgICAgIGNoYXIgYyA9ICoocG9zaXRp
b24rKyk7CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIEB0aHJvdyBbTlNFeGNlcHRpb24g
ZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gcmVhc29u
OkAiTWFsZm9ybWVkIHR5cGUgZW5jb2RpbmciIHVzZXJJbmZvOm5pbF07CisgICAgICAgIGlmIChj
ID09IG9wZW4pCisgICAgICAgICAgICArK2NvdW50OworICAgICAgICBlbHNlIGlmIChjID09IGNs
b3NlKQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICB9IHdoaWxlIChjb3VudCk7Cit9CisKK2Ns
YXNzIFN0cmluZ1JhbmdlIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdSYW5nZShjb25zdCBjaGFyKiBi
ZWdpbiwgY29uc3QgY2hhciogZW5kKSA6IG1fcHRyKHN0cm5kdXAoYmVnaW4sIGVuZCAtIGJlZ2lu
KSkgeyB9CisgICAgflN0cmluZ1JhbmdlKCkgeyBmcmVlKG1fcHRyKTsgfQorICAgIG9wZXJhdG9y
IGNvbnN0IGNoYXIqKCkgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBjb25zdCBjaGFyKiBnZXQoKSB7
IHJldHVybiBtX3B0cjsgfQorCitwcml2YXRlOgorICAgIGNoYXIqIG1fcHRyOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgRGVsZWdhdGVUeXBlPgordHlwZW5hbWUgRGVsZWdhdGVUeXBlOjpSZXN1
bHRUeXBlIHBhcnNlT2JqQ1R5cGUoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIEFTU0VS
VCgqcG9zaXRpb24pOworCisgICAgc3dpdGNoICgqKHBvc2l0aW9uKyspKSB7CisgICAgY2FzZSAn
Yyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGNo
YXI+KCk7CisgICAgY2FzZSAnaSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBs
YXRlIHR5cGVJbnRlZ2VyPGludD4oKTsKKyAgICBjYXNlICdzJzoKKyAgICAgICAgcmV0dXJuIERl
bGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8c2hvcnQ+KCk7CisgICAgY2FzZSAnbCc6
CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGxvbmc+
KCk7CisgICAgY2FzZSAncSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRl
IHR5cGVEb3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigpOworICAgIGNhc2UgJ0MnOgorICAgICAg
ICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBjaGFy
PigpOworICAgIGNhc2UgJ0knOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0
ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZD4oKTsKKyAgICBjYXNlICdTJzoKKyAgICAgICAgcmV0dXJu
IERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8dW5zaWduZWQgc2hvcnQ+KCk7Cisg
ICAgY2FzZSAnTCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJ
bnRlZ2VyPHVuc2lnbmVkIGxvbmc+KCk7CisgICAgY2FzZSAnUSc6CisgICAgICAgIHJldHVybiBE
ZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigpOwor
ICAgIGNhc2UgJ2YnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBl
RG91YmxlPGZsb2F0PigpOworICAgIGNhc2UgJ2QnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVU
eXBlOjp0ZW1wbGF0ZSB0eXBlRG91YmxlPGRvdWJsZT4oKTsKKyAgICBjYXNlICdCJzoKKyAgICAg
ICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJvb2woKTsKKyAgICBjYXNlICd2JzoKKyAgICAg
ICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZVZvaWQoKTsKKyAgICAKKyAgICBjYXNlICdAJzog
eyAvLyBBbiBvYmplY3QgKHdoZXRoZXIgc3RhdGljYWxseSB0eXBlZCBvciB0eXBlZCBpZCkKKyAg
ICAgICAgaWYgKHBvc2l0aW9uWzBdID09ICc/JyAmJiBwb3NpdGlvblsxXSA9PSAnPCcpIHsKKyAg
ICAgICAgICAgIHBvc2l0aW9uICs9IDI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdpbiA9
IHBvc2l0aW9uOworICAgICAgICAgICAgc2tpcFBhaXI8JzwnLCc+Jz4ocG9zaXRpb24pOworICAg
ICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJsb2NrKGJlZ2luLCBwb3NpdGlvbiAt
IDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpwb3NpdGlvbiA9PSAnIicpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHBvc2l0
aW9uID0gaW5kZXgocG9zaXRpb24sICciJyk7CisgICAgICAgICAgICByZXR1cm4gRGVsZWdhdGVU
eXBlOjp0eXBlT2ZDbGFzcyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICB9CisKKyAgICBjYXNlICd7Jzog
eyAvLyB7bmFtZT10eXBlLi4ufSBBIHN0cnVjdHVyZQorICAgICAgICBjb25zdCBjaGFyKiBiZWdp
biA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgc2tpcFBhaXI8J3snLCd9Jz4ocG9zaXRpb24pOwor
ICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlU3RydWN0KGJlZ2luLCBwb3NpdGlvbik7
CisgICAgfQorCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgQyBzdHJpbmdzLCBhcnJheXMsIHBvaW50
ZXJzLCB1bmlvbnMsIGJpdGZpZWxkcywgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgY2FzZSAnKic6
IC8vIEEgY2hhcmFjdGVyIHN0cmluZyAoY2hhciAqKQorICAgIGNhc2UgJ1snOiAvLyBbYXJyYXkg
dHlwZV0gQW4gYXJyYXkKKyAgICBjYXNlICcoJzogLy8gKG5hbWU9dHlwZS4uLikgQSB1bmlvbgor
ICAgIGNhc2UgJ2InOiAvLyBibnVtIEEgYml0IGZpZWxkIG9mIG51bSBiaXRzCisgICAgY2FzZSAn
Xic6IC8vIF50eXBlIEEgcG9pbnRlciB0byB0eXBlCisgICAgY2FzZSAnPyc6IC8vIEFuIHVua25v
d24gdHlwZSAoYW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNvZGUgaXMgdXNlZCBmb3IgZnVuY3Rp
b24gcG9pbnRlcnMpCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgT2JqZWN0aXZlLUMgQ2xhc3MsIFNF
TAorICAgIGNhc2UgJyMnOiAvLyBBIGNsYXNzIG9iamVjdCAoQ2xhc3MpCisgICAgY2FzZSAnOic6
IC8vIEEgbWV0aG9kIHNlbGVjdG9yIChTRUwpCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkuYwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEyIEBAIHN0YXRpYyBk
b3VibGUgbmFuKGNvbnN0IGNoYXIqKQogCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisjZW5kaWYKKwogc3RhdGljIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0Owotc3RhdGljIGludCBmYWlsZWQ7CitpbnQgZmFpbGVkOwogc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzQXNCb29sZWFuKEpTVmFsdWVSZWYgdmFsdWUsIGJvb2wgZXhwZWN0
ZWRWYWx1ZSkKIHsKICAgICBpZiAoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgIT0g
ZXhwZWN0ZWRWYWx1ZSkgewpAQCAtMTA0MCw2ICsxMDQ0LDEwIEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiBhcmd2W10pCiAgICAgOjpTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKE1BQykKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworI2VuZGlmCisKICAgICBjb25z
dCBjaGFyICpzY3JpcHRQYXRoID0gInRlc3RhcGkuanMiOwogICAgIGlmIChhcmdjID4gMSkgewog
ICAgICAgICBzY3JpcHRQYXRoID0gYXJndlsxXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCisKKy8vIEZvciBfQmxvY2tfaGFzX3NpZ25hdHVyZSAmIF9CbG9ja19z
aWduYXR1cmUKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgX19jcGx1c3BsdXMgMAorI2Vu
ZGlmCisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUvQmxvY2tfcHJpdmF0ZS5oPgorCitleHRl
cm4gaW50IGZhaWxlZDsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisKKyNpZiBKU19P
QkpDX0FQSV9FTkFCTEVECisKK0Bwcm90b2NvbCBQYXJlbnRPYmplY3QgPEpTRXhwb3J0PgorQGVu
ZAorCitAaW50ZXJmYWNlIFBhcmVudE9iamVjdCA6IE5TT2JqZWN0PFBhcmVudE9iamVjdD4KKysg
KE5TU3RyaW5nICopcGFyZW50VGVzdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFBhcmVudE9i
amVjdAorKyAoTlNTdHJpbmcgKilwYXJlbnRUZXN0Cit7CisgICAgcmV0dXJuIFtzZWxmIGRlc2Ny
aXB0aW9uXTsKK30KK0BlbmQKKworQHByb3RvY29sIFRlc3RPYmplY3QgPEpTRXhwb3J0PgorQHBy
b3BlcnR5IGludCB2YXJpYWJsZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIGludCBzaXg7CitAcHJv
cGVydHkgQ0dQb2ludCBwb2ludDsKKysgKE5TU3RyaW5nICopY2xhc3NUZXN0OworKyAoTlNTdHJp
bmcgKilwYXJlbnRUZXN0OworLSAoTlNTdHJpbmcgKilnZXRTdHJpbmc7CitKU0V4cG9ydEFzKHRl
c3RBcmd1bWVudFR5cGVzLAorLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBlc1dpdGhJbnQ6
KGludClpIGRvdWJsZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzooTlNTdHJpbmcq
KXMgbnVtYmVyOihOU051bWJlciopbiBhcnJheTooTlNBcnJheSopYSBkaWN0aW9uYXJ5OihOU0Rp
Y3Rpb25hcnkqKW8KKyk7CistICh2b2lkKWNhbGxiYWNrOih2b2lkKF4pKGludCkpYmxvY2s7CitA
ZW5kCisKK0BpbnRlcmZhY2UgVGVzdE9iamVjdCA6IFBhcmVudE9iamVjdCA8VGVzdE9iamVjdD4K
K0Bwcm9wZXJ0eSBpbnQgc2l4OworKyAoaWQpdGVzdE9iamVjdDsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RPYmplY3QKK0BzeW50aGVzaXplIHZhcmlhYmxlOworQHN5bnRoZXNpemUgc2l4
OworQHN5bnRoZXNpemUgcG9pbnQ7CisrIChpZCl0ZXN0T2JqZWN0Cit7CisgICAgcmV0dXJuIFtb
W1Rlc3RPYmplY3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKysgKE5TU3RyaW5nICop
Y2xhc3NUZXN0Cit7CisgICAgcmV0dXJuIEAiY2xhc3NUZXN0IC0gb2theSI7Cit9CistIChOU1N0
cmluZyAqKWdldFN0cmluZworeworICAgIHJldHVybiBAIjQyIjsKK30KKy0gKE5TU3RyaW5nICop
dGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6KGRvdWJsZSlkIGJvb2xlYW46
KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNOdW1iZXIqKW4gYXJyYXk6KE5T
QXJyYXkqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCit7CisgICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQsJWcsJWQsJUAsJWQsJUAsJUAiLCBpLCBkLCBiPT1Z
RVM/dHJ1ZTpmYWxzZSxzLFtuIGludFZhbHVlXSxhWzFdLG9bQCJ4Il1dOworfQorLSAodm9pZClj
YWxsYmFjazoodm9pZCheKShpbnQpKWJsb2NrCit7CisgICAgYmxvY2soNDIpOworfQorQGVuZAor
Citib29sIHRlc3RYWVpUZXN0ZWQgPSBmYWxzZTsKKworQHByb3RvY29sIFRleHRYWVogPEpTRXhw
b3J0PgorQHByb3BlcnR5IGludCB4OworQHByb3BlcnR5IChyZWFkb25seSkgaW50IHk7CistICh2
b2lkKXRlc3Q6KE5TU3RyaW5nICopbWVzc2FnZTsKK0BlbmQKKworQGludGVyZmFjZSBUZXh0WFla
IDogTlNPYmplY3QgPFRleHRYWVo+CitAcHJvcGVydHkgaW50IHg7CitAcHJvcGVydHkgaW50IHk7
CitAcHJvcGVydHkgaW50IHo7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0WFlaCitAc3lu
dGhlc2l6ZSB4OworQHN5bnRoZXNpemUgeTsKK0BzeW50aGVzaXplIHo7CistICh2b2lkKXRlc3Q6
KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHRlc3RYWVpUZXN0ZWQgPSBbbWVzc2FnZSBpc0Vx
dWFsOkAidGVzdCJdICYmIHggPT0gMTMgJiB5ID09IDQgJiYgeiA9PSA1OworfQorQGVuZAorCitz
dGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2Vk
KQoreworICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQg
PyBAIlBBU1NFRCIgOiBAIkZBSUxFRCIpOworICAgIGlmICghcGFzc2VkKQorICAgICAgICBmYWls
ZWQgPSAxOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKQor
eworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jlc3VsdEZhbHNlLAorICAg
ICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0VW5rbm93bgorICAgIH07
CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVja1Jlc3VsdFVua25vd247
CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgeworICAgICAgICBpZCBibG9j
ayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07CisgICAgICAgIGNoZWNr
ID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihfQmxvY2tfc2lnbmF0dXJl
KGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBDaGVja1Jlc3VsdEZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK3ZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkoKQoreworICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdOworICAgICAgICBjaGVja1Jlc3Vs
dChAIjIgKyAyIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0KTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlR3byBwbHVzIHR3byBpcyAlQCIsIFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiMiArIDIiXV07CisgICAgICAgIGNoZWNrUmVzdWx0KEAic3RyaW5nV2l0
aEZvcm1hdCIsIFtyZXN1bHQgaXNFcXVhbDpAIlR3byBwbHVzIHR3byBpcyA0Il0pOworICAgIH0K
KworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtA
Im1lc3NhZ2UiXSA9IEAiSGVsbG8iOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAIm1lc3NhZ2UgKyAnLCBXb3JsZCEnIl07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiSGVsbG8sIFdvcmxkISIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiSGVs
bG8sIFdvcmxkISJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
KHsgeDo0MiB9KSJdOworICAgICAgICBpZCBvYmogPSBbcmVzdWx0IHRvT2JqZWN0XTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVyYWwiLCBbb2JqIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgaWQgbnVtID0gKE5TRGljdGlv
bmFyeSopb2JqW0AieCJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkNoZWNrIG51bWVyaWMgbGl0
ZXJhbCIsIFtudW0gaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CisgICAgfQorCisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBfX2Jsb2NrIGludCBy
ZXN1bHQ7CisgICAgICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0gPSBeKGludCB2YWx1ZSl7
CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICBjaGVja1Jl
c3VsdChAImJsb2NrQ2FsbGJhY2siLCByZXN1bHQgPT0gNDIpOworICAgIH0KKworICAgIGlmIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKSkgeworICAgICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgX19ibG9jayBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICAgICAgY29udGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4oTlNTdHJpbmcg
KnZhbHVlKXsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbQCI0MiIgaXNFcXVhbFRvU3RyaW5n
OnZhbHVlXSA9PSBZRVM7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICAgICAgY2hlY2tSZXN1
bHQoQCJibG9ja0NhbGxiYWNrKE5TU3RyaW5nICopIiwgcmVzdWx0KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBOU0xvZyhAIlNraXBwaW5nICdibG9ja0NhbGxiYWNrKE5TU3RyaW5n
ICopJyB0ZXN0IGNhc2UiKTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgY2hlY2tSZXN1bHQoQCIhY29udGV4dC5leGNlcHRpb24iLCAhY29udGV4dC5leGNl
cHRpb24pOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkgVEhJ
UyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOworICAgICAgICBj
aGVja1Jlc3VsdChAImNvbnRleHQuZXhjZXB0aW9uIiwgY29udGV4dC5leGNlcHRpb24pOworICAg
IH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX19ibG9j
ayBib29sIGNhdWdodCA9IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIg
PSBeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7CisgICAgICAgICAg
ICAodm9pZCljb250ZXh0OworICAgICAgICAgICAgKHZvaWQpZXhjZXB0aW9uOworICAgICAgICAg
ICAgY2F1Z2h0ID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFA
IyQlXiYqKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU0NvbnRleHQuZXhjZXB0aW9uSGFu
ZGxlciIsIGNhdWdodCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisgICAgICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAgICAgICAgICAg
IGNvbnRleHQuZXhjZXB0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2Fn
ZTpAIlNvbWV0aGluZyB3ZW50IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICB9
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZh
ciByZXN1bHQ7IHRyeSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0NhdWdo
dCBleGNlcHRpb24nOyB9Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhyb3cg
aW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbW3Jlc3VsdCB0b1N0cmlu
Z10gaXNFcXVhbDpAIkNhdWdodCBleGNlcHRpb24iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
RXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSBub3QgdGhyb3duIHRvIE9iamVjdGl2ZS1DIiwg
IWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKKyAgICAgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgICAg
ICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZB
TElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgfTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0OyB0
cnkgeyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhjZXB0aW9u
JzsgfSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGluIGNhbGxiYWNr
IC0gd2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6
QCJDYXVnaHQgZXhjZXB0aW9uIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRo
cm93IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFjb250ZXh0LmV4
Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAiZnVuY3Rpb24g
c3VtKGFycmF5KSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDsgXAorICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgaW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGFycmF5W2ldOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAg
ICAgICAgICAgfSJdOworICAgICAgICBKU1ZhbHVlICphcnJheSA9IFtKU1ZhbHVlIHZhbHVlV2l0
aE9iamVjdDpAW0AxMywgQDIsIEA3XSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpTVmFs
dWUgKnN1bUZ1bmN0aW9uID0gY29udGV4dFtAInN1bSJdOworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbc3VtRnVuY3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsgYXJyYXkgXV07CisgICAgICAg
IGNoZWNrUmVzdWx0KEAic3VtKFsxMywgMiwgN10pIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSAyMik7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBK
U1ZhbHVlICptdWxBZGRGdW5jdGlvbiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OgorICAgICAg
ICAgICAgQCIoZnVuY3Rpb24oYXJyYXksIG9iamVjdCkgeyBcCisgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IFtdOyBcCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgXAor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSAqIG9iamVjdC54ICsgb2Jq
ZWN0LnkpOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAg
fSkiXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW211bEFkZEZ1bmN0aW9uIGNhbGxXaXRo
QXJndW1lbnRzOkBbIEBbIEAyLCBANCwgQDggXSwgQHsgQCJ4IjpAMC41LCBAInkiOkA0MiB9IF1d
OworICAgICAgICBjaGVja1Jlc3VsdChAIm11bEFkZEZ1bmN0aW9uIiwgW1tyZXN1bHQgdG9TdHJp
bmddIGlzRXF1YWw6QCI0Myw0NCw0NiJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKworICAgICAgICBvYmplY3RbQCJwb2lu
dCJdID0gQHsgQCJ4IjpAMSwgQCJ5IjpAMiB9OworICAgICAgICBvYmplY3RbQCJwb2ludCJdW0Ai
eCJdID0gQDM7CisgICAgICAgIENHUG9pbnQgcG9pbnQgPSBbb2JqZWN0W0AicG9pbnQiXSB0b1Bv
aW50XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0b1BvaW50IiwgcG9pbnQueCA9PSAzICYmIHBv
aW50LnkgPT0gMik7CisKKyAgICAgICAgb2JqZWN0W0B7IEAidG9TdHJpbmciOl57IHJldHVybiBA
ImZvbyI7IH0gfV0gPSBAImJhciI7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidG9TdHJpbmcgaW4g
b2JqZWN0IGxpdGVyYWwgdXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3Ry
aW5nXSBpc0VxdWFsOkAiYmFyIl0pOworCisgICAgICAgIG9iamVjdFtbQCJmb29iYXIiIHN1YnN0
cmluZ1RvSW5kZXg6M11dID0gQCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChAInN1YnN0cmlu
ZyB1c2VkIGFzIHN1YnNjcmlwdCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmddIGlzRXF1YWw6
QCJiYXIiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBUZXh0WFlaICp0ZXN0WFlaID0gW1tUZXh0WFlaIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgY29udGV4dFtAInRlc3RYWVoiXSA9IHRlc3RYWVo7CisgICAgICAgIHRlc3RYWVoueCA9IDM7
CisgICAgICAgIHRlc3RYWVoueSA9IDQ7CisgICAgICAgIHRlc3RYWVoueiA9IDU7CisgICAgICAg
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ID0gMTM7IHRlc3RYWVoueSA9IDE0
OyJdOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoudGVzdCgndGVz
dCcpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHRlc3RYWVpUZXN0ZWQiLCB0
ZXN0WFlaVGVzdGVkKTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJ0ZXN0WFlaLnggKyAnLCcgKyB0ZXN0WFlaLnkgKyAnLCcgKyB0ZXN0WFlaLnoi
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gcmVzdWx0IiwgW1tyZXN1bHQgdG9T
dHJpbmddIGlzRXF1YWw6QCIxMyw0LHVuZGVmaW5lZCJdKTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtjb250ZXh0W0AiT2JqZWN0Il1bQCJw
cm90b3R5cGUiXSBkZWZpbmVQcm9wZXJ0eTpAImdldHRlclByb3BlcnR5IiBkZXNjcmlwdG9yOkB7
CisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTpeeworICAgICAgICAgICAg
ICAgIHJldHVybiBbSlNDb250ZXh0IGN1cnJlbnRUaGlzXVtAIngiXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aE9iamVjdDpAeyBAIngiOkAxMDEgfSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGludCBy
ZXN1bHQgPSBbb2JqZWN0IFtAImdldHRlclByb3BlcnR5Il0gdG9JbnQzMl07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiZ2V0dGVyUHJvcGVydHkiLCByZXN1bHQgPT0gMTAxKTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJjb25j
YXRlbmF0ZSJdID0gXnsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFyZ3VtZW50cyA9IFtKU0NvbnRl
eHQgY3VycmVudEFyZ3VtZW50c107CisgICAgICAgICAgICBpZiAoIVthcmd1bWVudHMgY291bnRd
KQorICAgICAgICAgICAgICAgIHJldHVybiBAIiI7CisgICAgICAgICAgICBOU1N0cmluZyAqbWVz
c2FnZSA9IFthcmd1bWVudHNbMF0gZGVzY3JpcHRpb25dOworICAgICAgICAgICAgZm9yIChOU1VJ
bnRlZ2VyIGluZGV4ID0gMTsgaW5kZXggPCBbYXJndW1lbnRzIGNvdW50XTsgKytpbmRleCkKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAl
QCIsIG1lc3NhZ2UsIGFyZ3VtZW50c1tpbmRleF1dOworICAgICAgICAgICAgcmV0dXJuIG1lc3Nh
Z2U7CisgICAgICAgIH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAiY29uY2F0ZW5hdGUoJ0hlbGxvLCcsICdXb3JsZCEnKSJdOworICAgICAgICBj
aGVja1Jlc3VsdChAImNvbmNhdGVuYXRlIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJIZWxs
bywgV29ybGQhIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgY29udGV4dFtAImZvbyJdID0gQFlFUzsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiQFlFUyBpcyBib29sZWFuIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6
QCJib29sZWFuIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmpl
Y3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVz
dE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdCkiLCBb
W3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdF0iXSk7CisgICAg
fQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2Jq
ZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRl
eHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJvdG9fXyki
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdC5fX3Byb3RvX18pIiwg
W1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RQcm90b3R5cGVd
Il0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAg
ICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcoVGVzdE9i
amVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVzdE9iamVjdCkiLCBbW3Jl
c3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdENvbnN0cnVjdG9yXSJd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OltUZXN0T2JqZWN0IGNs
YXNzXSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVlIHRv
T2JqZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10iLCBbdmFsdWUgdG9PYmplY3RdID09IFtUZXN0
T2JqZWN0IGNsYXNzXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgICAgICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmplY3QgY2xhc3Nd
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlRl
c3RPYmplY3QucGFyZW50VGVzdCgpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGVzdE9iamVj
dC5wYXJlbnRUZXN0KCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIlRlc3RPYmplY3QiXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBU
ZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAg
IGNvbnRleHRbQCJ0ZXN0T2JqZWN0QSJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgY29udGV4dFtA
InRlc3RPYmplY3RCIl0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3RBID09IHRlc3RPYmplY3RCIl07Cisg
ICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdEEgPT0gdGVzdE9iamVjdEIiLCBbcmVzdWx0
IHRvQm9vbF0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3Rd
OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAg
dGVzdE9iamVjdC5wb2ludCA9IChDR1BvaW50KXszLDR9OworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lm
eSh0ZXN0T2JqZWN0LnBvaW50KTsgdGVzdE9iamVjdC5wb2ludCA9IHt4OjEyLHk6MTR9OyByZXN1
bHQiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0gcmVzdWx0Iiwg
W1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJ7XCJ4XCI6MyxcInlcIjo0fSJdKTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0ge3g6MTIseToxNH0iLCB0ZXN0T2Jq
ZWN0LnBvaW50LnggPT0gMTIgJiYgdGVzdE9iamVjdC5wb2ludC55ID09IDE0KTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3Qq
IHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgdGVzdE9iamVj
dC5zaXggPSA2OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsK
KyAgICAgICAgY29udGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkpeyByZXR1cm4geCAqIHk7
IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
bXVsKHRlc3RPYmplY3Quc2l4LCA3KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIm11bCh0ZXN0
T2JqZWN0LnNpeCwgNykiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250
ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RP
YmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RP
YmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il1bQCJ2
YXJpYWJsZSJdID0gQDQ7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKyt0ZXN0
T2JqZWN0LnZhcmlhYmxlIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiKyt0ZXN0T2JqZWN0LnZh
cmlhYmxlIiwgdGVzdE9iamVjdC52YXJpYWJsZSA9PSA1KTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsg
QCJ4IjpANiwgQCJ5IjpANyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAicG9pbnQueCArICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNF
cXVhbDpAIjYsNyJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9Owor
ICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50
LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicG9pbnQueCArICcs
JyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJdKTsKKyAgICB9
CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmpl
Y3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4
dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSJdOworICAg
ICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCBbcmVzdWx0IHRvSW50
MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0
XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC50
ZXN0QXJndW1lbnRUeXBlcygxMDEsMC41LHRydWUsJ2ZvbycsNjY2LFtmYWxzZSwnYmFyJyxmYWxz
ZV0se3g6J2Jheid9KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QudGVzdEFy
Z3VtZW50VHlwZXMiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIjEwMSwwLjUsMSxmb28sNjY2
LGJhcixiYXoiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVj
dF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3Qu
Z2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0
T2JqZWN0LmdldFN0cmluZy5jYWxsKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0
Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAg
ICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjaGVja1Jl
c3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIHByZSIsICFjb250ZXh0LmV4Y2Vw
dGlvbik7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRT
dHJpbmcuY2FsbCh7fSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0
cmluZy5jYWxsKHt9KSBwb3N0IiwgY29udGV4dC5leGNlcHRpb24pOworICAgIH0KKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9i
amVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9i
amVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0gMDsgdGVzdE9iamVjdC5jYWxsYmFjayhmdW5j
dGlvbih4KXsgcmVzdWx0ID0geDsgfSk7IHJlc3VsdCJdOworICAgICAgICBjaGVja1Jlc3VsdChA
InRlc3RPYmplY3QuY2FsbGJhY2siLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9IFtb
SlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9IFtb
SlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1YWxN
YWNoaW5lXTsKKyAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhEb3Vi
bGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZS5j
b250ZXh0ID09IGNvbnRleHQyIiwgdmFsdWUuY29udGV4dCA9PSBjb250ZXh0Mik7CisgICAgICAg
IGNvbnRleHQxW0AicGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRzIl0gPSB2YWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQxIGV2YWx1YXRlU2NyaXB0OkAicGFzc1ZhbHVlQmV0
d2VlbkNvbnRleHRzIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0LmNvbnRleHQgPT0g
Y29udGV4dDEiLCByZXN1bHQuY29udGV4dCA9PSBjb250ZXh0MSk7CisgICAgICAgIGNoZWNrUmVz
dWx0KEAiW3ZhbHVlIGlzRXF1YWxUb09iamVjdDpyZXN1bHRdIiwgW3ZhbHVlIGlzRXF1YWxUb09i
amVjdDpyZXN1bHRdKTsKKyAgICAgICAgW2NvbnRleHQxIHJlbGVhc2VdOworICAgICAgICBbY29u
dGV4dDIgcmVsZWFzZV07CisgICAgfQorfQorCisjZWxzZQorCit2b2lkIHRlc3RPYmplY3RpdmVD
QVBJKCkKK3sKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw2ICs1NDAs
NyBAQAogCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMjBFRTc5Qjc0MDAy
ODg2ODIgLyogSklUQ2FsbC5jcHAgKi87IH07CiAJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAv
KiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwICovOyB9OwogCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQ0VGREQwRjQx
M0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NkQyMjIxQTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEMjIyMTkx
NjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLzsgfTsKIAkJODZEM0IyQzMxMDE1NkJERTAw
Mjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJCRjEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVy
LmNwcCAqLzsgfTsKIAkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzAx
MDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC01NDgsNiArNTQ5LDE4IEBACiAJCTg2RDNCM0M0MTAxNTlE
N0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZE
QjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAgKi87IH07CiAJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTExNkIwMEZF
NzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyogQVBJ
SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYw
QSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjE0MTY3QkFCRDcw
MDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxNTE2N0JB
QkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07
IH07CisJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwODE2N0JBQjg3MDA2
RDc2MEEgLyogSlNDb250ZXh0Lm1tICovOyB9OworCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEg
LyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5h
bC5oICovOyB9OworCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEIx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLzsgfTsKKwkJODZFM0M2MTkxNjdC
QUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBl
ck1hcC5oICovOyB9OworCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBEMTY3
QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLm1tICovOyB9OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2
RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVy
bmFsLmggKi87IH07CisJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZF
M0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi87IH07CisJCTg2
RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjExMTY3QkFC
ODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgfTsKIAkJODZFODU1
MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8q
IEpTU3RyaW5nQnVpbGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyog
TmFtZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3Bw
ICovOyB9OwogCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGQTE1
NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC01NjksNiArNTgy
LDExIEBACiAJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VB
MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5o
ICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJE
RjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLzsgfTsKKwkJODZGM0VFQkIxNjhDREU5
MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9ja0Fk
YXB0b3IuaCAqLzsgfTsKKwkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFw
dG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZG
M0VFQjgxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovOyB9OworCQk4NkYz
RUVCRDE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI5MTY4Q0NGNzUwMDc3
QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OworCQk4NkYzRUVCRTE2OENERTkz
MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyogT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24ubW0gKi87IH07CisJCTg2RjNFRUJGMTY4Q0RFOTMwMDc3QjkyQSAv
KiBPYmpjUnVudGltZUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFz
LmggKi87IH07CiAJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGQTlF
OEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi87IH07CiAJCTg2RkE5
RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uaCAqLzsgfTsKIAkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8q
IE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3Mu
Y3BwICovOyB9OwpAQCAtMTM3OCw2ICsxMzk2LDcgQEAKIAkJODZDQzg1QTIwRUU3OUI3NDAwMjg4
NjgyIC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SklUQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVFN0E4
OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gdGVzdGFwaS5tOyBwYXRoID0gQVBJL3Rlc3Rz
L3Rlc3RhcGkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQkYxMDE1NkJE
RTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBUk1Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkQzQjJDMDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTUFzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0
aENvbnN0YW50UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlbWJs
ZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMzg2LDYgKzE0MDUsMTggQEAKIAkJODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0
Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAv
KiBDb2RlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUxv
Y2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA2MTY3QkFCODcw
MDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFQSUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDcxNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDgx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEpTQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dEludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4cG9y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFw
cGVyTWFwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNXcmFw
cGVyTWFwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQzE2N0JBQjg3
MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTV3JhcHBlck1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYw
RDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEpTVmFsdWUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hpbmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBKU1ZpcnR1YWxNYWNoaW5lLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1
MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVCRjJG
OTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWVDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2RUJGMkZBMTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZUNvbnN0cnVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA3LDYgKzE0MzgsMTEgQEAKIAkJODZF
QzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklULmg7IHBhdGggPSBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRTkx
MzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHTm9kZS5oOyBwYXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NvcmVCb2FyZC5oOyBwYXRoID0g
ZGZnL0RGR1Njb3JlQm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VF
QjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jsb2NrQWRhcHRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCODE2OENDRjc1MDA3N0I5MkEgLyogSlNC
bG9ja0FkYXB0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBK
U0Jsb2NrQWRhcHRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VFQjkx
NjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tG
dW5jdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE9iakND
YWxsYmFja0Z1bmN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY3NUVG
QjE1MUMwNjJGMDA3QzlCQTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBD
YWNoZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwQ2Fj
aGVkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZEMTUxQzA2
MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4NzgsNiArMTkxNCw3IEBACiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAw
MDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFGNTlDIC8qIHRl
c3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAq
LywKKwkJCQk4NkQyMjIxOTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tICovLAogCQkJCTY1
MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gdGVzdHM7CkBAIC0yMDQ1LDYgKzIwODIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkxNDgyQjc4QTBBNDMwNUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5o
ICovLAorCQkJCTg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8sCiAJ
CQkJODY1RjQwODcxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggKi8sCiAJCQkJMUNBQThC
NEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJCQkxQ0FBOEI0QjBEMzJD
MzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLywKQEAgLTIwNTMsNiArMjA5MSw4IEBA
CiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJMTQy
NzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAogCQkJCTE0MEQxN0Q2MEU4QUQ0
QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCisJCQkJODZGM0VFQjcxNjhDQ0Y3NTAw
NzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggKi8sCisJCQkJODZGM0VFQjgxNjhDQ0Y3NTAwNzdC
OTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2
MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAw
MDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKIAkJCQkxNDQwRjg5MDBBNTA4
QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLywKQEAgLTIwNjIsOSArMjEw
MiwxMyBAQAogCQkJCUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmggKi8sCiAJCQkJMTQ0MEZDRTIwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NS
ZWYuY3BwICovLAogCQkJCTE0NDBGQ0UxMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmgg
Ki8sCisJCQkJODZFM0M2MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovLAorCQkJ
CTg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi8sCisJCQkJODZFM0M2
MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8sCiAJCQkJMTRCRDVB
MjkwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgKi8sCiAJCQkJMTRCRDVBMkEw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5oICovLAogCQkJCTE0OENEMUQ3MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8sCisJCQkJODZFM0M2MEExNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi8sCiAJCQkJMTQ4MkI3RTIwQTQzMDc2MDAwNTE3
Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLywKIAkJCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdDRkMg
LyogSlNPYmplY3RSZWYuaCAqLywKIAkJCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNP
YmplY3RSZWZQcml2YXRlLmggKi8sCkBAIC0yMDc3LDExICsyMTIxLDIxIEBACiAJCQkJMTQ4MkI3
NEIwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmggKi8sCiAJCQkJMTQ2QUFCMzcwQjY2
QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwICovLAogCQkJCTE0NkFBQjJBMEI2NkE4
NDkwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmggKi8sCisJCQkJODZFM0M2MEQxNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmFsdWUubW0gKi8sCisJCQkJODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8q
IEpTVmFsdWVJbnRlcm5hbC5oICovLAogCQkJCTE0QkQ1QTJCMEEzRTkxRjYwMEJBRjU5QyAvKiBK
U1ZhbHVlUmVmLmNwcCAqLywKIAkJCQkxNDgyQjZFQTBBNDMwMEIzMDA1MTdDRkMgLyogSlNWYWx1
ZVJlZi5oICovLAorCQkJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLmggKi8sCisJCQkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hp
bmUubW0gKi8sCisJCQkJODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyRTM3MTE2QTY5N0IwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyQjdBMTE2NkNERUEwMDNCMDcxMiAv
KiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCAqLywKIAkJCQlBNzQ4MkI3OTExNjZDREVB
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oICovLAorCQkJCTg2RTNDNjBC
MTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi8sCisJCQkJODZFM0M2MEMxNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oICovLAorCQkJCTg2RjNFRUI5MTY4Q0NGNzUw
MDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovLAorCQkJCTg2RjNFRUJBMTY4Q0NG
NzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSAqLywKKwkJCQk4NkYzRUVCNjE2
ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBF
NTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1
NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAogCQkJCTVERTNEMEY0MEREOERE
RkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKQEAgLTMyMDUsNiArMzI1OSwx
NyBAQAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUg
LyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdG
QkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjEyMTY3QkFC
RDcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxMzE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYx
NDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAu
aCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RjNFRUJC
MTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODZGM0VFQkQxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4NkYzRUVCRjE2OENERTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRy
YXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzUyOCw2ICszNTkzLDcgQEAKIAkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxNDQwRjYxMDBBNEY4NTY3MDAw
NUYwNjEgLyogdGVzdGFwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJODZEMjIyMUExNjdFRjk0NDAw
MjRDODA0IC8qIHRlc3RhcGkubSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzgyNSw2ICszODkxLDEyIEBA
CiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMy
NSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MTYxNjdCQUJFRTAw
NkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjE4MTY3QkFC
RUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkUzQzYx
QTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTND
NjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1
bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSw2ICsxODUsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlw
CiAgICAgLCBtX3RpbWVvdXRDb3VudCg1MTIpCiAjZW5kaWYKICAgICAsIG1fbmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zdCgwKQorICAgICwgbV9hcGlEYXRhKDApCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUikKICAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihleGVjdXRhYmxl
QWxsb2NhdG9yKSkKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNiArNDUz
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
aXNjYXJkQWxsQ29kZSgpOwogCisgICAgICAgIHZvaWQgKm1fYXBpRGF0YTsKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAg
SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRAogICAgICwgbV93ZWFrUmFu
ZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdlYWtS
YW5kb21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAgLCBtX2V2YWxF
bmFibGVkKHRydWUpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSkKKyAgICAsIG1fYXBpRGF0YSgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEzODYw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KICAgICAgICAg
Ym9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CiAKKyAgICAgICAgdm9pZCogbV9hcGlEYXRh
OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBK
U0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSogPSAwKTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MzEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IE9iamVjdGl2ZS1DIEFQSSBmb3IgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg4OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuY3BwOgorICAg
ICAgICAoV1RGOjpXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAgICAgKiB3dGYv
V1RGVGhyZWFkRGF0YS5oOgorICAgICAgICAoV1RGVGhyZWFkRGF0YSk6CisgICAgICAgICAgICAt
IEFkZGVkIG1fYXBpRGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZvciB1c2UgYnkg
dGhlIEFQSS4KKwogMjAxMi0xMi0yOCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50
YXRpb246IGluc3RydW1lbnQgbm90IGluc3RydW1lbnRlZCBtZW1iZXJzLgpJbmRleDogU291cmNl
L1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
V1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9XVEYvd3RmL1dU
RlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFj
ZSBXVEYgewogVGhyZWFkU3BlY2lmaWM8V1RGVGhyZWFkRGF0YT4qIFdURlRocmVhZERhdGE6OnN0
YXRpY0RhdGE7CiAKIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQotICAgIDogbV9hdG9t
aWNTdHJpbmdUYWJsZSgwKQorICAgIDogbV9hcGlEYXRhKDApCisgICAgLCBtX2F0b21pY1N0cmlu
Z1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcigwKQogI2lmIFVT
RShKU0MpCiAgICAgLCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpTQzo6SWRlbnRpZmll
clRhYmxlKCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxMzg2MDApCisr
KyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2
ICsxMjMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNDKQogCisgICAgdm9p
ZCogbV9hcGlEYXRhOworCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21p
Y1N0cmluZ1RhYmxlOwogICAgIEF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciBtX2F0b21pY1N0
cmluZ1RhYmxlRGVzdHJ1Y3RvcjsK
</data>
<flag name="commit-queue"
          id="198437"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180992</attachid>
            <date>2013-01-01 10:16:10 -0800</date>
            <delta_ts>2013-01-01 11:15:55 -0800</delta_ts>
            <desc>Fixes for the build bot</desc>
            <filename>105889.3.patch</filename>
            <type>text/plain</type>
            <size>225328</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU0NvbnRleHQ7CisKKy8vIEEgSlNWYWx1ZSBpcyBhIHJl
ZmVyZW5jZSB0byBhIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBvYmplY3Qgc3BhY2Ugb2Yg
YQorLy8gSlNWaXJ0dWFsTWFjaGluZS4gQWxsIGluc3RhbmNlcyBvZiBKU1ZhbHVlIG9yaWdpbmF0
ZSBmcm9tIGEgSlNDb250ZXh0LCBhbmQKKy8vIGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGlz
IEpTQ29udGV4dC4gV2hlcmUgYW4gaW5zdGFuY2UgbWV0aG9kIGlzIGludm9rZWQKKy8vIHVwb24g
YSBKU1ZhbHVlLCBhbmQgdGhpcyByZXR1cm5zIGFub3RoZXIgSlNWYWx1ZSwgdGhlIHJldHVybmVk
IEpTVmFsdWUgd2lsbAorLy8gb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgSlNDb250ZXh0IGFzIHRo
ZSBKU1ZhbHVlIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzCisvLyBpbnZva2VkLgorLy8KKy8vIFRo
ZSBKU0NvbnRleHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVy
ZWNlZCBKYXZhU2NyaXB0CisvLyB2YWx1ZSB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gU28g
bG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGJlaW5nIHJldGFpbmVkCisvLyB0aGUgSlNWYWx1ZSB3
aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZCB2YWx1ZSB3aXRoaW4gdGhlIEphdmFT
Y3JpcHQKKy8vIHZpcnR1YWwgbWFjaGluZSBhbGl2ZS4gV2hlbiB0aGUgSlNDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCBhIEpTVmFsdWUgaXMKKy8vIGRlYWxsb2NhdGVkIHRoZSB3ZWFrIGNvbnRleHQg
cHJvcGVydHkgb2YgdGhlIEpTVmFsdWUgd2lsbCBiZWNvbWUgbmlsLiBBZnRlcgorLy8gdGhpcyBv
Y2N1cnMgdGhlIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgaXMg
bm8gbG9uZ2VyCisvLyBiZWluZyBtYWludGFpbmVkIGJ5IHRoaXMgSlNWYWx1ZSwgYW5kIHRoZSBK
U1ZhbHVlIGluc3RhbmNlIG1heSBubyBsb25nZXIgYnkKKy8vIHVzZWQgYXMgYSByZWZlcmVuY2Ug
dG8gdGhpcyB2YWx1ZS4gRm9yIGFueSBtZXRob2QgaW52b2tlZCBvbiBpbnN0YW5jZSBvZgorLy8g
SlNWYWx1ZSB3aXRoIGEgbmlsIGNvbnRleHQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSBuaWwv
emVyby9mYWxzZSByZXN1bHQuCisvLworLy8gRm9yIGFsbCBtZXRob2RzIHRha2luZyBhcmd1bWVu
dHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkCisvLyBpbnRvIGEgSmF2
YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJlbG93
LgorLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIEpTVmlydHVhbE1hY2hpbmUKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5l
IGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRleHQKKy8vIHByb3BlcnR5KS4gQW4g
aW5zdGFuY2Ugb2YgSlNWYWx1ZSBtYXkgb25seSBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8K
Ky8vIG1ldGhvZHMgb24gaW5zdGFuY2VzIG9mIEpTVmFsdWUgYW5kIEpTQ29udGV4dCB0aGF0IGJl
bG9uZyB0byB0aGUgc2FtZQorLy8gSlNWaXJ0dWFsTWFjaGluZSAtIHBhc3NpbmcgYSBKU1ZhbHVl
IHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdCBvcmlnaW5hdGluZworLy8gZnJvbSBhIGRpZmZlcmVu
dCBKU1ZpcnR1YWxNYWNoaW5lIHdpbGwgcmVzdWx0IGluIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlv
bgorLy8gYmVpbmcgcmFpc2VkLgorLy8KKy8vIENvbnZlcnNpb24gYmV0d2VlbiBPYmplY3RpdmUt
QyBhbmQgSmF2YVNjcmlwdCB0eXBlcy4KKy8vCisvLyBXaGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBK
YXZhU2NyaXB0IHZhbHVlcyBhbmQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhIGNvcHkgaXMKKy8vIHBl
cmZvcm1lZC4gVmFsdWVzIG9mIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgY29waWVkIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisvLyB0eXBlcyBvbiBjb252ZXJzaW9uIGluIGVhY2ggZGlyZWN0aW9uLiBG
b3IgTlNEaWN0aW9uYXJpZXMsIGVudHJpZXMgaW4gdGhlCisvLyBkaWN0aW9uYXJ5IHRoYXQgYXJl
IGtleWVkIGJ5IHN0cmluZ3MgYXJlIGNvcGllZCBvbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCisv
LyBGb3IgZGljdGlvbmFyaWVzIGFuZCBhcnJheXMsIGNvbnZlcnNpb24gaXMgcmVjdXJzaXZlLCB3
aXRoIHRoZSBzYW1lIG9iamVjdAorLy8gY29udmVyc2lvbiBiZWluZyBhcHBsaWVkIHRvIGFsbCBl
bnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorLy8KKy8vICAgT2JqZWN0aXZlLUMgdHlwZSAgfCAg
IEphdmFTY3JpcHQgdHlwZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyAgICAgICAgIG5pbCAgICAgICAgIHwgICAgIHVuZGVmaW5lZAorLy8gICAgICAg
IE5TTnVsbCAgICAgICB8ICAgICAgICBudWxsCisvLyAgICAgICBOU1N0cmluZyAgICAgIHwgICAg
ICAgc3RyaW5nCisvLyAgICAgICBOU051bWJlciAgICAgIHwgICBudW1iZXIsIGJvb2xlYW4KKy8v
ICAgICBOU0RpY3Rpb25hcnkgICAgfCAgIE9iamVjdCBvYmplY3QKKy8vICAgICAgIE5TQXJyYXkg
ICAgICAgfCAgICBBcnJheSBvYmplY3QKKy8vICAgICAgICBOU0RhdGUgICAgICAgfCAgICAgRGF0
ZSBvYmplY3QKKy8vICAgICAgIE5TQmxvY2sgKiAgICAgfCAgIEZ1bmN0aW9uIG9iamVjdCAqCisv
LyAgICAgICAgICBpZCAqKiAgICAgIHwgICBXcmFwcGVyIG9iamVjdCAqKgorLy8gICAgICAgIENs
YXNzICoqKiAgICB8IENvbnN0cnVjdG9yIG9iamVjdCAqKioKKy8vCisvLyAqIEluc3RhbmNlcyBv
ZiBOU0Jsb2NrIHdpdGggc3VwcG9ydGVkIGFyZ3VtZW50cyB0eXBlcyB3aWxsIGJlIHByZXNlbnRl
ZCB0bworLy8gSmF2YVNjcmlwdCBhcyBhIGNhbGxhYmxlIEZ1bmN0aW9uIG9iamVjdC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkCisvLyBhcmd1bWVudCB0eXBlcyBzZWUgSlNFeHBv
cnQuaC4gSWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIG9yaWdpbmF0aW5nIGZyb20gYW4KKy8vIE9i
amVjdGl2ZS1DIGJsb2NrIGlzIGNvbnZlcnRlZCBiYWNrIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVj
dCB0aGUgYmxvY2sgd2lsbAorLy8gYmUgcmV0dXJuZWQuIEFsbCBvdGhlciBKYXZhU2NyaXB0IGZ1
bmN0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCBpbiB0aGUgc2FtZQorLy8gbWFubmVyIGFzIGEgSmF2
YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBPYmplY3QuCisvLworLy8gKiogRm9yIE9iamVjdGl2ZS1D
IGluc3RhbmNlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGxpc3Rl
ZAorLy8gYWJvdmUsIGEgd3JhcHBlciBvYmplY3QgdG8gcHJvdmlkZSBhIHJldGFpbmluZyBoYW5k
bGUgdG8gdGhlIE9iamVjdGl2ZS1DCisvLyBpbnN0YW5jZSBmcm9tIEphdmFTY3JpcHQuIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHdyYXBwZXIgb2JqZWN0cywgc2VlCisvLyBKU0V4cG9y
dC5oLiBXaGVuIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCBpcyBjb252ZXJ0ZWQgYmFjayB0
byBPYmplY3RpdmUtQworLy8gdGhlIE9iamVjdGl2ZS1DIGluc3RhbmNlIGJlaW5nIHJldGFpbmVk
IGJ5IHRoZSB3cmFwcGVyIGlzIHJldHVybmVkLgorLy8KKy8vICoqKiBGb3IgT2JqZWN0aXZlLUMg
Q2xhc3Mgb2JqZWN0cyBhIGNvbnN0cnVjdG9yIG9iamVjdCBjb250YWluaW5nIGV4cG9ydGVkCisv
LyBjbGFzcyBtZXRob2RzIHdpbGwgYmUgcmV0dXJuZWQuIFNlZSBKU0V4cG9ydC5oIHNvciBtb3Jl
IGluZm9ybWF0aW9uIG9uCisvLyBjb25zdHJ1Y3RvciBvYmplY3RzLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZhbHVlIDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNWYWx1ZSBieSBjb252ZXJ0aW5nIGFuIE9iamVjdGl2ZS1DIG9iamVjdC4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgZnJvbSBhbiBPYmplY3RpdmUtQyBw
cmltaXRpdmUgdHlwZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09MKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhEb3Vi
bGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNjcmlwdCB2
YWx1ZSBpbiB0aGlzIGNvbnRleHQuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Fy
cmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5nICopcGF0dGVybiBmbGFn
czooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChK
U1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCB0
aGlzIHZhbHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGFjY29yZGlu
ZyB0byB0aGUKKy8vIGNvbnZlcnNpb24gc3BlY2lmaWVkIGFib3ZlLgorLSAoaWQpdG9PYmplY3Q7
CisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCwgaWYgdGhlIHJlc3VsdCBpcworLy8gbm90IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgdGhl
biBuaWwgd2lsbCBiZSByZXR1cm5lZC4KKy0gKGlkKXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpY2xz
OworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhIGJvb2xlYW4gYWNjb3JkaW5nIHRvIHRoZSBj
b252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistIChC
T09MKXRvQm9vbDsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBudW1iZXIgYWNjb3JkaW5n
IHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3Vh
Z2UuCistIChkb3VibGUpdG9Eb3VibGU7CisvLyBUaGUgdmFsdWUgaXMgY29waWVkIHRvIGFuIGlu
dGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieQorLy8gdGhlIEph
dmFTY3JpcHQgbGFuZ3VhZ2UuCistIChpbnQzMl90KXRvSW50MzI7CisvLyBUaGUgdmFsdWUgaXMg
Y29waWVkIHRvIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll
ZCBieQorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistICh1aW50MzJfdCl0b1VJbnQzMjsK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4sIGEgTlNOdW1iZXIgdmFsdWUgb2YgQFlFUyBv
ciBATk8gd2lsbCBiZSByZXR1cm5lZC4KKy8vIEZvciBhbGwgb3RoZXIgdHlwZXMgdGhlIHZhbHVl
IHdpbGwgYmUgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUKKy8vIGNvbnZlcnNp
b24gc3BlY2lmaWVkIGJ5IHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNOdW1iZXIgKil0
b051bWJlcjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRv
IHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2Uu
CistIChOU1N0cmluZyAqKXRvU3RyaW5nOworLy8gVGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBh
IG51bWJlciByZXByZXNlbnRpbmcgYSB0aW1lIGludGVydmFsIHNpbmNlIDE5NzAsCisvLyBhbmQg
YSBuZXcgTlNEYXRlIGluc3RhbmNlIGlzIHJldHVybmVkLgorLSAoTlNEYXRlICopdG9EYXRlOwor
Ly8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVk
LgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlw
ZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gVGhlIHByb3BlcnR5ICJsZW5ndGgiIGlzIHJlYWQg
ZnJvbSB0aGUgb2JqZWN0LCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQKKy8vIGludGVnZXIsIGFu
ZCBhbiBOU0FycmF5IG9mIHRoaXMgc2l6ZSBpcyBhbGxvY2F0ZWQuIFByb3BlcnRpZXMgY29ycmVz
cG9uZGluZworLy8gdG8gaW5kaWNpZXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgd2lsbCBiZSBj
b3BpZWQgdG8gdGhlIGFycmF5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRl
ZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0Fy
cmF5OworLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJl
dHVybmVkLgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3Jp
cHQgVHlwZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGll
cyBvZiB0aGUgb2JqZWN0IGFyZSBjb3BpZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9i
amVjdGl2ZS1DIG9iamVjdHMgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3Bl
Y2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBw
cm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFT
Y3JpcHQgdmFsdWUKKy8vICd1bmRlZmluZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlz
dC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5Owor
Ly8gU2V0IGEgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFs
dWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0
eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJucyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4K
Ky0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5z
IFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9k
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgor
LSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9k
IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4g
b2JqZWN0OworLy8gdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWV0aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVh
Z2UuCistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8vIEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20g
dGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFs
dWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKKworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBw
cmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJP
T0wpaXNOdWxsOworLSAoQk9PTClpc0Jvb2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9P
TClpc1N0cmluZzsKKy0gKEJPT0wpaXNPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUg
c2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wp
aXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIu
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhlIHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3Vt
ZW50cy4KKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50
czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNp
ZmllZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50czsKKy8vIEFjY2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIg
ZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRoZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHBy
b3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0
aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUgc3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUg
KilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkg
Kilhcmd1bWVudHM7CisKKy8vIFRoZSBKU0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0
ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFkb25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0Owor
CitAZW5kCisKKy8vIE9iamVjdGl2ZS1DIG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBhcmd1bWVudCBhbmQvb3IgcmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVz
IGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVyc2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBp
cyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4gU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVz
IHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRhaW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0
aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5kIGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBl
PiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1h
dGNoLAorLy8gd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0
aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIu
CisvLyBTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNS
YW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUuCitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9y
dCkKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0
IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRo
IHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihD
R1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmlu
ZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAibG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1
ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5n
ZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJv
cGVydGllcworLy8gbmFtZWQgIngiLCAieSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVj
dClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgiIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0
aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUg
Q0dQb2ludCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8g
dGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQ
b2ludCl0b1BvaW50OworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nl
c3NpbmcgcHJvcGVydGllcyBuYW1lZCAibG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0
aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0
b1JhbmdlOworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJv
cGVydGllcyBuYW1lZCAieCIsICJ5IiwgIndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRo
aXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVj
dCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEgdmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2lu
ZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFs
dWUgY29udmVydGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOwor
CitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5n
IG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNj
ZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9i
amVjdEEsICpvYmplY3RCOworLy8gICAgSlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdl
dCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgiIGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2
MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3Qn
LgorLy8gICAgb2JqZWN0W0AiWSJdID0gdjE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHBy
b3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAg
ICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRleCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2Jq
ZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5n
IHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lLgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1
cHBvcnQpCisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Owor
LSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsK
Ky0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0Nv
cHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2Ny
aXB0OihOU1VJbnRlZ2VyKWluZGV4OworCitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5n
IGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0
eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8vIFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9u
ZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRl
c2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAi
d3JpdGFibGUiLAorLy8gICAgYW5kIG9wdGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBv
ZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRh
IGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJz
ZXQiIGtleS4KKy8vICAgIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBv
ciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNj
ZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBi
b3RoIG9mIHRoZSBrZXlzICJnZXQiIGFuZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNv
bnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAg
ImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vzc29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVp
dGhlciB0aGUgInZhbHVlIgorLy8gICAgb3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nl
c3NvciBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJp
YnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFj
aW5nIGFueSBleGlzdGluZyBkYXRhIHByb3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoK
Ky8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJl
bnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBtYXkgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBrZXlzCisvLyAgICAidmFsdWUiLCAiIHdyaXRh
YmxlIiwgImdldCIsIG9yICJzZXQiLgorLy8gICAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IGJl
IHVzZWQgdG8gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nCisvLyAgICBkYXRh
IG9yIGFjY2Vzc29yIHByb3BlcnR5LCBvciB0byBjcmVhdGUgYSBuZXcgZGF0YSBwcm9wZXJ0eS4K
K0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldy
aXRhYmxlS2V5OworSlNfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlE
ZXNjcmlwdG9yRW51bWVyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5OworSlNfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OworSlNf
RVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCiAKKyNpZmRlZiBf
X09CSkNfXworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKKwogLyog
SmF2YVNjcmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCiAKIC8qISBAdHlwZWRlZiBKU0NvbnRleHRH
cm91cFJlZiBBIGdyb3VwIHRoYXQgYXNzb2NpYXRlcyBKYXZhU2NyaXB0IGNvbnRleHRzIHdpdGgg
b25lIGFub3RoZXIuIENvbnRleHRzIGluIHRoZSBzYW1lIGdyb3VwIG1heSBzaGFyZSBhbmQgZXhj
aGFuZ2UgSmF2YVNjcmlwdCBvYmplY3RzLiAqLwpAQCAtMTM1LDQgKzEzOSwxMiBAQCBKU19FWFBP
UlQgdm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4CiB9CiAjZW5kaWYKIAorLyogRW5hYmxl
IHRoZSBPYmplY3RpdmUtQyBBUEkgZm9yIHBsYXRmb3JtcyB3aXRoIGEgbW9kZXJuIHJ1bnRpbWUu
ICovCisjdW5kZWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2RlZmluZSBKU19PQkpDX0FQSV9FTkFC
TEVEIChkZWZpbmVkKF9fT0JKQ19fKSAmJiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgIWRlZmluZWQo
X19pMzg2X18pKQorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRCAmJiAhZGVmaW5lZChfX0FWQUlM
QUJJTElUWV9JTlRFUk5BTF9fTUFDXzEwXzkpCisjZGVmaW5lIF9fQVZBSUxBQklMSVRZX0lOVEVS
TkFMX19NQUNfMTBfOSBfX0FWQUlMQUJJTElUWV9JTlRFUk5BTF9fTUFDX05BCisjZW5kaWYKKwog
I2VuZGlmIC8qIEpTQmFzZV9oICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmxvY2tBZGFwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNp
ZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNCbG9ja0FkYXB0b3IgOiBOU09i
amVjdAorCistIChpZClpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3RvY29sOihjb25zdCBj
aGFyICopc2lnbmF0dXJlOworLSAoaWQpYmxvY2tGcm9tVmFsdWU6KEpTVmFsdWVSZWYpYXJndW1l
bnQgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IHdpdGhFeGNlcHRpb246KEpTVmFsdWVS
ZWYgKilleGNlcHRpb247CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorCisjaWYgSlNf
T0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJBUElTaGlt
cy5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkpTQmxvY2tBZGFwdG9yLmgiCisjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1w
b3J0ICJKU1ZhbHVlLmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIk9i
amNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJ3dGYvT3duUHRyLmgiCisjaW1wb3J0IDwvdXNy
L2xvY2FsL2luY2x1ZGUvQmxvY2tfcHJpdmF0ZS5oPgorCitleHRlcm4gIkMiIHsKK2lkIF9fTlNN
YWtlU3BlY2lhbEZvcndhcmRpbmdDYXB0dXJlQmxvY2soY29uc3QgY2hhciAqc2lnbmF0dXJlLCB2
b2lkICheaGFuZGxlcikoTlNJbnZvY2F0aW9uICppbnYpKTsKK307CisKK2NsYXNzIEJsb2NrQXJn
dW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnQoKTsKKyAgICB2aXJ0
dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiosIE5TSW50ZWdlciwgSlNDb250ZXh0Kiwg
SlNWYWx1ZVJlZiopID0gMDsKKworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBtX25leHQ7Cit9
OworCitCbG9ja0FyZ3VtZW50Ojp+QmxvY2tBcmd1bWVudCgpCit7Cit9CisKK2NsYXNzIEJsb2Nr
QXJndW1lbnRCb29sZWFuIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEpT
VmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50
TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAg
Ym9vbCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5k
ZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tBcmd1bWVudE51bWVyaWMgOiBwdWJsaWMgQmxv
Y2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBp
bnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwg
SlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlv
biBnZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2
YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tBcmd1bWVudElkIDogcHVibGljIEJsb2Nr
QXJndW1lbnQgeworcHVibGljOgorICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52
b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpT
VmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9u
IGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICAgICAgcmV0
dXJuIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIEJs
b2NrQXJndW1lbnRTdHJ1Y3QgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAg
QmxvY2tBcmd1bWVudFN0cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBj
b25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9u
KGNvbnZlcnNpb25JbnZvY2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9j
YXRpb24gcmV0YWluXTsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAg
ICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQp
OworICAgICAgICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1h
bGxvYyhzaXplICsgYWxpZ25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFs
aWdubWVudCkgJiB+YWxpZ25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QmxvY2tB
cmd1bWVudFN0cnVjdCgpCisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBy
ZWxlYXNlXTsKKyAgICAgICAgZnJlZShtX2FsbG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2
aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2Vy
IGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsK
KyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0SW5kZXg6YXJn
dW1lbnROdW1iZXJdOworCisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2Nh
dGlvbiBzZXRBcmd1bWVudDomY29udGV4dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiBpbnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAg
ICAgSlNWYWx1ZSogdmFsdWU7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJl
dHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFs
dWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbklu
dm9jYXRpb247CisgICAgY2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOwor
fTsKKworY2xhc3MgQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBCbG9ja0FyZ3VtZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IEJsb2NrQXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnROdW1lcmljPFQ+OworICAgIH0KKworICAg
IHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
QmxvY2tBcmd1bWVudEJvb2xlYW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlw
ZVZvaWQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVPZkNsYXNzKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgewor
ICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVT
dHJ1Y3QoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAg
IFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9jYXRpb24q
IGludm9jYXRpb24gPSB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgICAg
ICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnRTdHJ1Y3QoaW52b2NhdGlvbiwgY29weSk7CisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkJsb2NrUmVzdWx0KCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHNldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVl
UmVmKikgPSAwOworfTsKKworY2xhc3MgQmxvY2tSZXN1bHRWb2lkIDogcHVibGljIEJsb2NrUmVz
dWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQqLCBK
U1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEJsb2NrUmVzdWx0SW50ZWdlciA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisg
ICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVUb051bWJlcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbikpOworICAg
ICAgICBbaW52b2NhdGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja1Jlc3VsdERvdWJsZSA6IHB1YmxpYyBCbG9j
a1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9u
LCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3VsdCwgZXhjZXB0aW9uKTsKKyAgICAgICAg
W2ludm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBC
bG9ja1Jlc3VsdEJvb2xlYW4gOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZv
aWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0g
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQp
OworICAgICAgICBbaW52b2NhdGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgIH0KK307
CisKK2NsYXNzIEJsb2NrUmVzdWx0U3RydWN0IDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1Ymxp
YzoKKyAgICBCbG9ja1Jlc3VsdFN0cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0
aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZv
Y2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lv
bkludm9jYXRpb24gcmV0YWluXTsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7
CisgICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGln
bm1lbnQpOworICAgICAgICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNo
YXIqKW1hbGxvYyhzaXplICsgYWxpZ25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVy
cHJldF9jYXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9u
KSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
QmxvY2tSZXN1bHRTdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRp
b24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIEpTVmFsdWUq
IHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1
ZV07CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVm
ZmVyXTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOwor
ICAgIGNoYXIqIG1fYnVmZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK0BpbXBs
ZW1lbnRhdGlvbiBKU0Jsb2NrQWRhcHRvciB7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+
IG1fc2lnbmF0dXJlV2l0aE9mZnNldHM7CisgICAgV1RGOjpSZXRhaW5QdHI8TlNTdHJpbmc+IG1f
c2lnbmF0dXJlV2l0aG91dE9mZnNldHM7CisgICAgT3duUHRyPEJsb2NrUmVzdWx0PiBtX3Jlc3Vs
dDsKKyAgICBPd25QdHI8QmxvY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgc2l6ZV90IG1f
YXJndW1lbnRDb3VudDsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBvZmZzZXQgaW5m
b3JtYXRpb24gYmFjayBpbnRvIGEgYm9jayBzaWduYXR1cmUuCitzdGF0aWMgTlNTdHJpbmcqIGJ1
aWxkQmxvY2tTaWduYXR1cmUoTlNTdHJpbmcqIHByZWZpeCwgY29uc3QgY2hhciogYmVnaW4sIGNv
bnN0IGNoYXIqIGVuZCwgTlNVSW50ZWdlciYgb2Zmc2V0LCBOU1N0cmluZyogcG9zdGZpeCkKK3sK
KyAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgIE5TU3RyaW5nKiByZXN1bHQg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJXMlbHUlQCIsIHByZWZpeCwgY29weS5n
ZXQoKSwgb2Zmc2V0LCBwb3N0Zml4XTsKKyAgICBOU1VJbnRlZ2VyIHNpemU7CisgICAgTlNHZXRT
aXplQW5kQWxpZ25tZW50KGNvcHksICZzaXplLCAwKTsKKyAgICBpZiAoc2l6ZSA8IDQpCisgICAg
ICAgIHNpemUgPSA0OworICAgIG9mZnNldCArPSBzaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKKy0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIq
KWVuY29kZWRUeXBlCit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV9zaWduYXR1cmVXaXRo
b3V0T2Zmc2V0cyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbmNvZGVkVHlwZV07
CisgICAgbV9hcmd1bWVudENvdW50ID0gMDsKKworICAgIC8vIEN1cnJlbnRseSBvbmx5IGFkYXB0
aW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHRvIGJsb2NrcyByZXR1cm5pbmcgdm9pZC4KKyAgICBj
b25zdCBjaGFyKiByZXN1bHRUeXBlQmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICBpZiAoKmVuY29k
ZWRUeXBlKysgIT0gJ3YnKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICBPd25QdHI8QmxvY2tS
ZXN1bHQ+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBCbG9ja1Jlc3VsdFZvaWQpOworICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFR5cGVFbmQgPSBlbmNvZGVkVHlwZTsKKworICAgIGlmIChlbmNvZGVkVHlw
ZVswXSAhPSAnQCcgfHwgZW5jb2RlZFR5cGVbMV0gIT0gJz8nKSB7CisgICAgICAgIHJldHVybiBz
ZWxmOworICAgIH0KKyAgICBlbmNvZGVkVHlwZSArPSAyOworCisgICAgLy8gVGhlIGZpcnN0IGFy
Z3VtZW50IHRvIGEgYmxvY2sgaXMgdGhlIGJsb3hrIGl0c2VsZi4KKyAgICBOU1N0cmluZyogc2ln
bmF0dXJlID0gQCJAPzAiOworICAgIE5TVUludGVnZXIgb2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsK
KworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBhcmd1bWVudHMgPSAwOworICAgIE93blB0cjxC
bG9ja0FyZ3VtZW50PiogbmV4dEFyZ3VtZW50ID0gJmFyZ3VtZW50czsKKyAgICB3aGlsZSAoKmVu
Y29kZWRUeXBlKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gZW5jb2RlZFR5cGU7Cisg
ICAgICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBhcmd1bWVudCA9IGFkb3B0UHRyKHBhcnNlT2Jq
Q1R5cGU8QmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZT4oZW5jb2RlZFR5cGUpKTsKKyAgICAgICAg
aWYgKCFhcmd1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmOworICAgICAgICBjb25zdCBj
aGFyKiBlbmQgPSBlbmNvZGVkVHlwZTsKKworICAgICAgICAvLyBBcHBlbmQgdGhlIHR5cGUgJiBz
dGFjayBvZmZzZXQgb2YgdGhpcyBhcmd1bWVudCB0byB0aGUgc2lnbmF0dXJlIHN0cmluZy4KKyAg
ICAgICAgc2lnbmF0dXJlID0gYnVpbGRCbG9ja1NpZ25hdHVyZShzaWduYXR1cmUsIGJlZ2luLCBl
bmQsIG9mZnNldCwgQCIiKTsKKworICAgICAgICAqbmV4dEFyZ3VtZW50ID0gYXJndW1lbnQucmVs
ZWFzZSgpOworICAgICAgICBuZXh0QXJndW1lbnQgPSAmKCpuZXh0QXJndW1lbnQpLT5tX25leHQ7
CisgICAgICAgICsrbV9hcmd1bWVudENvdW50OworICAgIH0KKworICAgIC8vIFByZWZpYyB0aGUg
c2lnbmF0dXJlIHdpdGggdGhlIHJldHVybiB0eXBlICYgdG90YWwgc3RhY2tmcmFtZSBzaXplLgor
ICAgIC8vICh0aGlzIGNhbGwgd2lsbCBhbHNvIGFkZCB0aGUgcmV0dXJuIHR5cGUgc2l6ZSB0byB0
aGUgb2Zmc2V0LAorICAgIC8vIHdoaWNoIGlzIGEgbm9uc2VzbmUsIGJ1dCBoYXJtbGVzcyBzaW5j
ZSB0aGlzIGlzIHRoZSBsYXN0IHVzZSkuCisgICAgc2lnbmF0dXJlID0gYnVpbGRCbG9ja1NpZ25h
dHVyZShAIiIsIHJlc3VsdFR5cGVCZWdpbiwgcmVzdWx0VHlwZUVuZCwgb2Zmc2V0LCBzaWduYXR1
cmUpOworCisgICAgbV9zaWduYXR1cmVXaXRoT2Zmc2V0cyA9IHNpZ25hdHVyZTsKKyAgICBtX3Jl
c3VsdCA9IHJlc3VsdC5yZWxlYXNlKCk7CisgICAgbV9hcmd1bWVudHMgPSBhcmd1bWVudHMucmVs
ZWFzZSgpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy8vIFRoZSBKU0Jsb2NrQWRhcHRvciBz
dG9yZXMgdGhlIHR5cGUgc3RyaW5nIHRha2VuIGZyb20gdGhlIHByb3RvY29sLiBUaGlzIHN0cmlu
ZworLy8gZG9lcyBub3QgY29udGFpbiBpbnZvY2F0aW9uIGxheW91dCBpbmZvcm1hdGlvbi4gVGhl
IHNpZ25hdHVyZSBmcm9tIHRoZSBibG9jaworLy8gZG9lcyBjb250YWluIHRoZSBzdGFja2ZyYW1l
IG9mZnNldHMuIFNraXAgdGhlc2Ugd2hlbiBjb21wYXJpbmcgc3RyaW5ncy4KKy0gKGJvb2wpYmxv
Y2tNYXRjaGVzU2lnbmF0dXJlOihpZClibG9jaworeworICAgIGlmICghX0Jsb2NrX2hhc19zaWdu
YXR1cmUoYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB3
aXRob3V0T2Zmc2V0cz0gW21fc2lnbmF0dXJlV2l0aG91dE9mZnNldHMgVVRGOFN0cmluZ107Cisg
ICAgY29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZShibG9jayk7CisKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB3aGlsZSAoaXNkaWdpdCgqd2l0aG91dE9mZnNldHMp
KQorICAgICAgICAgICAgKyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgd2hpbGUgKGlzZGlnaXQo
KnNpZ25hdHVyZSkpCisgICAgICAgICAgICArK3NpZ25hdHVyZTsKKyAgICAgICAgCisgICAgICAg
IGlmICgqd2l0aG91dE9mZnNldHMgIT0gKnNpZ25hdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCEqd2l0aG91dE9mZnNldHMpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgKyt3aXRob3V0T2Zmc2V0czsKKyAgICAgICAgKytzaWduYXR1cmU7Cisg
ICAgfQorfQorCistIChpZClibG9ja0Zyb21WYWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNv
bnRleHQ6KEpTQ29udGV4dCopY29udGV4dCB3aXRoRXhjZXB0aW9uOihKU1ZhbHVlUmVmKilleGNl
cHRpb24KK3sKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KTsKKworICAgIC8vIENoZWNrIGZvciBudWxsL3VuZGVmaW5lZC4KKyAgICBp
ZiAoSlNWYWx1ZUlzVW5kZWZpbmVkKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc051bGwoY3R4
LCBhcmd1bWVudCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU09iamVjdFJlZiBmdW5j
dGlvbiA9IDA7CisgICAgaWYgKGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY3R4LCBh
cmd1bWVudCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIE9iamVj
dGl2ZS1DIGJsb2NrLgorICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOmdldE5TQmxv
Y2tDbGFzcygpXSkgeworICAgICAgICAgICAgaWYgKFtzZWxmIGJsb2NrTWF0Y2hlc1NpZ25hdHVy
ZTpvYmplY3RdKQorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKG1fc2lnbmF0dXJlV2l0aE9mZnNldHMgJiYgSlNWYWx1ZUlzT2JqZWN0KGN0
eCwgYXJndW1lbnQpKSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcmd1bWVudCBpcyBhIEph
dmFTY3JpcHQgZnVuY3Rpb24KKyAgICAgICAgLy8gKGFuZCB0aGF0IHdlcmUgYWJsZSB0byBjcmVh
dGUgYSBmb3J3YXJkaW5nIGJsb2NrIGZvciB0aGlzIHNpZ25hdHVyZSkuCisgICAgICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjdHgsIGFyZ3VtZW50LCBleGNlcHRpb24p
OworICAgICAgICBpZiAoSlNPYmplY3RJc0Z1bmN0aW9uKGN0eCwgb2JqZWN0KSkKKyAgICAgICAg
ICAgIGZ1bmN0aW9uID0gb2JqZWN0OworICAgIH0KKworICAgIGlmICghZnVuY3Rpb24pIHsKKyAg
ICAgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY3R4KSk7CisgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGN0eCksICJJbnZhbGlk
IGFyZ3VtZW50IHN1cHBsaWVkIGZvciBPYmplY3RpdmUtQyBibG9jayIpKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9CisKKyAgICAvLyBDYXB0dXJlZCB2YXJpYWJsZXMuCisgICAgSlNCbG9j
a0FkYXB0b3IqIGFkYXB0b3IgPSBzZWxmOworICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUg
dmFsdWVXaXRoVmFsdWU6ZnVuY3Rpb24gaW5Db250ZXh0OmNvbnRleHRdOworCisgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTUKKyAgICAv
LyBDdXJyZW50bHkgb25seSBzdXBwb3J0aW5nIHZvaWQgZnVuY3Rpb25zLgorICAgIHJldHVybiBf
X05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2FwdHVyZUJsb2NrKFttX3NpZ25hdHVyZVdpdGhPZmZz
ZXRzIFVURjhTdHJpbmddLCBeKE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbil7CisgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk0Cisg
ICAgICAgIC8vIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0aGF0IHRoZSBjb250ZXh0IGJlIHJldGFp
bmVkLCBpdCB3b3VsZCBwcm9iYWJseSBiZSBtb3JlCisgICAgICAgIC8vIGFwcHJvcHJpYXRlIHRv
IHVzZSBhIG5ldyBKU0NvbnRleHQgaW5zdGFuY2UgKGNyZWF0aW5nIG9uZSBpZiBuZWNlc3Nhcnkp
LgorICAgICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHRocm93IGEgSlMgZXhj
ZXB0aW9uIGhlcmUsIGJ1dCB3aXRob3V0IGEgY29udGV4dCB3ZSBoYXZlCisgICAgICAgIC8vIG5v
dGhpbmcgdG8gd29yayB3aXRoLgorICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSB2YWx1ZS5j
b250ZXh0OworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpOworCisgICAgICAgIEpTVmFsdWVSZWYgYXJnc1thZGFwdG9yLT5tX2FyZ3VtZW50Q291bnRd
OworCisgICAgICAgIHNpemVfdCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgICAgIEJsb2NrQXJn
dW1lbnQqIGFyZ3VtZW50cyA9IGFkYXB0b3ItPm1fYXJndW1lbnRzLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrQXJndW1lbnQqIGFyZ3VtZW50ID0gYXJndW1lbnRzOyBhcmd1bWVudDsgYXJndW1l
bnQgPSBhcmd1bWVudC0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgICAgICAgICBhcmdzW2FyZ3VtZW50TnVtYmVyXSA9IGFyZ3VtZW50
LT5nZXQoaW52b2NhdGlvbiwgYXJndW1lbnROdW1iZXIgKyAxLCBjb250ZXh0LCAmZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICBbY29udGV4
dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrYXJndW1lbnROdW1iZXI7
CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudE51bWJl
cjsKKworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY3R4LCBKU1ZhbHVlVG9PYmplY3QoY3R4LCB2YWx1ZUludGVybmFsVmFs
dWUodmFsdWUpLCAwKSwgMCwgYXJndW1lbnRDb3VudCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAg
ICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSk7Cit9
CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTM4NjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwOCwxMCArNTA4LDEwIEBAIHZvaWQqIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0UHJpdmEKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6aW5oZXJpdHMoSlNDbGFzc1JlZiBjKSBjb25zdAogewotICAgIGZv
ciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gY2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKQorICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gY2xhc3NS
ZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CiAgICAgICAg
IGlmIChqc0NsYXNzID09IGMpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKyAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdC5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAY2xhc3MgSlNWaXJ0dWFs
TWFjaGluZSwgSlNWYWx1ZTsKKworLy8gQW4gaW5zdGFuY2Ugb2YgSlNDb250ZXh0IHJlcHJlc2Vu
dHMgYSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCwgYWxsCisvLyBKYXZhU2NyaXB0
IGV4ZWN1dGlvbiB0YWtlcyBwbGFjZSB3aXRoaW4gYSBjb250ZXh0LgorLy8gSlNDb250ZXh0IGlz
IGFsc28gdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2Ygb2JqZWN0cyB3aXRoaW4gdGhl
CisvLyBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZS4gRXZlcnkgaW5zdGFuY2Ugb2YgSlNWYWx1
ZSBpcyBhc3NvY2lhdGVkIHdpdGggYQorLy8gSlNDb250ZXh0IHZpYSBhIHdlYWsgcmVmZXJlbmNl
LiBUaGUgSlNWYWx1ZSB3aWxsIGtlZXAgdGhlIEphdmFTY3JpcHQgdmFsdWUgaXQKKy8vIHJlZmVy
ZW5jZXMgYWxpdmUgc28gbG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGFsc28gcmV0YWluZWQuIFdo
ZW4gYW4gaW5zdGFuY2UKKy8vIG9mIEpTQ29udGV4dCBpcyBkZWFsbG9jYXRlZCBhbmQgdGhlIHdl
YWsgcmVmZXJlbmNlcyB0byBpdCBhcmUgY2xlYXJlZCB0aGUKKy8vIEpTVmFsdWVzIHRoYXQgaGFk
IGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCB3aWxsIGJlIGludmFsaWRhdGVkLCBh
bmQKKy8vIHdpbGwgY2Vhc2UgdG8ga2VlcCB0aGUgdmFsdWVzIHdpdGhpbiB0aGUgSmF2YVNjcmlw
dCBlbmdpbmUgYWxpdmUuCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCitAaW50ZXJmYWNl
IEpTQ29udGV4dCA6IE5TT2JqZWN0CisKKy8vIENyZWF0ZSBhIEpTQ29udGV4dC4KKy0gKGlkKWlu
aXQ7CisvLyBDcmVhdGUgYSBKU0NvbnRleHQgaW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hp
bmUuCistIChpZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdmly
dHVhbE1hY2hpbmU7CisKKy8vIEV2YWx1YXRlIGEgc3RyaW5nIG9mIEphdmFTY3JpcHQgY29kZS4K
Ky0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQ7CisKKy8vIFRo
aXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgZ2xvYmFsIG9iamVjdCBvZiB0aGUgSmF2YVNjcmlwdCBl
eGVjdXRpb24gY29udGV4dC4KKy8vIEluc3RhbmNlcyBvZiBKU0NvbnRleHQgb3JpZ2luYXRpbmcg
ZnJvbSBXZWJLaXQgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlCisvLyBXaW5kb3dQcm94
eSBvYmplY3QuCistIChKU1ZhbHVlICopZ2xvYmFsT2JqZWN0OworCisvLyBUaGlzIG1ldGhvZCBt
YXkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIE9iamVjdGl2ZS1DIGJsb2NrIG9yIG1ldGhvZCBp
bnZva2VkCisvLyBhcyBhIGNhbGxiYWNrIGZyb20gSmF2YVNjcmlwdCB0byByZXRyaWV2ZSB0aGUg
Y2FsbGJhY2sncyBjb250ZXh0LiBPdXRzaWRlIG9mCisvLyBhIGNhbGxiYWNrIGZyb20gSmF2YVNj
cmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisrIChKU0NvbnRleHQgKiljdXJyZW50
Q29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gT2Jq
ZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJhY2sgZnJvbSBK
YXZhU2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIHRoaXMgdmFsdWUuIE91dHNpZGUK
Ky8vIG9mIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJu
IG5pbC4KKysgKEpTVmFsdWUgKiljdXJyZW50VGhpczsKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBj
YWxsZWQgZnJvbSB3aXRoaW4gYW4gT2JqZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQK
Ky8vIGFzIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFj
aydzIGFyZ3VtZW50cywgb2JqZWN0cworLy8gaW4gdGhlIHJldHVybmVkIGFycmF5IGFyZSBpbnN0
YW5jZXMgb2YgSlNWYWx1ZS4gT3V0c2lkZSBvZiBhIGNhbGxiYWNrIGZyb20KKy8vIEphdmFTY3Jp
cHQgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1
bWVudHM7CisKKy8vIFRoZSAiZXhjZXB0aW9uIiBwcm9wZXJ0eSBtYXkgYmUgdXNlZCB0byB0aHJv
dyBhbiBleGNlcHRpb24gdG8gSmF2YVNjcmlwdC4KKy8vIEJlZm9yZSBhIGNhbGxiYWNrIGlzIG1h
ZGUgZnJvbSBKYXZhU2NyaXB0IHRvIGFuIE9iamVjdGl2ZS1DIGJsb2NrIG9yIG1ldGhvZCwKKy8v
IHRoZSBwcmlvciB2YWx1ZSBvZiB0aGUgZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcHJlc2Vy
dmVkIGFuZCB0aGUgcHJvcGVydHkKKy8vIHdpbGwgYmUgc2V0IHRvIG5pbC4gQWZ0ZXIgdGhlIGNh
bGxiYWNrIGhhcyBjb21wbGV0ZWQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUKKy8vIGV4Y2VwdGlvbiBw
cm9wZXJ0eSB3aWxsIGJlIHJlYWQsIGFuZCBwcmlvciB2YWx1ZSByZXN0b3JlZC4gSWYgdGhlIG5l
dyB2YWx1ZQorLy8gb2YgZXhjZXB0aW9uIGlzIG5vdCBuaWwsIHRoZSBjYWxsYmFjayB3aWxsIHJl
c3VsdCBpbiB0aGF0IHZhbHVlIGJlaW5nIHRocm93bi4KKy8vIFRoaXMgcHJvcGVydHkgbWF5IGFs
c28gYmUgdXNlZCB0byBjaGVjayBmb3IgdW5jYXVnaHQgZXhjZXB0aW9ucyBhcmlzaW5nIGZyb20K
Ky8vIEFQSSBmdW5jdGlvbiBjYWxscyAoc2luY2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mICJl
eGNlcHRpb25IYW5kbGVyIiBpcyB0bworLy8gYXNzaWduIGFudCB1bmNhdWdodCBleGNlcHRpb24g
dG8gdGhpcyBwcm9wZXJ0eSkuCisvLyBJZiBhIEpTVmFsdWUgb3JnaW5hdGluZyBmcm9tIGEgZGlm
ZmVyZW50IEpTVmlydHVhbE1hY2hpbmUgdGhpcyB0aGlzIGNvbnRleHQKKy8vIGlzIGFzc2lnbmVk
IHRvIHRoaXMgcHJvcGVydHksIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNl
ZC4KK0Bwcm9wZXJ0eShyZXRhaW4pIEpTVmFsdWUgKmV4Y2VwdGlvbjsKKworLy8gSWYgYSBjYWxs
IHRvIGFuIEFQSSBmdW5jdGlvbiByZXN1bHRzIGluIGFuIHVuY2F1Z2h0IEphdmFTY3JpcHQgZXhj
ZXB0aW9uLCB0aGUKKy8vICJleGNlcHRpb25IYW5kbGVyIiBibG9jayB3aWxsIGJlIGludm9rZWQu
IFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciB0aGUKKy8vIGV4Y2VwdGlvbiBoYW5kbGVy
IHdpbGwgc3RvcmUgdGhlIGV4Y2VwdGlvbiB0byB0aGUgZXhjZXB0aW9uIHByb3BlcnR5IG9uCisv
LyBjb250ZXh0LiBBcyBhIGNvbnNlcXVlbmNlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBmb3Ig
dW5oYW5kbGVkIGV4Y2VwdGlvbnMKKy8vIG9jY3VyaW5nIHdpdGhpbiBhIGNhbGxiYWNrIGZyb20g
SmF2YVNjcmlwdCB0byBiZSByZXRocm93biB1cG9uIHJldHVybi4KKy8vIFNldHRpbmcgdGhpcyB2
YWx1ZSB0byBuaWwgd2lsbCByZXN1bHQgaW4gYWxsIHVuY2F1Z2h0IGV4Y2VwdGlvbnMgdGhyb3du
IGZyb20KKy8vIHRoZSBBUEkgYmVpbmcgc2lsZW50bHkgY29uc3VtZWQuCitAcHJvcGVydHkoY29w
eSkgdm9pZCheZXhjZXB0aW9uSGFuZGxlcikoSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlICpl
eGNlcHRpb24pOworCisvLyBBbGwgaW5zdGFuY2VzIG9mIEpTQ29udGV4dCBhcmUgYXNzb2NpYXRl
ZCB3aXRoIGEgc2luZ2xlIEpTVmlydHVhbE1hY2hpbmUuIFRoZQorLy8gdmlydHVhbCBtYWNoaW5l
IHByb3ZpZGVzIGFuICJvYmplY3Qgc3BhY2UiIG9yIHNldCBvZiBleGVjdXRpb24gcmVzb3VyY2Vz
LgorQHByb3BlcnR5KHJlYWRvbmx5LCByZXRhaW4pIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxN
YWNoaW5lOworCitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU0NvbnRleHQgaW1wbGVtZW50IHRo
ZSBmb2xsb3dpbmcgbWV0aG9kcyBpbiBvcmRlciB0byBlbmFibGUKKy8vIHN1cHBvcnQgZm9yIHN1
YnNjcmlwdCBhY2Nlc3MgYnkga2V5IGFuZCBpbmRleCwgZm9yIGV4YW1wbGU6CisvLworLy8gICAg
SlNDb250ZXh0ICpjb250ZXh0OworLy8gICAgSlNWYWx1ZSAqdiA9IGNvbnRleHRbQCJYIl07IC8v
IEdldCB2YWx1ZSBmb3IgIlgiIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuCisvLyAgICBjb250ZXh0
W0AiWSJdID0gdjsgICAgICAgICAgLy8gQXNzaWduICd2JyB0byAiWSIgb24gdGhlIGdsb2JhbCBv
YmplY3QuCisvLworLy8gQW4gb2JqZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBi
ZSBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUg
Y29udmVydGVkIHRvIGEgc3RyaW5nIHVzZWQgdG8gcmVzb2x2ZSBhIHByb3BlcnR5IG9mIHRoZQor
Ly8gZ2xvYmFsIG9iamVjdC4KK0BpbnRlcmZhY2UgSlNDb250ZXh0KFN1YnNjcmlwdFN1cHBvcnQp
CisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5OworLSAodm9p
ZClzZXRPYmplY3Q6KGlkKW9iamVjdCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4p
a2V5OworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1w
b3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAi
SlNHbG9iYWxPYmplY3QuaCIKKyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAi
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNp
bXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgor
I2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKwordHlw
ZWRlZiBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgc2l6ZV90PiBQcm90ZWN0TWFwOworCitAaW1w
bGVtZW50YXRpb24gSlNDb250ZXh0IHsKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICptX3ZpcnR1YWxN
YWNoaW5lOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgSlNXcmFwcGVy
TWFwICptX3dyYXBwZXJNYXA7CisgICAgUHJvdGVjdE1hcCBtX3Byb3RlY3RlZDsKK30KKworQHN5
bnRoZXNpemUgZXhjZXB0aW9uOworQHN5bnRoZXNpemUgZXhjZXB0aW9uSGFuZGxlcjsKKworLSAo
aWQpaW5pdAoreworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOltbW0pT
VmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXV07Cit9CisKKy0gKGlkKWlu
aXRXaXRoVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQor
eworICAgIFtzdXBlciBpbml0XTsKKworICAgIG1fdmlydHVhbE1hY2hpbmUgPSBbdmlydHVhbE1h
Y2hpbmUgcmV0YWluXTsKKyAgICBtX2NvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdy
b3VwKGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKHZpcnR1YWxNYWNoaW5lKSwgMCk7CisgICAg
bV93cmFwcGVyTWFwID0gW1tKU1dyYXBwZXJNYXAgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpzZWxm
XTsKKworICAgIHNlbGYuZXhjZXB0aW9uID0gbmlsOworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxl
ciA9IF4oSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb25WYWx1ZSkgeworICAg
ICAgICBjb250ZXh0LmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOworICAgIH07CisKKyAgICB0
b0pTKG1fY29udGV4dCktPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bV9hcGlEYXRhID0gc2VsZjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0
cmluZyAqKXNjcmlwdAoreworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSAwOworICAg
IEpTU3RyaW5nUmVmIHNjcmlwdEpTID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKXNjcmlwdCk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0
KG1fY29udGV4dCwgc2NyaXB0SlMsIDAsIDAsIDAsICZleGNlcHRpb25WYWx1ZSk7CisgICAgSlNT
dHJpbmdSZWxlYXNlKHNjcmlwdEpTKTsKKworICAgIGlmIChleGNlcHRpb25WYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07
CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpz
ZWxmXTsKK30KKworLSAoSlNWYWx1ZSAqKWdsb2JhbE9iamVjdAoreworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QobV9jb250ZXh0KSBp
bkNvbnRleHQ6c2VsZl07Cit9CisKKysgKEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0Cit7Cisg
ICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKKyAgICBDYWxs
YmFja0RhdGEgKmVudHJ5ID0gKENhbGxiYWNrRGF0YSAqKXRocmVhZERhdGEubV9hcGlEYXRhOwor
ICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5jb250ZXh0IDogbmlsOworfQorCisrIChKU1ZhbHVl
ICopY3VycmVudFRoaXMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhy
ZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAoQ2FsbGJhY2tEYXRhICopdGhy
ZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBpZiAoIWVudHJ5LT5jdXJyZW50VGhpcykKKyAgICAg
ICAgZW50cnktPmN1cnJlbnRUaGlzID0gW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOmVu
dHJ5LT50aGlzVmFsdWUgaW5Db250ZXh0OltKU0NvbnRleHQgY3VycmVudENvbnRleHRdXTsKKwor
ICAgIHJldHVybiBlbnRyeS0+Y3VycmVudFRoaXM7Cit9CisKKysgKE5TQXJyYXkgKiljdXJyZW50
QXJndW1lbnRzCit7CisgICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERh
dGEoKTsKKyAgICBDYWxsYmFja0RhdGEgKmVudHJ5ID0gKENhbGxiYWNrRGF0YSAqKXRocmVhZERh
dGEubV9hcGlEYXRhOworCisgICAgaWYgKCFlbnRyeS0+Y3VycmVudEFyZ3VtZW50cykgeworICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAg
ICAgICAgc2l6ZV90IGNvdW50ID0gZW50cnktPmFyZ3VtZW50Q291bnQ7CisgICAgICAgIEpTVmFs
dWUgKiBhcmdzW2NvdW50XTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9MDsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgICAgICBhcmdzW2ldID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZW50cnkt
PmFyZ3VtZW50c1tpXSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGVudHJ5LT5jdXJyZW50
QXJndW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6YXJncyBjb3VudDpj
b3VudF07CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5LT5jdXJyZW50QXJndW1lbnRzOworfQor
CistIChKU1ZpcnR1YWxNYWNoaW5lKil2aXJ0dWFsTWFjaGluZQoreworICAgIHJldHVybiBtX3Zp
cnR1YWxNYWNoaW5lOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQoU3Vi
c2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2NyaXB0Oihp
ZClrZXkKK3sKKyAgICByZXR1cm4gW3NlbGYgZ2xvYmFsT2JqZWN0XVtrZXldOworfQorCistICh2
b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vic2NyaXB0OihpZCA8TlNDb3B5aW5n
PilrZXkKK3sKKyAgICBbc2VsZiBnbG9iYWxPYmplY3RdW2tleV0gPSBvYmplY3Q7Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChJbnRlcm5hbCkKKworSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleHQoSlNDb250ZXh0KiBjb250ZXh0KQoreworICAg
IHJldHVybiBjb250ZXh0LT5tX2NvbnRleHQ7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tX2FwaURhdGEgPSAwOwor
CisgICAgUHJvdGVjdE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX3Byb3RlY3RlZC5iZWdpbigp
OworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkLmVuZCgpOworICAg
IGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpCisgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3QobV9jb250ZXh0LCBpdGVyYXRvci0+a2V5KTsKKworICAgIFttX3dyYXBwZXJNYXAgcmVs
ZWFzZV07CisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOworICAgIFttX3Zp
cnR1YWxNYWNoaW5lIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9p
ZClub3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0aW9uVmFsdWUKK3sKKyAgICBzZWxm
LmV4Y2VwdGlvbkhhbmRsZXIoc2VsZiwgW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZXhjZXB0aW9u
VmFsdWUgaW5Db250ZXh0OnNlbGZdKTsKK30KKworLSAoSlNWYWx1ZSAqKXZhbHVlRnJvbU5vdGlm
eUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb25WYWx1ZQoreworICAgIFtzZWxmIG5vdGlm
eUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDpzZWxmXTsKK30KKworLSAoQk9PTClib29sRnJvbU5vdGlmeUV4
Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb25WYWx1ZQoreworICAgIFtzZWxmIG5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKWJl
Z2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICopY2FsbGJhY2tEYXRhIHRoaXNWYWx1
ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3VtZW50Q291
bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzCit7CisgICAgV1RGVGhy
ZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKKyAgICBbc2VsZiByZXRhaW5d
OworICAgIENhbGxiYWNrRGF0YSAqcHJldlN0YWNrID0gKENhbGxiYWNrRGF0YSAqKXRocmVhZERh
dGEubV9hcGlEYXRhOworICAgICpjYWxsYmFja0RhdGEgPSAoQ2FsbGJhY2tEYXRhKXsgcHJldlN0
YWNrLCBzZWxmLCBbc2VsZi5leGNlcHRpb24gcmV0YWluXSwgdGhpc1ZhbHVlLCBuaWwsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cywgbmlsIH07CisgICAgdGhyZWFkRGF0YS5tX2FwaURhdGEgPSBj
YWxsYmFja0RhdGE7CisgICAgc2VsZi5leGNlcHRpb24gPSBuaWw7Cit9CisKKy0gKHZvaWQpZW5k
Q2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICopY2FsbGJhY2tEYXRhCit7CisgICAgV1RG
VGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKKyAgICBzZWxmLmV4Y2Vw
dGlvbiA9IGNhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0aW9uOworICAgIFtjYWxsYmFja0Rh
dGEtPnByZXNlcnZlZEV4Y2VwdGlvbiByZWxlYXNlXTsKKyAgICBbY2FsbGJhY2tEYXRhLT5jdXJy
ZW50VGhpcyByZWxlYXNlXTsKKyAgICBbY2FsbGJhY2tEYXRhLT5jdXJyZW50QXJndW1lbnRzIHJl
bGVhc2VdOworICAgIHRocmVhZERhdGEubV9hcGlEYXRhID0gY2FsbGJhY2tEYXRhLT5uZXh0Owor
ICAgIFtzZWxmIHJlbGVhc2VdOworfQorCistICh2b2lkKXByb3RlY3Q6KEpTVmFsdWVSZWYpdmFs
dWUKK3sKKyAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RlZAorICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKKworICAgIFByb3RlY3RNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX3Byb3RlY3RlZC5hZGQodmFsdWUsIDEpOworICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgSlNWYWx1ZVByb3RlY3QobV9jb250ZXh0LCB2YWx1ZSk7CisgICAg
ZWxzZQorICAgICAgICArK3Jlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKKy0gKHZvaWQpdW5w
cm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlCit7CisgICAgLy8gTG9jayBhY2Nlc3MgdG8gbV9wcm90
ZWN0ZWQKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHRvSlMobV9jb250ZXh0KSk7CisKKyAg
ICBQcm90ZWN0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdGVkLmZpbmQodmFsdWUp
OworICAgIGlmIChpdGVyYXRvci0+dmFsdWUgPT0gMSkgeworICAgICAgICBtX3Byb3RlY3RlZC5y
ZW1vdmUodmFsdWUpOworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgdmFsdWUp
OworICAgIH0gZWxzZQorICAgICAgICAtLWl0ZXJhdG9yLT52YWx1ZTsKK30KKworLSAoSlNWYWx1
ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAoreworICAgIC8vIExvY2sgYWNjZXNzIHRv
IG1fd3JhcHBlck1hcAorICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQp
KTsKKyAgICByZXR1cm4gW21fd3JhcHBlck1hcCB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF07Cit9
CisKK0BlbmQKKworV2Vha0NvbnRleHRSZWY6OldlYWtDb250ZXh0UmVmKEpTQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICBvYmpjX2luaXRXZWFrKCZtX3dlYWtDb250ZXh0LCBjb250ZXh0KTsKK30K
KworV2Vha0NvbnRleHRSZWY6On5XZWFrQ29udGV4dFJlZigpCit7CisgICAgb2JqY19kZXN0cm95
V2VhaygmbV93ZWFrQ29udGV4dCk7Cit9CisKK0pTQ29udGV4dCAqIFdlYWtDb250ZXh0UmVmOjpn
ZXQoKQoreworICAgIHJldHVybiBvYmpjX2xvYWRXZWFrKCZtX3dlYWtDb250ZXh0KTsKK30KKwor
dm9pZCBXZWFrQ29udGV4dFJlZjo6c2V0KEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBvYmpj
X3N0b3JlV2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7Cit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU0NvbnRleHQuaCIK
Kworc3RydWN0IENhbGxiYWNrRGF0YSB7CisgICAgQ2FsbGJhY2tEYXRhICpuZXh0OworICAgIEpT
Q29udGV4dCAqY29udGV4dDsKKyAgICBKU1ZhbHVlICpwcmVzZXJ2ZWRFeGNlcHRpb247CisgICAg
SlNWYWx1ZVJlZiB0aGlzVmFsdWU7CisgICAgSlNWYWx1ZSAqY3VycmVudFRoaXM7CisgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnQ7CisgICAgY29uc3QgSlNWYWx1ZVJlZiAqYXJndW1lbnRzOworICAg
IE5TQXJyYXkgKmN1cnJlbnRBcmd1bWVudHM7Cit9OworCitjbGFzcyBXZWFrQ29udGV4dFJlZiB7
CitwdWJsaWM6CisgICAgV2Vha0NvbnRleHRSZWYoSlNDb250ZXh0KiA9IG5pbCk7CisgICAgfldl
YWtDb250ZXh0UmVmKCk7CisKKyAgICBKU0NvbnRleHQgKiBnZXQoKTsKKyAgICB2b2lkIHNldChK
U0NvbnRleHQqKTsKKworcHJpdmF0ZToKKyAgICBKU0NvbnRleHQgKm1fd2Vha0NvbnRleHQ7Cit9
OworCitAaW50ZXJmYWNlIEpTQ29udGV4dChJbnRlcm5hbCkKKworSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHRJbnRlcm5hbENvbnRleHQoSlNDb250ZXh0ICopOworCistICh2b2lkKW5vdGlmeUV4
Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb247CistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbjsKKy0gKEJPT0wpYm9vbEZyb21Ob3Rp
ZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0aW9uOworCistICh2b2lkKWJlZ2luQ2FsbGJh
Y2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICopY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTooSlNWYWx1
ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3VtZW50Q291bnQgYXJndW1l
bnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzOworLSAodm9pZCllbmRDYWxsYmFja1dp
dGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGE7CisKKy0gKHZvaWQpcHJvdGVjdDoo
SlNWYWx1ZVJlZil2YWx1ZTsKKy0gKHZvaWQpdW5wcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOwor
CistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OworCitAZW5kCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0V4cG9ydC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lmIEpT
X09CSkNfQVBJX0VOQUJMRUQKKworLy8gV2hlbiBhbiBKYXZhU2NyaXB0IHZhbHVlIGlzIGNyZWF0
ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhbiBPYmplY3RpdmUtQyBjbGFzcworLy8gZm9yIHdoaWNo
IG5vIGNvcHlpbmcgY29udmVyc2lvbiBpcyBzcGVjaWZpZWQgYSBKYXZhU2NyaXB0IHdyYXBwZXIg
b2JqZWN0IHdpbGwKKy8vIGJlIGNyZWF0ZWQuCisvLworLy8gSW4gSmF2YVNjcmlwdCBpbmhlcml0
YW5jZSBpcyBzdXBwb3J0ZWQgdmlhIGEgY2hhaW4gb2YgcHJvdG90eXBlIG9iamVjdHMsIGFuZAor
Ly8gZm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MgKGFuZCBwZXIgSlNDb250ZXh0KSBhbiBvYmpl
Y3QgYXBwcm9wcmlhdGUgZm9yIHVzZQorLy8gYXMgYSBwcm90b3R5cGUgd2lsbCBiZSBwcm92aWRl
ZC4gRm9yIHRoZSBjbGFzcyBOU09iamVjdCB0aGUgcHJvdG90eXBlIG9iamVjdAorLy8gd2lsbCBi
ZSB0aGUgSmF2YVNjcmlwdCBjb250ZXh0J3MgT2JqZWN0IFByb3RvdHlwZS4gRm9yIGFsbCBvdGhl
ciBPYmplY3RpdmUtQworLy8gY2xhc3NlcyBhIFByb3RvdHlwZSBvYmplY3Qgd2lsbCBiZSBjcmVh
dGVkLiBUaGUgUHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbgorLy8gT2JqZWN0aXZlLUMgY2xh
c3Mgd2lsbCBoYXZlIGl0cyBpbnRlcm5hbCBbUHJvdG90eXBlXSBwcm9wZXJ0eSBzZXQgdG8gcG9p
bnQgdG8KKy8vIHRoZSBQcm90b3R5cGUgb2JqZWN0IG9mIHRoZSBPYmplY3RpdmUtQyBjbGFzcydz
IHN1cGVyY2xhc3MuIEFzIHN1Y2ggdGhlCisvLyBwcm90b3R5cGUgY2hhaW4gZm9yIGEgSmF2YVNj
cmlwdCB3cmFwcGVyIG9iamVjdCB3aWxsIHJlZmxlY3QgdGhlIHdyYXBwZWQKKy8vIE9iamVjdGl2
ZS1DIHR5cGUncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisvLworLy8gSW4gYWRkaXRpb24gdG8g
dGhlIFByb3RvdHlwZSBvYmplY3QgYSBKYXZhU2NyaXB0IENvbnN0cnVjdG9yIG9iamVjdCB3aWxs
IGFsc28KKy8vIGJlIHByb2R1Y2VkIGZvciBlYWNoIE9iamVjdGl2ZS1DIGNsYXNzLiBUaGUgQ29u
c3RydWN0b3Igb2JqZWN0IGhhcyBhIHByb3BlcnR5CisvLyBuYW1lZCAncHJvdG90eXBlJyB0aGF0
IHJlZmVyZW5jZXMgdGhlIFByb3RvdHlwZSBvYmplY3QsIGFuZCB0aGUgUHJvdG90eXBlCisvLyBv
YmplY3QgaGFzIGEgcHJvcGVydHkgbmFtZWQgJ2NvbnN0cnVjdG9yJyB0aGF0IHJlZmVyZW5jZXMg
dGhlIENvbnN0cnVjdG9yLgorLy8gVGhlIENvbnN0cnVjdG9yIG9iamVjdCBpcyBub3QgY2FsbGFi
bGUuCisvLworLy8gQnkgZGVmYXVsdCBubyBtZXRob2RzIG9yIHByb3BlcnRpZXMgb2YgdGhlIE9i
amVjdGl2ZS1DIGNsYXNzIHdpbGwgYmUgZXhwb3NlZAorLy8gdG8gSmF2YVNjcmlwdCwgaG93ZXZl
ciBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIG1heSBleHBsaWNpdGx5IGJlIGV4cG9ydGVkLgorLy8g
Rm9yIGVhY2ggcHJvdG9jb2wgdGhhdCBhIGNsYXNzIGNvbmZvcm1zIHRvLCBpZiB0aGUgcHJvdG9j
b2wgaW5jb3Jwb3JhdGVzIHRoZQorLy8gcHJvdG9jb2wgSlNFeHBvcnQsIHRoZW4gdGhlIHByb3Rv
Y29sIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaXN0IG9mIG1ldGhvZHMKKy8vIGFuZCBwcm9w
ZXJ0aWVzIHRvIGJlIGV4cG9ydGVkIHRvIEphdmFTY3JpcHQuCisvLworLy8gRm9yIGVhY2ggaW5z
dGFuY2UgbWV0aG9kIGJlaW5nIGV4cG9ydGVkLCBhIGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBm
dW5jdGlvbgorLy8gd2lsbCBiZSBhc3NpZ25lZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBQcm90b3R5
cGUgb2JqZWN0LCBmb3IgZWFjaCBPYmplY3RpdmUtQworLy8gcHJvcGVydHkgYmVpbmcgZXhwb3J0
ZWQgYSBKYXZhU2NyaXB0IGFjY2Vzc29yIHByb3BlcnR5IHdpbGwgYmUgY3JlYXRlZCBvbiB0aGUK
Ky8vIFByb3RvdHlwZSwgYW5kIGZvciBlYWNoIGNsYXNzIG1ldGhvZCBleHBvcnRlZCBhIEphdmFT
Y3JpcHQgZnVuY3Rpb24gd2lsbCBiZQorLy8gY3JlYXRlZCBvbiB0aGUgQ29uc3RydWN0b3Igb2Jq
ZWN0LiBGb3IgZXhhbXBsZToKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlDbGFzc0phdmFTY3JpcHRN
ZXRob2RzIDxKU0V4cG9ydD4KKy8vICAgIC0gKHZvaWQpZm9vOworLy8gICAgQGVuZAorLy8KKy8v
ICAgIEBpbnRlcmZhY2UgTXlDbGFzcyA6IE5TT2JqZWN0IDxNeUNsYXNzSmF2YVNjcmlwdE1ldGhv
ZHM+CisvLyAgICAtICh2b2lkKWZvbzsKKy8vICAgIC0gKHZvaWQpYmFyOworLy8gICAgQGVuZAor
Ly8KKy8vIElmIGFuIGluc3RhbmNlIG9mIE15Q2xhc3MgaXMgY29udmVydGVkIHRvIGEgSmF2YVNj
cmlwdCB2YWx1ZSwgdGhlIHJlc3VsdGluZworLy8gd3JhcHBlciBvYmplY3Qgd2lsbCAodmlhIGl0
cyBwcm90b3R5cGUpIGV4cG9ydCB0aGUgbWV0aG9kICJmb28iIHRvIEphdmFTY3JpcHQsCisvLyBz
aW5jZSB0aGUgY2xhc3MgY29uZm9ybXMgdG8gdGhlIE15Q2xhc3NKYXZhU2NyaXB0RXhwb3J0cyBw
cm90b2NvbCwgYW5kIHRoaXMKKy8vIHByb3RvY29sIGluY29ycG9yYXRlcyBKU0V4cG9ydC4gImJh
ciIgd2lsbCBub3QgYmUgZXhwb3J0ZWQuCisvLworLy8gUHJvcGVydGllcywgYXJndW1lbnRzLCBh
bmQgcmV0dXJuIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIGFyZQorLy8gc3VwcG9ydGVk
OgorLy8KKy8vIFByaW1pdGl2ZSBudW1iZXJzOiBzaWduZWQgdmFsdWVzIG9mIHVwIHRvIDMyLWJp
dHMgYXJlIGNvbnZlcnRlZCBpbiBhIG1hbm5lcgorLy8gICAgY29uc2lzdGVudCB3aXRoIHZhbHVl
V2l0aEludDMyL3RvSW50MzIsIHVuc2lnbmVkIHZhbHVlcyBvZiB1cCB0byAzMi1iaXRzCisvLyAg
ICBhcmUgY29udmVydGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB2YWx1ZVdpdGhVSW50
MzIvdG9VSW50MzIsIGFsbAorLy8gICAgb3RoZXIgbnVtZXJpYyB2YWx1ZXMgYXJlIGNvbnZlcnRl
ZCBjb25zaXN0ZW50bHkgd2l0aCB2YWx1ZVdpdGhEb3VibGUvCisvLyAgICB0b0RvdWJsZS4KKy8v
IEJPT0w6IHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRoIHZhbHVlV2l0aEJv
b2wvdG9Cb29sLgorLy8gaWQ6IHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRo
IHZhbHVlV2l0aE9iamVjdC90b09iamVjdC4KKy8vIDxPYmplY3RpdmUtQyBDbGFzcz46IC0gd2hl
cmUgdGhlIHR5cGUgaXMgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWVkIE9iamVjdGl2ZS1DCisvLyAg
ICBjbGFzcywgY29udmVyc2lvbiBpcyBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoT2JqZWN0T2ZD
bGFzcy90b09iamVjdC4KKy8vIHN0cnVjdCB0eXBlczogQyBzdHJ1Y3QgdHlwZXMgYXJlIHN1cHBv
cnRlZCwgd2hlcmUgSlNWYWx1ZSBwcm92aWRlcyBzdXBwb3J0CisvLyAgICBmb3IgdGhlIGdpdmVu
IHR5cGUuIFN1cHBvcnQgaXMgYnVpbHQgaW4gZm9yIENHUG9pbnQsIE5TUmFuZ2UsIENHUmVjdCwg
YW5kCisvLyAgICBDR1NpemU7IHNlZSBKU1ZhbHVlU3RydWN0U3VwcG9ydC5oIGZvciBpbmZvcm1h
dGlvbiBvbiBob3cgdG8gYWRkIHN1cHBvcnQKKy8vICAgIGZvciBhZGRpdGlvbmFsIHR5cGVzLgor
Ly8gYmxvY2sgdHlwZXM6IEluIGFkZGl0aW9uIHRvIHN1cHBvcnQgcHJvdmlkZWQgYnkgdmFsdWVX
aXRoT2JqZWN0L3RvT2JqZWN0IGZvcgorLy8gICAgYmxvY2sgdHlwZXMsIGlmIGEgSmF2YVNjcmlw
dCBGdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHdoZXJlIHRoZQorLy8gICAgdHlw
ZSByZXF1aXJlZCBpcyBhIGJsb2NrIHdpdGggYSB2b2lkIHJldHVybiB2YWx1ZSAoYW5kIHdoZXJl
IHRoZSBibG9jaydzCisvLyAgICBhcmd1bWVudHMgYXJlIGFsbCBvZiBzdXBwb3J0ZWQgdHlwZXMp
LCB0aGVuIGEgc3BlY2lhbCBhZGFwdG9yIGJsb2NrCisvLyAgICB3aWxsIGJlIGNyZWF0ZWQsIGFs
bG93aW5nIHRoZSB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byBiZSB1c2VkIGluIHRoZQorLy8g
ICAgcGxhY2Ugb2YgYSBibG9jay4KKy8vCisvLyBGb3IgYW55IGludGVyZmFjZSB0aGF0IGNvbmZv
cm1zIHRvIEpTRXhwb3J0IHRoZSBub3JtYWwgY29weWluZyBjb252ZXJzaW9uIGZvcgorLy8gYnVp
bHQgaW4gdHlwZXMgd2lsbCBiZSBpbmhpYml0ZWQgLSBzbywgZm9yIGV4YW1wbGUsIGlmIGFuIGlu
c3RhbmNlIHRoYXQKKy8vIGRlcml2ZXMgZnJvbSBOU1N0cmluZyBieSBjb25mb3JtcyB0byBKU0V4
cG9ydCBpcyBwYXNzZWQgdG8gdmFsdWVXaXRoT2JqZWN0OiwKKy8vIGEgd3JhcHBlciBvYmplY3Qg
Zm9yIHRoZSBPYmplY3RpdmUtQyBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCByYXRoZXIgdGhhbiBh
CisvLyBKYXZhU2NyaXB0IHN0cmluZyBwcmltaXRpdmUuCitAcHJvdG9jb2wgSlNFeHBvcnQKK0Bl
bmQKKworLy8gV2hlbiBhIHNlbGVjdG9yIHRoYXQgdGFrZXMgb25lIG9yIG1vcmUgYXJndW1lbnRz
IGlzIGNvbnZlcnRlZCB0byBhIEphdmFTY3JpcHQKKy8vIHByb3BlcnR5IG5hbWUsIGJ5IGRlZmF1
bHQgYSBwcm9wZXJ0eSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHBlcmZvcm1pbmcgdGhlCisv
LyBmb2xsb3dpbmcgY29udmVyc2lvbjoKKy8vICAtIEFsbCBzZW1pY29sb25zIGFyZSByZW1vdmVk
IGZyb20gdGhlIHNlbGVjdG9yCisvLyAgLSBBbnkgbG93ZXJjYXNlIGxldHRlciB0aGF0IGhhZCBm
b2xsb3dlZCBhIHNlbWljb2xvbiB3aWxsIGJlIGNhcGl0YWxpemVkLgorLy8gVW5kZXIgdGhlIGRl
ZmF1bHQgY29udmVyc2lvbiBhIHNlbGVjdG9yICJkb0Zvbzp3aXRoQmFyOiIgd2lsbCBiZSBleHBv
cnRlZCBhcworLy8gImRvRm9vV2l0aEJhciIuIFRoZSBkZWZhdWx0IGNvbnZlcnNpb24gbWF5IGJl
IG92ZXJyaWRlbiB1c2luZyB0aGUgSlNFeHBvcnRBcworLy8gbWFjcm8sIGZvciBleGFtcGxlIHRv
IGV4cG9ydCBhIG1ldGhvZCAiZG9Gb286d2l0aEJhcjoiIGFzICJkb0ZvbyI6CisvLworLy8gICAg
QHByb3RvY29sIE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcyA8SlNFeHBvcnQ+CisvLyAgICBKU0V4
cG9ydEFzKGRvRm9vLAorLy8gICAgLSAodm9pZClkb0ZvbzooaWQpZm9vIHdpdGhCYXI6KGlkKWJh
cgorLy8gICAgKTsKKy8vICAgIEBlbmQKKy8vCisvLyBOb3RlIHRoYXQgdGhlIEpTRXhwb3J0IG1h
Y3JvIG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSBzZWxlY3RvciB0aGF0IHRha2VzIG9uZQorLy8g
b3IgbW9yZSBhcmd1bWVudC4KKyNkZWZpbmUgSlNFeHBvcnRBcyhQcm9wZXJ0eU5hbWUsIFNlbGVj
dG9yKSBcCisgICAgQG9wdGlvbmFsIFNlbGVjdG9yIF9fSlNfRVhQT1JUX0FTX18jI1Byb3BlcnR5
TmFtZTooaWQpYXJndW1lbnQ7IEByZXF1aXJlZCBTZWxlY3RvcgorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJBUElTaGltcy5oIgor
I2ltcG9ydCAiRGF0ZUluc3RhbmNlLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiSmF2
YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgor
I2ltcG9ydCAiSlNWYWx1ZS5oIgorI2ltcG9ydCAid3RmL0hhc2hNYXAuaCIKKyNpbXBvcnQgInd0
Zi9IYXNoU2V0LmgiCisjaW1wb3J0ICJ3dGYvVmVjdG9yLmgiCisjaW1wb3J0IDx3dGYvVENTcGlu
TG9jay5oPgorI2ltcG9ydCAid3RmL3RleHQvV1RGU3RyaW5nLmgiCisjaW1wb3J0IDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK05TU3RyaW5nICog
Y29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JXcml0YWJsZUtleSA9IEAid3JpdGFibGUiOworTlNT
dHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvckVudW1lcmFibGVLZXkgPSBAImVudW1l
cmFibGUiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJs
ZUtleSA9IEAiY29uZmlndXJhYmxlIjsKK05TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2Ny
aXB0b3JWYWx1ZUtleSA9IEAidmFsdWUiOworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVz
Y3JpcHRvckdldEtleSA9IEAiZ2V0IjsKK05TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2Ny
aXB0b3JTZXRLZXkgPSBAInNldCI7CisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlIHsKKyAgICBK
U1ZhbHVlUmVmIG1fdmFsdWU7CisgICAgSlNDb250ZXh0ICptX3dlYWtDb250ZXh0OworfQorCisr
IChKU1ZhbHVlICopdmFsdWVXaXRoT2JqZWN0OihpZCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6b2JqZWN0
VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1
ZSAqKXZhbHVlV2l0aEJvb2w6KEJPT0wpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSkgaW5Db250ZXh0OmNv
bnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aERvdWJsZTooZG91YmxlKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aEludDMyOihpbnQzMl90KXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAorewor
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOwor
fQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUgaW5Db250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZh
bHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZh
bHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2Jq
ZWN0SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOkpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCAwLCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRo
TmV3QXJyYXlJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgMCwgTlVMTCwgMCkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5n
ICopcGF0dGVybiBmbGFnczooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQKK3sKKyAgICBKU1N0cmluZ1JlZiBwYXR0ZXJuU3RyaW5nID0gSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXBhdHRlcm4pOworICAgIEpTU3RyaW5nUmVmIGZs
YWdzU3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWZsYWdz
KTsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXSA9IHsgSlNWYWx1ZU1ha2VTdHJpbmcoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcGF0dGVyblN0cmluZyksIEpTVmFsdWVNYWtl
U3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZsYWdzU3RyaW5nKSB9Owor
ICAgIEpTU3RyaW5nUmVsZWFzZShwYXR0ZXJuU3RyaW5nKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
ZmxhZ3NTdHJpbmcpOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTT2Jq
ZWN0TWFrZVJlZ0V4cChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAyLCBhcmd1bWVu
dHMsIDApIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdF
cnJvckZyb21NZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0Cit7CisgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1lc3NhZ2UpOworICAgIEpTVmFsdWVSZWYgYXJndW1lbnQg
PSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBzdHJp
bmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOworCisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOkpTT2JqZWN0TWFrZUVycm9yKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIDEsICZhcmd1bWVudCwgMCkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdWxsKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCkpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sK
KyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSkgaW5Db250ZXh0OmNvbnRleHRdOworfQor
CistIChpZCl0b09iamVjdAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
dmFsdWVUb09iamVjdChjb250ZXh0LCBtX3ZhbHVlKTsKK30KKy0gKGlkKXRvT2JqZWN0T2ZDbGFz
czooQ2xhc3MpY2xzCit7CisgICAgaWQgcmVzdWx0ID0gW3NlbGYgdG9PYmplY3RdOworICAgIHJl
dHVybiBbcmVzdWx0IGlzS2luZE9mQ2xhc3M6Y2xzXSA/IHJlc3VsdCA6IG5pbDsKK30KKworLSAo
Qk9PTCl0b0Jvb2wKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsK
KyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30KKy0gKGRvdWJsZSl0b0Rv
dWJsZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgZG91Ymxl
IHJlc3VsdCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtj
b250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorLSAoaW50MzJfdCl0b0ludDMyCit7CisgICAgcmV0dXJuIEpTQzo6dG9JbnQz
Mihbc2VsZiB0b0RvdWJsZV0pOworfQorLSAodWludDMyX3QpdG9VSW50MzIKK3sKKyAgICByZXR1
cm4gSlNDOjp0b1VJbnQzMihbc2VsZiB0b0RvdWJsZV0pOworfQorLSAoTlNOdW1iZXIgKil0b051
bWJlcgoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24p
CisgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVy
biByZXN1bHQ7Cit9CistIChOU1N0cmluZyAqKXRvU3RyaW5nCit7CisgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3VsdCA9
IHZhbHVlVG9TdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5
RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TRGF0ZSAq
KXRvRGF0ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvRGF0ZShjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9u
KQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorLSAoTlNBcnJheSAqKXRvQXJyYXkKK3sKKyAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0g
dmFsdWVUb0FycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZl
eGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChOU0RpY3Rpb25h
cnkgKil0b0RpY3Rpb25hcnkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb0RpY3Rpb25hcnko
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoSlNWYWx1ZSAqKXZhbHVlRm9yUHJv
cGVydHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1lCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3Zh
bHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2Nv
bnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmlu
Z1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3Bl
cnR5TmFtZSk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7
CisgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAg
IHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKwor
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRl
eHRdOworfQorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yUHJvcGVydHk6KE5TU3RyaW5n
ICopcHJvcGVydHlOYW1lCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlZiBuYW1l
ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFtZSk7
CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBvYmplY3QsIG5hbWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpLCAwLCAmZXhjZXB0
aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKy0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVy
dHlOYW1lCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpleGNlcHRpb25dOworCisgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOworICAgIEJPT0wgcmVzdWx0
ID0gSlNPYmplY3REZWxldGVQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBvYmplY3QsIG5hbWUsICZleGNlcHRpb24pID8gWUVTIDogTk87CisgICAgSlNTdHJpbmdSZWxl
YXNlKG5hbWUpOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBi
b29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKy0gKEJPT0wpaGFzUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1lCit7CisgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gTk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChD
RlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOworICAgIEJPT0wgcmVzdWx0ID0gSlNPYmplY3RIYXNQ
cm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIG5hbWUpID8g
WUVTIDogTk87CisgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3IKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBbW2NvbnRleHQg
Z2xvYmFsT2JqZWN0XVtAIk9iamVjdCJdIGludm9rZU1ldGhvZDpAImRlZmluZVByb3BlcnR5IiB3
aXRoQXJndW1lbnRzOkBbIHNlbGYsIHByb3BlcnR5LCBkZXNjcmlwdG9yIF1dOworfQorCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAgICAg
W3NlbGYgdmFsdWVGb3JQcm9wZXJ0eTpbW0pTVmFsdWUgdmFsdWVXaXRoRG91YmxlOmluZGV4IGlu
Q29udGV4dDpjb250ZXh0XSB0b1N0cmluZ11dOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVy
dHlBdEluZGV4KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgKHVuc2ln
bmVkKWluZGV4LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1
cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsK
K30KKy0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgK
K3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpbmRleCAhPSAodW5zaWduZWQpaW5k
ZXgpCisgICAgICAgIHJldHVybiBbc2VsZiBzZXRWYWx1ZTp2YWx1ZSBmb3JQcm9wZXJ0eTpbW0pT
VmFsdWUgdmFsdWVXaXRoRG91YmxlOmluZGV4IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmluZ11d
OworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3Zh
bHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0
IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFs
dWUpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0
IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CistIChCT09MKWlzVW5kZWZpbmVkCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYg
Y29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc1VuZGVmaW5lZChjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30KKy0g
KEJPT0wpaXNOdWxsCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07
CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc051bGwoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChCT09MKWlzQm9vbGVh
bgoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVy
biAoY29udGV4dCAmJiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051bWJlcgoreworICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4
dCAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92
YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChCT09MKWlzU3RyaW5nCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFs
dWVJc1N0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZ
RVMgOiBOTzsKK30KKy0gKEJPT0wpaXNPYmplY3QKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POwor
fQorCistIChCT09MKWlzRXF1YWxUb09iamVjdDooaWQpdmFsdWUKK3sKKyAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBOTzsKKworICAgIHJldHVybiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVl
KSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNFcXVhbFdpdGhUeXBlQ29lcmNpb25Ub09iamVj
dDooaWQpdmFsdWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKKyAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0VxdWFsKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwg
dmFsdWUpLCAmZXhjZXB0aW9uKSA/IFlFUyA6IE5POworICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKEJPT0wpaXNJbnN0YW5jZU9mOihpZCl2YWx1ZQor
eworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAw
OworICAgIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQg
Ym9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEJPT0wgcmVzdWx0ID0g
SlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUsIGNvbnN0cnVjdG9yLCAmZXhjZXB0aW9uKSA/IFlFUyA6IE5POworICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoSlNWYWx1
ZSAqKWNhbGxXaXRoQXJndW1lbnRzOihOU0FycmF5ICopYXJncworeworICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3VudCA9IFthcmdzIGNvdW50XTsK
KyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1thcmd1bWVudENvdW50XTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQorICAgICAgICBhcmd1bWVudHNbaV0g
PSBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIFthcmdzIG9iamVjdEF0SW5kZXg6aV0pOworCisgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhj
ZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFs
dWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1ZhbHVlUmVmIHJlc3Vs
dCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgb2JqZWN0LCAwLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAoSlNWYWx1ZSAqKWNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFs
dWVSZWYgYXJndW1lbnRzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRv
VmFsdWUoY29udGV4dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2Jq
ZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsICZleGNlcHRpb24pOworICAgIGlmIChleGNl
cHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQg
aW5Db250ZXh0OmNvbnRleHRdOworfQorLSAoSlNWYWx1ZSAqKWludm9rZU1ldGhvZDooTlNTdHJp
bmcgKiltZXRob2Qgd2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50cworeworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3VudCA9IFthcmd1
bWVudHMgY291bnRdOworICAgIEpTVmFsdWVSZWYgYXJnc1thcmd1bWVudENvdW50XTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQorICAgICAgICBhcmdz
W2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCBbYXJndW1lbnRzIG9iamVjdEF0SW5kZXg6aV0p
OworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
bV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNT
dHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilt
ZXRob2QpOworICAgIEpTVmFsdWVSZWYgZnVuYyA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdGhpc09iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7
CisgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAg
IHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKwor
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBmdW5jLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQor
ICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlv
bl07CisKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCB0aGlzT2JqZWN0LCBhcmd1bWVu
dENvdW50LCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBy
ZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0
XTsKK30KKworLSAoSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBvYmpjX2xvYWRX
ZWFrKCZtX3dlYWtDb250ZXh0KTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1
ZShTdHJ1Y3RTdXBwb3J0KQorCistIChDR1BvaW50KXRvUG9pbnQKK3sKKyAgICByZXR1cm4gKENH
UG9pbnQpeworICAgICAgICBbc2VsZltAIngiXSB0b0RvdWJsZV0sCisgICAgICAgIFtzZWxmW0Ai
eSJdIHRvRG91YmxlXQorICAgIH07Cit9CisKKy0gKE5TUmFuZ2UpdG9SYW5nZQoreworICAgIHJl
dHVybiAoTlNSYW5nZSl7CisgICAgICAgIChOU1VJbnRlZ2VyKVtzZWxmW0AibG9jYXRpb24iXSB0
b0RvdWJsZV0sCisgICAgICAgIChOU1VJbnRlZ2VyKVtzZWxmW0AibGVuZ3RoIl0gdG9Eb3VibGVd
CisgICAgfTsKK30KKworLSAoQ0dSZWN0KXRvUmVjdAoreworICAgIHJldHVybiAoQ0dSZWN0KXsK
KyAgICAgICAgW3NlbGYgdG9Qb2ludF0sCisgICAgICAgIFtzZWxmIHRvU2l6ZV0KKyAgICB9Owor
fQorCistIChDR1NpemUpdG9TaXplCit7CisgICAgcmV0dXJuIChDR1NpemUpeworICAgICAgICBb
c2VsZltAIndpZHRoIl0gdG9Eb3VibGVdLAorICAgICAgICBbc2VsZltAImhlaWdodCJdIHRvRG91
YmxlXQorICAgIH07Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhQb2ludDooQ0dQb2ludClw
b2ludCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoT2JqZWN0OkB7CisgICAgICAgIEAieCI6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpwb2ludC54XSwKKyAgICAgICAgQCJ5IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBv
aW50LnldCisgICAgfSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKysgKEpTVmFsdWUgKil2YWx1
ZVdpdGhSYW5nZTooTlNSYW5nZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQK
K3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkB7CisgICAgICAgIEAibG9j
YXRpb24iOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmFuZ2UubG9jYXRpb25dLAorICAgICAg
ICBAImxlbmd0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyYW5nZS5sZW5ndGhdCisgICAg
fSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSZWN0OihD
R1JlY3QpcmVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkB7CisgICAgICAgIEAieCI6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpyZWN0Lm9yaWdpbi54XSwKKyAgICAgICAgQCJ5IjpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OnJlY3Qub3JpZ2luLnldLAorICAgICAgICBAIndpZHRoIjpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OnJlY3Quc2l6ZS53aWR0aF0sCisgICAgICAgIEAiaGVpZ2h0IjpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OnJlY3Quc2l6ZS5oZWlnaHRdCisgICAgfSBpbkNvbnRleHQ6Y29u
dGV4dF07Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhTaXplOihDR1NpemUpc2l6ZSBpbkNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoT2JqZWN0OkB7CisgICAgICAgIEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
c2l6ZS53aWR0aF0sCisgICAgICAgIEAiaGVpZ2h0IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OnNpemUuaGVpZ2h0XQorICAgIH0gaW5Db250ZXh0OmNvbnRleHRdOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN1YnNjcmlwdFN1cHBvcnQpCisKKy0gKEpTVmFsdWUgKilv
YmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmtleSBpbkNv
bnRleHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAg
IHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF07Cisg
ICAgfQorCisgICAgcmV0dXJuIFtzZWxmIHZhbHVlRm9yUHJvcGVydHk6KE5TU3RyaW5nICopa2V5
XTsKK30KKworLSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdl
cilpbmRleAoreworICAgIHJldHVybiBbc2VsZiB2YWx1ZUF0SW5kZXg6aW5kZXhdOworfQorCist
ICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vic2NyaXB0OihpZCA8TlNDb3B5
aW5nPilrZXkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghWyhOU09iamVjdCop
a2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAga2V5ID0gW1tK
U1ZhbHVlIHZhbHVlV2l0aE9iamVjdDprZXkgaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXTsK
KyAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW3Nl
bGYgc2V0VmFsdWU6b2JqZWN0IGZvclByb3BlcnR5OihOU1N0cmluZyAqKWtleV07Cit9CisKKy0g
KHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2Vy
KWluZGV4Cit7CisgICAgW3NlbGYgc2V0VmFsdWU6b2JqZWN0IGF0SW5kZXg6aW5kZXhdOworfQor
CitAZW5kCisKK2lubGluZSBib29sIGlzRGF0ZShKU09iamVjdFJlZiBvYmplY3QsIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0
b0pTKGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpE
YXRlSW5zdGFuY2U6OnNfaW5mbyk7Cit9CisKK2lubGluZSBib29sIGlzQXJyYXkoSlNPYmplY3RS
ZWYgb2JqZWN0LCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBKU0M6OkFQSUVu
dHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjb250ZXh0KSk7CisgICAgcmV0dXJuIHRvSlMob2JqZWN0
KS0+aW5oZXJpdHMoJkpTQzo6SlNBcnJheTo6c19pbmZvKTsKK30KKworQGltcGxlbWVudGF0aW9u
IEpTVmFsdWUoSW50ZXJuYWwpCisKK2VudW0gQ29udmVyc2lvblR5cGUgeworICAgIENvbnRhaW5l
ck5vbmUsCisgICAgQ29udGFpbmVyQXJyYXksCisgICAgQ29udGFpbmVyRGljdGlvbmFyeQorfTsK
KworY2xhc3MgSlNDb250YWluZXJDb252ZXJ0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBUYXNr
IHsKKyAgICAgICAgSlNWYWx1ZVJlZiBqczsKKyAgICAgICAgaWQgb2JqYzsKKyAgICAgICAgQ29u
dmVyc2lvblR5cGUgdHlwZTsKKyAgICB9OworCisgICAgSlNDb250YWluZXJDb252ZXJ0b3IoSlNH
bG9iYWxDb250ZXh0UmVmIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgeworICAgIH0KKworICAgIGlkIGNvbnZlcnQoSlNWYWx1ZVJlZiBwcm9wZXJ0eSk7CisgICAg
dm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRha2UoKTsKKyAgICBib29sIGlzV29ya0xp
c3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQorCitwcml2YXRlOgorICAg
IEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgV1RGOjpIYXNoTWFwPEpTVmFsdWVS
ZWYsIGlkPiBtX29iamVjdE1hcDsKKyAgICBXVEY6OlZlY3RvcjxUYXNrPiBtX3dvcmtsaXN0Owor
fTsKKworaW5saW5lIGlkIEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KEpTVmFsdWVSZWYg
dmFsdWUpCit7CisgICAgV1RGOjpIYXNoTWFwPEpTVmFsdWVSZWYsIGlkPjo6aXRlcmF0b3IgaXRl
ciA9IG1fb2JqZWN0TWFwLmZpbmQodmFsdWUpOworICAgIGlmIChpdGVyICE9IG1fb2JqZWN0TWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICBUYXNrIHJlc3VsdCA9
IHZhbHVlVG9PYmplY3RXaXRob3V0Q29weShtX2NvbnRleHQsIHZhbHVlKTsKKyAgICBpZiAocmVz
dWx0LmpzKQorICAgICAgICBhZGQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Lm9iamM7Cit9
CisKK3ZvaWQgSlNDb250YWluZXJDb252ZXJ0b3I6OmFkZChUYXNrIHRhc2spCit7CisgICAgbV9v
YmplY3RNYXAuYWRkKHRhc2suanMsIHRhc2sub2JqYyk7CisgICAgaWYgKHRhc2sudHlwZSAhPSBD
b250YWluZXJOb25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKK30KKworSlND
b250YWluZXJDb252ZXJ0b3I6OlRhc2sgSlNDb250YWluZXJDb252ZXJ0b3I6OnRha2UoKQorewor
ICAgIEFTU0VSVCghaXNXb3JrTGlzdEVtcHR5KCkpOworICAgIFRhc2sgbGFzdCA9IG1fd29ya2xp
c3QubGFzdCgpOworICAgIG1fd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBsYXN0
OworfQorCitzdGF0aWMgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdmFsdWVUb09iamVjdFdp
dGhvdXRDb3B5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQor
eworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkgeworICAgICAgICBp
ZCBwcmltaXRpdmU7CisgICAgICAgIGlmIChKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQsIHZhbHVl
KSkKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFs
dWUpID8gQFlFUyA6IEBOTzsKKyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzTnVtYmVyKGNvbnRl
eHQsIHZhbHVlKSkgeworICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBudW1iZXIsIHNvIGl0
IHdpbGwgdW5pcXVlIGNvcnJlY3RseSBpbiB0aGUgaGFzaCBtYXAgLQorICAgICAgICAgICAgLy8g
aXQncyBuaWNlciBub3QgdG8gbGVhayB0aGlzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFp
bCEKKyAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKSk7CisgICAgICAgICAgICBwcmltaXRpdmUgPSBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUs
IDApXTsKKyAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KSB7CisgICAgICAgICAgICAvLyBXb3VsZCBiZSBuaWNlIHRvIHVuaXF1ZSBzdHJpbmdzLCB0b28u
CisgICAgICAgICAgICBKU1N0cmluZ1JlZiBqc3N0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApOworICAgICAgICAgICAgTlNTdHJpbmcgKiBzdHJpbmdOUyA9IChO
U1N0cmluZyAqKUpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGpzc3Ry
aW5nKTsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgICAgICAg
ICBwcmltaXRpdmUgPSBbc3RyaW5nTlMgYXV0b3JlbGVhc2VdOworICAgICAgICB9IGVsc2UgaWYg
KEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgcHJpbWl0aXZlID0g
W05TTnVsbCBudWxsXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoSlNWYWx1
ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSk7CisgICAgICAgICAgICBwcmltaXRpdmUgPSBu
aWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFz
ayl7IHZhbHVlLCBwcmltaXRpdmUsIENvbnRhaW5lck5vbmUgfTsKKyAgICB9CisKKyAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIDApOworCisg
ICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIG9iamVjdCkp
CisgICAgICAgIHJldHVybiAoSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHdy
YXBwZWQsIENvbnRhaW5lck5vbmUgfTsKKworICAgIGlmIChpc0RhdGUob2JqZWN0LCBjb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwg
W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgb2JqZWN0LCAwKV0sIENvbnRhaW5lck5vbmUgfTsKKworICAgIGlmIChpc0FycmF5KG9i
amVjdCwgY29udGV4dCkpCisgICAgICAgIHJldHVybiAoSlNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2speyBvYmplY3QsIFtOU011dGFibGVBcnJheSBhcnJheV0sIENvbnRhaW5lckFycmF5IH07CisK
KyAgICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNNdXRh
YmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSwgQ29udGFpbmVyRGljdGlvbmFyeSB9OworfQorCitz
dGF0aWMgaWQgY29udGFpbmVyVmFsdWVUb09iamVjdChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCwgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzaykKK3sKKyAgICBBU1NFUlQodGFzay50
eXBlICE9IENvbnRhaW5lck5vbmUpOworICAgIEpTQ29udGFpbmVyQ29udmVydG9yIGNvbnZlcnRv
cihjb250ZXh0KTsKKyAgICBjb252ZXJ0b3IuYWRkKHRhc2spOworICAgIEFTU0VSVCghY29udmVy
dG9yLmlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICAKKyAgICBkbyB7CisgICAgICAgIEpTQ29udGFp
bmVyQ29udmVydG9yOjpUYXNrIGN1cnJlbnQgPSB0YXNrID0gY29udmVydG9yLnRha2UoKTsKKyAg
ICAgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjdXJyZW50LmpzKSk7CisgICAg
ICAgIEpTT2JqZWN0UmVmIGpzID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGN1cnJlbnQuanMs
IDApOworCisgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyQXJyYXkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TTXV0YWJsZUFy
cmF5IGNsYXNzXV0pOworICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gKE5TTXV0
YWJsZUFycmF5ICopY3VycmVudC5vYmpjOworICAgICAgICAKKyAgICAgICAgICAgIEpTU3RyaW5n
UmVmIGxlbmd0aFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgi
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IEpTQzo6dG9VSW50MzIoSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganMsIGxlbmd0aFN0
cmluZywgMCksIDApKTsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShsZW5ndGhTdHJpbmcp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZCBvYmpjID0gY29udmVydG9yLmNvbnZlcnQoSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwganMsIGksIDApKTsKKyAgICAgICAgICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0Om9iamMgPyBvYmpjIDogW05TTnVsbCBudWxsXV07CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tp
bmRPZkNsYXNzOltOU011dGFibGVEaWN0aW9uYXJ5IGNsYXNzXV0pOworICAgICAgICAgICAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IChOU011dGFibGVEaWN0aW9uYXJ5ICopY3Vy
cmVudC5vYmpjOworCisgICAgICAgICAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5
TmFtZUFycmF5ID0gSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyhjb250ZXh0LCBqcyk7CisgICAg
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50KHByb3Bl
cnR5TmFtZUFycmF5KTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSA9IEpT
UHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleChwcm9wZXJ0eU5hbWVBcnJheSwgaSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlkIG9iamMgPSBjb252ZXJ0b3IuY29udmVydChKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIGpzLCBwcm9wZXJ0eU5hbWUsIDApKSkKKyAgICAgICAgICAgICAg
ICAgICAgZGljdGlvbmFyeVtbKE5TU3RyaW5nICopSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgcHJvcGVydHlOYW1lKSBhdXRvcmVsZWFzZV1dID0gb2JqYzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlbGVhc2UocHJvcGVy
dHlOYW1lQXJyYXkpOworICAgICAgICB9CisKKyAgICB9IHdoaWxlICghY29udmVydG9yLmlzV29y
a0xpc3RFbXB0eSgpKTsKKworICAgIHJldHVybiB0YXNrLm9iamM7Cit9CisKK2lkIHZhbHVlVG9P
YmplY3QoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEpTQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrIHJlc3VsdCA9IHZhbHVlVG9PYmplY3RXaXRob3V0Q29weShj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdC50
eXBlID09IENvbnRhaW5lck5vbmUpCisgICAgICAgIHJldHVybiByZXN1bHQub2JqYzsKKyAgICBy
ZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCByZXN1bHQpOworfQorCitpZCB2YWx1ZVRvTnVtYmVyKEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNP
YmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBlZCBpc0tpbmRPZkNs
YXNzOltOU051bWJlciBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAg
fQorCisgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVTIDogQE5POworCisg
ICAgZG91YmxlIHJlc3VsdCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0
aW9uKTsKKyAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6KmV4Y2VwdGlvbiA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkgOiByZXN1bHRdOworfQor
aWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2
YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIHZhbHVl
KSkgeworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkOworICAgIH0KKworICAgIEpTU3RyaW5nUmVm
IGpzc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9u
KTsKKyAgICBpZiAoKmV4Y2VwdGlvbikgeworICAgICAgICBBU1NFUlQoIWpzc3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBOU1N0cmluZyogc3RyaW5nTlMgPSBbKE5T
U3RyaW5nICopSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNzdHJp
bmcpIGF1dG9yZWxlYXNlXTsKKyAgICBKU1N0cmluZ1JlbGVhc2UoanNzdHJpbmcpOworICAgIHJl
dHVybiBzdHJpbmdOUzsKK30KK2lkIHZhbHVlVG9EYXRlKEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmpl
Y3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBlZCBpc0tpbmRPZkNsYXNz
OltOU0RhdGUgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkOworICAgIH0KKwor
ICAgIGRvdWJsZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2Vw
dGlvbik7CisgICAgcmV0dXJuICpleGNlcHRpb24gPyBuaWwgOiBbTlNEYXRlIGRhdGVXaXRoVGlt
ZUludGVydmFsU2luY2UxOTcwOnJlc3VsdF07Cit9CitpZCB2YWx1ZVRvQXJyYXkoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5
VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFwcGVk
IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiB3cmFw
cGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQor
ICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0LCAoSlNDb250YWlu
ZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZUFycmF5IGFycmF5XSwgQ29udGFp
bmVyQXJyYXl9KTsKKworICAgIGlmICghKEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpIHx8
IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkpKQorICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIkNhbm5vdCBjb252
ZXJ0IHByaW1pdGl2ZSB0byBOU0FycmF5IikpOworICAgIHJldHVybiBuaWw7Cit9CitpZCB2YWx1
ZVRvRGljdGlvbmFyeShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkg
eworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNz
XV0pCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1
ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5lclZhbHVl
VG9PYmplY3QoY29udGV4dCwgKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUsIFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldLCBDb250YWluZXJEaWN0aW9uYXJ5fSk7CisK
KyAgICBpZiAoIShKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNVbmRl
ZmluZWQoY29udGV4dCwgdmFsdWUpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6
Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksICJDYW5ub3QgY29udmVydCBwcmltaXRpdmUg
dG8gTlNEaWN0aW9uYXJ5IikpOworICAgIHJldHVybiBuaWw7Cit9CisKK2NsYXNzIE9iamNDb250
YWluZXJDb252ZXJ0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBUYXNrIHsKKyAgICAgICAgaWQg
b2JqYzsKKyAgICAgICAgSlNWYWx1ZVJlZiBqczsKKyAgICAgICAgQ29udmVyc2lvblR5cGUgdHlw
ZTsKKyAgICB9OworCisgICAgT2JqY0NvbnRhaW5lckNvbnZlcnRvcihKU0NvbnRleHQgKmNvbnRl
eHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgIH0KKworICAgIEpT
VmFsdWVSZWYgY29udmVydChpZCBvYmplY3QpOworICAgIHZvaWQgYWRkKFRhc2sgdGFzayk7Cisg
ICAgVGFzayB0YWtlKCk7CisgICAgYm9vbCBpc1dvcmtMaXN0RW1wdHkoKSB7IHJldHVybiAhbV93
b3JrbGlzdC5zaXplKCk7IH0KKworcHJpdmF0ZToKKyAgICBKU0NvbnRleHQgKm1fY29udGV4dDsK
KyAgICBXVEY6Okhhc2hNYXA8aWQsIEpTVmFsdWVSZWY+IG1fb2JqZWN0TWFwOworICAgIFdURjo6
VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitKU1ZhbHVlUmVmIE9iamNDb250YWluZXJD
b252ZXJ0b3I6OmNvbnZlcnQoaWQgb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3QpOworCisg
ICAgYXV0byBpdCA9IG1fb2JqZWN0TWFwLmZpbmQob2JqZWN0KTsKKyAgICBpZiAoaXQgIT0gbV9v
YmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2sgPSBvYmplY3RUb1ZhbHVlV2l0aG91dENvcHkobV9j
b250ZXh0LCBvYmplY3QpOworICAgIGFkZCh0YXNrKTsKKyAgICByZXR1cm4gdGFzay5qczsKK30K
Kwordm9pZCBPYmpjQ29udGFpbmVyQ29udmVydG9yOjphZGQoT2JqY0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayB0YXNrKQoreworICAgIG1fb2JqZWN0TWFwLmFkZCh0YXNrLm9iamMsIHRhc2suanMp
OworICAgIGlmICh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9uZSkKKyAgICAgICAgbV93b3JrbGlz
dC5hcHBlbmQodGFzayk7Cit9CisKK09iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJUKCFpc1dvcmtMaXN0RW1wdHko
KSk7CisgICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgbV93b3JrbGlzdC5y
ZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBPYmpjQ29udGFpbmVy
Q29udmVydG9yOjpUYXNrIG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShKU0NvbnRleHQgKmNvbnRl
eHQsIGlkIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIChPYmpj
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKSwgQ29udGFpbmVyTm9uZSB9OworCisgICAg
aWYgKCFjbGFzc19jb25mb3Jtc1RvUHJvdG9jb2wob2JqZWN0X2dldENsYXNzKG9iamVjdCksIGdl
dEpTRXhwb3J0UHJvdG9jb2woKSkpIHsKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFz
czpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29u
dmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAwKSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgICAg
ICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAg
ICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNP
YmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApLCBDb250YWlu
ZXJEaWN0aW9uYXJ5IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNO
dWxsIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6
OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpKSwgQ29udGFpbmVyTm9uZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9m
Q2xhc3M6W0pTVmFsdWUgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgKChKU1ZhbHVlICopb2JqZWN0KS0+bV92YWx1ZSwg
Q29udGFpbmVyTm9uZSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05T
QXJyYXkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgMCwgTlVMTCwgMCksIENvbnRhaW5lckFycmF5IH07CisKKyAgICAgICAgaWYg
KFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgICAg
ICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0
TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCAwKSwgQ29udGFpbmVyRGlj
dGlvbmFyeSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilvYmplY3QpOworICAgICAgICAgICAgSlNWYWx1
ZVJlZiBqcyA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIHN0cmluZyk7CisgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKKyAgICAg
ICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwganMs
IENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxUcnVl
ID0gQFlFUzsKKyAgICAgICAgICAgIGlmIChvYmplY3QgPT0gbGl0ZXJhbFRydWUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBK
U1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdHJ1ZSks
IENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgICAgIGlkIGxpdGVyYWxGYWxzZSA9IEBOTzsKKyAg
ICAgICAgICAgIGlmIChvYmplY3QgPT0gbGl0ZXJhbEZhbHNlKQorICAgICAgICAgICAgICAgIHJl
dHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VC
b29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZhbHNlKSwgQ29udGFpbmVy
Tm9uZSB9OworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNr
KXsgb2JqZWN0LCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBbKE5TTnVtYmVyKilvYmplY3QgZG91YmxlVmFsdWVdKSwgQ29udGFpbmVyTm9uZSB9Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEYXRlIGNs
YXNzXV0pIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZU51
bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBbKE5TRGF0ZSAqKW9iamVjdCB0
aW1lSW50ZXJ2YWxTaW5jZTE5NzBdKTsKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9
IEpTT2JqZWN0TWFrZURhdGUoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFy
Z3VtZW50LCAwKTsKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
VGFzayl7IG9iamVjdCwgcmVzdWx0LCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHZh
bHVlSW50ZXJuYWxWYWx1ZShbY29udGV4dCB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF0pLCBDb250
YWluZXJOb25lIH07Cit9CisKK0pTVmFsdWVSZWYgb2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKmNv
bnRleHQsIGlkIG9iamVjdCkKK3sKKyAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRh
c2sgPSBvYmplY3RUb1ZhbHVlV2l0aG91dENvcHkoY29udGV4dCwgb2JqZWN0KTsKKyAgICBpZiAo
dGFzay50eXBlID09IENvbnRhaW5lck5vbmUpCisgICAgICAgIHJldHVybiB0YXNrLmpzOworCisg
ICAgT2JqY0NvbnRhaW5lckNvbnZlcnRvciBjb252ZXJ0b3IoY29udGV4dCk7CisgICAgY29udmVy
dG9yLmFkZCh0YXNrKTsKKyAgICBBU1NFUlQoIWNvbnZlcnRvci5pc1dvcmtMaXN0RW1wdHkoKSk7
CisKKyAgICBkbyB7CisgICAgICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3VycmVu
dCA9IGNvbnZlcnRvci50YWtlKCk7CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgY3VycmVudC5qcykpOworICAgICAgICBKU09i
amVjdFJlZiBqcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBjdXJyZW50LmpzLCAwKTsKKworICAgICAgICBpZiAoY3VycmVudC50eXBlID09IENvbnRh
aW5lckFycmF5KSB7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNs
YXNzOltOU0FycmF5IGNsYXNzXV0pOworICAgICAgICAgICAgTlNBcnJheSAqIGFycmF5ID0gKE5T
QXJyYXkgKiljdXJyZW50Lm9iamM7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Fy
cmF5IGNvdW50XTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4
IDwgY291bnQ7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIGluZGV4LCBjb252ZXJ0
b3IuY29udmVydChbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleF0pLCAwKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyRGljdGlv
bmFyeSk7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNzOltO
U0RpY3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25h
cnkgPSAoTlNEaWN0aW9uYXJ5KiljdXJyZW50Lm9iamM7CisgICAgICAgICAgICBOU0VudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBbZGljdGlvbmFyeSBrZXlFbnVtZXJhdG9yXTsKKyAgICAgICAgICAg
IHdoaWxlIChpZCBrZXkgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICAgICAg
ICAgIGlmIChba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoKENGU3RyaW5nUmVmKWtleSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0
U2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwganMsIHByb3BlcnR5
TmFtZSwgY29udmVydG9yLmNvbnZlcnQoW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV0pLCAw
LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgIH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAgcmV0dXJu
IHRhc2suanM7Cit9CisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUgKiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUtPm1fdmFsdWU7Cit9CisKKysgKEpTVmFsdWUgKil2
YWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCopY29u
dGV4dAoreworICAgIHJldHVybiBbW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVl
IGluQ29udGV4dDpjb250ZXh0XSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKEpTVmFsdWUgKilpbml0
V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0
Cit7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIG9iamNfaW5pdFdlYWsoJm1fd2Vha0NvbnRl
eHQsIGNvbnRleHQpOworCisgICAgW3N1cGVyIGluaXRdOworICAgIFtjb250ZXh0IHByb3RlY3Q6
dmFsdWVdOworICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3Ry
dWN0IFN0cnVjdFRhZ0hhbmRsZXIgeworICAgIFNFTCB0eXBlVG9WYWx1ZVNFTDsKKyAgICBTRUwg
dmFsdWVUb1R5cGVTRUw7Cit9OworCitzdGF0aWMgU3RydWN0VGFnSGFuZGxlciogZ2V0U3RydWN0
VGFnSGFuZGxlcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBzdGF0aWMgU3Bpbkxv
Y2sgZ2V0U3RydWN0VGFnSGFuZGxlckxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBT
cGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZnZXRTdHJ1Y3RUYWdIYW5kbGVyTG9jayk7CisKKyAg
ICB0eXBlZGVmIFdURjo6SGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN0cnVjdFRhZ0hhbmRs
ZXI+IFN0cnVjdEhhbmRsZXJzOworICAgIHN0YXRpYyBTdHJ1Y3RIYW5kbGVycyAqbV9zdHJ1Y3RI
YW5kbGVycyA9IDA7CisKKyAgICBpZiAoIW1fc3RydWN0SGFuZGxlcnMpIHsKKyAgICAgICAgbV9z
dHJ1Y3RIYW5kbGVycyA9IG5ldyBTdHJ1Y3RIYW5kbGVycygpOworCisgICAgICAgIC8vIFN0ZXAg
MTogZmluZCBhbGwgdmFsdWVXaXRoPEZvbz46aW5Db250ZXh0OiBjbGFzcyBtZXRob2RzIGluIEpT
VmFsdWUuCisgICAgICAgIHNpemVfdCB2YWx1ZVdpdGhNaW5MZW4gPSBzdHJsZW4oInZhbHVlV2l0
aFg6aW5Db250ZXh0OiIpOworICAgICAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhvYmplY3RfZ2V0
Q2xhc3MoW0pTVmFsdWUgY2xhc3NdKSwgXihNZXRob2QgbWV0aG9kKXsKKyAgICAgICAgICAgIFNF
TCBzZWwgPSBtZXRob2RfZ2V0TmFtZShtZXRob2QpOworICAgICAgICAgICAgY29uc3QgY2hhciog
bmFtZSA9IHNlbF9nZXROYW1lKHNlbCk7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVu
KG5hbWUpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbHVlV2l0aDxGb28+OmNvbnRleHQ6
CisgICAgICAgICAgICBpZiAobGVuIDwgdmFsdWVXaXRoTWluTGVuIHx8IHN0cm5jbXAobmFtZSwg
InZhbHVlV2l0aCIsIDkpIHx8IHN0cm5jbXAobmFtZSArIGxlbiAtIDExLCAiOmluQ29udGV4dDoi
LCAxMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IFsgaWQsIFNFTCwgPHR5cGU+LCA8Y29udGV4dFR5cGU+IF0KKyAgICAgICAgICAgIGlmIChtZXRo
b2RfZ2V0TnVtYmVyT2ZBcmd1bWVudHMobWV0aG9kKSAhPSA0KQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGNoYXIgaWRUeXBlWzNdOworICAgICAgICAgICAgLy8gQ2hlY2sg
Mm5kIGFyZ3VtZW50IHR5cGUgaXMgIkAiCisgICAgICAgICAgICBjaGFyKiBzZWNvbmRUeXBlID0g
bWV0aG9kX2NvcHlBcmd1bWVudFR5cGUobWV0aG9kLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJj
bXAoc2Vjb25kVHlwZSwgIkAiKSkgeworICAgICAgICAgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJl
ZShzZWNvbmRUeXBlKTsKKyAgICAgICAgICAgIC8vIENoZWNrIHJlc3VsdCB0eXBlIGlzIGFsc28g
IkAiCisgICAgICAgICAgICBtZXRob2RfZ2V0UmV0dXJuVHlwZShtZXRob2QsIGlkVHlwZSwgMyk7
CisgICAgICAgICAgICBpZiAoc3RyY21wKGlkVHlwZSwgIkAiKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBjaGFyKiB0eXBlID0gbWV0aG9kX2NvcHlBcmd1bWVudFR5cGUo
bWV0aG9kLCAyKTsKKyAgICAgICAgICAgIG1fc3RydWN0SGFuZGxlcnMtPmFkZChXVEY6OlN0cmlu
Zyh0eXBlKS5pbXBsKCksIChTdHJ1Y3RUYWdIYW5kbGVyKXsgc2VsLCAwIH0pOworICAgICAgICAg
ICAgZnJlZSh0eXBlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU3RlcCAyOiBmaW5kIGFs
bCB0bzxGb28+IGluc3RhbmNlIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90IG1p
bkxlblZhbHVlID0gc3RybGVuKCJ0b1giKTsKKyAgICAgICAgZm9yRWFjaE1ldGhvZEluQ2xhc3Mo
W0pTVmFsdWUgY2xhc3NdLCBeKE1ldGhvZCBtZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9
IG1ldGhvZF9nZXROYW1lKG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0g
c2VsX2dldE5hbWUoc2VsKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7
CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgdG88Rm9vPgorICAgICAgICAgICAgaWYgKGxlbiA8
IG1pbkxlblZhbHVlIHx8IHN0cm5jbXAobmFtZSwgInRvIiwgMikpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFsgaWQsIFNFTCBdCisgICAgICAgICAg
ICBpZiAobWV0aG9kX2dldE51bWJlck9mQXJndW1lbnRzKG1ldGhvZCkgIT0gMikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIG1hdGNoaW5nIHZh
bHVlV2l0aDxGb28+OmNvbnRleHQ6IG1ldGhvZC4KKyAgICAgICAgICAgIGNoYXIqIHR5cGUgPSBt
ZXRob2RfY29weVJldHVyblR5cGUobWV0aG9kKTsKKworICAgICAgICAgICAgU3RydWN0SGFuZGxl
cnM6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5nKHR5
cGUpLmltcGwoKSk7CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgU3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworCisg
ICAgICAgICAgICAvLyBjaGVjayB0aGF0IHN0cmxlbig8Zm9vPikgPT0gc3RybGVuKDxGb28+KQor
ICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWVXaXRoTmFtZSA9IHNlbF9nZXROYW1lKGhhbmRs
ZXIudHlwZVRvVmFsdWVTRUwpOworICAgICAgICAgICAgc2l6ZV90IHZhbHVlV2l0aExlbiA9IHN0
cmxlbih2YWx1ZVdpdGhOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVdpdGhMZW4gLSB2YWx1
ZVdpdGhNaW5MZW4gIT0gbGVuIC0gbWluTGVuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCA8Rm9vPiA9PSA8Rm9vPgorICAgICAgICAgICAg
aWYgKHN0cm5jbXAodmFsdWVXaXRoTmFtZSArIDksIG5hbWUgKyAyLCBsZW4gLSBtaW5MZW5WYWx1
ZSAtIDEpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGhhbmRsZXIudmFs
dWVUb1R5cGVTRUwgPSBzZWw7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFN0ZXAgMzogY2xl
YW4gdXAgLSByZW1vdmUgZW50cmllcyB3aGVyZSB3ZSBmb3VuZCBwcm9zcGVjdGl2ZSB2YWx1ZVdp
dGg8Rm9vPjppbkNvbnRleHQ6IGNvbnZlcnNpb25zLCBidXQgbm8gbWF0Y2hpbmcgdG88Rm9vPiBt
ZXRob2RzLgorICAgICAgICB0eXBlZGVmIFdURjo6SGFzaFNldDxSZWZQdHI8V1RGOjpTdHJpbmdJ
bXBsPiA+IFJlbW92ZVNldDsKKyAgICAgICAgUmVtb3ZlU2V0IHJlbW92ZVNldDsKKyAgICAgICAg
Zm9yIChTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxlcnMtPmJl
Z2luKCk7IGl0ZXIgIT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikgeworICAgICAg
ICAgICAgU3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOworICAgICAgICAg
ICAgaWYgKCFoYW5kbGVyLnZhbHVlVG9UeXBlU0VMKQorICAgICAgICAgICAgICAgIHJlbW92ZVNl
dC5hZGQoaXRlci0+a2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoUmVtb3ZlU2V0Ojpp
dGVyYXRvciBpdGVyID0gcmVtb3ZlU2V0LmJlZ2luKCk7IGl0ZXIgIT0gcmVtb3ZlU2V0LmVuZCgp
OyArK2l0ZXIpCisgICAgICAgICAgICBtX3N0cnVjdEhhbmRsZXJzLT5yZW1vdmUoKml0ZXIpOwor
ICAgIH0KKworICAgIFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5k
bGVycy0+ZmluZChXVEY6OlN0cmluZyhlbmNvZGVkVHlwZSkuaW1wbCgpKTsKKyAgICBpZiAoaXRl
ciA9PSBtX3N0cnVjdEhhbmRsZXJzLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuICZpdGVyLT52YWx1ZTsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZToo
Y29uc3QgY2hhciAqKXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRsZXIqIGhhbmRsZXIg
PSBnZXRTdHJ1Y3RUYWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJuIGhhbmRsZXIgPyBo
YW5kbGVyLT50eXBlVG9WYWx1ZVNFTCA6IG5pbDsKK30KKworKyAoU0VMKXNlbGVjdG9yRm9yVmFs
dWVUb1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZworeworICAgIFN0cnVjdFRhZ0hhbmRs
ZXIqIGhhbmRsZXIgPSBnZXRTdHJ1Y3RUYWdIYW5kbGVyKHN0cnVjdFRhZyk7CisgICAgcmV0dXJu
IGhhbmRsZXIgPyBoYW5kbGVyLT52YWx1ZVRvVHlwZVNFTCA6IG5pbDsKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIFtjb250ZXh0IHVucHJvdGVjdDptX3ZhbHVlXTsKKyAgICBv
YmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpCisgICAgICAgIHJldHVybiBbd3JhcHBlZCBk
ZXNjcmlwdGlvbl07CisgICAgcmV0dXJuIFtzZWxmIHRvU3RyaW5nXTsKK30KKworTlNJbnZvY2F0
aW9uKiB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCit7
CisgICAgU0VMIHNlbGVjdG9yID0gW0pTVmFsdWUgc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOmVu
Y29kZWRUeXBlXTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGNvbnN0IGNoYXIqIG1ldGhvZFR5cGVzID0gbWV0aG9kX2dldFR5cGVFbmNvZGluZyhjbGFzc19n
ZXRDbGFzc01ldGhvZChbSlNWYWx1ZSBjbGFzc10sIHNlbGVjdG9yKSk7CisgICAgTlNJbnZvY2F0
aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25h
dHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBl
c11dOworICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICByZXR1cm4g
aW52b2NhdGlvbjsKK30KKworTlNJbnZvY2F0aW9uKiB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3Io
Y29uc3QgY2hhciogZW5jb2RlZFR5cGUpCit7CisgICAgU0VMIHNlbGVjdG9yID0gW0pTVmFsdWUg
c2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0OmVuY29kZWRUeXBlXTsKKyAgICBpZiAoIXNlbGVjdG9y
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIqIG1ldGhvZFR5cGVzID0gbWV0
aG9kX2dldFR5cGVFbmNvZGluZyhjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbSlNWYWx1ZSBjbGFz
c10sIHNlbGVjdG9yKSk7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2Nh
dGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2ln
bmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNldFNl
bGVjdG9yOnNlbGVjdG9yXTsKKyAgICByZXR1cm4gaW52b2NhdGlvbjsKK30KKworQGVuZAorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVy
bmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KKyNpbXBvcnQgIkFQSUpTVmFsdWUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VO
QUJMRUQKKworQGludGVyZmFjZSBKU1ZhbHVlKEludGVybmFsKQorCitKU1ZhbHVlUmVmIHZhbHVl
SW50ZXJuYWxWYWx1ZShKU1ZhbHVlKik7CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhWYWx1ZToo
SlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CistIChKU1Zh
bHVlICopaW5pdFdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQ7CisKK0pTVmFsdWVSZWYgb2JqZWN0VG9WYWx1ZShKU0NvbnRleHQgKiwgaWQp
OworaWQgdmFsdWVUb09iamVjdChKU0NvbnRleHQgKiwgSlNWYWx1ZVJlZik7CitpZCB2YWx1ZVRv
TnVtYmVyKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKK2lkIHZhbHVlVG9TdHJpbmcoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0FycmF5KEpT
R2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKK2lk
IHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKTsKKworKyAoU0VMKXNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTooY29u
c3QgY2hhciAqKXN0cnVjdFRhZzsKKysgKFNFTClzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6KGNv
bnN0IGNoYXIgKilzdHJ1Y3RUYWc7CisKK0BlbmQKKworTlNJbnZvY2F0aW9uKiB0eXBlVG9WYWx1
ZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpOworTlNJbnZvY2F0aW9uKiB2
YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpOworCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworLy8gQW4gaW5zdGFuY2Ug
b2YgSlNWaXJ0dWFsTWFjaGluZSByZXByZXNlbnRzIGEgc2luZ2xlIEphdmFTY3JpcHQgIm9iamVj
dCBzcGFjZSIKKy8vIG9yIHNldCBvZiBleGVjdXRpb24gcmVzb3VyY2VzLiBUaHJlYWQgc2FmZXR5
IGlzIHN1cHBvcnRlZCBieSBsb2NraW5nIHRoZQorLy8gdmlydHVhbCBtYWNoaW5lLCB3aXRoIGNv
bmN1cnJlbnQgSmF2YVNjcmlwdCBleGVjdXRpb24gc3VwcG9ydGVkIGJ5IGFsbG9jYXRpbmcKKy8v
IHNlcGFyYXRlIGluc3RhbmNlcyBvZiBKU1ZpcnR1YWxNYWNoaW5lLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZpcnR1YWxNYWNoaW5lIDogTlNPYmplY3QKKwor
LSAoaWQpaW5pdDsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorCisjaWYg
SlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJKU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKworQGltcGxlbWVudGF0aW9uIEpTVmlydHVhbE1hY2hp
bmUgeworICAgIEpTQ29udGV4dEdyb3VwUmVmIG1fZ3JvdXA7Cit9CisKKy0gKGlkKWluaXQKK3sK
KyAgICBbc3VwZXIgaW5pdF07CisgICAgbV9ncm91cCA9IEpTQ29udGV4dEdyb3VwQ3JlYXRlKCk7
CisgICAgdG9KUyhtX2dyb3VwKS0+bV9hcGlEYXRhID0gc2VsZjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkK
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2dyb3VwKS0+bV9hcGlEYXRhID0gMDsK
KyAgICBKU0NvbnRleHRHcm91cFJlbGVhc2UobV9ncm91cCk7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCitKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1Zp
cnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSkKK3sKKyAgICByZXR1cm4gdmlydHVhbE1hY2hp
bmUtPm1fZ3JvdXA7Cit9CisKK0BlbmQKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lmIEpTX09CSkNf
QVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQorCitK
U0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNo
aW5lKik7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTV3JhcHBlck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNXcmFwcGVyTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTV3JhcHBlck1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0IDxKU1ZhbHVlSW50ZXJuYWwuaD4KKyNpbXBv
cnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0Bp
bnRlcmZhY2UgSlNXcmFwcGVyTWFwIDogTlNPYmplY3QKKworLSAoaWQpaW5pdFdpdGhDb250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0OworCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDoo
aWQpb2JqZWN0OworCitAZW5kCisKK2lkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKKworUHJvdG9jb2wqIGdldEpTRXhwb3J0UHJvdG9jb2woKTsK
K0NsYXNzIGdldE5TQmxvY2tDbGFzcygpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJK
U1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIk9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW1wb3J0
ICJPYmpjUnVudGltZUV4dHJhcy5oIgorI2ltcG9ydCA8d3RmL1RDU3BpbkxvY2suaD4KKyNpbXBv
cnQgInd0Zi9WZWN0b3IuaCIKKworc3RhdGljIHZvaWQgd3JhcHBlckZpbmFsaXplKEpTT2JqZWN0
UmVmIG9iamVjdCkKK3sKKyAgICBbKGlkKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpIHJlbGVh
c2VdOworfQorCisvLyBBbGwgd3JhcHBlciBvYmplY3RzIGFuZCBjb25zdHJ1Y3RvciBvYmplY3Rz
IGRlcml2ZSBmcm9tIHRoaXMgdHlwZSwgc28gd2UgY2FuIGRldGVjdCAmIHVud3JhcCBPYmplY3Rp
dmUtQyBpbnN0YW5jZXMvQ2xhc3Nlcy4KK3N0YXRpYyBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygp
Cit7CisgICAgc3RhdGljIFNwaW5Mb2NrIGluaXRMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7
CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmaW5pdExvY2spOworCisgICAgc3RhdGlj
IEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSAwOworCisgICAgaWYgKCFjbGFzc1JlZikgeworICAgICAg
ICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOworICAgICAgICBkZWZpbml0aW9uID0ga0pT
Q2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIm9i
amNfY2xhc3MiOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gd3JhcHBlckZpbmFsaXpl
OworICAgICAgICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0K
KworICAgIHJldHVybiBjbGFzc1JlZjsKK30KKworLy8gRGVmYXVsdCBjb252ZXJzaW9uIG9mIHNl
bGVjdG9ycyB0byBwcm9wZXJ0eSBuYW1lcy4KKy8vIEFsbCBzZW1pY29sb25zIGFyZSByZW1vdmVk
LCBsb3dlcmNhc2UgbGV0dGVycyBmb2xsb3dpbmcgYSBzZW1pY29sb24gYXJlIGNhcGl0YWxpemVk
Lgorc3RhdGljIE5TU3RyaW5nKiBzZWxlY3RvclRvUHJvcGVydHlOYW1lKGNvbnN0IGNoYXIqIHN0
YXJ0KQoreworICAgIC8vIFVzZSAnaW5kZXgnIHRvIGNoZWNrIGZvciBjb2xvbnMsIGlmIHRoZXJl
IGFyZSBub24sIHRoaXMgaXMgZWFzeSEKKyAgICBjb25zdCBjaGFyKiBmaXJzdENvbG9uID0gaW5k
ZXgoc3RhcnQsICc6Jyk7CisgICAgaWYgKCFmaXJzdENvbG9uKQorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnN0YXJ0XTsKKworICAgIC8vICdoZWFkZXInIGlz
IHRoZSBsZW5ndGggb2Ygc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCBjb2xvbi4KKyAgICBzaXplX3Qg
aGVhZGVyID0gZmlyc3RDb2xvbiAtIHN0YXJ0OworICAgIC8vIFRoZSBuZXcgc3RyaW5nIG5lZWRz
IHRvIGJlIGxvbmcgZW5vdWdoIHRvIGhvbGQgJ2hlYWRlcicsIHBsdXMgdGhlIHJlbWFpbmRlciBv
ZiB0aGUgc3RyaW5nLCBleGNsdWRpbmcKKyAgICAvLyBhdCBsZWFzdCBvbmUgJzonLCBidXQgaW5j
bHVkaW5nIGEgJ1wwJy4gKFRoaXMgaXMgY29uc2VydmF0aXZlIGlmIHRoZXJlIGFyZSBtb3JlIHRo
YW4gb25lICc6JykuCisgICAgY2hhciogYnVmZmVyID0gKGNoYXIqKW1hbGxvYyhoZWFkZXIgKyBz
dHJsZW4oZmlyc3RDb2xvbiArIDEpICsgMSk7CisgICAgLy8gQ29weSAnaGVhZGVyJyBjaGFyYWN0
ZXJzLCBzZXQgb3V0cHV0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhpcyAmIGlucHV0IHRvIHBv
aW50IHBhc3QgdGhlIGZpcnN0ICc6Jy4KKyAgICBtZW1jcHkoYnVmZmVyLCBzdGFydCwgaGVhZGVy
KTsKKyAgICBjaGFyKiBvdXRwdXQgPSBidWZmZXIgKyBoZWFkZXI7CisgICAgY29uc3QgY2hhciog
aW5wdXQgPSBzdGFydCArIGhlYWRlciArIDE7CisKKyAgICAvLyBPbiBlbnRyeSB0byB0aGUgbG9v
cCwgd2UgaGF2ZSBhbHJlYWR5IHNraXBwZWQgb3ZlciBhICc6JyBmcm9tIHRoZSBpbnB1dC4KKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjaGFyIGM7CisgICAgICAgIC8vIFNraXAgb3ZlciBh
bnkgYWRkaXRpb25hbCAnOidzLiBXZSdsbCBsZWF2ZSBjIGhvbGRpbmcgdGhlIG5leHQgY2hhcmFj
dGVyIGFmdGVyIHRoZQorICAgICAgICAvLyBsYXN0ICc6JywgYW5kIGlucHV0IHBvaW50aW5nIHBh
c3QgYy4KKyAgICAgICAgd2hpbGUgKChjID0gKihpbnB1dCsrKSkgPT0gJzonKTsKKyAgICAgICAg
Ly8gQ29weSB0aGUgY2hhcmFjdGVyLCBjb252ZXJ0aW5nIHRvIHVwcGVyIGNhc2UgaWYgbmVjZXNz
YXJ5LgorICAgICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIHdlIGNvcHkgaXMgJ1wwJywgdGhlbiB3
ZSdyZSBkb25lIQorICAgICAgICBpZiAoISgqKG91dHB1dCsrKSA9IHRvdXBwZXIoYykpKQorICAg
ICAgICAgICAgZ290byBkb25lOworICAgICAgICAvLyBMb29wIG92ZXIgY2hhcmFjdGVycyBvdGhl
ciB0aGFuICc6Jy4KKyAgICAgICAgd2hpbGUgKChjID0gKihpbnB1dCsrKSkgIT0gJzonKSB7Cisg
ICAgICAgICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAvLyBJZiB0aGUg
Y2hhcmFjdGVyIHdlIGNvcHkgaXMgJ1wwJywgdGhlbiB3ZSdyZSBkb25lIQorICAgICAgICAgICAg
aWYgKCEoKihvdXRwdXQrKykgPSBjKSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlJ3ZlIGNvbnN1bWVkIGEgJzonIC0g
d2FzaCwgcmluc2UsIHJlcGVhdC4KKyAgICB9Citkb25lOgorICAgIE5TU3RyaW5nKiByZXN1bHQg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YnVmZmVyXTsKKyAgICBmcmVlKGJ1ZmZl
cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gTWFrZSBhbiBvYmplY3QgdGhhdCBpcyBp
biBhbGwgd2F5cyBhcmUgY29tcGxldGVseSB2YW5pbGxhIEphdmFTY3JpcHQgb2JqZWN0LAorLy8g
b3RoZXIgdGhhbiB0aGF0IGl0IGhhcyBhIG5hdGl2ZSBicmFuZCBzZXQgdGhhdCB3aWxsIGJlIGRp
c3BsYXllZCBieSB0aGUgZGVmYXVsdAorLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBjb212
ZXJzaW9uLgorc3RhdGljIEpTVmFsdWUqIGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChKU0Nv
bnRleHQqIGNvbnRleHQsIE5TU3RyaW5nKiBicmFuZCwgSlNDbGFzc1JlZiBwYXJlbnRDbGFzcyA9
IDAsIHZvaWQqIHByaXZhdGVEYXRhID0gMCkKK3sKKyAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZp
bml0aW9uOworICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9IFticmFuZCBVVEY4U3RyaW5nXTsKKyAgICBkZWZpbml0aW9u
LnBhcmVudENsYXNzID0gcGFyZW50Q2xhc3M7CisgICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IEpT
Q2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBjbGFzc1JlZiwgcHJpdmF0
ZURhdGEpOworICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKKyAgICByZXR1cm4gW1tKU1Zh
bHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisK
Ky8vIExvb2sgZm9yIEBvcHRpb25hbCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY29udGFp
bmluZyBhIHNlbGVjdG9yIHRvIHByb3BlcnR5CisvLyBuYW1lIG1hcHBpbmcsIHNlcGFyYXRlZCBi
eSBhIF9fSlNfRVhQT1JUX0FTX18gZGVsaW1pdGVyLgorc3RhdGljIE5TTXV0YWJsZURpY3Rpb25h
cnkqIGNyZWF0ZVJlbmFtZU1hcChQcm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1l
dGhvZCkKK3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZW5hbWVNYXAgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworCisgICAgZm9yRWFjaE1ldGhvZEluUHJvdG9jb2wo
cHJvdG9jb2wsIE5PLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNvbnN0IGNoYXIqKXsK
KyAgICAgICAgTlNTdHJpbmcqIHJlbmFtZSA9IEAoc2VsX2dldE5hbWUoc2VsKSk7CisgICAgICAg
IE5TUmFuZ2UgcmFuZ2UgPSBbcmVuYW1lIHJhbmdlT2ZTdHJpbmc6QCJfX0pTX0VYUE9SVF9BU19f
Il07CisgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBOU1N0cmluZyogc2VsZWN0b3IgPSBbcmVuYW1lIHN1YnN0cmlu
Z1RvSW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICBOU1VJbnRlZ2VyIGJlZ2luID0gcmFu
Z2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7CisgICAgICAgIE5TVUludGVnZXIgbGVuZ3RoID0g
W3JlbmFtZSBsZW5ndGhdIC0gYmVnaW4gLSAxOworICAgICAgICBOU1N0cmluZyogbmFtZSA9IFty
ZW5hbWUgc3Vic3RyaW5nV2l0aFJhbmdlOihOU1JhbmdlKXsgYmVnaW4sIGxlbmd0aCB9XTsKKyAg
ICAgICAgcmVuYW1lTWFwW3NlbGVjdG9yXSA9IG5hbWU7CisgICAgfSk7CisKKyAgICByZXR1cm4g
cmVuYW1lTWFwOworfQorCitpbmxpbmUgdm9pZCBwdXROb25FbnVtZXJhYmxlKEpTVmFsdWUqIGJh
c2UsIE5TU3RyaW5nKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIFtiYXNl
IGRlZmluZVByb3BlcnR5OnByb3BlcnR5TmFtZSBkZXNjcmlwdG9yOkB7CisgICAgICAgIEpTUHJv
cGVydHlEZXNjcmlwdG9yVmFsdWVLZXk6IHZhbHVlLAorICAgICAgICBKU1Byb3BlcnR5RGVzY3Jp
cHRvcldyaXRhYmxlS2V5OiBAWUVTLAorICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckVudW1l
cmFibGVLZXk6IEBOTywKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JDb25maWd1cmFibGVL
ZXk6IEBZRVMKKyAgICB9XTsKK30KKworLy8gVGhpcyBtZXRob2Qgd2lsbCBpdGVyYXRlIG92ZXIg
dGhlIHNldCBvZiByZXF1aXJlZCBtZXRob2RzIGluIHRoZSBwcm90b2NvbCwgYW5kOgorLy8gICog
RGV0ZXJtaW5lIGEgcHJvcGVydHkgbmFtZSAoZWl0aGVyIHZpYSBhIHJlbmFtZU1hcCBvciBkZWZh
dWx0IGNvbnZlcnNpb24pLgorLy8gICogSWYgYW4gYWNjZXNzb3JNYXAgaXMgcHJvdmlkZWQsIGFu
ZCBjb25hdGlucyBhIHRoaXMgbmFtZSwgc3RvcmUgdGhlIG1ldGhvZCBpbiB0aGUgbWFwLgorLy8g
ICogT3RoZXJ3aXNlLCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgYWxyZWFkeSBjb25hdGluIGEgcHJv
cGVydHkgd2l0aCBuYW1lLCBjcmVhdGUgaXQuCitzdGF0aWMgdm9pZCBjb3B5TWV0aG9kc1RvT2Jq
ZWN0KEpTQ29udGV4dCogY29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2NvbCogcHJvdG9j
b2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgSlNWYWx1ZSogb2JqZWN0LCBOU011dGFibGVEaWN0
aW9uYXJ5KiBhY2Nlc3Nvck1ldGhvZHMgPSBuaWwpCit7CisgICAgTlNNdXRhYmxlRGljdGlvbmFy
eSogcmVuYW1lTWFwID0gY3JlYXRlUmVuYW1lTWFwKHByb3RvY29sLCBpc0luc3RhbmNlTWV0aG9k
KTsKKworICAgIGZvckVhY2hNZXRob2RJblByb3RvY29sKHByb3RvY29sLCBZRVMsIGlzSW5zdGFu
Y2VNZXRob2QsIF4oU0VMIHNlbCwgY29uc3QgY2hhciogdHlwZXMpeworICAgICAgICBjb25zdCBj
aGFyKiBuYW1lQ1N0ciA9IHNlbF9nZXROYW1lKHNlbCk7CisgICAgICAgIE5TU3RyaW5nKiBuYW1l
ID0gQChuYW1lQ1N0cik7CisgICAgICAgIGlmIChhY2Nlc3Nvck1ldGhvZHMgJiYgYWNjZXNzb3JN
ZXRob2RzW25hbWVdKSB7CisgICAgICAgICAgICBKU09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvck1ldGhvZChjb250ZXh0LCBvYmpjQ2xhc3MsIHByb3RvY29sLCBpc0lu
c3RhbmNlTWV0aG9kLCBzZWwsIHR5cGVzKTsKKyAgICAgICAgICAgIGlmICghbWV0aG9kKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tuYW1lXSA9
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOm1ldGhvZCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gcmVuYW1lTWFwW25hbWVdOworICAgICAg
ICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxlY3RvclRvUHJvcGVy
dHlOYW1lKG5hbWVDU3RyKTsKKyAgICAgICAgICAgIGlmIChbb2JqZWN0IGhhc1Byb3BlcnR5Om5h
bWVdKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIG1l
dGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9iamNDbGFzcywg
cHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOworICAgICAgICAgICAgaWYg
KG1ldGhvZCkKKyAgICAgICAgICAgICAgICBwdXROb25FbnVtZXJhYmxlKG9iamVjdCwgbmFtZSwg
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XSk7CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIFtyZW5hbWVNYXAgcmVsZWFzZV07Cit9CisKK3N0YXRpYyBi
b29sIHBhcnNlUHJvcGVydHlBdHRyaWJ1dGVzKG9iamNfcHJvcGVydHlfdCBwcm9wZXJ0eSwgY2hh
ciomIGdldHRlck5hbWUsIGNoYXIqJiBzZXR0ZXJOYW1lKQoreworICAgIGJvb2wgcmVhZG9ubHkg
PSBmYWxzZTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudDsKKyAgICBvYmpjX3Byb3BlcnR5
X2F0dHJpYnV0ZV90KiBhdHRyaWJ1dGVzID0gcHJvcGVydHlfY29weUF0dHJpYnV0ZUxpc3QocHJv
cGVydHksICZhdHRyaWJ1dGVDb3VudCk7CisgICAgaWYgKGF0dHJpYnV0ZUNvdW50KSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKCooYXR0cmlidXRlc1tpXS5uYW1lKSkgeworICAgICAgICAgICAgY2Fz
ZSAnRyc6CisgICAgICAgICAgICAgICAgZ2V0dGVyTmFtZSA9IHN0cmR1cChhdHRyaWJ1dGVzW2ld
LnZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1MnOgor
ICAgICAgICAgICAgICAgIHNldHRlck5hbWUgPSBzdHJkdXAoYXR0cmlidXRlc1tpXS52YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdSJzoKKyAgICAgICAg
ICAgICAgICByZWFkb25seSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGZyZWUoYXR0cmlidXRlcyk7CisgICAgfQorICAgIHJldHVybiByZWFk
b25seTsKK30KKworc3RhdGljIGNoYXIqIG1ha2VTZXR0ZXJOYW1lKGNvbnN0IGNoYXIqIG5hbWUp
Cit7CisgICAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgY2hhciogc2V0
dGVyTmFtZSA9IChjaGFyKiltYWxsb2MobmFtZUxlbmd0aCArIDUpOyAvLyAic2V0IiBOYW1lICI6
XDAiCisgICAgc2V0dGVyTmFtZVswXSA9ICdzJzsKKyAgICBzZXR0ZXJOYW1lWzFdID0gJ2UnOwor
ICAgIHNldHRlck5hbWVbMl0gPSAndCc7CisgICAgc2V0dGVyTmFtZVszXSA9IHRvdXBwZXIoKm5h
bWUpOworICAgIG1lbWNweShzZXR0ZXJOYW1lICsgNCwgbmFtZSArIDEsIG5hbWVMZW5ndGggLSAx
KTsKKyAgICBzZXR0ZXJOYW1lW25hbWVMZW5ndGggKyAzXSA9ICc6JzsKKyAgICBzZXR0ZXJOYW1l
W25hbWVMZW5ndGggKyA0XSA9ICdcMCc7CisgICAgcmV0dXJuIHNldHRlck5hbWU7Cit9CisKK3N0
YXRpYyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ29udGV4dCogY29udGV4dCwgQ2xh
c3Mgb2JqY0NsYXNzLCBQcm90b2NvbCogcHJvdG9jb2wsIEpTVmFsdWUqIHByb3RvdHlwZVZhbHVl
KQoreworICAgIC8vIEZpcnN0IGdhdGhlciBwcm9wcmV0aWVzIGludG8gdGhpcyBsaXN0LCB0aGVu
IGhhbmRsZSB0aGUgbWV0aG9kcyAoY2FwdHVyaW5nIHRoZSBhY2Nlc3NvciBtZXRob2RzKS4KKyAg
ICBzdHJ1Y3QgUHJvcGVydHkgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBj
aGFyKiBnZXR0ZXJOYW1lOworICAgICAgICBjaGFyKiBzZXR0ZXJOYW1lOworICAgIH07CisgICAg
X19ibG9jayBXVEY6OlZlY3RvcjxQcm9wZXJ0eT4gcHJvcGVydHlMaXN0OworCisgICAgLy8gTWFw
IHJlY29yZGluZyB0aGUgbWV0aG9kcyB1c2VkIGFzIGdldHRlcnMvc2V0dGVycy4KKyAgICBOU011
dGFibGVEaWN0aW9uYXJ5ICphY2Nlc3Nvck1ldGhvZHMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBk
aWN0aW9uYXJ5XTsKKworICAgIC8vIFVzZWZ1bCB2YWx1ZS4KKyAgICBKU1ZhbHVlKiB1bmRlZmlu
ZWQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF07CisKKyAg
ICBmb3JFYWNoUHJvcGVydHlJblByb3RvY29sKHByb3RvY29sLCBeKG9iamNfcHJvcGVydHlfdCBw
cm9wZXJ0eSl7CisgICAgICAgIGNoYXIqIGdldHRlck5hbWUgPSAwOworICAgICAgICBjaGFyKiBz
ZXR0ZXJOYW1lID0gMDsKKyAgICAgICAgYm9vbCByZWFkb25seSA9IHBhcnNlUHJvcGVydHlBdHRy
aWJ1dGVzKHByb3BlcnR5LCBnZXR0ZXJOYW1lLCBzZXR0ZXJOYW1lKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSA9IHByb3BlcnR5X2dldE5hbWUocHJvcGVydHkpOworCisgICAgICAgIC8vIEFk
ZCB0aGUgbmFtZXMgb2YgdGhlIGdldHRlciAmIHNldHRlciBtZXRob2RzIHRvIAorICAgICAgICBp
ZiAoIWdldHRlck5hbWUpCisgICAgICAgICAgICBnZXR0ZXJOYW1lID0gc3RyZHVwKG5hbWUpOwor
ICAgICAgICBhY2Nlc3Nvck1ldGhvZHNbQChnZXR0ZXJOYW1lKV0gPSB1bmRlZmluZWQ7CisgICAg
ICAgIGlmICghcmVhZG9ubHkpIHsKKyAgICAgICAgICAgIGlmICghc2V0dGVyTmFtZSkKKyAgICAg
ICAgICAgICAgICBzZXR0ZXJOYW1lID0gbWFrZVNldHRlck5hbWUobmFtZSk7CisgICAgICAgICAg
ICBhY2Nlc3Nvck1ldGhvZHNbQChzZXR0ZXJOYW1lKV0gPSB1bmRlZmluZWQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBZGQgdGhlIHByb3BlcnRpZXMgdG8gYSBsaXN0LgorICAgICAgICBwcm9w
ZXJ0eUxpc3QuYXBwZW5kKChQcm9wZXJ0eSl7IG5hbWUsIGdldHRlck5hbWUsIHNldHRlck5hbWUg
fSk7CisgICAgfSk7CisKKyAgICAvLyBDb3B5IG1ldGhvZHMgdG8gdGhlIHByb3RvdHlwZSwgY2Fw
dHVyaW5nIGFjY2Vzc29ycyBpbiB0aGUgYWNjZXNzb3JNZXRob2RzIG1hcC4KKyAgICBjb3B5TWV0
aG9kc1RvT2JqZWN0KGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9jb2wsIFlFUywgcHJvdG90eXBl
VmFsdWUsIGFjY2Vzc29yTWV0aG9kcyk7CisKKyAgICAvLyBJdGVyYXRlIHRoZSBwcm9wZXJ0eUxp
c3QgJiBnZW5lcmF0ZSBhY2Nlc3NvciBwcm9wZXJ0aWVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvcGVydHlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFByb3BlcnR5JiBwcm9w
ZXJ0eSA9IHByb3BlcnR5TGlzdFtpXTsKKworICAgICAgICBKU1ZhbHVlKiBnZXR0ZXIgPSBhY2Nl
c3Nvck1ldGhvZHNbQChwcm9wZXJ0eS5nZXR0ZXJOYW1lKV07CisgICAgICAgIGZyZWUocHJvcGVy
dHkuZ2V0dGVyTmFtZSk7CisgICAgICAgIEFTU0VSVCghW2dldHRlciBpc1VuZGVmaW5lZF0pOwor
CisgICAgICAgIEpTVmFsdWUqIHNldHRlciA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHByb3Bl
cnR5LnNldHRlck5hbWUpIHsKKyAgICAgICAgICAgIHNldHRlciA9IGFjY2Vzc29yTWV0aG9kc1tA
KHByb3BlcnR5LnNldHRlck5hbWUpXTsKKyAgICAgICAgICAgIGZyZWUocHJvcGVydHkuc2V0dGVy
TmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoIVtzZXR0ZXIgaXNVbmRlZmluZWRdKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgW3Byb3RvdHlwZVZhbHVlIGRlZmluZVByb3BlcnR5OkAo
cHJvcGVydHkubmFtZSkgZGVzY3JpcHRvcjpAeworICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2Ny
aXB0b3JHZXRLZXk6IGdldHRlciwKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0
S2V5OiBzZXR0ZXIsCisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckVudW1lcmFibGVL
ZXk6IEBOTywKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5
OiBAWUVTCisgICAgICAgIH1dOworICAgIH0KK30KKworQGludGVyZmFjZSBKU09iakNDbGFzc0lu
Zm8gOiBOU09iamVjdCB7CisgICAgSlNDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgQ2xhc3MgbV9j
bGFzczsKKyAgICBib29sIG1fYmxvY2s7CisgICAgSlNDbGFzc1JlZiBtX2NsYXNzUmVmOworICAg
IEpTVmFsdWUqIG1fcHJvdG90eXBlOworICAgIEpTVmFsdWUqIG1fY29uc3RydWN0b3I7Cit9CisK
Ky0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0IGZvckNsYXNzOihDbGFz
cyljbHMgc3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm87Cist
IChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OworLSAoSlNWYWx1ZSAqKWNv
bnN0cnVjdG9yOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU09iakNDbGFzc0luZm8KKwor
LSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xhc3M6KENsYXNz
KWNscyBzdXBlckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5mbworewor
ICAgIFtzdXBlciBpbml0XTsKKworICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IGNsYXNzX2dl
dE5hbWUoY2xzKTsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY2xhc3MgPSBjbHM7
CisgICAgbV9ibG9jayA9IFtjbHMgaXNTdWJjbGFzc09mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNzKCld
OworICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlvbiA9IGtK
U0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gY2xhc3NO
YW1lOworICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSB3cmFwcGVyQ2xhc3MoKTsKKyAgICBt
X2NsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBBU1NFUlQoKGNs
cyA9PSBbTlNPYmplY3QgY2xhc3NdKSA9PSAhc3VwZXJDbGFzc0luZm8pOworICAgIGlmICghc3Vw
ZXJDbGFzc0luZm8pIHsKKyAgICAgICAgbV9jb25zdHJ1Y3RvciA9IFtjb250ZXh0W0AiT2JqZWN0
Il0gcmV0YWluXTsKKyAgICAgICAgbV9wcm90b3R5cGUgPSBbbV9jb25zdHJ1Y3RvcltAInByb3Rv
dHlwZSJdIHJldGFpbl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBwcm90
b3R5cGUvY29uc3RydWN0b3IgcGFpci4KKyAgICAgICAgbV9wcm90b3R5cGUgPSBjcmVhdGVPYmpl
Y3RXaXRoQ3VzdG9tQnJhbmQoY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
c1Byb3RvdHlwZSIsIGNsYXNzTmFtZV0pOworICAgICAgICBtX2NvbnN0cnVjdG9yID0gY3JlYXRl
T2JqZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRleHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIHdyYXBwZXJDbGFzcygpLCBbY2xzIHJldGFp
bl0pOworICAgICAgICBwdXROb25FbnVtZXJhYmxlKG1fcHJvdG90eXBlLCBAImNvbnN0cnVjdG9y
IiwgbV9jb25zdHJ1Y3Rvcik7CisgICAgICAgIHB1dE5vbkVudW1lcmFibGUobV9jb25zdHJ1Y3Rv
ciwgQCJwcm90b3R5cGUiLCBtX3Byb3RvdHlwZSk7CisKKyAgICAgICAgUHJvdG9jb2wqIGV4cG9y
dFByb3RvY29sID0gZ2V0SlNFeHBvcnRQcm90b2NvbCgpOworICAgICAgICBmb3JFYWNoUHJvdG9j
b2xJbXBsZW1lbnRpbmdQcm90b2NvbChjbHMsIGV4cG9ydFByb3RvY29sLCBeKFByb3RvY29sKiBw
cm90b2NvbCl7CisgICAgICAgICAgICBjb3B5UHJvdG90eXBlUHJvcGVydGllcyhjb250ZXh0LCBj
bHMsIHByb3RvY29sLCBtX3Byb3RvdHlwZSk7CisgICAgICAgICAgICBjb3B5TWV0aG9kc1RvT2Jq
ZWN0KGNvbnRleHQsIGNscywgcHJvdG9jb2wsIE5PLCBtX2NvbnN0cnVjdG9yKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgLy8gU2V0IFtQcm90b3R5cGVdLgorICAgICAgICBtX3Byb3RvdHlwZVtA
Il9fcHJvdG9fXyJdID0gc3VwZXJDbGFzc0luZm8tPm1fcHJvdG90eXBlOworICAgIH0KKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBKU0NsYXNzUmVsZWFz
ZShtX2NsYXNzUmVmKTsKKyAgICBbbV9wcm90b3R5cGUgcmVsZWFzZV07CisgICAgW21fY29uc3Ry
dWN0b3IgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChKU1ZhbHVlICop
d3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgQVNTRVJUKFtvYmplY3QgaXNLaW5k
T2ZDbGFzczptX2NsYXNzXSk7CisgICAgQVNTRVJUKG1fYmxvY2sgPT0gW29iamVjdCBpc0tpbmRP
ZkNsYXNzOmdldE5TQmxvY2tDbGFzcygpXSk7CisgICAgaWYgKG1fYmxvY2spIHsKKyAgICAgICAg
aWYgKEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2sobV9j
b250ZXh0LCBvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZh
bHVlOm1ldGhvZCBpbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVm
IHByb3RvdHlwZVZhbHVlID0gdmFsdWVJbnRlcm5hbFZhbHVlKG1fcHJvdG90eXBlKTsKKyAgICBB
U1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9jb250ZXh0KSwg
cHJvdG90eXBlVmFsdWUpKTsKKyAgICBKU09iamVjdFJlZiBwcm90b3R5cGUgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBwcm90b3R5cGVWYWx1ZSwg
MCk7CisKKyAgICBKU09iamVjdFJlZiB3cmFwcGVyID0gSlNPYmplY3RNYWtlKGNvbnRleHRJbnRl
cm5hbENvbnRleHQobV9jb250ZXh0KSwgbV9jbGFzc1JlZiwgW29iamVjdCByZXRhaW5dKTsKKyAg
ICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29udGV4dCks
IHdyYXBwZXIsIHByb3RvdHlwZSk7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OndyYXBwZXIgaW5Db250ZXh0Om1fY29udGV4dF07Cit9CisKKy0gKEpTVmFsdWUgKiljb25zdHJ1
Y3RvcgoreworICAgIHJldHVybiBtX2NvbnN0cnVjdG9yOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBKU1dyYXBwZXJNYXAgeworICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkqIG1fY2xhc3NNYXA7Cit9CisKKy0gKGlkKWluaXRXaXRoQ29udGV4
dDooSlNDb250ZXh0Kiljb250ZXh0Cit7CisgICAgW3N1cGVyIGluaXRdOworICAgIG1fY29udGV4
dCA9IGNvbnRleHQ7CisgICAgbV9jbGFzc01hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFttX2NsYXNzTWFwIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoSlNP
YmpDQ2xhc3NJbmZvKiljbGFzc0luZm9Gb3JDbGFzczooQ2xhc3MpY2xzCit7CisgICAgaWYgKCFj
bHMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5
IGNyZWF0ZWQgYSBKU09iakNDbGFzc0luZm8gZm9yIHRoaXMgQ2xhc3MuCisgICAgaWYgKEpTT2Jq
Q0NsYXNzSW5mbyogY2xhc3NJbmZvID0gKEpTT2JqQ0NsYXNzSW5mbyopbV9jbGFzc01hcFtjbHNd
KQorICAgICAgICByZXR1cm4gY2xhc3NJbmZvOworCisgICAgLy8gU2tpcCBpbnRlcm5hbCBjbGFz
c2VzIGJlZ2luaW5nIHdpdGggJ18nIC0ganVzdCBjb3B5IGxpbmsgdG8gdGhlIHBhcmVudCBjbGFz
cydzIGluZm8uCisgICAgaWYgKCdfJyA9PSAqY2xhc3NfZ2V0TmFtZShjbHMpKQorICAgICAgICBy
ZXR1cm4gbV9jbGFzc01hcFtjbHNdID0gW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0
U3VwZXJjbGFzcyhjbHMpXTsKKworICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbW1tKU09i
akNDbGFzc0luZm8gYWxsb2NdIGluaXRXaXRoQ29udGV4dDptX2NvbnRleHQgZm9yQ2xhc3M6Y2xz
IHN1cGVyQ2xhc3NJbmZvOltzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xh
c3MoY2xzKV1dIGF1dG9yZWxlYXNlXTsKK30KKworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmpl
Y3Q6KGlkKW9iamVjdAoreworICAgIEpTVmFsdWUqIHdyYXBwZXIgPSBvYmpjX2dldEFzc29jaWF0
ZWRPYmplY3Qob2JqZWN0LCBtX2NvbnRleHQpOworICAgIGlmICh3cmFwcGVyICYmIHdyYXBwZXIu
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBpZiAoY2xhc3NfaXNNZXRh
Q2xhc3Mob2JqZWN0X2dldENsYXNzKG9iamVjdCkpKQorICAgICAgICB3cmFwcGVyID0gW1tzZWxm
IGNsYXNzSW5mb0ZvckNsYXNzOihDbGFzcylvYmplY3RdIGNvbnN0cnVjdG9yXTsKKyAgICBlbHNl
IHsKKyAgICAgICAgSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBbc2VsZiBjbGFzc0luZm9G
b3JDbGFzczpbb2JqZWN0IGNsYXNzXV07CisgICAgICAgIHdyYXBwZXIgPSBbY2xhc3NJbmZvIHdy
YXBwZXJGb3JPYmplY3Q6b2JqZWN0XTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5MQorICAgIC8vIFRoaXMgZ2VuZXJh
bCBhcHByb2FjaCB0byB3cmFwcGVyIGNhY2hpbmcgaXMgcHJldHR5IGVmZmVjdGl2ZSwgYnV0IHRo
ZXJlIGFyZSBhIGNvdXBsZSBvZiBwcm9ibGVtczoKKyAgICAvLyAoMSkgRm9yIGltbW9ydGFsIG9i
amVjdHMgSlNWYWx1ZXMgd2lsbCBlZmZlY3RpdmVseSBsZWFqIGFuZCB0aGlzIHJlc3VsdHMgaW4g
ZXJyb3Igb3V0cHV0IGJlaW5nIGxvZ2dlZCAtIHdlIHNob3VsZCBhdm9pZCBhZGRpbmcgYXNzb2Np
YXRlZCBvYmplY3RzIHRvIGltbW9ydGFsIG9iamVjdHMuCisgICAgLy8gKDIpIEEgbG9uZyBsaXZl
ZCBvYmplY3QgbWF5IHJhY2sgdXAgbWFueSBKU1ZhbHVlcy4gV2hlbiB0aGUgY29udGV4dHMgYXJl
IHJlbGVhc2VkIHRoZXNlIHdpbGwgdW5wcm9jdGVjdCB0aGUgYXNzb2NpYXRlZCBKYXZhU2NyaXB0
IG9iamVjdHMsCisgICAgLy8gICAgIGJ1dCBzdGlsbCwgd291bGQgcHJvYmFibHkgbmljZXIgaWYg
d2UgbWFkZSBpdCBzbyB0aGF0IG9ubHkgb25lIGFzc29jaWF0ZWQgb2JqZWN0IHdhcyByZXF1aXJl
ZCwgYnJvYWRjYXN0aW5nIG9iamVjdCBkZWFsbG9jLgorICAgIG9iamNfc2V0QXNzb2NpYXRlZE9i
amVjdChvYmplY3QsIG1fY29udGV4dCwgd3JhcHBlciwgT0JKQ19BU1NPQ0lBVElPTl9SRVRBSU4p
OworICAgIHJldHVybiB3cmFwcGVyOworfQorCitAZW5kCisKK2lkIHRyeVVud3JhcE9iamNPYmpl
Y3QoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAg
aWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsICZleGNlcHRpb24pOworICAgIC8vQVNT
RVJUKCFleGNlcHRpb24pOworICAgIGlmIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQs
IG9iamVjdCwgd3JhcHBlckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gKGlkKUpTT2JqZWN0R2V0
UHJpdmF0ZShvYmplY3QpOworICAgIGlmIChpZCB0YXJnZXQgPSB0cnlVbndyYXBCbG9jayhjb250
ZXh0LCBvYmplY3QpKQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIHJldHVybiBuaWw7Cit9
CisKK1Byb3RvY29sKiBnZXRKU0V4cG9ydFByb3RvY29sKCkKK3sKKyAgICBzdGF0aWMgUHJvdG9j
b2wqIHByb3RvY29sID0gMDsKKyAgICBpZiAoIXByb3RvY29sKQorICAgICAgICBwcm90b2NvbCA9
IG9iamNfZ2V0UHJvdG9jb2woIkpTRXhwb3J0Iik7CisgICAgcmV0dXJuIHByb3RvY29sOworfQor
CitDbGFzcyBnZXROU0Jsb2NrQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBjbHMgPSAwOwor
ICAgIGlmICghY2xzKQorICAgICAgICBjbHMgPSBvYmpjX2dldENsYXNzKCJOU0Jsb2NrIik7Cisg
ICAgcmV0dXJuIGNsczsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0phdmFTY3JpcHRDb3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KYXZhU2NyaXB0Q29yZS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDQgKzI5
LDEzIEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KIAorI2lmIEpTX09CSkNfQVBJX0VOQUJM
RUQKKworI2ltcG9ydCAiSlNDb250ZXh0LmgiCisjaW1wb3J0ICJBUElKU1ZhbHVlLmgiCisjaW1w
b3J0ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0ICJKU0V4cG9ydC5oIgorCisjZW5kaWYK
KwogI2VuZGlmIC8qIEphdmFTY3JpcHRDb3JlX2ggKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKwor
I2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QoSlNDb250ZXh0KiwgQ2xhc3MsIFByb3RvY29sKiwgQk9PTCBpc0luc3RhbmNl
TWV0aG9kLCBTRUwsIGNvbnN0IGNoYXIqIHR5cGVzKTsKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFj
a0Z1bmN0aW9uRm9yQmxvY2soSlNDb250ZXh0KiwgaWQpOworCitpZCB0cnlVbndyYXBCbG9jayhK
U0dsb2JhbENvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9u
Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJK
YXZhU2NyaXB0Q29yZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJB
UElDYXN0LmgiCisjaW1wb3J0ICJBUElTaGltcy5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBv
cnQgIkpTQmxvY2tBZGFwdG9yLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2lt
cG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIk9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5o
IgorI2ltcG9ydCAib2JqYy9ydW50aW1lLmgiCisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUv
QmxvY2tfcHJpdmF0ZS5oPgorI2ltcG9ydCAid3RmL1JldGFpblB0ci5oIgorCitjbGFzcyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4
dCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKSA9IDA7CisKKyAgICBPd25QdHI8Q2FsbGJhY2tB
cmd1bWVudD4gbV9uZXh0OworfTsKKworQ2FsbGJhY2tBcmd1bWVudDo6fkNhbGxiYWNrQXJndW1l
bnQoKQoreworfQorCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbiA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWUg
PSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3Vt
ZW50KTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJn
dW1lbnROdW1iZXJdOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBD
YWxsYmFja0FyZ3VtZW50SW50ZWdlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNDOjp0b0lu
dDMyKEpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1
bWVudCwgZXhjZXB0aW9uKSk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1
ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgQ2FsbGJhY2tBcmd1bWVudERvdWJsZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0g
KFQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3Vt
ZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUg
YXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudEpTVmFsdWUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIs
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisg
ICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmFy
Z3VtZW50IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1l
bnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENh
bGxiYWNrQXJndW1lbnRJZCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51
bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVm
KikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudCk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFz
cyA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3Vt
ZW50T2ZDbGFzcyhDbGFzcyBjbHMpCisgICAgICAgIDogQ2FsbGJhY2tBcmd1bWVudCgpCisgICAg
ICAgICwgbV9jbGFzcyhjbHMpCisgICAgeworICAgICAgICBbbV9jbGFzcyByZXRhaW5dOworICAg
IH0KKworICAgIH5DYWxsYmFja0FyZ3VtZW50T2ZDbGFzcygpCisgICAgeworICAgICAgICBbbV9j
bGFzcyByZWxlYXNlXTsKKyAgICB9CisKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBK
U0dsb2JhbENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsK
KworICAgICAgICBpZCBvYmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgYXJndW1lbnQp
OworICAgICAgICBpZiAob2JqZWN0ICYmIFtvYmplY3QgaXNLaW5kT2ZDbGFzczptX2NsYXNzXSkg
eworICAgICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChKU1ZhbHVlSXNOdWxsKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChj
dHgsIGFyZ3VtZW50KSkgeworICAgICAgICAgICAgb2JqZWN0ID0gbmlsOworICAgICAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGN0eCksICJBcmd1bWVudCBkb2VzIG5vdCBt
YXRjaCBPYmplY3RpdmUtQyBDbGFzcyIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xhc3Mg
bV9jbGFzczsKK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU051bWJlciA6IHB1YmxpYyBD
YWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAg
ICBpZCB2YWx1ZSA9IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50
OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxs
YmFja0FyZ3VtZW50TlNTdHJpbmcgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1l
bnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvU3RyaW5n
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOwor
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZSA6IHB1Ymxp
YyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24q
IGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAg
ICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tBcmd1bWVudE5TQXJyYXkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1l
bnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvQXJyYXko
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7Cisg
ICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVt
YmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDog
cHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2Nh
dGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNv
bnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7
CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0RpY3Rpb25hcnkoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9u
IHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9Owor
CitjbGFzcyBDYWxsYmFja0FyZ3VtZW50U3RydWN0IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQg
eworcHVibGljOgorICAgIENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoTlNJbnZvY2F0aW9uKiBjb252
ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCisgICAgICAgIDogbV9j
b252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikKKyAgICB7CisgICAgICAg
IFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAgIE5TVUludGVnZXIgc2l6
ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoZW5jb2RlZFR5cGUs
ICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7CisgICAgICAgIG1fYWxs
b2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7CisgICAgICAgIG1fYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgfkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21f
Y29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9u
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtK
U1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAg
ICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1ZV07CisgICAg
ICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVmZmVyXTsKKyAg
ICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6bV9idWZmZXIgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9u
SW52b2NhdGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247
Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFj
ayhKU0Jsb2NrQWRhcHRvciogYWRhcHRvcikKKyAgICAgICAgOiBtX2FkYXB0b3IoYWRhcHRvcikK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkNhbGxiYWNrQXJndW1lbnRCbG9ja0Nh
bGxiYWNrKCkKKyAgICB7CisgICAgICAgIFttX2FkYXB0b3IgcmVsZWFzZV07CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3Vt
ZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIGlkIGJsb2NrID0gW21fYWRhcHRvciBi
bG9ja0Zyb21WYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dCB3aXRoRXhjZXB0aW9uOmV4
Y2VwdGlvbl07CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZibG9jayBhdEluZGV4
OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNCbG9ja0FkYXB0b3Iq
IG1fYWRhcHRvcjsKK307CisKK2NsYXNzIEFyZ3VtZW50VHlwZURlbGVnYXRlIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIENhbGxiYWNrQXJndW1lbnQqIFJlc3VsdFR5cGU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJbnRlZ2VyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEludGVnZXI8VD47CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlRG91
YmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudERvdWJsZTxU
PjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQm9vbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRCb29sZWFuOworICAgIH0KKworICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRU
eXBlIHR5cGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRJ
ZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFzcyhjb25zdCBjaGFy
KiBiZWdpbiwgY29uc3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29w
eShiZWdpbiwgZW5kKTsKKyAgICAgICAgQ2xhc3MgY2xzID0gb2JqY19nZXRDbGFzcyhjb3B5KTsK
KyAgICAgICAgaWYgKCFjbHMpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgIGlm
IChjbHMgPT0gW0pTVmFsdWUgY2xhc3NdKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFj
a0FyZ3VtZW50SlNWYWx1ZTsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNTdHJpbmcgY2xhc3NdKQor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmc7CisgICAgICAg
IGlmIChjbHMgPT0gW05TTnVtYmVyIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2Fs
bGJhY2tBcmd1bWVudE5TTnVtYmVyOworICAgICAgICBpZiAoY2xzID09IFtOU0RhdGUgY2xhc3Nd
KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEYXRlOworICAgICAg
ICBpZiAoY2xzID09IFtOU0FycmF5IGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2Fs
bGJhY2tBcmd1bWVudE5TQXJyYXk7CisgICAgICAgIGlmIChjbHMgPT0gW05TRGljdGlvbmFyeSBj
bGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25h
cnk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyhjbHMpOwor
ICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFyKiBiZWdp
biwgY29uc3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdp
biwgZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFj
ayhbW0pTQmxvY2tBZGFwdG9yIGFsbG9jXSBpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3Rv
Y29sOmNvcHldKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNv
bnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdS
YW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uID0gdmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyBDYWxsYmFja0FyZ3VtZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICBy
ZXR1cm4gbmlsOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5DYWxsYmFja1Jlc3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiop
ID0gMDsKK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0Vm9pZCA6IHB1YmxpYyBDYWxsYmFja1Jl
c3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24q
LCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpOwor
ICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0SWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1
bHQgeworcHVibGljOgorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBp
bnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAg
ICAgaWQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07
CisgICAgICAgIHJldHVybiBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tSZXN1bHROdW1lcmljIDog
cHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYg
Z2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVl
UmVmKikKKyAgICB7CisgICAgICAgIFQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJl
dHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAoZG91YmxlKXZhbHVlKTsKKyAgICB9Cit9Owor
CitjbGFzcyBDYWxsYmFja1Jlc3VsdEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgewor
cHVibGljOgorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgYm9v
bCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCB2YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Qg
OiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgorICAgIENhbGxiYWNrUmVzdWx0U3Ry
dWN0KE5TSW52b2NhdGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29k
ZWRUeXBlKQorICAgICAgICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9j
YXRpb24pCisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZXRhaW5dOwor
ICAgICAgICBOU1VJbnRlZ2VyIHNpemUsIGFsaWdubWVudDsKKyAgICAgICAgTlNHZXRTaXplQW5k
QWxpZ25tZW50KGVuY29kZWRUeXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7CisgICAgICAgIC0tYWxp
Z25tZW50OworICAgICAgICBtX2FsbG9jYXRpb24gPSAoY2hhciopbWFsbG9jKHNpemUgKyBhbGln
bm1lbnQpOworICAgICAgICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX2FsbG9jYXRpb24pICsgYWxpZ25tZW50KSAmIH5hbGln
bm1lbnQpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFja1Jlc3VsdFN0cnVjdCgp
CisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAgICAg
ICAgZnJlZShtX2FsbG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmKikKKyAgICB7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYWxs
b2NhdGlvbl07CisKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6
bV9hbGxvY2F0aW9uIGF0SW5kZXg6Ml07CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9u
IHNldEFyZ3VtZW50OiZjb250ZXh0IGF0SW5kZXg6M107CisgICAgICAgIFttX2NvbnZlcnNpb25J
bnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6W0pTVmFsdWUgY2xhc3NdXTsKKworICAgICAgICBK
U1ZhbHVlKiB2YWx1ZTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gZ2V0UmV0dXJu
VmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2Nh
dGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247Cit9Owor
CitjbGFzcyBSZXN1bHRUeXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQ2FsbGJh
Y2tSZXN1bHQqIFJlc3VsdFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVJbnRlZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
Q2FsbGJhY2tSZXN1bHROdW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVzdWx0VHlwZSB0eXBlQm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNr
UmVzdWx0Qm9vbGVhbjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlVm9pZCgp
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0Vm9pZDsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBDYWxsYmFja1Jlc3VsdElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlw
ZU9mQ2xhc3MoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDYWxsYmFja1Jlc3VsdElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUg
dHlwZUJsb2NrKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQ2FsbGJhY2tSZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVTdHJ1Y3QoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7Cisg
ICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9j
YXRpb24qIGludm9jYXRpb24gPSB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoY29weSkpCisgICAg
ICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0U3RydWN0KGludm9jYXRpb24sIGNvcHkp
OworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KK307CisKK2VudW0gQ2FsbGJhY2tUeXBlIHsK
KyAgICBDYWxsYmFja0luc3RhbmNlTWV0aG9kLAorICAgIENhbGxiYWNrQ2xhc3NNZXRob2QsCisg
ICAgQ2FsbGJhY2tCbG9jaworfTsKKworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24geworcHVi
bGljOgorICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFz
cywgUGFzc093blB0cjxDYWxsYmFja0FyZ3VtZW50PiBhcmd1bWVudHMsIFBhc3NPd25QdHI8Q2Fs
bGJhY2tSZXN1bHQ+IHJlc3VsdCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2luc3RhbmNlQ2xhc3MoW2luc3RhbmNlQ2xh
c3MgcmV0YWluXSkKKyAgICAgICAgLCBtX2ludm9jYXRpb24oaW52b2NhdGlvbikKKyAgICAgICAg
LCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCB8fCBpbnN0
YW5jZUNsYXNzKTsKKyAgICB9CisKKyAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgW21faW5zdGFuY2VDbGFzcyByZWxlYXNlXTsKKyAgICB9CisKKyAgICBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKworICAgIEpTQ29udGV4dCogY29udGV4dCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworICAgIH0KKworICAgIGlkIHdyYXBwZWRCbG9jaygp
CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IENhbGxiYWNrQmxvY2sgPyBbbV9pbnZv
Y2F0aW9uIHRhcmdldF0gOiBuaWw7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYWtDb250ZXh0
UmVmIG1fY29udGV4dDsKKyAgICBDYWxsYmFja1R5cGUgbV90eXBlOworICAgIENsYXNzIG1faW5z
dGFuY2VDbGFzczsKKyAgICBXVEY6OlJldGFpblB0cjxOU0ludm9jYXRpb24+IG1faW52b2NhdGlv
bjsKKyAgICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgT3duUHRy
PENhbGxiYWNrUmVzdWx0PiBtX3Jlc3VsdDsKK307CisKK3N0YXRpYyB2b2lkIG9iakNDYWxsYmFj
a0Z1bmN0aW9uRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIGRlbGV0ZSAoT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4
dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBSZXRha2UgdGhlIEFQSSBsb2Nr
IC0gd2UgbmVlZCB0aGlzIGZvciBhIGZldyByZWFzb25zOgorICAgIC8vICgxKSBXZSBkb24ndCB3
YW50IHRvIHN1cHBvcnQgdGhlIEMtQVBJJ3MgY29uZnVzaW5nIGRyb3BzLWxvY2tzLW9uY2UgcG9s
aWN5IC0gc2hvdWxkIG9ubHkgZHJvcCBsb2NrcyBpZiB3ZSBjYW4gZG8gc28gcmVjdXJzaXZleS4K
KyAgICAvLyAoMikgV2UncmUgY2FsaW5nIHNvbWUgSlNDIGludGVybmFscyB0aGF0IHJlcXVpcmUg
dXMgdG8gYmUgb24gdGhlICdpbnNpZGUnIC0gZS5nLiBjcmVhdGVUeXBlRXJyb3IuCisgICAgLy8g
KDMpIFdlIG5lZWQgdG8gYmUgbG9ja2VkIChwZXIgY29udGV4dCB3b3VsZCBiZSBmaW5lKSBhZ2Fp
bnN0IGNvbmZsaWN0aW5nIHVzZ2FlIG9mIHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbidzIE5TSW52
b2NhdGlvbi4KKyAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250
ZXh0KSk7CisKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSAoT2JqQ0NhbGxi
YWNrRnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbik7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gY2FsbGJhY2stPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAg
ICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDU4OTQKKyAgICAgICAgLy8gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRleHQg
YmUgcmV0YWluZWQsIGl0IHdvdWxkIHByb2JhYmx5IGJlIG1vcmUKKyAgICAgICAgLy8gYXBwcm9w
cmlhdGUgdG8gdXNlIGEgbmV3IEpTQ29udGV4dCBpbnN0YW5jZSAoY3JlYXRpbmcgb25lIGlmIG5l
Y2Vzc2FyeSkuCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJv
cih0b0pTKGNhbGxlckNvbnRleHQpLCAiT2JqZWN0aXZlLUMgY2FsbGJhY2sgZnVuY3Rpb24gY29u
dGV4dCByZWxlYXNlZCIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNh
bGxlckNvbnRleHQpOworICAgIH0KKworICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7Cisg
ICAgSlNWYWx1ZVJlZiByZXN1bHQ7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtj
b250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTp0aGlz
T2JqZWN0IGFyZ3VtZW50Q291bnQ6YXJndW1lbnRDb3VudCBhcmd1bWVudHM6YXJndW1lbnRzXTsK
KyAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2stPmNhbGwoY29udGV4dCwgdGhpc09iamVjdCwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworICAgICAgICBpZiAoY29udGV4dC5l
eGNlcHRpb24pCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdmFsdWVJbnRlcm5hbFZhbHVlKGNv
bnRleHQuZXhjZXB0aW9uKTsKKyAgICAgICAgW2NvbnRleHQgZW5kQ2FsbGJhY2tXaXRoRGF0YTom
Y2FsbGJhY2tEYXRhXTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpT
Q2xhc3NSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFzcygpCit7CisgICAgc3RhdGljIFNwaW5M
b2NrIGluaXRMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja0hvbGRlcigmaW5pdExvY2spOworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYg
PSAwOworCisgICAgaWYgKCFjbGFzc1JlZikgeworICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBk
ZWZpbml0aW9uOworICAgICAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7
CisgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkZ1bmN0aW9uIjsKKyAgICAgICAgZGVm
aW5pdGlvbi5maW5hbGl6ZSA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemU7CisgICAgICAg
IGRlZmluaXRpb24uY2FsbEFzRnVuY3Rpb24gPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1
bmN0aW9uOworICAgICAgICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwor
ICAgIH0KKworICAgIHJldHVybiBjbGFzc1JlZjsKK30KKworSlNWYWx1ZVJlZiBPYmpDQ2FsbGJh
Y2tGdW5jdGlvbjo6Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICBzaXplX3QgZmlyc3RBcmd1bWVu
dDsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhv
ZDogeworICAgICAgICBpZCB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgdGhpc09i
amVjdCk7CisgICAgICAgIGlmICghdGFyZ2V0IHx8ICFbdGFyZ2V0IGlzS2luZE9mQ2xhc3M6bV9p
bnN0YW5jZUNsYXNzXSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3Jl
YXRlVHlwZUVycm9yKHRvSlMoY3R4KSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9iamVj
dGl2ZS1DIGluc3RhbmNlIG1ldGhvZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOworICAgICAgICB9CisgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFy
Z2V0OnRhcmdldF07CisgICAgfQorICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKKyAgICAg
ICAgZmlyc3RBcmd1bWVudCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbGJhY2tC
bG9jazoKKyAgICAgICAgZmlyc3RBcmd1bWVudCA9IDE7CisgICAgfQorCisgICAgc2l6ZV90IGFy
Z3VtZW50TnVtYmVyID0gMDsKKyAgICBmb3IgKENhbGxiYWNrQXJndW1lbnQqIGFyZ3VtZW50ID0g
bV9hcmd1bWVudHMuZ2V0KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQu
Z2V0KCkpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IGFyZ3VtZW50TnVtYmVyIDwgYXJn
dW1lbnRDb3VudCA/IGFyZ3VtZW50c1thcmd1bWVudE51bWJlcl0gOiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOworICAgICAgICBhcmd1bWVudC0+c2V0KG1faW52b2NhdGlvbi5nZXQoKSwgYXJn
dW1lbnROdW1iZXIgKyBmaXJzdEFyZ3VtZW50LCBjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKKyAgICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICB9CisKKyAgICBb
bV9pbnZvY2F0aW9uIGludm9rZV07CisKKyAgICByZXR1cm4gbV9yZXN1bHQtPmdldChtX2ludm9j
YXRpb24uZ2V0KCksIGNvbnRleHQsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBib29sIGJsb2Nr
U2lnbmF0dXJlQ29udGFpbnNDbGFzcygpCit7CisgICAgZW51bSBDaGVja1Jlc3VsdCB7CisgICAg
ICAgIENoZWNrUmVzdWx0RmFsc2UsCisgICAgICAgIENoZWNrUmVzdWx0VHJ1ZSwKKyAgICAgICAg
Q2hlY2tSZXN1bHRVbmtub3duCisgICAgfTsKKyAgICBzdGF0aWMgZW51bSBDaGVja1Jlc3VsdCBj
aGVjayA9IENoZWNrUmVzdWx0VW5rbm93bjsKKyAgICBpZiAoY2hlY2sgPT0gQ2hlY2tSZXN1bHRV
bmtub3duKSB7CisgICAgICAgIGlkIGJsb2NrID0gXihOU1N0cmluZyAqc3RyaW5nKXsgcmV0dXJu
IHN0cmluZzsgfTsKKyAgICAgICAgY2hlY2sgPSBfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykg
JiYgc3Ryc3RyKF9CbG9ja19zaWduYXR1cmUoYmxvY2spLCAiTlNTdHJpbmciKSA/IENoZWNrUmVz
dWx0VHJ1ZSA6IENoZWNrUmVzdWx0RmFsc2U7CisgICAgfQorICAgIHJldHVybiAoYm9vbCljaGVj
azsKK30KKworaW5saW5lIGJvb2wgc2tpcE51bWJlcihjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7
CisgICAgaWYgKCFpc2RpZ2l0KCpwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB3aGlsZShpc2RpZ2l0KCorK3Bvc2l0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oSlNDb250
ZXh0KiBjb250ZXh0LCBOU0ludm9jYXRpb24qIGludm9jYXRpb24sIENhbGxiYWNrVHlwZSB0eXBl
LCBDbGFzcyBpbnN0YW5jZUNsYXNzLCBjb25zdCBjaGFyKiBzaWduYXR1cmVXaXRoT2JqY0NsYXNz
ZXMpCit7CisgICAgY29uc3QgY2hhciogcG9zaXRpb24gPSBzaWduYXR1cmVXaXRoT2JqY0NsYXNz
ZXM7CisKKyAgICBPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0UHRyKHBhcnNl
T2JqQ1R5cGU8UmVzdWx0VHlwZURlbGVnYXRlPihwb3NpdGlvbikpOworICAgIGlmICghcmVzdWx0
IHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDoKKyAgICBjYXNl
IENhbGxiYWNrQ2xhc3NNZXRob2Q6CisgICAgICAgIGlmICgnQCcgIT0gKihwb3NpdGlvbisrKSB8
fCAhc2tpcE51bWJlcihwb3NpdGlvbikgfHwgJzonICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBO
dW1iZXIocG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDYWxsYmFja0Jsb2NrOgorICAgICAgICBpZiAoKCdAJyAhPSAqKHBvc2l0aW9u
KyspKSB8fCAoJz8nICE9ICoocG9zaXRpb24rKykpIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSB8
fCAoIWJsb2NrU2lnbmF0dXJlQ29udGFpbnNDbGFzcygpICYmIHN0cmNocihwb3NpdGlvbiwgJ0An
KSkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzID0gMDsKKyAgICBPd25QdHI8Q2Fs
bGJhY2tBcmd1bWVudD4qIG5leHRBcmd1bWVudCA9ICZhcmd1bWVudHM7CisgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudCA9IDA7CisgICAgd2hpbGUgKCpwb3NpdGlvbikgeworICAgICAgICBPd25Q
dHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPEFy
Z3VtZW50VHlwZURlbGVnYXRlPihwb3NpdGlvbikpOworICAgICAgICBpZiAoIWFyZ3VtZW50IHx8
ICFza2lwTnVtYmVyKHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAg
ICAgKm5leHRBcmd1bWVudCA9IGFyZ3VtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV4dEFyZ3Vt
ZW50ID0gJigqbmV4dEFyZ3VtZW50KS0+bV9uZXh0OworICAgICAgICArK2FyZ3VtZW50Q291bnQ7
CisgICAgfQorCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDU4OTIKKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIHJlZ3VsYXIgaG9z
dCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBjYWxsYWJsZSBDIEFQSSBvYmplY3QuCisgICAgLy8g
UGF0Y2ggaW4gdGhlIHJpZ2h0IGxlbmd0aCAmIFtQcm90b3R5cGVdIHZhbHVlcyBmb3Igbm93LCBi
dXQgc2hvdWxkIGZpeCB0aGlzLgorICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyBj
dXJyZW50bHkgZmFpbHMsIHNpbmNlIHRoaXMgaXMgbm90IHlldCBhIHN1YmNsYXNzIG9mIGZ1bmN0
b24sIGJ1dCBjYWxsICYgYXBwbHkgZG8gd29yay4KKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9i
amVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKCksIG5ldyBPYmpDQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0
LCBpbnZvY2F0aW9uLCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1bWVudHMucmVsZWFzZSgpLCBy
ZXN1bHQucmVsZWFzZSgpKSk7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdp
dGhWYWx1ZTpmdW5jdGlvbk9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgdmFsdWVbQCJs
ZW5ndGgiXSA9IEAoYXJndW1lbnRDb3VudCk7CisgICAgdmFsdWVbQCJfX3Byb3RvX18iXSA9IGNv
bnRleHRbQCJGdW5jdGlvbiJdW0AicHJvdG90eXBlIl07CisgICAgdmFsdWVbQCJ0b1N0cmluZyJd
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKXsgcmV0dXJuICciCisgICAg
ICAgICJmdW5jdGlvbiA8T2JqZWN0aXZlLUM+KCkgeyIgIlxcbiIKKyAgICAgICAgIiAgICBbbmF0
aXZlIGNvZGVdIiAgICAgICAgICAiXFxuIgorICAgICAgICAifSIgICAgICAgICAgICAgICAgICAg
ICAgICAgICJcXG4iCisgICAgIid9KSJdOworICAgIHJldHVybiBmdW5jdGlvbk9iamVjdDsKK30K
KworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlNDb250ZXh0KiBj
b250ZXh0LCBDbGFzcyBjbHMsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0
aG9kLCBTRUwgc2VsLCBjb25zdCBjaGFyKiB0eXBlcykKK3sKKyAgICBOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltO
U01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOnR5cGVzXV07CisgICAgW2lu
dm9jYXRpb24gc2V0U2VsZWN0b3I6c2VsXTsKKyAgICBpZiAoIWlzSW5zdGFuY2VNZXRob2QpCisg
ICAgICAgIFtpbnZvY2F0aW9uIHNldFRhcmdldDpjbHNdOworICAgIHJldHVybiBvYmpDQ2FsbGJh
Y2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlvbiwgaXNJbnN0YW5jZU1l
dGhvZCA/IENhbGxiYWNrSW5zdGFuY2VNZXRob2QgOiBDYWxsYmFja0NsYXNzTWV0aG9kLCBpc0lu
c3RhbmNlTWV0aG9kID8gY2xzIDogbmlsLCBfcHJvdG9jb2xfZ2V0TWV0aG9kVHlwZUVuY29kaW5n
KHByb3RvY29sLCBzZWwsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCkpOworfQorCitKU09iamVjdFJl
ZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCogY29udGV4dCwgaWQgdGFy
Z2V0KQoreworICAgIGlmICghX0Jsb2NrX2hhc19zaWduYXR1cmUodGFyZ2V0KSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgY29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZSh0
YXJnZXQpOworICAgIE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52
b2NhdGlvbldpdGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdp
dGhPYmpDVHlwZXM6c2lnbmF0dXJlXV07CisgICAgW2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdl
dF07CisgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihjb250ZXh0
LCBpbnZvY2F0aW9uLCBDYWxsYmFja0Jsb2NrLCBuaWwsIHNpZ25hdHVyZSk7Cit9CisKK2lkIHRy
eVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmpl
Y3QpCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIG9iamVjdCwg
b2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gKChPYmpDQ2FsbGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkp
LT53cmFwcGVkQmxvY2soKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9PYmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9PYmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKworaW5saW5lIGJvb2wgcHJvdG9jb2xJbXBsZW1l
bnRzUHJvdG9jb2woUHJvdG9jb2wqIGNhbmRpZGF0ZSwgUHJvdG9jb2wqIHRhcmdldCkKK3sKKyAg
ICB1bnNpZ25lZCBwcm90b2NvbFByb3RvY29sc0NvdW50OworICAgIFByb3RvY29sKiogcHJvdG9j
b2xQcm90b2NvbHMgPSBwcm90b2NvbF9jb3B5UHJvdG9jb2xMaXN0KGNhbmRpZGF0ZSwgJnByb3Rv
Y29sUHJvdG9jb2xzQ291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2Nv
bFByb3RvY29sc0NvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHByb3RvY29sX2lzRXF1YWwocHJv
dG9jb2xQcm90b2NvbHNbaV0sIHRhcmdldCkpIHsKKyAgICAgICAgICAgIGZyZWUocHJvdG9jb2xQ
cm90b2NvbHMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnJlZShwcm90b2NvbFByb3RvY29scyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgdm9pZCBmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChQcm90b2NvbCogYmFz
ZSwgUHJvdG9jb2wqIHByb3RvY29sLCB2b2lkICheY2FsbGJhY2spKFByb3RvY29sKikpCit7Cisg
ICAgQVNTRVJUKGJhc2UpOworICAgIEFTU0VSVChwcm90b2NvbCk7CisKKyAgICB1bnNpZ25lZCBw
cm90b2NvbHNDb3VudDsKKyAgICBQcm90b2NvbCoqIHByb3RvY29scyA9IHByb3RvY29sX2NvcHlQ
cm90b2NvbExpc3QoYmFzZSwgJnByb3RvY29sc0NvdW50KTsKKyAgICBpZiAocHJvdG9jb2xzQ291
bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0NvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChwcm90b2Nv
bHNbaV0sIHByb3RvY29sKSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm90b2NvbHNbaV0p
OworICAgICAgICAgICAgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wocHJvdG9j
b2xzW2ldLCBwcm90b2NvbCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIGZyZWUocHJv
dG9jb2xzKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxlbWVu
dGluZ1Byb3RvY29sKENsYXNzIGJhc2UsIFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxi
YWNrKShQcm90b2NvbCopKQoreworICAgIEFTU0VSVChiYXNlKTsKKyAgICBBU1NFUlQocHJvdG9j
b2wpOworCisgICAgdW5zaWduZWQgcHJvdG9jb2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90
b2NvbHMgPSBjbGFzc19jb3B5UHJvdG9jb2xMaXN0KGJhc2UsICZwcm90b2NvbHNDb3VudCk7Cisg
ICAgaWYgKHByb3RvY29sc0NvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm90b2NvbHNDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAocHJvdG9jb2xJbXBsZW1l
bnRzUHJvdG9jb2wocHJvdG9jb2xzW2ldLCBwcm90b2NvbCkpCisgICAgICAgICAgICAgICAgY2Fs
bGJhY2socHJvdG9jb2xzW2ldKTsKKyAgICAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVu
dGluZ1Byb3RvY29sKHByb3RvY29sc1tpXSwgcHJvdG9jb2wsIGNhbGxiYWNrKTsKKyAgICAgICAg
fQorICAgICAgICBmcmVlKHByb3RvY29scyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JF
YWNoTWV0aG9kSW5DbGFzcyhDbGFzcyBjbHMsIHZvaWQgKF5jYWxsYmFjaykoTWV0aG9kIG1ldGhv
ZCkpCit7CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgTWV0aG9kKiBtZXRob2RzID0gY2xhc3Nf
Y29weU1ldGhvZExpc3QoY2xzLCAmY291bnQpOworICAgIGlmIChjb3VudCkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGNhbGxiYWNr
KG1ldGhvZHNbaV0pOworICAgICAgICBmcmVlKG1ldGhvZHMpOworICAgIH0KK30KKworaW5saW5l
IHZvaWQgZm9yRWFjaE1ldGhvZEluUHJvdG9jb2woUHJvdG9jb2wqIHByb3RvY29sLCBCT09MIGlz
UmVxdWlyZWRNZXRob2QsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgdm9pZCAoXmNhbGxiYWNrKShT
RUwsIGNvbnN0IGNoYXIqKSkKK3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBzdHJ1Y3Qgb2Jq
Y19tZXRob2RfZGVzY3JpcHRpb24qIG1ldGhvZHMgPSBwcm90b2NvbF9jb3B5TWV0aG9kRGVzY3Jp
cHRpb25MaXN0KHByb3RvY29sLCBpc1JlcXVpcmVkTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9kLCAm
Y291bnQpOworICAgIGlmIChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhvZHNbaV0ubmFtZSwgbWV0
aG9kc1tpXS50eXBlcyk7CisgICAgICAgIGZyZWUobWV0aG9kcyk7CisgICAgfQorfQorCitpbmxp
bmUgdm9pZCBmb3JFYWNoUHJvcGVydHlJblByb3RvY29sKFByb3RvY29sKiBwcm90b2NvbCwgdm9p
ZCAoXmNhbGxiYWNrKShvYmpjX3Byb3BlcnR5X3QpKQoreworICAgIHVuc2lnbmVkIGNvdW50Owor
ICAgIG9iamNfcHJvcGVydHlfdCogcHJvcGVydGllcyA9IHByb3RvY29sX2NvcHlQcm9wZXJ0eUxp
c3QocHJvdG9jb2wsICZjb3VudCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2socHJvcGVy
dGllc1tpXSk7CisgICAgICAgIGZyZWUocHJvcGVydGllcyk7CisgICAgfQorfQorCit0ZW1wbGF0
ZTxjaGFyIG9wZW4sIGNoYXIgY2xvc2U+Cit2b2lkIHNraXBQYWlyKGNvbnN0IGNoYXIqJiBwb3Np
dGlvbikKK3sKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gMTsKKyAgICBkbyB7CisgICAgICAgIGNo
YXIgYyA9ICoocG9zaXRpb24rKyk7CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIEB0aHJv
dyBbTlNFeGNlcHRpb24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lF
eGNlcHRpb24gcmVhc29uOkAiTWFsZm9ybWVkIHR5cGUgZW5jb2RpbmciIHVzZXJJbmZvOm5pbF07
CisgICAgICAgIGlmIChjID09IG9wZW4pCisgICAgICAgICAgICArK2NvdW50OworICAgICAgICBl
bHNlIGlmIChjID09IGNsb3NlKQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICB9IHdoaWxlIChj
b3VudCk7Cit9CisKK2NsYXNzIFN0cmluZ1JhbmdlIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdSYW5n
ZShjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kKSA6IG1fcHRyKHN0cm5kdXAoYmVn
aW4sIGVuZCAtIGJlZ2luKSkgeyB9CisgICAgflN0cmluZ1JhbmdlKCkgeyBmcmVlKG1fcHRyKTsg
fQorICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBjb25z
dCBjaGFyKiBnZXQoKSB7IHJldHVybiBtX3B0cjsgfQorCitwcml2YXRlOgorICAgIGNoYXIqIG1f
cHRyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRGVsZWdhdGVUeXBlPgordHlwZW5hbWUgRGVs
ZWdhdGVUeXBlOjpSZXN1bHRUeXBlIHBhcnNlT2JqQ1R5cGUoY29uc3QgY2hhciomIHBvc2l0aW9u
KQoreworICAgIEFTU0VSVCgqcG9zaXRpb24pOworCisgICAgc3dpdGNoICgqKHBvc2l0aW9uKysp
KSB7CisgICAgY2FzZSAnYyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRl
IHR5cGVJbnRlZ2VyPGNoYXI+KCk7CisgICAgY2FzZSAnaSc6CisgICAgICAgIHJldHVybiBEZWxl
Z2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGludD4oKTsKKyAgICBjYXNlICdzJzoKKyAg
ICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8c2hvcnQ+KCk7
CisgICAgY2FzZSAnbCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5
cGVJbnRlZ2VyPGxvbmc+KCk7CisgICAgY2FzZSAncSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0
ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigpOworICAgIGNh
c2UgJ0MnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdl
cjx1bnNpZ25lZCBjaGFyPigpOworICAgIGNhc2UgJ0knOgorICAgICAgICByZXR1cm4gRGVsZWdh
dGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZD4oKTsKKyAgICBjYXNlICdTJzoK
KyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8dW5zaWdu
ZWQgc2hvcnQ+KCk7CisgICAgY2FzZSAnTCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6
OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPHVuc2lnbmVkIGxvbmc+KCk7CisgICAgY2FzZSAnUSc6Cisg
ICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8dW5zaWduZWQg
bG9uZyBsb25nPigpOworICAgIGNhc2UgJ2YnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBl
Ojp0ZW1wbGF0ZSB0eXBlRG91YmxlPGZsb2F0PigpOworICAgIGNhc2UgJ2QnOgorICAgICAgICBy
ZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlRG91YmxlPGRvdWJsZT4oKTsKKyAgICBj
YXNlICdCJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJvb2woKTsKKyAgICBj
YXNlICd2JzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZVZvaWQoKTsKKyAgICAK
KyAgICBjYXNlICdAJzogeyAvLyBBbiBvYmplY3QgKHdoZXRoZXIgc3RhdGljYWxseSB0eXBlZCBv
ciB0eXBlZCBpZCkKKyAgICAgICAgaWYgKHBvc2l0aW9uWzBdID09ICc/JyAmJiBwb3NpdGlvblsx
XSA9PSAnPCcpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBiZWdpbiA9IHBvc2l0aW9uOworICAgICAgICAgICAgc2tpcFBhaXI8JzwnLCc+Jz4o
cG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJsb2NrKGJl
Z2luLCBwb3NpdGlvbiAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpwb3NpdGlvbiA9
PSAnIicpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gKytwb3NpdGlvbjsKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gaW5kZXgocG9zaXRpb24sICciJyk7CisgICAgICAgICAgICBy
ZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlT2ZDbGFzcyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICB9CisK
KyAgICBjYXNlICd7JzogeyAvLyB7bmFtZT10eXBlLi4ufSBBIHN0cnVjdHVyZQorICAgICAgICBj
b25zdCBjaGFyKiBiZWdpbiA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgc2tpcFBhaXI8J3snLCd9
Jz4ocG9zaXRpb24pOworICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlU3RydWN0KGJl
Z2luLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgQyBzdHJpbmdz
LCBhcnJheXMsIHBvaW50ZXJzLCB1bmlvbnMsIGJpdGZpZWxkcywgZnVuY3Rpb24gcG9pbnRlcnMu
CisgICAgY2FzZSAnKic6IC8vIEEgY2hhcmFjdGVyIHN0cmluZyAoY2hhciAqKQorICAgIGNhc2Ug
J1snOiAvLyBbYXJyYXkgdHlwZV0gQW4gYXJyYXkKKyAgICBjYXNlICcoJzogLy8gKG5hbWU9dHlw
ZS4uLikgQSB1bmlvbgorICAgIGNhc2UgJ2InOiAvLyBibnVtIEEgYml0IGZpZWxkIG9mIG51bSBi
aXRzCisgICAgY2FzZSAnXic6IC8vIF50eXBlIEEgcG9pbnRlciB0byB0eXBlCisgICAgY2FzZSAn
Pyc6IC8vIEFuIHVua25vd24gdHlwZSAoYW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNvZGUgaXMg
dXNlZCBmb3IgZnVuY3Rpb24gcG9pbnRlcnMpCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgT2JqZWN0
aXZlLUMgQ2xhc3MsIFNFTAorICAgIGNhc2UgJyMnOiAvLyBBIGNsYXNzIG9iamVjdCAoQ2xhc3Mp
CisgICAgY2FzZSAnOic6IC8vIEEgbWV0aG9kIHNlbGVjdG9yIChTRUwpCisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9Cit9CisKK2V4dGVybiAiQyIgeworICAgIGNvbnN0
IGNoYXIgKl9wcm90b2NvbF9nZXRNZXRob2RUeXBlRW5jb2RpbmcoUHJvdG9jb2wgKiwgU0VMLCBC
T09MIGlzUmVxdWlyZWRNZXRob2QsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCk7CisgICAgaWQgb2Jq
Y19pbml0V2VhayhpZCAqLCBpZCk7CisgICAgdm9pZCBvYmpjX2Rlc3Ryb3lXZWFrKGlkICopOwor
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlz
aW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5j
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMiBAQCBzdGF0aWMgZG91YmxlIG5hbihjb25z
dCBjaGFyKikKIAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIHRlc3RPYmplY3Rp
dmVDQVBJKHZvaWQpOworI2VuZGlmCisKIHN0YXRpYyBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dDsKLXN0YXRpYyBpbnQgZmFpbGVkOworaW50IGZhaWxlZDsKIHN0YXRpYyB2b2lkIGFzc2VydEVx
dWFsc0FzQm9vbGVhbihKU1ZhbHVlUmVmIHZhbHVlLCBib29sIGV4cGVjdGVkVmFsdWUpCiB7CiAg
ICAgaWYgKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpICE9IGV4cGVjdGVkVmFsdWUp
IHsKQEAgLTEwNDAsNiArMTA0NCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdGVzdE9iamVjdGl2ZUNBUEkoKTsKKyNlbmRpZgorCiAgICAgY29uc3QgY2hhciAqc2NyaXB0
UGF0aCA9ICJ0ZXN0YXBpLmpzIjsKICAgICBpZiAoYXJnYyA+IDEpIHsKICAgICAgICAgc2NyaXB0
UGF0aCA9IGFyZ3ZbMV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkubQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5o
IgorCisvLyBGb3IgX0Jsb2NrX2hhc19zaWduYXR1cmUgJiBfQmxvY2tfc2lnbmF0dXJlCisjaWZu
ZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIF9fY3BsdXNwbHVzIDAKKyNlbmRpZgorI2ltcG9ydCA8
L3Vzci9sb2NhbC9pbmNsdWRlL0Jsb2NrX3ByaXZhdGUuaD4KKworZXh0ZXJuIGludCBmYWlsZWQ7
Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKHZvaWQpOworCisjaWYgSlNfT0JKQ19BUElfRU5BQkxF
RAorCitAcHJvdG9jb2wgUGFyZW50T2JqZWN0IDxKU0V4cG9ydD4KK0BlbmQKKworQGludGVyZmFj
ZSBQYXJlbnRPYmplY3QgOiBOU09iamVjdDxQYXJlbnRPYmplY3Q+CisrIChOU1N0cmluZyAqKXBh
cmVudFRlc3Q7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBQYXJlbnRPYmplY3QKKysgKE5TU3Ry
aW5nICopcGFyZW50VGVzdAoreworICAgIHJldHVybiBbc2VsZiBkZXNjcmlwdGlvbl07Cit9CitA
ZW5kCisKK0Bwcm90b2NvbCBUZXN0T2JqZWN0IDxKU0V4cG9ydD4KK0Bwcm9wZXJ0eSBpbnQgdmFy
aWFibGU7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBpbnQgc2l4OworQHByb3BlcnR5IENHUG9pbnQg
cG9pbnQ7CisrIChOU1N0cmluZyAqKWNsYXNzVGVzdDsKKysgKE5TU3RyaW5nICopcGFyZW50VGVz
dDsKKy0gKE5TU3RyaW5nICopZ2V0U3RyaW5nOworSlNFeHBvcnRBcyh0ZXN0QXJndW1lbnRUeXBl
cywKKy0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6
KGRvdWJsZSlkIGJvb2xlYW46KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNO
dW1iZXIqKW4gYXJyYXk6KE5TQXJyYXkqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCisp
OworLSAodm9pZCljYWxsYmFjazoodm9pZCheKShpbnQpKWJsb2NrOworQGVuZAorCitAaW50ZXJm
YWNlIFRlc3RPYmplY3QgOiBQYXJlbnRPYmplY3QgPFRlc3RPYmplY3Q+CitAcHJvcGVydHkgaW50
IHNpeDsKKysgKGlkKXRlc3RPYmplY3Q7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0T2Jq
ZWN0CitAc3ludGhlc2l6ZSB2YXJpYWJsZTsKK0BzeW50aGVzaXplIHNpeDsKK0BzeW50aGVzaXpl
IHBvaW50OworKyAoaWQpdGVzdE9iamVjdAoreworICAgIHJldHVybiBbW1tUZXN0T2JqZWN0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9CisrIChOU1N0cmluZyAqKWNsYXNzVGVzdAorewor
ICAgIHJldHVybiBAImNsYXNzVGVzdCAtIG9rYXkiOworfQorLSAoTlNTdHJpbmcgKilnZXRTdHJp
bmcKK3sKKyAgICByZXR1cm4gQCI0MiI7Cit9CistIChOU1N0cmluZyAqKXRlc3RBcmd1bWVudFR5
cGVzV2l0aEludDooaW50KWkgZG91YmxlOihkb3VibGUpZCBib29sZWFuOihCT09MKWIgc3RyaW5n
OihOU1N0cmluZyopcyBudW1iZXI6KE5TTnVtYmVyKiluIGFycmF5OihOU0FycmF5KilhIGRpY3Rp
b25hcnk6KE5TRGljdGlvbmFyeSopbworeworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVkLCVnLCVkLCVALCVkLCVALCVAIiwgaSwgZCwgYj09WUVTP3RydWU6ZmFsc2Us
cyxbbiBpbnRWYWx1ZV0sYVsxXSxvW0AieCJdXTsKK30KKy0gKHZvaWQpY2FsbGJhY2s6KHZvaWQo
XikoaW50KSlibG9jaworeworICAgIGJsb2NrKDQyKTsKK30KK0BlbmQKKworYm9vbCB0ZXN0WFla
VGVzdGVkID0gZmFsc2U7CisKK0Bwcm90b2NvbCBUZXh0WFlaIDxKU0V4cG9ydD4KK0Bwcm9wZXJ0
eSBpbnQgeDsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIGludCB5OworLSAodm9pZCl0ZXN0OihOU1N0
cmluZyAqKW1lc3NhZ2U7CitAZW5kCisKK0BpbnRlcmZhY2UgVGV4dFhZWiA6IE5TT2JqZWN0IDxU
ZXh0WFlaPgorQHByb3BlcnR5IGludCB4OworQHByb3BlcnR5IGludCB5OworQHByb3BlcnR5IGlu
dCB6OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGV4dFhZWgorQHN5bnRoZXNpemUgeDsKK0Bz
eW50aGVzaXplIHk7CitAc3ludGhlc2l6ZSB6OworLSAodm9pZCl0ZXN0OihOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICB0ZXN0WFlaVGVzdGVkID0gW21lc3NhZ2UgaXNFcXVhbDpAInRlc3QiXSAm
JiB4ID09IDEzICYgeSA9PSA0ICYmIHogPT0gNTsKK30KK0BlbmQKKworc3RhdGljIHZvaWQgY2hl
Y2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3NlZCkKK3sKKyAgICBOU0xv
ZyhAIlRFU1Q6IFwiJUBcIjogJUAiLCBkZXNjcmlwdGlvbiwgcGFzc2VkID8gQCJQQVNTRUQiIDog
QCJGQUlMRUQiKTsKKyAgICBpZiAoIXBhc3NlZCkKKyAgICAgICAgZmFpbGVkID0gMTsKK30KKwor
c3RhdGljIGJvb2wgYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKCkKK3sKKyAgICBlbnVtIENo
ZWNrUmVzdWx0IHsKKyAgICAgICAgQ2hlY2tSZXN1bHRGYWxzZSwKKyAgICAgICAgQ2hlY2tSZXN1
bHRUcnVlLAorICAgICAgICBDaGVja1Jlc3VsdFVua25vd24KKyAgICB9OworICAgIHN0YXRpYyBl
bnVtIENoZWNrUmVzdWx0IGNoZWNrID0gQ2hlY2tSZXN1bHRVbmtub3duOworICAgIGlmIChjaGVj
ayA9PSBDaGVja1Jlc3VsdFVua25vd24pIHsKKyAgICAgICAgaWQgYmxvY2sgPSBeKE5TU3RyaW5n
ICpzdHJpbmcpeyByZXR1cm4gc3RyaW5nOyB9OworICAgICAgICBjaGVjayA9IF9CbG9ja19oYXNf
c2lnbmF0dXJlKGJsb2NrKSAmJiBzdHJzdHIoX0Jsb2NrX3NpZ25hdHVyZShibG9jayksICJOU1N0
cmluZyIpID8gQ2hlY2tSZXN1bHRUcnVlIDogQ2hlY2tSZXN1bHRGYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIChib29sKWNoZWNrOworfQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKK3sKKyAg
ICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJIik7CisKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiMiArIDIiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIyICsgMiIsIFty
ZXN1bHQgdG9JbnQzMl0gPT0gNCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJUd28gcGx1cyB0d28gaXMgJUAiLCBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
IjIgKyAyIl1dOworICAgICAgICBjaGVja1Jlc3VsdChAInN0cmluZ1dpdGhGb3JtYXQiLCBbcmVz
dWx0IGlzRXF1YWw6QCJUd28gcGx1cyB0d28gaXMgNCJdKTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJtZXNzYWdlIl0gPSBA
IkhlbGxvIjsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCJtZXNzYWdlICsgJywgV29ybGQhJyJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkhlbGxv
LCBXb3JsZCEiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIkhlbGxvLCBXb3JsZCEiXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIih7IHg6NDIgfSkiXTsK
KyAgICAgICAgaWQgb2JqID0gW3Jlc3VsdCB0b09iamVjdF07CisgICAgICAgIGNoZWNrUmVzdWx0
KEAiQ2hlY2sgZGljdGlvbmFyeSBsaXRlcmFsIiwgW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rp
b25hcnkgY2xhc3NdXSk7CisgICAgICAgIGlkIG51bSA9IChOU0RpY3Rpb25hcnkqKW9ialtAIngi
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJDaGVjayBudW1lcmljIGxpdGVyYWwiLCBbbnVtIGlz
S2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFz
ZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX19ibG9jayBpbnQgcmVzdWx0OworICAgICAg
ICBjb250ZXh0W0AiYmxvY2tDYWxsYmFjayJdID0gXihpbnQgdmFsdWUpeworICAgICAgICAgICAg
cmVzdWx0ID0gdmFsdWU7CisgICAgICAgIH07CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiYmxvY2tDYWxsYmFjayg0MikiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJibG9ja0Nh
bGxiYWNrIiwgcmVzdWx0ID09IDQyKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tTaWduYXR1cmVD
b250YWluc0NsYXNzKCkpIHsKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgICAgIF9fYmxvY2sgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0gPSBeKE5TU3RyaW5nICp2YWx1ZSl7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gW0AiNDIiIGlzRXF1YWxUb1N0cmluZzp2YWx1ZV0gPT0gWUVT
OworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
YmxvY2tDYWxsYmFjayg0MikiXTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAiYmxvY2tDYWxs
YmFjayhOU1N0cmluZyAqKSIsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgTlNMb2coQCJTa2lwcGluZyAnYmxvY2tDYWxsYmFjayhOU1N0cmluZyAqKScgdGVzdCBjYXNl
Iik7CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiIWNvbnRleHQuZXhjZXB0aW9uIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICAg
ICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElE
IEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJj
b250ZXh0LmV4Y2VwdGlvbiIsIGNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIF9fYmxvY2sgYm9vbCBjYXVnaHQg
PSBmYWxzZTsKKyAgICAgICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQg
KmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgKHZvaWQpY29udGV4
dDsKKyAgICAgICAgICAgICh2b2lkKWV4Y2VwdGlvbjsKKyAgICAgICAgICAgIGNhdWdodCA9IHRy
dWU7CisgICAgICAgIH07CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVe
JiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07Cisg
ICAgICAgIGNoZWNrUmVzdWx0KEAiSlNDb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIiLCBjYXVnaHQp
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
Y29udGV4dFtAImNhbGxiYWNrIl0gPSBeeworICAgICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgICAgICAgICBjb250ZXh0LmV4Y2Vw
dGlvbiA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJTb21ldGhpbmcg
d2VudCB3cm9uZy4iIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgfTsKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0OyB0cnkg
eyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhjZXB0aW9uJzsg
fSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkV4cGxpY2l0IHRocm93IGluIGNhbGxiYWNrIC0g
d2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJD
YXVnaHQgZXhjZXB0aW9uIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIkV4cGxpY2l0IHRocm93
IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFjb250ZXh0LmV4Y2Vw
dGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisgICAgICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAgICAgICAgICAgIFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBU
IFNZTlRBWCAhQCMkJV4mKigpIl07CisgICAgICAgIH07CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdDsgdHJ5IHsgY2FsbGJhY2so
KTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlvbic7IH0iXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAtIHdhcyBjYXVnaHQg
YnkgSmF2YVNjcmlwdCIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiQ2F1Z2h0IGV4Y2Vw
dGlvbiJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJvdyBpbiBjYWxsYmFj
ayAtIG5vdCB0aHJvd24gdG8gT2JqZWN0aXZlLUMiLCAhY29udGV4dC5leGNlcHRpb24pOworICAg
IH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6CisgICAgICAgICAgICBAImZ1bmN0aW9uIHN1bShhcnJheSkgeyBc
CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7IFwKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpIGluIGFycmF5KSBcCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcnJheVtp
XTsgXAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICAgICAgICAgIH0iXTsK
KyAgICAgICAgSlNWYWx1ZSAqYXJyYXkgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QFtAMTMs
IEAyLCBAN10gaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBKU1ZhbHVlICpzdW1GdW5jdGlv
biA9IGNvbnRleHRbQCJzdW0iXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW3N1bUZ1bmN0
aW9uIGNhbGxXaXRoQXJndW1lbnRzOkBbIGFycmF5IF1dOworICAgICAgICBjaGVja1Jlc3VsdChA
InN1bShbMTMsIDIsIDddKSIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gMjIpOworICAgIH0KKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1ZSAqbXVsQWRk
RnVuY3Rpb24gPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAiKGZ1bmN0
aW9uKGFycmF5LCBvYmplY3QpIHsgXAorICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsg
XAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0gKiBvYmplY3QueCArIG9iamVjdC55KTsgXAorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICAgICAgICAgIH0pIl07CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFttdWxBZGRGdW5jdGlvbiBjYWxsV2l0aEFyZ3VtZW50czpAWyBA
WyBAMiwgQDQsIEA4IF0sIEB7IEAieCI6QDAuNSwgQCJ5IjpANDIgfSBdXTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJtdWxBZGRGdW5jdGlvbiIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAi
NDMsNDQsNDYiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJ
bkNvbnRleHQ6Y29udGV4dF07CisKKyAgICAgICAgb2JqZWN0W0AicG9pbnQiXSA9IEB7IEAieCI6
QDEsIEAieSI6QDIgfTsKKyAgICAgICAgb2JqZWN0W0AicG9pbnQiXVtAIngiXSA9IEAzOworICAg
ICAgICBDR1BvaW50IHBvaW50ID0gW29iamVjdFtAInBvaW50Il0gdG9Qb2ludF07CisgICAgICAg
IGNoZWNrUmVzdWx0KEAidG9Qb2ludCIsIHBvaW50LnggPT0gMyAmJiBwb2ludC55ID09IDIpOwor
CisgICAgICAgIG9iamVjdFtAeyBAInRvU3RyaW5nIjpeeyByZXR1cm4gQCJmb28iOyB9IH1dID0g
QCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChAInRvU3RyaW5nIGluIG9iamVjdCBsaXRlcmFs
IHVzZWQgYXMgc3Vic2NyaXB0IiwgW1tvYmplY3RbQCJmb28iXSB0b1N0cmluZ10gaXNFcXVhbDpA
ImJhciJdKTsKKworICAgICAgICBvYmplY3RbW0AiZm9vYmFyIiBzdWJzdHJpbmdUb0luZGV4OjNd
XSA9IEAiYmFyIjsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJzdWJzdHJpbmcgdXNlZCBhcyBzdWJz
Y3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3RyaW5nXSBpc0VxdWFsOkAiYmFyIl0pOworICAg
IH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGV4dFhZ
WiAqdGVzdFhZWiA9IFtbVGV4dFhZWiBhbGxvY10gaW5pdF07CisgICAgICAgIGNvbnRleHRbQCJ0
ZXN0WFlaIl0gPSB0ZXN0WFlaOworICAgICAgICB0ZXN0WFlaLnggPSAzOworICAgICAgICB0ZXN0
WFlaLnkgPSA0OworICAgICAgICB0ZXN0WFlaLnogPSA1OworICAgICAgICBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAInRlc3RYWVoueCA9IDEzOyB0ZXN0WFlaLnkgPSAxNDsiXTsKKyAgICAgICAg
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnRlc3QoJ3Rlc3QnKSJdOworICAgICAg
ICBjaGVja1Jlc3VsdChAIlRleHRYWVogLSB0ZXN0WFlaVGVzdGVkIiwgdGVzdFhZWlRlc3RlZCk7
CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVz
dFhZWi54ICsgJywnICsgdGVzdFhZWi55ICsgJywnICsgdGVzdFhZWi56Il07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHJlc3VsdCIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFs
OkAiMTMsNCx1bmRlZmluZWQiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBbY29udGV4dFtAIk9iamVjdCJdW0AicHJvdG90eXBlIl0gZGVm
aW5lUHJvcGVydHk6QCJnZXR0ZXJQcm9wZXJ0eSIgZGVzY3JpcHRvcjpAeworICAgICAgICAgICAg
SlNQcm9wZXJ0eURlc2NyaXB0b3JHZXRLZXk6XnsKKyAgICAgICAgICAgICAgICByZXR1cm4gW0pT
Q29udGV4dCBjdXJyZW50VGhpc11bQCJ4Il07CisgICAgICAgICAgICB9CisgICAgICAgIH1dOwor
ICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsgQCJ4
IjpAMTAxIH0gaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBpbnQgcmVzdWx0ID0gW29iamVj
dCBbQCJnZXR0ZXJQcm9wZXJ0eSJdIHRvSW50MzJdOworICAgICAgICBjaGVja1Jlc3VsdChAImdl
dHRlclByb3BlcnR5IiwgcmVzdWx0ID09IDEwMSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AiY29uY2F0ZW5hdGUiXSA9IF57
CisgICAgICAgICAgICBOU0FycmF5ICphcmd1bWVudHMgPSBbSlNDb250ZXh0IGN1cnJlbnRBcmd1
bWVudHNdOworICAgICAgICAgICAgaWYgKCFbYXJndW1lbnRzIGNvdW50XSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQCIiOworICAgICAgICAgICAgTlNTdHJpbmcgKm1lc3NhZ2UgPSBbYXJndW1l
bnRzWzBdIGRlc2NyaXB0aW9uXTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9
IDE7IGluZGV4IDwgW2FyZ3VtZW50cyBjb3VudF07ICsraW5kZXgpCisgICAgICAgICAgICAgICAg
bWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUAiLCBtZXNzYWdlLCBh
cmd1bWVudHNbaW5kZXhdXTsKKyAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgICAgICB9
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImNv
bmNhdGVuYXRlKCdIZWxsbywnLCAnV29ybGQhJykiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJj
b25jYXRlbmF0ZSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiSGVsbG8sIFdvcmxkISJdKTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNv
bnRleHRbQCJmb28iXSA9IEBZRVM7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAidHlwZW9mIGZvbyJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkBZ
RVMgaXMgYm9vbGVhbiIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiYm9vbGVhbiJdKTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRl
c3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAg
Y29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJl
c3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKHRlc3RPYmplY3QpIl07Cisg
ICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3QpIiwgW1tyZXN1bHQgdG9TdHJp
bmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RdIl0pOworICAgIH0KKworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVj
dCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVj
dCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9iamVjdC5fX3Byb3RvX18pIl07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3QuX19wcm90b19fKSIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAiW29iamVjdCBUZXN0T2JqZWN0UHJvdG90eXBlXSJdKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJU
ZXN0T2JqZWN0Il0gPSBbVGVzdE9iamVjdCBjbGFzc107CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKFRlc3RPYmplY3QpIl07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKFRlc3RPYmplY3QpIiwgW1tyZXN1bHQgdG9TdHJpbmdd
IGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RDb25zdHJ1Y3Rvcl0iXSk7CisgICAgfQorCisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBKU1ZhbHVlKiB2YWx1
ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpbVGVzdE9iamVjdCBjbGFzc10gaW5Db250ZXh0
OmNvbnRleHRdOworICAgICAgICBjaGVja1Jlc3VsdChAIlt2YWx1ZSB0b09iamVjdF0gPT0gW1Rl
c3RPYmplY3QgY2xhc3NdIiwgW3ZhbHVlIHRvT2JqZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
Y29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJUZXN0T2JqZWN0LnBhcmVu
dFRlc3QoKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIlRlc3RPYmplY3QucGFyZW50VGVzdCgp
IiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJUZXN0T2JqZWN0Il0pOworICAgIH0KKworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVz
dE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVz
dE9iamVjdEEiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QiJd
ID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0QSA9PSB0ZXN0T2JqZWN0QiJdOworICAgICAgICBjaGVja1Jl
c3VsdChAInRlc3RPYmplY3RBID09IHRlc3RPYmplY3RCIiwgW3Jlc3VsdCB0b0Jvb2xdKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RP
YmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIHRlc3RPYmplY3QucG9p
bnQgPSAoQ0dQb2ludCl7Myw0fTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodGVzdE9iamVjdC5w
b2ludCk7IHRlc3RPYmplY3QucG9pbnQgPSB7eDoxMix5OjE0fTsgcmVzdWx0Il07CisgICAgICAg
IGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5wb2ludCAtIHJlc3VsdCIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAie1wieFwiOjMsXCJ5XCI6NH0iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0
KEAidGVzdE9iamVjdC5wb2ludCAtIHt4OjEyLHk6MTR9IiwgdGVzdE9iamVjdC5wb2ludC54ID09
IDEyICYmIHRlc3RPYmplY3QucG9pbnQueSA9PSAxNCk7CisgICAgfQorCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0g
W1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIHRlc3RPYmplY3Quc2l4ID0gNjsKKyAg
ICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRl
eHRbQCJtdWwiXSA9IF4oaW50IHgsIGludCB5KXsgcmV0dXJuIHggKiB5OyB9OworICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm11bCh0ZXN0T2JqZWN0
LnNpeCwgNykiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtdWwodGVzdE9iamVjdC5zaXgsIDcp
IiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RP
YmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0
T2JqZWN0OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdW0AidmFyaWFibGUiXSA9IEA0
OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIisrdGVzdE9iamVjdC52YXJpYWJs
ZSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIisrdGVzdE9iamVjdC52YXJpYWJsZSIsIHRlc3RP
YmplY3QudmFyaWFibGUgPT0gNSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AicG9pbnQiXSA9IEB7IEAieCI6QDYsIEAieSI6
QDcgfTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJwb2ludC54ICsgJywnICsgcG9pbnQueSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInBvaW50
LnggKyAnLCcgKyBwb2ludC55IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCI2LDciXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBj
b250ZXh0W0AicG9pbnQiXSA9IEB7IEAieCI6QDYsIEAieSI6QDcgfTsKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJwb2ludC54ICsgJywnICsgcG9p
bnQueSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInBvaW50LnggKyAnLCcgKyBwb2ludC55Iiwg
W1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCI2LDciXSk7CisgICAgfQorCisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0
ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0
Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZygpIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0
T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNv
bnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QudGVzdEFyZ3VtZW50VHlw
ZXMoMTAxLDAuNSx0cnVlLCdmb28nLDY2NixbZmFsc2UsJ2JhcicsZmFsc2VdLHt4OidiYXonfSki
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnRlc3RBcmd1bWVudFR5cGVzIiwg
W3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCIxMDEsMC41LDEsZm9vLDY2NixiYXIsYmF6Il0pOwor
ICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVz
dE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBj
b250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxs
KHRlc3RPYmplY3QpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5nZXRTdHJp
bmcuY2FsbCh0ZXN0T2JqZWN0KSIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOworICAgIH0KKwor
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tK
U0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCog
dGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0Ai
dGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2Jq
ZWN0LmdldFN0cmluZy5jYWxsKHt9KSBwcmUiLCAhY29udGV4dC5leGNlcHRpb24pOworICAgICAg
ICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30p
Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh7fSkg
cG9zdCIsIGNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9i
amVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RP
YmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAidmFyIHJlc3VsdCA9IDA7IHRlc3RPYmplY3QuY2FsbGJhY2soZnVuY3Rpb24oeCl7IHJlc3Vs
dCA9IHg7IH0pOyByZXN1bHQiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmNh
bGxiYWNrIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dDEgPSBbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdF07CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dDIgPSBbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpjb250ZXh0MS52aXJ0dWFsTWFjaGluZV07CisgICAg
ICAgIEpTVmFsdWUgKnZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoRG91YmxlOjQyIGluQ29udGV4
dDpjb250ZXh0Ml07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWUuY29udGV4dCA9PSBjb250
ZXh0MiIsIHZhbHVlLmNvbnRleHQgPT0gY29udGV4dDIpOworICAgICAgICBjb250ZXh0MVtAInBh
c3NWYWx1ZUJldHdlZW5Db250ZXh0cyJdID0gdmFsdWU7CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0MSBldmFsdWF0ZVNjcmlwdDpAInBhc3NWYWx1ZUJldHdlZW5Db250ZXh0cyJd
OworICAgICAgICBjaGVja1Jlc3VsdChAInJlc3VsdC5jb250ZXh0ID09IGNvbnRleHQxIiwgcmVz
dWx0LmNvbnRleHQgPT0gY29udGV4dDEpOworICAgICAgICBjaGVja1Jlc3VsdChAIlt2YWx1ZSBp
c0VxdWFsVG9PYmplY3Q6cmVzdWx0XSIsIFt2YWx1ZSBpc0VxdWFsVG9PYmplY3Q6cmVzdWx0XSk7
CisgICAgICAgIFtjb250ZXh0MSByZWxlYXNlXTsKKyAgICAgICAgW2NvbnRleHQyIHJlbGVhc2Vd
OworICAgIH0KK30KKworI2Vsc2UKKwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCit7Cit9CisK
KyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzODYw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNiArNTQwLDcgQEAKIAkJODZDQzg1
QTMwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENh
bGwuY3BwICovOyB9OwogCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlB
Y2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLzsgfTsK
IAkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAv
KiBKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJODZEMjIyMUExNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDIyMjE5MTY3RUY5NDQwMDI0Qzgw
NCAvKiB0ZXN0YXBpLm0gKi87IH07CiAJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1B
c3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZEM0IyQkYxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgKi87IH07CiAJ
CTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNCMkMwMTAxNTZCREUwMDI4NjVF
NyAvKiBBUk1Bc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVy
V2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhD
b25zdGFudFBvb2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNTQ4LDYgKzU0OSwxOCBAQAogCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyog
UmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkRCNjQ2NDBGOTVD
NkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2REI2NDYzMEY5NUM2RkMw
MEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovOyB9OwogCQk4
NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMg
LyogQ29kZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA2MTY3QkFC
ODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYw
NzE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNF
eHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4cG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8q
IEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYx
NjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDgxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29u
dGV4dC5tbSAqLzsgfTsKKwkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkUzQzYwOTE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCAqLzsgfTsKKwkJ
ODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBCMTY3QkFCODcwMDZENzYw
QSAvKiBKU1dyYXBwZXJNYXAubW0gKi87IH07CisJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAv
KiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsgfTsK
KwkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRDE2N0JBQjg3MDA2RDc2MEEg
LyogSlNWYWx1ZS5tbSAqLzsgfTsKKwkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFs
dWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oICovOyB9Owor
CQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjEwMTY3QkFCODcw
MDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tICovOyB9OworCQk4NkUzQzYxRDE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyog
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggKi87IH07CiAJCTg2RTg1NTM5MTExQjk5NjgwMDFB
RjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxk
ZXIuaCAqLzsgfTsKIAkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVC
RjJGOTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJODZF
QkYzMDAxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQkYyRkExNTYwRjAzNjAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNTY5LDYgKzU4MiwxMSBAQAogCQk4NkVD
OUREMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMzMTMyOERGODIwMDJCMkFE
NyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICovOyB9OwogCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLzsgfTsKIAkJODZF
Q0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAv
KiBERkdTY29yZUJvYXJkLmggKi87IH07CisJCTg2RjNFRUJCMTY4Q0RFOTMwMDc3QjkyQSAvKiBK
U0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZGM0VFQjcxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggKi87IH07
CisJCTg2RjNFRUJDMTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI4MTY4Q0NGNzUw
MDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5tbSAqLzsgfTsKKwkJODZGM0VFQkQxNjhDREU5MzAw
NzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCOTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9i
akNDYWxsYmFja0Z1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZGM0VFQkExNjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0
aW9uLm1tICovOyB9OworCQk4NkYzRUVCRjE2OENERTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVF
eHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RjNFRUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovOyB9OwogCQk4
NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RThGMTQyQkJCMkQwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovOyB9OwogCQk4NkZBOUU5MjE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0
aW9uLmggKi87IH07CiAJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0
aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkw
MjEzRTNCMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCAqLzsgfTsKQEAg
LTEzNzgsNiArMTM5Niw3IEBACiAJCTg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVENhbGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyog
SklUUHJvcGVydHlBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSklUUHJvcGVydHlBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2
RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgbmFtZSA9IHRlc3RhcGkubTsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLm07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNCMkJGMTAxNTZCREUwMDI4NjVFNyAvKiBB
Uk1Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVJN
QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQzAxMDE1
NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUk1Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZE
M0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzZW1ibGVyQnVmZmVyV2l0aENv
bnN0YW50UG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM4Niw2ICsxNDA1
LDE4IEBACiAJCTg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2hCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVMb2NhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwNjE2N0JBQjg3MDA2RDc2MEEgLyogQVBJ
SlNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElKU1ZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAv
KiBKU0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA4MTY3QkFCODcwMDZENzYw
QSAvKiBKU0NvbnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBKU0NvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA5MTY3
QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0NvbnRleHRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NkUzQzYwQTE2N0JBQjg3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFeHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODZFM0M2MEIxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTV3JhcHBlck1hcC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpT
V3JhcHBlck1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dyYXBwZXJN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MEQxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTVmFsdWUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBKU1ZhbHVlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwRTE2N0JB
Qjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTVmFsdWVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZpcnR1YWxNYWNoaW5lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjEwMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNWaXJ0
dWFsTWFjaGluZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTExNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5n
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0J1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQkYyRjkxNTYwRjAzNjAwOEU5
MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOYW1lQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkVCRjJGQTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQwNyw2ICsxNDM4LDExIEBACiAJCTg2RUM5REMzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTcGVjdWxhdGl2ZUpJVC5oOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGUu
aDsgcGF0aCA9IGRmZy9ERkdOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Njb3JlQm9hcmQuaDsgcGF0aCA9IGRmZy9ERkdTY29yZUJv
YXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RjNFRUI2MTY4NTVBNUIwMDc3
QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPYmpjUnVudGltZUV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCbG9ja0FkYXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZGM0VFQjgxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNCbG9ja0FkYXB0b3Iu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RjNFRUI5MTY4Q0NGNzUwMDc3Qjky
QSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDQ2FsbGJhY2tGdW5jdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZGNzVFRkIxNTFDMDYyRjAwN0M5
QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NkY3NUVGQzE1MUMwNjJGMDA3QzlCQTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY3NUVGRDE1MUMwNjJGMDA3QzlCQTMgLyog
UmVnRXhwTWF0Y2hlc0FycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlZ0V4cE1hdGNoZXNBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xODc4LDYgKzE5MTQsNyBAQAogCQkJCTE0NDAwNTE3MEE1MzFDQjUwMDA1RjA2MSAvKiBtaW5p
ZG9tICovLAogCQkJCTE0QkQ1QTJEMEEzRTkxRjYwMEJBRjU5QyAvKiB0ZXN0YXBpLmMgKi8sCiAJ
CQkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8sCisJCQkJODZEMjIy
MTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLywKIAkJCQk2NTExMjJFNTE0MDQ2OUJB
MDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHRlc3RzOwpA
QCAtMjA0NSw2ICsyMDgyLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMTQ4MkI3OEEwQTQzMDVBQjAwNTE3Q0ZDIC8qIEFQSUNhc3QuaCAqLywKKwkJCQk4NkUz
QzYwNjE2N0JBQjg3MDA2RDc2MEEgLyogQVBJSlNWYWx1ZS5oICovLAogCQkJCTg2NUY0MDg3MTBF
N0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRBMEQzMkMzOUEwMDQx
QkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5QTAwNDFCQ0ZGIC8q
IEphdmFTY3JpcHRDb3JlLmggKi8sCkBAIC0yMDUzLDYgKzIwOTEsOCBAQAogCQkJCTE0MjEzNTlB
MEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4MEE0NjBCQkIw
MDgwRUVFQSAvKiBKU0Jhc2UuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oICovLAorCQkJCTg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Js
b2NrQWRhcHRvci5oICovLAorCQkJCTg2RjNFRUI4MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2Nr
QWRhcHRvci5tbSAqLywKIAkJCQkxNDQwRjhBRDBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQkxNDQwRjhBQzBBNTA4RDIwMDAwNUYwNjEgLyogSlND
YWxsYmFja0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJMTQ0MEY4OTAwQTUwOEIxMDAwMDVGMDYxIC8q
IEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgKi8sCkBAIC0yMDYyLDkgKzIxMDIsMTMgQEAKIAkJCQlB
OEU4OTQzMTBDRDA2MDI0MDAzNjcxNzkgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICov
LAogCQkJCTE0NDBGQ0UyMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCAqLywKIAkJ
CQkxNDQwRkNFMTBBNTFFNDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5oICovLAorCQkJCTg2RTND
NjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAqLywKKwkJCQk4NkUzQzYwODE2N0JB
Qjg3MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tICovLAorCQkJCTg2RTNDNjA5MTY3QkFCODcwMDZE
NzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovLAogCQkJCTE0QkQ1QTI5MEEzRTkxRjYwMEJB
RjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwICovLAogCQkJCTE0QkQ1QTJBMEEzRTkxRjYwMEJBRjU5
QyAvKiBKU0NvbnRleHRSZWYuaCAqLywKIAkJCQkxNDhDRDFENzEwOENGOTAyMDA4MTYzQzYgLyog
SlNDb250ZXh0UmVmUHJpdmF0ZS5oICovLAorCQkJCTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAv
KiBKU0V4cG9ydC5oICovLAogCQkJCTE0ODJCN0UyMEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVj
dFJlZi5jcHAgKi8sCiAJCQkJMTQ4MkI3RTEwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVm
LmggKi8sCiAJCQkJQTc5RURCMDgxMTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0
ZS5oICovLApAQCAtMjA3NywxMSArMjEyMSwyMSBAQAogCQkJCTE0ODJCNzRCMEE0MzAzMjgwMDUx
N0NGQyAvKiBKU1N0cmluZ1JlZi5oICovLAogCQkJCTE0NkFBQjM3MEI2NkE5NDQwMEU1NUYxNiAv
KiBKU1N0cmluZ1JlZkNGLmNwcCAqLywKIAkJCQkxNDZBQUIyQTBCNjZBODQ5MDBFNTVGMTYgLyog
SlNTdHJpbmdSZWZDRi5oICovLAorCQkJCTg2RTNDNjBEMTY3QkFCODcwMDZENzYwQSAvKiBKU1Zh
bHVlLm1tICovLAorCQkJCTg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJu
YWwuaCAqLywKIAkJCQkxNEJENUEyQjBBM0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAg
Ki8sCiAJCQkJMTQ4MkI2RUEwQTQzMDBCMzAwNTE3Q0ZDIC8qIEpTVmFsdWVSZWYuaCAqLywKKwkJ
CQk4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oICovLAorCQkJ
CTg2RTNDNjEwMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tICovLAorCQkJ
CTg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAq
LywKIAkJCQlBNzQ4MkUzNzExNkE2OTdCMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50
ZXJuYWwuaCAqLywKIAkJCQlBNzQ4MkI3QTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0
TWFwUmVmUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQTc0ODJCNzkxMTY2Q0RFQTAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCAqLywKKwkJCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLm1tICovLAorCQkJCTg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAv
KiBKU1dyYXBwZXJNYXAuaCAqLywKKwkJCQk4NkYzRUVCOTE2OENDRjc1MDA3N0I5MkEgLyogT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24uaCAqLywKKwkJCQk4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyog
T2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi8sCisJCQkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJB
IC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8sCiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYx
IC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLywKIAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEg
LyogT3BhcXVlSlNTdHJpbmcuaCAqLywKIAkJCQk1REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyog
V2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCkBAIC0zMjA1LDYgKzMyNTksMTcgQEAKIAkJCQkwRjA1
QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyog
QVBJSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBB
IC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3
NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxNTE2N0JBQkQ3MDA2
RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTcx
NjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkYzRUVCQjE2OENERTkzMDA3N0I5
MkEgLyogSlNCbG9ja0FkYXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RjNFRUJEMTY4Q0RF
OTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODZGM0VFQkYxNjhDREU5MzAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM1MjgsNiArMzU5Myw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMTQ0MEY2MTAwQTRGODU2NzAwMDVGMDYxIC8qIHRlc3Rh
cGkuYyBpbiBTb3VyY2VzICovLAorCQkJCTg2RDIyMjFBMTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0
YXBpLm0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM4MjUsNiArMzg5MSwxMiBAQAogCQkJCUE3QzBDNEFE
MTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjVFRjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0Nv
bnRleHQubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyog
SlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RjNFRUJD
MTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDcg
QEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgbV90aW1l
b3V0Q291bnQoNTEyKQogI2VuZGlmCiAgICAgLCBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
c3QoMCkKKyAgICAsIG1fYXBpRGF0YSgwKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBt
X2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1Myw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUo
KTsKIAorICAgICAgICB2b2lkICptX2FwaURhdGE7CisKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIEpTR2xvYmFsT2JqZWN0
OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbEQKICAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpm
b3JjZVdlYWtSYW5kb21TZWVkKCkgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCgpIDog
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQogICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisg
ICAgLCBtX2FwaURhdGEoMCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsNiArMTk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaGFzRGVidWdn
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAgICAgICAgIGJvb2wgaGFzUHJvZmls
ZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1By
b2ZpbGluZyh0aGlzKTsgfQogCisgICAgICAgIHZvaWQqIG1fYXBpRGF0YTsKKwogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3Qo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUq
ID0gMCk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTEyLTMxICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBPYmplY3RpdmUtQyBB
UEkgZm9yIEphdmFTY3JpcHRDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDU4ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmNwcDoKKyAgICAgICAgKFdURjo6V1RG
VGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSk6CisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEu
aDoKKyAgICAgICAgKFdURlRocmVhZERhdGEpOgorICAgICAgICAgICAgLSBBZGRlZCBtX2FwaURh
dGEgLSBwcm92aWRlIGNvbnZlbmllbnQgc3RvcmFnZSBmb3IgdXNlIGJ5IHRoZSBBUEkuCisKIDIw
MTItMTItMjggIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiBpbnN0cnVt
ZW50IG5vdCBpbnN0cnVtZW50ZWQgbWVtYmVycy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dURlRo
cmVhZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEu
Y3BwCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIFRocmVh
ZFNwZWNpZmljPFdURlRocmVhZERhdGE+KiBXVEZUaHJlYWREYXRhOjpzdGF0aWNEYXRhOwogCiBX
VEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKCkKLSAgICA6IG1fYXRvbWljU3RyaW5nVGFibGUo
MCkKKyAgICA6IG1fYXBpRGF0YSgwKQorICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSgwKQogICAg
ICwgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IoMCkKICNpZiBVU0UoSlNDKQogICAgICwg
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQpJbmRl
eDogU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1dURlRocmVhZERhdGEuaAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL1dURi93
dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDggQEAgcHVi
bGljOgogI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTQykKIAorICAgIHZvaWQqIG1fYXBpRGF0YTsK
KwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsK
ICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJsZURlc3Ry
dWN0b3I7Cg==
</data>
<flag name="commit-queue"
          id="198447"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180993</attachid>
            <date>2013-01-01 11:15:55 -0800</date>
            <delta_ts>2013-01-01 12:05:58 -0800</delta_ts>
            <desc>Build bot fix</desc>
            <filename>105889.4.patch</filename>
            <type>text/plain</type>
            <size>225237</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU0NvbnRleHQ7CisKKy8vIEEgSlNWYWx1ZSBpcyBhIHJl
ZmVyZW5jZSB0byBhIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBvYmplY3Qgc3BhY2Ugb2Yg
YQorLy8gSlNWaXJ0dWFsTWFjaGluZS4gQWxsIGluc3RhbmNlcyBvZiBKU1ZhbHVlIG9yaWdpbmF0
ZSBmcm9tIGEgSlNDb250ZXh0LCBhbmQKKy8vIGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGlz
IEpTQ29udGV4dC4gV2hlcmUgYW4gaW5zdGFuY2UgbWV0aG9kIGlzIGludm9rZWQKKy8vIHVwb24g
YSBKU1ZhbHVlLCBhbmQgdGhpcyByZXR1cm5zIGFub3RoZXIgSlNWYWx1ZSwgdGhlIHJldHVybmVk
IEpTVmFsdWUgd2lsbAorLy8gb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgSlNDb250ZXh0IGFzIHRo
ZSBKU1ZhbHVlIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzCisvLyBpbnZva2VkLgorLy8KKy8vIFRo
ZSBKU0NvbnRleHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVy
ZWNlZCBKYXZhU2NyaXB0CisvLyB2YWx1ZSB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gU28g
bG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGJlaW5nIHJldGFpbmVkCisvLyB0aGUgSlNWYWx1ZSB3
aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZCB2YWx1ZSB3aXRoaW4gdGhlIEphdmFT
Y3JpcHQKKy8vIHZpcnR1YWwgbWFjaGluZSBhbGl2ZS4gV2hlbiB0aGUgSlNDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCBhIEpTVmFsdWUgaXMKKy8vIGRlYWxsb2NhdGVkIHRoZSB3ZWFrIGNvbnRleHQg
cHJvcGVydHkgb2YgdGhlIEpTVmFsdWUgd2lsbCBiZWNvbWUgbmlsLiBBZnRlcgorLy8gdGhpcyBv
Y2N1cnMgdGhlIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgaXMg
bm8gbG9uZ2VyCisvLyBiZWluZyBtYWludGFpbmVkIGJ5IHRoaXMgSlNWYWx1ZSwgYW5kIHRoZSBK
U1ZhbHVlIGluc3RhbmNlIG1heSBubyBsb25nZXIgYnkKKy8vIHVzZWQgYXMgYSByZWZlcmVuY2Ug
dG8gdGhpcyB2YWx1ZS4gRm9yIGFueSBtZXRob2QgaW52b2tlZCBvbiBpbnN0YW5jZSBvZgorLy8g
SlNWYWx1ZSB3aXRoIGEgbmlsIGNvbnRleHQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSBuaWwv
emVyby9mYWxzZSByZXN1bHQuCisvLworLy8gRm9yIGFsbCBtZXRob2RzIHRha2luZyBhcmd1bWVu
dHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkCisvLyBpbnRvIGEgSmF2
YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJlbG93
LgorLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIEpTVmlydHVhbE1hY2hpbmUKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5l
IGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRleHQKKy8vIHByb3BlcnR5KS4gQW4g
aW5zdGFuY2Ugb2YgSlNWYWx1ZSBtYXkgb25seSBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8K
Ky8vIG1ldGhvZHMgb24gaW5zdGFuY2VzIG9mIEpTVmFsdWUgYW5kIEpTQ29udGV4dCB0aGF0IGJl
bG9uZyB0byB0aGUgc2FtZQorLy8gSlNWaXJ0dWFsTWFjaGluZSAtIHBhc3NpbmcgYSBKU1ZhbHVl
IHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdCBvcmlnaW5hdGluZworLy8gZnJvbSBhIGRpZmZlcmVu
dCBKU1ZpcnR1YWxNYWNoaW5lIHdpbGwgcmVzdWx0IGluIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlv
bgorLy8gYmVpbmcgcmFpc2VkLgorLy8KKy8vIENvbnZlcnNpb24gYmV0d2VlbiBPYmplY3RpdmUt
QyBhbmQgSmF2YVNjcmlwdCB0eXBlcy4KKy8vCisvLyBXaGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBK
YXZhU2NyaXB0IHZhbHVlcyBhbmQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhIGNvcHkgaXMKKy8vIHBl
cmZvcm1lZC4gVmFsdWVzIG9mIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgY29waWVkIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisvLyB0eXBlcyBvbiBjb252ZXJzaW9uIGluIGVhY2ggZGlyZWN0aW9uLiBG
b3IgTlNEaWN0aW9uYXJpZXMsIGVudHJpZXMgaW4gdGhlCisvLyBkaWN0aW9uYXJ5IHRoYXQgYXJl
IGtleWVkIGJ5IHN0cmluZ3MgYXJlIGNvcGllZCBvbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCisv
LyBGb3IgZGljdGlvbmFyaWVzIGFuZCBhcnJheXMsIGNvbnZlcnNpb24gaXMgcmVjdXJzaXZlLCB3
aXRoIHRoZSBzYW1lIG9iamVjdAorLy8gY29udmVyc2lvbiBiZWluZyBhcHBsaWVkIHRvIGFsbCBl
bnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorLy8KKy8vICAgT2JqZWN0aXZlLUMgdHlwZSAgfCAg
IEphdmFTY3JpcHQgdHlwZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyAgICAgICAgIG5pbCAgICAgICAgIHwgICAgIHVuZGVmaW5lZAorLy8gICAgICAg
IE5TTnVsbCAgICAgICB8ICAgICAgICBudWxsCisvLyAgICAgICBOU1N0cmluZyAgICAgIHwgICAg
ICAgc3RyaW5nCisvLyAgICAgICBOU051bWJlciAgICAgIHwgICBudW1iZXIsIGJvb2xlYW4KKy8v
ICAgICBOU0RpY3Rpb25hcnkgICAgfCAgIE9iamVjdCBvYmplY3QKKy8vICAgICAgIE5TQXJyYXkg
ICAgICAgfCAgICBBcnJheSBvYmplY3QKKy8vICAgICAgICBOU0RhdGUgICAgICAgfCAgICAgRGF0
ZSBvYmplY3QKKy8vICAgICAgIE5TQmxvY2sgKiAgICAgfCAgIEZ1bmN0aW9uIG9iamVjdCAqCisv
LyAgICAgICAgICBpZCAqKiAgICAgIHwgICBXcmFwcGVyIG9iamVjdCAqKgorLy8gICAgICAgIENs
YXNzICoqKiAgICB8IENvbnN0cnVjdG9yIG9iamVjdCAqKioKKy8vCisvLyAqIEluc3RhbmNlcyBv
ZiBOU0Jsb2NrIHdpdGggc3VwcG9ydGVkIGFyZ3VtZW50cyB0eXBlcyB3aWxsIGJlIHByZXNlbnRl
ZCB0bworLy8gSmF2YVNjcmlwdCBhcyBhIGNhbGxhYmxlIEZ1bmN0aW9uIG9iamVjdC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkCisvLyBhcmd1bWVudCB0eXBlcyBzZWUgSlNFeHBv
cnQuaC4gSWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIG9yaWdpbmF0aW5nIGZyb20gYW4KKy8vIE9i
amVjdGl2ZS1DIGJsb2NrIGlzIGNvbnZlcnRlZCBiYWNrIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVj
dCB0aGUgYmxvY2sgd2lsbAorLy8gYmUgcmV0dXJuZWQuIEFsbCBvdGhlciBKYXZhU2NyaXB0IGZ1
bmN0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCBpbiB0aGUgc2FtZQorLy8gbWFubmVyIGFzIGEgSmF2
YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBPYmplY3QuCisvLworLy8gKiogRm9yIE9iamVjdGl2ZS1D
IGluc3RhbmNlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGxpc3Rl
ZAorLy8gYWJvdmUsIGEgd3JhcHBlciBvYmplY3QgdG8gcHJvdmlkZSBhIHJldGFpbmluZyBoYW5k
bGUgdG8gdGhlIE9iamVjdGl2ZS1DCisvLyBpbnN0YW5jZSBmcm9tIEphdmFTY3JpcHQuIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHdyYXBwZXIgb2JqZWN0cywgc2VlCisvLyBKU0V4cG9y
dC5oLiBXaGVuIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCBpcyBjb252ZXJ0ZWQgYmFjayB0
byBPYmplY3RpdmUtQworLy8gdGhlIE9iamVjdGl2ZS1DIGluc3RhbmNlIGJlaW5nIHJldGFpbmVk
IGJ5IHRoZSB3cmFwcGVyIGlzIHJldHVybmVkLgorLy8KKy8vICoqKiBGb3IgT2JqZWN0aXZlLUMg
Q2xhc3Mgb2JqZWN0cyBhIGNvbnN0cnVjdG9yIG9iamVjdCBjb250YWluaW5nIGV4cG9ydGVkCisv
LyBjbGFzcyBtZXRob2RzIHdpbGwgYmUgcmV0dXJuZWQuIFNlZSBKU0V4cG9ydC5oIHNvciBtb3Jl
IGluZm9ybWF0aW9uIG9uCisvLyBjb25zdHJ1Y3RvciBvYmplY3RzLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZhbHVlIDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNWYWx1ZSBieSBjb252ZXJ0aW5nIGFuIE9iamVjdGl2ZS1DIG9iamVjdC4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgZnJvbSBhbiBPYmplY3RpdmUtQyBw
cmltaXRpdmUgdHlwZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09MKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhEb3Vi
bGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNjcmlwdCB2
YWx1ZSBpbiB0aGlzIGNvbnRleHQuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Fy
cmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5nICopcGF0dGVybiBmbGFn
czooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChK
U1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCB0
aGlzIHZhbHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGFjY29yZGlu
ZyB0byB0aGUKKy8vIGNvbnZlcnNpb24gc3BlY2lmaWVkIGFib3ZlLgorLSAoaWQpdG9PYmplY3Q7
CisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCwgaWYgdGhlIHJlc3VsdCBpcworLy8gbm90IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgdGhl
biBuaWwgd2lsbCBiZSByZXR1cm5lZC4KKy0gKGlkKXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpY2xz
OworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhIGJvb2xlYW4gYWNjb3JkaW5nIHRvIHRoZSBj
b252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistIChC
T09MKXRvQm9vbDsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBudW1iZXIgYWNjb3JkaW5n
IHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3Vh
Z2UuCistIChkb3VibGUpdG9Eb3VibGU7CisvLyBUaGUgdmFsdWUgaXMgY29waWVkIHRvIGFuIGlu
dGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieQorLy8gdGhlIEph
dmFTY3JpcHQgbGFuZ3VhZ2UuCistIChpbnQzMl90KXRvSW50MzI7CisvLyBUaGUgdmFsdWUgaXMg
Y29waWVkIHRvIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll
ZCBieQorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistICh1aW50MzJfdCl0b1VJbnQzMjsK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4sIGEgTlNOdW1iZXIgdmFsdWUgb2YgQFlFUyBv
ciBATk8gd2lsbCBiZSByZXR1cm5lZC4KKy8vIEZvciBhbGwgb3RoZXIgdHlwZXMgdGhlIHZhbHVl
IHdpbGwgYmUgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUKKy8vIGNvbnZlcnNp
b24gc3BlY2lmaWVkIGJ5IHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNOdW1iZXIgKil0
b051bWJlcjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRv
IHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2Uu
CistIChOU1N0cmluZyAqKXRvU3RyaW5nOworLy8gVGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBh
IG51bWJlciByZXByZXNlbnRpbmcgYSB0aW1lIGludGVydmFsIHNpbmNlIDE5NzAsCisvLyBhbmQg
YSBuZXcgTlNEYXRlIGluc3RhbmNlIGlzIHJldHVybmVkLgorLSAoTlNEYXRlICopdG9EYXRlOwor
Ly8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVk
LgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlw
ZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gVGhlIHByb3BlcnR5ICJsZW5ndGgiIGlzIHJlYWQg
ZnJvbSB0aGUgb2JqZWN0LCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQKKy8vIGludGVnZXIsIGFu
ZCBhbiBOU0FycmF5IG9mIHRoaXMgc2l6ZSBpcyBhbGxvY2F0ZWQuIFByb3BlcnRpZXMgY29ycmVz
cG9uZGluZworLy8gdG8gaW5kaWNpZXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgd2lsbCBiZSBj
b3BpZWQgdG8gdGhlIGFycmF5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRl
ZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0Fy
cmF5OworLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJl
dHVybmVkLgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3Jp
cHQgVHlwZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGll
cyBvZiB0aGUgb2JqZWN0IGFyZSBjb3BpZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9i
amVjdGl2ZS1DIG9iamVjdHMgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3Bl
Y2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBw
cm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFT
Y3JpcHQgdmFsdWUKKy8vICd1bmRlZmluZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlz
dC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5Owor
Ly8gU2V0IGEgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFs
dWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0
eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJucyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4K
Ky0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5z
IFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9k
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgor
LSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9k
IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4g
b2JqZWN0OworLy8gdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWV0aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVh
Z2UuCistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8vIEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20g
dGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFs
dWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKKworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBw
cmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJP
T0wpaXNOdWxsOworLSAoQk9PTClpc0Jvb2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9P
TClpc1N0cmluZzsKKy0gKEJPT0wpaXNPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUg
c2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wp
aXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIu
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhlIHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3Vt
ZW50cy4KKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50
czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNp
ZmllZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50czsKKy8vIEFjY2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIg
ZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRoZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHBy
b3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0
aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUgc3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUg
KilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkg
Kilhcmd1bWVudHM7CisKKy8vIFRoZSBKU0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0
ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFkb25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0Owor
CitAZW5kCisKKy8vIE9iamVjdGl2ZS1DIG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBhcmd1bWVudCBhbmQvb3IgcmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVz
IGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVyc2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBp
cyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4gU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVz
IHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRhaW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0
aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5kIGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBl
PiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1h
dGNoLAorLy8gd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0
aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIu
CisvLyBTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNS
YW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUuCitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9y
dCkKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0
IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRo
IHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihD
R1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmlu
ZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAibG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1
ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5n
ZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJv
cGVydGllcworLy8gbmFtZWQgIngiLCAieSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVj
dClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgiIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0
aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUg
Q0dQb2ludCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8g
dGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQ
b2ludCl0b1BvaW50OworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nl
c3NpbmcgcHJvcGVydGllcyBuYW1lZCAibG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0
aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0
b1JhbmdlOworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJv
cGVydGllcyBuYW1lZCAieCIsICJ5IiwgIndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRo
aXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVj
dCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEgdmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2lu
ZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFs
dWUgY29udmVydGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOwor
CitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5n
IG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNj
ZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9i
amVjdEEsICpvYmplY3RCOworLy8gICAgSlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdl
dCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgiIGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2
MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3Qn
LgorLy8gICAgb2JqZWN0W0AiWSJdID0gdjE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHBy
b3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAg
ICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRleCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2Jq
ZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5n
IHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lLgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1
cHBvcnQpCisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Owor
LSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsK
Ky0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0Nv
cHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2Ny
aXB0OihOU1VJbnRlZ2VyKWluZGV4OworCitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5n
IGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0
eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8vIFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9u
ZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRl
c2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAi
d3JpdGFibGUiLAorLy8gICAgYW5kIG9wdGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBv
ZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRh
IGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJz
ZXQiIGtleS4KKy8vICAgIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBv
ciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNj
ZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBi
b3RoIG9mIHRoZSBrZXlzICJnZXQiIGFuZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNv
bnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAg
ImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vzc29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVp
dGhlciB0aGUgInZhbHVlIgorLy8gICAgb3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nl
c3NvciBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJp
YnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFj
aW5nIGFueSBleGlzdGluZyBkYXRhIHByb3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoK
Ky8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJl
bnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBtYXkgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBrZXlzCisvLyAgICAidmFsdWUiLCAiIHdyaXRh
YmxlIiwgImdldCIsIG9yICJzZXQiLgorLy8gICAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IGJl
IHVzZWQgdG8gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nCisvLyAgICBkYXRh
IG9yIGFjY2Vzc29yIHByb3BlcnR5LCBvciB0byBjcmVhdGUgYSBuZXcgZGF0YSBwcm9wZXJ0eS4K
K0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldy
aXRhYmxlS2V5OworSlNfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlE
ZXNjcmlwdG9yRW51bWVyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5OworSlNfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OworSlNf
RVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCiAKKyNpZmRlZiBf
X09CSkNfXworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKKwogLyog
SmF2YVNjcmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCiAKIC8qISBAdHlwZWRlZiBKU0NvbnRleHRH
cm91cFJlZiBBIGdyb3VwIHRoYXQgYXNzb2NpYXRlcyBKYXZhU2NyaXB0IGNvbnRleHRzIHdpdGgg
b25lIGFub3RoZXIuIENvbnRleHRzIGluIHRoZSBzYW1lIGdyb3VwIG1heSBzaGFyZSBhbmQgZXhj
aGFuZ2UgSmF2YVNjcmlwdCBvYmplY3RzLiAqLwpAQCAtMTM1LDQgKzEzOSw4IEBAIEpTX0VYUE9S
VCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXgKIH0KICNlbmRpZgogCisvKiBFbmFibGUg
dGhlIE9iamVjdGl2ZS1DIEFQSSBmb3IgcGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4g
Ki8KKyN1bmRlZiBKU19PQkpDX0FQSV9FTkFCTEVECisjZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJM
RUQgKGRlZmluZWQoX19PQkpDX18pICYmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgKF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkgJiYg
IWRlZmluZWQoX19pMzg2X18pKQorCiAjZW5kaWYgLyogSlNCYXNlX2ggKi8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFj
ZSBKU0Jsb2NrQWRhcHRvciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1
cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIgKilzaWduYXR1cmU7CistIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQg
d2l0aEV4Y2VwdGlvbjooSlNWYWx1ZVJlZiAqKWV4Y2VwdGlvbjsKKworQGVuZAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFT
Y3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNh
c3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAi
SlNCbG9ja0FkYXB0b3IuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0
ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgInd0Zi9P
d25QdHIuaCIKKyNpbXBvcnQgPC91c3IvbG9jYWwvaW5jbHVkZS9CbG9ja19wcml2YXRlLmg+CisK
K2V4dGVybiAiQyIgeworaWQgX19OU01ha2VTcGVjaWFsRm9yd2FyZGluZ0NhcHR1cmVCbG9jayhj
b25zdCBjaGFyICpzaWduYXR1cmUsIHZvaWQgKF5oYW5kbGVyKShOU0ludm9jYXRpb24gKmludikp
OworfTsKKworY2xhc3MgQmxvY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Qmxv
Y2tBcmd1bWVudCgpOworICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiwg
TlNJbnRlZ2VyLCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmKikgPSAwOworCisgICAgT3duUHRyPEJs
b2NrQXJndW1lbnQ+IG1fbmV4dDsKK307CisKK0Jsb2NrQXJndW1lbnQ6On5CbG9ja0FyZ3VtZW50
KCkKK3sKK30KKworY2xhc3MgQmxvY2tBcmd1bWVudEJvb2xlYW4gOiBwdWJsaWMgQmxvY2tBcmd1
bWVudCB7CitwdWJsaWM6CisgICAgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1
ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBn
ZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja0FyZ3Vt
ZW50TnVtZXJpYyA6IHB1YmxpYyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBKU1ZhbHVl
UmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJl
ciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIFQgdmFs
dWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3Vt
ZW50TnVtYmVyXTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja0Fy
Z3VtZW50SWQgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgSlNWYWx1ZVJl
ZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIs
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBpZCB2YWx1
ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1l
bnROdW1iZXJdOworICAgICAgICByZXR1cm4gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSk7
CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tBcmd1bWVudFN0cnVjdCA6IHB1YmxpYyBCbG9ja0Fy
Z3VtZW50IHsKK3B1YmxpYzoKKyAgICBCbG9ja0FyZ3VtZW50U3RydWN0KE5TSW52b2NhdGlvbiog
Y29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgICAgICA6
IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAgeworICAg
ICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJbnRlZ2Vy
IHNpemUsIGFsaWdubWVudDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29kZWRU
eXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAgICAgICBt
X2FsbG9jYXRpb24gPSAoY2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAgICAgICBt
X2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGludHB0
cl90PihtX2FsbG9jYXRpb24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIH5CbG9ja0FyZ3VtZW50U3RydWN0KCkKKyAgICB7CisgICAgICAgIFtt
X2NvbnZlcnNpb25JbnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBmcmVlKG1fYWxsb2NhdGlv
bik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9u
KiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4
dCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVudDpt
X2FsbG9jYXRpb24gYXRJbmRleDphcmd1bWVudE51bWJlcl07CisKKyAgICAgICAgW21fY29udmVy
c2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0SW5kZXg6Ml07CisgICAg
ICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZjb250ZXh0IGF0SW5kZXg6
M107CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6W0pT
VmFsdWUgY2xhc3NdXTsKKworICAgICAgICBKU1ZhbHVlKiB2YWx1ZTsKKyAgICAgICAgW21fY29u
dmVyc2lvbkludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52
b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAg
ICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50VHlwZURlbGVn
YXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEJsb2NrQXJndW1lbnQqIFJlc3VsdFR5cGU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJbnRl
Z2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudE51bWVyaWM8VD47
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlw
ZSB0eXBlRG91YmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudE51
bWVyaWM8VD47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJvb2woKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50Qm9vbGVhbjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlVm9pZCgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVz
dWx0VHlwZSB0eXBlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50
SWQ7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50
SWQ7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJsb2NrKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAg
c3RhdGljIFJlc3VsdFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hh
ciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsKKyAg
ICAgICAgaWYgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHZhbHVlVG9UeXBlSW52b2NhdGlv
bkZvcihjb3B5KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQmxvY2tBcmd1bWVudFN0cnVjdChp
bnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9Cit9OworCitjbGFz
cyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmxvY2tSZXN1bHQoKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4
dCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKSA9IDA7Cit9OworCitjbGFzcyBCbG9ja1Jlc3Vs
dFZvaWQgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiosIEpTQ29udGV4dCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tSZXN1bHRJbnRlZ2Vy
IDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRp
b24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIFQgdmFsdWUgPSAoVClKU0M6OnRv
SW50MzIoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJl
c3VsdCwgZXhjZXB0aW9uKSk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZhbHVlOiZ2
YWx1ZV07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJsb2NrUmVz
dWx0RG91YmxlIDogcHVibGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBy
ZXN1bHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIFQgdmFsdWUgPSAo
VClKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0
LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVd
OworICAgIH0KK307CisKK2NsYXNzIEJsb2NrUmVzdWx0Qm9vbGVhbiA6IHB1YmxpYyBCbG9ja1Jl
c3VsdCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKikKKyAgICB7
CisgICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIHJlc3VsdCk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZh
bHVlOiZ2YWx1ZV07CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHRTdHJ1Y3QgOiBwdWJs
aWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIEJsb2NrUmVzdWx0U3RydWN0KE5TSW52b2Nh
dGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAg
ICAgICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAg
eworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJ
bnRlZ2VyIHNpemUsIGFsaWdubWVudDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVu
Y29kZWRUeXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAg
ICAgICBtX2FsbG9jYXRpb24gPSAoY2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAg
ICAgICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX2FsbG9jYXRpb24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5CbG9ja1Jlc3VsdFN0cnVjdCgpCisgICAgeworICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAgICAgICAgZnJlZShtX2FsbG9j
YXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRp
b24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVSZWYqKQor
ICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpy
ZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlv
biBpbnZva2VXaXRoVGFyZ2V0OnZhbHVlXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRp
b24gZ2V0UmV0dXJuVmFsdWU6bV9idWZmZXJdOworICAgICAgICBbaW52b2NhdGlvbiBzZXRSZXR1
cm5WYWx1ZTomdmFsdWVdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1f
Y29udmVyc2lvbkludm9jYXRpb247CisgICAgY2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9h
bGxvY2F0aW9uOworfTsKKworQGltcGxlbWVudGF0aW9uIEpTQmxvY2tBZGFwdG9yIHsKKyAgICBX
VEY6OlJldGFpblB0cjxOU1N0cmluZz4gbV9zaWduYXR1cmVXaXRoT2Zmc2V0czsKKyAgICBXVEY6
OlJldGFpblB0cjxOU1N0cmluZz4gbV9zaWduYXR1cmVXaXRob3V0T2Zmc2V0czsKKyAgICBPd25Q
dHI8QmxvY2tSZXN1bHQ+IG1fcmVzdWx0OworICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBtX2Fy
Z3VtZW50czsKKyAgICBzaXplX3QgbV9hcmd1bWVudENvdW50OworfQorCisvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gYWRkIG9mZnNldCBpbmZvcm1hdGlvbiBiYWNrIGludG8gYSBib2NrIHNpZ25hdHVy
ZS4KK3N0YXRpYyBOU1N0cmluZyogYnVpbGRCbG9ja1NpZ25hdHVyZShOU1N0cmluZyogcHJlZml4
LCBjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kLCBOU1VJbnRlZ2VyJiBvZmZzZXQs
IE5TU3RyaW5nKiBwb3N0Zml4KQoreworICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7
CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAl
cyVsdSVAIiwgcHJlZml4LCBjb3B5LmdldCgpLCBvZmZzZXQsIHBvc3RmaXhdOworICAgIE5TVUlu
dGVnZXIgc2l6ZTsKKyAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoY29weSwgJnNpemUsIDApOwor
ICAgIGlmIChzaXplIDwgNCkKKyAgICAgICAgc2l6ZSA9IDQ7CisgICAgb2Zmc2V0ICs9IHNpemU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoaWQpaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZy
b21Qcm90b2NvbDooY29uc3QgY2hhciopZW5jb2RlZFR5cGUKK3sKKyAgICBbc3VwZXIgaW5pdF07
CisKKyAgICBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRzID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOmVuY29kZWRUeXBlXTsKKyAgICBtX2FyZ3VtZW50Q291bnQgPSAwOworCisgICAg
Ly8gQ3VycmVudGx5IG9ubHkgYWRhcHRpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdG8gYmxvY2tz
IHJldHVybmluZyB2b2lkLgorICAgIGNvbnN0IGNoYXIqIHJlc3VsdFR5cGVCZWdpbiA9IGVuY29k
ZWRUeXBlOworICAgIGlmICgqZW5jb2RlZFR5cGUrKyAhPSAndicpCisgICAgICAgIHJldHVybiBz
ZWxmOworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRQdHIobmV3IEJsb2Nr
UmVzdWx0Vm9pZCk7CisgICAgY29uc3QgY2hhciogcmVzdWx0VHlwZUVuZCA9IGVuY29kZWRUeXBl
OworCisgICAgaWYgKGVuY29kZWRUeXBlWzBdICE9ICdAJyB8fCBlbmNvZGVkVHlwZVsxXSAhPSAn
PycpIHsKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgfQorICAgIGVuY29kZWRUeXBlICs9IDI7
CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gYSBibG9jayBpcyB0aGUgYmxveGsgaXRz
ZWxmLgorICAgIE5TU3RyaW5nKiBzaWduYXR1cmUgPSBAIkA/MCI7CisgICAgTlNVSW50ZWdlciBv
ZmZzZXQgPSBzaXplb2Yodm9pZCopOworCisgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+IGFyZ3Vt
ZW50cyA9IDA7CisgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+KiBuZXh0QXJndW1lbnQgPSAmYXJn
dW1lbnRzOworICAgIHdoaWxlICgqZW5jb2RlZFR5cGUpIHsKKyAgICAgICAgY29uc3QgY2hhciog
YmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICAgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+IGFyZ3Vt
ZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlPihl
bmNvZGVkVHlwZSkpOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJu
IHNlbGY7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGVuY29kZWRUeXBlOworCisgICAgICAg
IC8vIEFwcGVuZCB0aGUgdHlwZSAmIHN0YWNrIG9mZnNldCBvZiB0aGlzIGFyZ3VtZW50IHRvIHRo
ZSBzaWduYXR1cmUgc3RyaW5nLgorICAgICAgICBzaWduYXR1cmUgPSBidWlsZEJsb2NrU2lnbmF0
dXJlKHNpZ25hdHVyZSwgYmVnaW4sIGVuZCwgb2Zmc2V0LCBAIiIpOworCisgICAgICAgICpuZXh0
QXJndW1lbnQgPSBhcmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRBcmd1bWVudCA9ICYo
Km5leHRBcmd1bWVudCktPm1fbmV4dDsKKyAgICAgICAgKyttX2FyZ3VtZW50Q291bnQ7CisgICAg
fQorCisgICAgLy8gUHJlZmljIHRoZSBzaWduYXR1cmUgd2l0aCB0aGUgcmV0dXJuIHR5cGUgJiB0
b3RhbCBzdGFja2ZyYW1lIHNpemUuCisgICAgLy8gKHRoaXMgY2FsbCB3aWxsIGFsc28gYWRkIHRo
ZSByZXR1cm4gdHlwZSBzaXplIHRvIHRoZSBvZmZzZXQsCisgICAgLy8gd2hpY2ggaXMgYSBub25z
ZXNuZSwgYnV0IGhhcm1sZXNzIHNpbmNlIHRoaXMgaXMgdGhlIGxhc3QgdXNlKS4KKyAgICBzaWdu
YXR1cmUgPSBidWlsZEJsb2NrU2lnbmF0dXJlKEAiIiwgcmVzdWx0VHlwZUJlZ2luLCByZXN1bHRU
eXBlRW5kLCBvZmZzZXQsIHNpZ25hdHVyZSk7CisKKyAgICBtX3NpZ25hdHVyZVdpdGhPZmZzZXRz
ID0gc2lnbmF0dXJlOworICAgIG1fcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICBtX2Fy
Z3VtZW50cyA9IGFyZ3VtZW50cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
Ly8gVGhlIEpTQmxvY2tBZGFwdG9yIHN0b3JlcyB0aGUgdHlwZSBzdHJpbmcgdGFrZW4gZnJvbSB0
aGUgcHJvdG9jb2wuIFRoaXMgc3RyaW5nCisvLyBkb2VzIG5vdCBjb250YWluIGludm9jYXRpb24g
bGF5b3V0IGluZm9ybWF0aW9uLiBUaGUgc2lnbmF0dXJlIGZyb20gdGhlIGJsb2NrCisvLyBkb2Vz
IGNvbnRhaW4gdGhlIHN0YWNrZnJhbWUgb2Zmc2V0cy4gU2tpcCB0aGVzZSB3aGVuIGNvbXBhcmlu
ZyBzdHJpbmdzLgorLSAoYm9vbClibG9ja01hdGNoZXNTaWduYXR1cmU6KGlkKWJsb2NrCit7Cisg
ICAgaWYgKCFfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNvbnN0IGNoYXIqIHdpdGhvdXRPZmZzZXRzPSBbbV9zaWduYXR1cmVXaXRob3V0
T2Zmc2V0cyBVVEY4U3RyaW5nXTsKKyAgICBjb25zdCBjaGFyKiBzaWduYXR1cmUgPSBfQmxvY2tf
c2lnbmF0dXJlKGJsb2NrKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHdoaWxlIChp
c2RpZ2l0KCp3aXRob3V0T2Zmc2V0cykpCisgICAgICAgICAgICArK3dpdGhvdXRPZmZzZXRzOwor
ICAgICAgICB3aGlsZSAoaXNkaWdpdCgqc2lnbmF0dXJlKSkKKyAgICAgICAgICAgICsrc2lnbmF0
dXJlOworICAgICAgICAKKyAgICAgICAgaWYgKCp3aXRob3V0T2Zmc2V0cyAhPSAqc2lnbmF0dXJl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoISp3aXRob3V0T2Zmc2V0
cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICArK3dpdGhvdXRPZmZzZXRzOwor
ICAgICAgICArK3NpZ25hdHVyZTsKKyAgICB9Cit9CisKKy0gKGlkKWJsb2NrRnJvbVZhbHVlOihK
U1ZhbHVlUmVmKWFyZ3VtZW50IGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0IHdpdGhFeGNl
cHRpb246KEpTVmFsdWVSZWYqKWV4Y2VwdGlvbgoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
dHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpOworCisgICAgLy8gQ2hlY2sgZm9y
IG51bGwvdW5kZWZpbmVkLgorICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQoY3R4LCBhcmd1bWVu
dCkgfHwgSlNWYWx1ZUlzTnVsbChjdHgsIGFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gMDsKKyAgICBpZiAoaWQgb2JqZWN0ID0gdHJ5
VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KSkgeworICAgICAgICAvLyBDaGVjayBpZiB0
aGUgYXJndW1lbnQgaXMgYW4gT2JqZWN0aXZlLUMgYmxvY2suCisgICAgICAgIGlmIChbb2JqZWN0
IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNzKCldKSB7CisgICAgICAgICAgICBpZiAoW3Nl
bGYgYmxvY2tNYXRjaGVzU2lnbmF0dXJlOm9iamVjdF0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9zaWduYXR1cmVXaXRoT2Zmc2V0
cyAmJiBKU1ZhbHVlSXNPYmplY3QoY3R4LCBhcmd1bWVudCkpIHsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhlIGFyZ3VtZW50IGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbgorICAgICAgICAvLyAoYW5k
IHRoYXQgd2VyZSBhYmxlIHRvIGNyZWF0ZSBhIGZvcndhcmRpbmcgYmxvY2sgZm9yIHRoaXMgc2ln
bmF0dXJlKS4KKyAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGN0
eCwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChKU09iamVjdElzRnVuY3Rpb24o
Y3R4LCBvYmplY3QpKQorICAgICAgICAgICAgZnVuY3Rpb24gPSBvYmplY3Q7CisgICAgfQorCisg
ICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0o
dG9KUyhjdHgpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMoY3R4KSwgIkludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgZm9yIE9iamVjdGl2ZS1D
IGJsb2NrIikpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIC8vIENhcHR1cmVk
IHZhcmlhYmxlcy4KKyAgICBKU0Jsb2NrQWRhcHRvciogYWRhcHRvciA9IHNlbGY7CisgICAgSlNW
YWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5jdGlvbiBpbkNvbnRleHQ6
Y29udGV4dF07CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNTg5NQorICAgIC8vIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRpbmcgdm9pZCBm
dW5jdGlvbnMuCisgICAgcmV0dXJuIF9fTlNNYWtlU3BlY2lhbEZvcndhcmRpbmdDYXB0dXJlQmxv
Y2soW21fc2lnbmF0dXJlV2l0aE9mZnNldHMgVVRGOFN0cmluZ10sIF4oTlNJbnZvY2F0aW9uICpp
bnZvY2F0aW9uKXsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDU4OTQKKyAgICAgICAgLy8gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHRo
YXQgdGhlIGNvbnRleHQgYmUgcmV0YWluZWQsIGl0IHdvdWxkIHByb2JhYmx5IGJlIG1vcmUKKyAg
ICAgICAgLy8gYXBwcm9wcmlhdGUgdG8gdXNlIGEgbmV3IEpTQ29udGV4dCBpbnN0YW5jZSAoY3Jl
YXRpbmcgb25lIGlmIG5lY2Vzc2FyeSkuCisgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgaWYg
d2UgY291bGQgdGhyb3cgYSBKUyBleGNlcHRpb24gaGVyZSwgYnV0IHdpdGhvdXQgYSBjb250ZXh0
IHdlIGhhdmUKKyAgICAgICAgLy8gbm90aGluZyB0byB3b3JrIHdpdGguCisgICAgICAgIEpTQ29u
dGV4dCogY29udGV4dCA9IHZhbHVlLmNvbnRleHQ7CisgICAgICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZiBhcmdzW2Fk
YXB0b3ItPm1fYXJndW1lbnRDb3VudF07CisKKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50TnVtYmVy
ID0gMDsKKyAgICAgICAgQmxvY2tBcmd1bWVudCogYXJndW1lbnRzID0gYWRhcHRvci0+bV9hcmd1
bWVudHMuZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tBcmd1bWVudCogYXJndW1lbnQgPSBhcmd1
bWVudHM7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQuZ2V0KCkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgICAgIGFyZ3NbYXJn
dW1lbnROdW1iZXJdID0gYXJndW1lbnQtPmdldChpbnZvY2F0aW9uLCBhcmd1bWVudE51bWJlciAr
IDEsIGNvbnRleHQsICZleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCA9IGFyZ3VtZW50TnVtYmVyOworCisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjdHgsIEpTVmFsdWVUb09iamVj
dChjdHgsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApLCAwLCBhcmd1bWVudENvdW50LCBh
cmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICAgICAg
W2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDEwICs1MDgsMTAgQEAg
dm9pZCogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRQcml2YQogdGVtcGxhdGUgPGNsYXNz
IFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbmhlcml0cyhKU0NsYXNz
UmVmIGMpIGNvbnN0CiB7Ci0gICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigp
OyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpCisgICAgZm9yIChKU0Ns
YXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+
cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKGpzQ2xhc3MgPT0gYykKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFC
TEVECisKK0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworCisvLyBBbiBpbnN0YW5j
ZSBvZiBKU0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0aW9uIGVudmlyb25t
ZW50LCBhbGwKKy8vIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNlIHdpdGhpbiBhIGNv
bnRleHQuCisvLyBKU0NvbnRleHQgaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNs
ZSBvZiBvYmplY3RzIHdpdGhpbiB0aGUKKy8vIEphdmFTY3JpcHQgdmlydHVhbCBtYWNoaW5lLiBF
dmVyeSBpbnN0YW5jZSBvZiBKU1ZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCBhCisvLyBKU0NvbnRl
eHQgdmlhIGEgd2VhayByZWZlcmVuY2UuIFRoZSBKU1ZhbHVlIHdpbGwga2VlcCB0aGUgSmF2YVNj
cmlwdCB2YWx1ZSBpdAorLy8gcmVmZXJlbmNlcyBhbGl2ZSBzbyBsb25nIGFzIHRoZSBKU0NvbnRl
eHQgaXMgYWxzbyByZXRhaW5lZC4gV2hlbiBhbiBpbnN0YW5jZQorLy8gb2YgSlNDb250ZXh0IGlz
IGRlYWxsb2NhdGVkIGFuZCB0aGUgd2VhayByZWZlcmVuY2VzIHRvIGl0IGFyZSBjbGVhcmVkIHRo
ZQorLy8gSlNWYWx1ZXMgdGhhdCBoYWQgYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0
IHdpbGwgYmUgaW52YWxpZGF0ZWQsIGFuZAorLy8gd2lsbCBjZWFzZSB0byBrZWVwIHRoZSB2YWx1
ZXMgd2l0aGluIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBhbGl2ZS4KK05TX0NMQVNTX0FWQUlMQUJM
RSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNDb250ZXh0LgorLSAoaWQpaW5pdDsKKy8vIENyZWF0ZSBhIEpTQ29udGV4dCBpbiB0aGUg
c3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKy0gKGlkKWluaXRXaXRoVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworLy8gRXZhbHVhdGUgYSBzdHJp
bmcgb2YgSmF2YVNjcmlwdCBjb2RlLgorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0
cmluZyAqKXNjcmlwdDsKKworLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgb2Jq
ZWN0IG9mIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorLy8gSW5zdGFuY2VzIG9m
IEpTQ29udGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVybiBhIHJlZmVyZW5j
ZSB0byB0aGUKKy8vIFdpbmRvd1Byb3h5IG9iamVjdC4KKy0gKEpTVmFsdWUgKilnbG9iYWxPYmpl
Y3Q7CisKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gT2JqZWN0
aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJhY2sgZnJvbSBKYXZh
U2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIGNvbnRleHQuIE91dHNpZGUgb2YKKy8v
IGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4K
KysgKEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0OworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNh
bGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAor
Ly8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNr
J3MgdGhpcyB2YWx1ZS4gT3V0c2lkZQorLy8gb2YgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQg
dGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoSlNWYWx1ZSAqKWN1cnJlbnRUaGlzOwor
Ly8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBi
bG9jayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQg
dG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgYXJndW1lbnRzLCBvYmplY3RzCisvLyBpbiB0aGUg
cmV0dXJuZWQgYXJyYXkgYXJlIGluc3RhbmNlcyBvZiBKU1ZhbHVlLiBPdXRzaWRlIG9mIGEgY2Fs
bGJhY2sgZnJvbQorLy8gSmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisr
IChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50czsKKworLy8gVGhlICJleGNlcHRpb24iIHByb3Bl
cnR5IG1heSBiZSB1c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0byBKYXZhU2NyaXB0LgorLy8g
QmVmb3JlIGEgY2FsbGJhY2sgaXMgbWFkZSBmcm9tIEphdmFTY3JpcHQgdG8gYW4gT2JqZWN0aXZl
LUMgYmxvY2sgb3IgbWV0aG9kLAorLy8gdGhlIHByaW9yIHZhbHVlIG9mIHRoZSBleGNlcHRpb24g
cHJvcGVydHkgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIHRoZSBwcm9wZXJ0eQorLy8gd2lsbCBiZSBz
ZXQgdG8gbmlsLiBBZnRlciB0aGUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCB0aGUgbmV3IHZhbHVl
IG9mIHRoZQorLy8gZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcmVhZCwgYW5kIHByaW9yIHZh
bHVlIHJlc3RvcmVkLiBJZiB0aGUgbmV3IHZhbHVlCisvLyBvZiBleGNlcHRpb24gaXMgbm90IG5p
bCwgdGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIHRoYXQgdmFsdWUgYmVpbmcgdGhyb3duLgor
Ly8gVGhpcyBwcm9wZXJ0eSBtYXkgYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZvciB1bmNhdWdodCBl
eGNlcHRpb25zIGFyaXNpbmcgZnJvbQorLy8gQVBJIGZ1bmN0aW9uIGNhbGxzIChzaW5jZSB0aGUg
ZGVmYXVsdCBiZWhhdmlvdXIgb2YgImV4Y2VwdGlvbkhhbmRsZXIiIGlzIHRvCisvLyBhc3NpZ24g
YW50IHVuY2F1Z2h0IGV4Y2VwdGlvbiB0byB0aGlzIHByb3BlcnR5KS4KKy8vIElmIGEgSlNWYWx1
ZSBvcmdpbmF0aW5nIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGluZSB0aGlzIHRoaXMg
Y29udGV4dAorLy8gaXMgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSwgYW4gT2JqZWN0aXZlLUMg
ZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorQHByb3BlcnR5KHJldGFpbikgSlNWYWx1ZSAqZXhj
ZXB0aW9uOworCisvLyBJZiBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uIHJlc3VsdHMgaW4gYW4g
dW5jYXVnaHQgSmF2YVNjcmlwdCBleGNlcHRpb24sIHRoZQorLy8gImV4Y2VwdGlvbkhhbmRsZXIi
IGJsb2NrIHdpbGwgYmUgaW52b2tlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHRo
ZQorLy8gZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzdG9yZSB0aGUgZXhjZXB0aW9uIHRvIHRoZSBl
eGNlcHRpb24gcHJvcGVydHkgb24KKy8vIGNvbnRleHQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIGRl
ZmF1bHQgYmVoYXZpb3VyIGlzIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucworLy8gb2NjdXJpbmcg
d2l0aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhyb3duIHVwb24gcmV0
dXJuLgorLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3VsdCBpbiBhbGwgdW5j
YXVnaHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQorLy8gdGhlIEFQSSBiZWluZyBzaWxlbnRseSBj
b25zdW1lZC4KK0Bwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5kbGVyKShKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CisKKy8vIEFsbCBpbnN0YW5jZXMgb2Yg
SlNDb250ZXh0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgSlNWaXJ0dWFsTWFjaGluZS4g
VGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUgcHJvdmlkZXMgYW4gIm9iamVjdCBzcGFjZSIgb3Igc2V0
IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuCitAcHJvcGVydHkocmVhZG9ubHksIHJldGFpbikgSlNW
aXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmU7CisKK0BlbmQKKworLy8gSW5zdGFuY2VzIG9m
IEpTQ29udGV4dCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIG9yZGVyIHRvIGVu
YWJsZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkgYW5kIGluZGV4LCBm
b3IgZXhhbXBsZToKKy8vCisvLyAgICBKU0NvbnRleHQgKmNvbnRleHQ7CisvLyAgICBKU1ZhbHVl
ICp2ID0gY29udGV4dFtAIlgiXTsgLy8gR2V0IHZhbHVlIGZvciAiWCIgZnJvbSB0aGUgZ2xvYmFs
IG9iamVjdC4KKy8vICAgIGNvbnRleHRbQCJZIl0gPSB2OyAgICAgICAgICAvLyBBc3NpZ24gJ3Yn
IHRvICJZIiBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vCisvLyBBbiBvYmplY3Qga2V5IHBhc3Nl
ZCBhcyBhIHN1YnNjcmlwdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEphdmFTY2lwdCB2YWx1ZSwK
Ky8vIGFuZCB0aGVuIHRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdXNlZCB0byByZXNv
bHZlIGEgcHJvcGVydHkgb2YgdGhlCisvLyBnbG9iYWwgb2JqZWN0LgorQGludGVyZmFjZSBKU0Nv
bnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vi
c2NyaXB0OihpZClrZXk7CistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vi
c2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTQ29udGV4
dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0dsb2JhbE9iamVjdC5oIgorI2ltcG9ydCAiSlNWYWx1
ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQg
Ik9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorCisjaWYgSlNf
T0JKQ19BUElfRU5BQkxFRAorCit0eXBlZGVmIFdURjo6SGFzaE1hcDxKU1ZhbHVlUmVmLCBzaXpl
X3Q+IFByb3RlY3RNYXA7CisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgeworICAgIEpTVmly
dHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1f
Y29udGV4dDsKKyAgICBKU1dyYXBwZXJNYXAgKm1fd3JhcHBlck1hcDsKKyAgICBQcm90ZWN0TWFw
IG1fcHJvdGVjdGVkOworfQorCitAc3ludGhlc2l6ZSBleGNlcHRpb247CitAc3ludGhlc2l6ZSBl
eGNlcHRpb25IYW5kbGVyOworCistIChpZClpbml0Cit7CisgICAgcmV0dXJuIFtzZWxmIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdXTsKK30KKworLSAoaWQpaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZpcnR1YWxNYWNoaW5lCit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgbV92aXJ0
dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRhaW5dOworICAgIG1fY29udGV4dCA9IEpT
R2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUodmly
dHVhbE1hY2hpbmUpLCAwKTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBhbGxv
Y10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRpb24gPSBuaWw7Cisg
ICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWUg
KmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0aW9u
VmFsdWU7CisgICAgfTsKKworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCistIChKU1ZhbHVl
ICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0Cit7CisgICAgSlNWYWx1ZVJlZiBl
eGNlcHRpb25WYWx1ZSA9IDA7CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0SlMgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpc2NyaXB0KTsKKyAgICBKU1ZhbHVlUmVmIHJl
c3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUywgMCwgMCwgMCwgJmV4
Y2VwdGlvblZhbHVlKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0SlMpOworCisgICAgaWYg
KGV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhW
YWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworfQorCistIChKU1ZhbHVlICopZ2xvYmFsT2Jq
ZWN0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTQ29udGV4dEdldEds
b2JhbE9iamVjdChtX2NvbnRleHQpIGluQ29udGV4dDpzZWxmXTsKK30KKworKyAoSlNDb250ZXh0
ICopY3VycmVudENvbnRleHQKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3Rm
VGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAoQ2FsbGJhY2tEYXRhICop
dGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvbnRleHQg
OiBuaWw7Cit9CisKKysgKEpTVmFsdWUgKiljdXJyZW50VGhpcworeworICAgIFdURlRocmVhZERh
dGEmIHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJhY2tEYXRhICplbnRy
eSA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKworICAgIGlmICghZW50
cnktPmN1cnJlbnRUaGlzKQorICAgICAgICBlbnRyeS0+Y3VycmVudFRoaXMgPSBbW0pTVmFsdWUg
YWxsb2NdIGluaXRXaXRoVmFsdWU6ZW50cnktPnRoaXNWYWx1ZSBpbkNvbnRleHQ6W0pTQ29udGV4
dCBjdXJyZW50Q29udGV4dF1dOworCisgICAgcmV0dXJuIGVudHJ5LT5jdXJyZW50VGhpczsKK30K
KworKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0
aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAo
Q2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBpZiAoIWVudHJ5LT5j
dXJyZW50QXJndW1lbnRzKSB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRl
eHQgY3VycmVudENvbnRleHRdOworICAgICAgICBzaXplX3QgY291bnQgPSBlbnRyeS0+YXJndW1l
bnRDb3VudDsKKyAgICAgICAgSlNWYWx1ZSAqIGFyZ3NbY291bnRdOworICAgICAgICBmb3IgKHNp
emVfdCBpID0wOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3NbaV0gPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTplbnRyeS0+YXJndW1lbnRzW2ldIGluQ29udGV4dDpjb250ZXh0XTsK
KyAgICAgICAgZW50cnktPmN1cnJlbnRBcmd1bWVudHMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czphcmdzIGNvdW50OmNvdW50XTsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnkt
PmN1cnJlbnRBcmd1bWVudHM7Cit9CisKKy0gKEpTVmlydHVhbE1hY2hpbmUqKXZpcnR1YWxNYWNo
aW5lCit7CisgICAgcmV0dXJuIG1fdmlydHVhbE1hY2hpbmU7Cit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQorCistIChKU1ZhbHVlICopb2Jq
ZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleQoreworICAgIHJldHVybiBbc2VsZiBnbG9iYWxP
YmplY3RdW2tleV07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRT
dWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIFtzZWxmIGdsb2JhbE9iamVjdF1b
a2V5XSA9IG9iamVjdDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0KElu
dGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fY29udGV4dDsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm1fYXBpRGF0YSA9IDA7CisKKyAgICBQcm90ZWN0TWFwOjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fcHJvdGVjdGVkLmJlZ2luKCk7CisgICAgUHJvdGVjdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9wcm90ZWN0ZWQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRv
cikKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIGl0ZXJhdG9yLT5rZXkpOwor
CisgICAgW21fd3JhcHBlck1hcCByZWxlYXNlXTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNl
KG1fY29udGV4dCk7CisgICAgW21fdmlydHVhbE1hY2hpbmUgcmVsZWFzZV07CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNl
cHRpb25WYWx1ZQoreworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxmLCBbSlNWYWx1ZSB2
YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2VsZl0pOworfQorCistIChK
U1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvblZh
bHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OnNlbGZdOworfQorCist
IChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvblZhbHVl
Cit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICByZXR1
cm4gTk87Cit9CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEg
KiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVudENv
dW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYgKilh
cmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0
YSgpOworICAgIFtzZWxmIHJldGFpbl07CisgICAgQ2FsbGJhY2tEYXRhICpwcmV2U3RhY2sgPSAo
Q2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgKmNhbGxiYWNrRGF0YSA9
IChDYWxsYmFja0RhdGEpeyBwcmV2U3RhY2ssIHNlbGYsIFtzZWxmLmV4Y2VwdGlvbiByZXRhaW5d
LCB0aGlzVmFsdWUsIG5pbCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBuaWwgfTsKKyAgICB0
aHJlYWREYXRhLm1fYXBpRGF0YSA9IGNhbGxiYWNrRGF0YTsKKyAgICBzZWxmLmV4Y2VwdGlvbiA9
IG5pbDsKK30KKworLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKilj
YWxsYmFja0RhdGEKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFk
RGF0YSgpOworICAgIHNlbGYuZXhjZXB0aW9uID0gY2FsbGJhY2tEYXRhLT5wcmVzZXJ2ZWRFeGNl
cHRpb247CisgICAgW2NhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0aW9uIHJlbGVhc2VdOwor
ICAgIFtjYWxsYmFja0RhdGEtPmN1cnJlbnRUaGlzIHJlbGVhc2VdOworICAgIFtjYWxsYmFja0Rh
dGEtPmN1cnJlbnRBcmd1bWVudHMgcmVsZWFzZV07CisgICAgdGhyZWFkRGF0YS5tX2FwaURhdGEg
PSBjYWxsYmFja0RhdGEtPm5leHQ7CisgICAgW3NlbGYgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQp
cHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIC8vIExvY2sgYWNjZXNzIHRvIG1fcHJv
dGVjdGVkCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworCisg
ICAgUHJvdGVjdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcHJvdGVjdGVkLmFkZCh2YWx1ZSwg
MSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBKU1ZhbHVlUHJvdGVjdCht
X2NvbnRleHQsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKK30KKworLSAodm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUKK3sKKyAgICAv
LyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RlZAorICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
dG9KUyhtX2NvbnRleHQpKTsKKworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0g
bV9wcm90ZWN0ZWQuZmluZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZSA9PSAxKSB7
CisgICAgICAgIG1fcHJvdGVjdGVkLnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3QobV9jb250ZXh0LCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIC0taXRlcmF0b3It
PnZhbHVlOworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7
CisgICAgLy8gTG9jayBhY2Nlc3MgdG8gbV93cmFwcGVyTWFwCisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworICAgIHJldHVybiBbbV93cmFwcGVyTWFwIHdyYXBw
ZXJGb3JPYmplY3Q6b2JqZWN0XTsKK30KKworQGVuZAorCitXZWFrQ29udGV4dFJlZjo6V2Vha0Nv
bnRleHRSZWYoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfaW5pdFdlYWsoJm1fd2Vh
a0NvbnRleHQsIGNvbnRleHQpOworfQorCitXZWFrQ29udGV4dFJlZjo6fldlYWtDb250ZXh0UmVm
KCkKK3sKKyAgICBvYmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsKK30KKworSlNDb250
ZXh0ICogV2Vha0NvbnRleHRSZWY6OmdldCgpCit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWso
Jm1fd2Vha0NvbnRleHQpOworfQorCit2b2lkIFdlYWtDb250ZXh0UmVmOjpzZXQoSlNDb250ZXh0
ICpjb250ZXh0KQoreworICAgIG9iamNfc3RvcmVXZWFrKCZtX3dlYWtDb250ZXh0LCBjb250ZXh0
KTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisK
KyNpbXBvcnQgIkpTQ29udGV4dC5oIgorCitzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBDYWxs
YmFja0RhdGEgKm5leHQ7CisgICAgSlNDb250ZXh0ICpjb250ZXh0OworICAgIEpTVmFsdWUgKnBy
ZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHRoaXNWYWx1ZTsKKyAgICBKU1ZhbHVl
ICpjdXJyZW50VGhpczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudDsKKyAgICBjb25zdCBKU1Zh
bHVlUmVmICphcmd1bWVudHM7CisgICAgTlNBcnJheSAqY3VycmVudEFyZ3VtZW50czsKK307CisK
K2NsYXNzIFdlYWtDb250ZXh0UmVmIHsKK3B1YmxpYzoKKyAgICBXZWFrQ29udGV4dFJlZihKU0Nv
bnRleHQqID0gbmlsKTsKKyAgICB+V2Vha0NvbnRleHRSZWYoKTsKKworICAgIEpTQ29udGV4dCAq
IGdldCgpOworICAgIHZvaWQgc2V0KEpTQ29udGV4dCopOworCitwcml2YXRlOgorICAgIEpTQ29u
dGV4dCAqbV93ZWFrQ29udGV4dDsKK307CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0KEludGVybmFs
KQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0NvbnRleHQg
Kik7CisKKy0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbjsKKy0g
KEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0aW9u
OworLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb247
CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFj
a0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVudENvdW50OihzaXpl
X3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYgKilhcmd1bWVudHM7
CistICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0
YTsKKworLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworLSAodm9pZCl1bnByb3Rl
Y3Q6KEpTVmFsdWVSZWYpdmFsdWU7CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0Oihp
ZClvYmplY3Q7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTRXhwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0V4cG9ydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0V4
cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisvLyBXaGVuIGFuIEph
dmFTY3JpcHQgdmFsdWUgaXMgY3JlYXRlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGFuIE9iamVjdGl2
ZS1DIGNsYXNzCisvLyBmb3Igd2hpY2ggbm8gY29weWluZyBjb252ZXJzaW9uIGlzIHNwZWNpZmll
ZCBhIEphdmFTY3JpcHQgd3JhcHBlciBvYmplY3Qgd2lsbAorLy8gYmUgY3JlYXRlZC4KKy8vCisv
LyBJbiBKYXZhU2NyaXB0IGluaGVyaXRhbmNlIGlzIHN1cHBvcnRlZCB2aWEgYSBjaGFpbiBvZiBw
cm90b3R5cGUgb2JqZWN0cywgYW5kCisvLyBmb3IgZWFjaCBPYmplY3RpdmUtQyBjbGFzcyAoYW5k
IHBlciBKU0NvbnRleHQpIGFuIG9iamVjdCBhcHByb3ByaWF0ZSBmb3IgdXNlCisvLyBhcyBhIHBy
b3RvdHlwZSB3aWxsIGJlIHByb3ZpZGVkLiBGb3IgdGhlIGNsYXNzIE5TT2JqZWN0IHRoZSBwcm90
b3R5cGUgb2JqZWN0CisvLyB3aWxsIGJlIHRoZSBKYXZhU2NyaXB0IGNvbnRleHQncyBPYmplY3Qg
UHJvdG90eXBlLiBGb3IgYWxsIG90aGVyIE9iamVjdGl2ZS1DCisvLyBjbGFzc2VzIGEgUHJvdG90
eXBlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuIFRoZSBQcm90b3R5cGUgb2JqZWN0IGZvciBhIGdp
dmVuCisvLyBPYmplY3RpdmUtQyBjbGFzcyB3aWxsIGhhdmUgaXRzIGludGVybmFsIFtQcm90b3R5
cGVdIHByb3BlcnR5IHNldCB0byBwb2ludCB0bworLy8gdGhlIFByb3RvdHlwZSBvYmplY3Qgb2Yg
dGhlIE9iamVjdGl2ZS1DIGNsYXNzJ3Mgc3VwZXJjbGFzcy4gQXMgc3VjaCB0aGUKKy8vIHByb3Rv
dHlwZSBjaGFpbiBmb3IgYSBKYXZhU2NyaXB0IHdyYXBwZXIgb2JqZWN0IHdpbGwgcmVmbGVjdCB0
aGUgd3JhcHBlZAorLy8gT2JqZWN0aXZlLUMgdHlwZSdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4K
Ky8vCisvLyBJbiBhZGRpdGlvbiB0byB0aGUgUHJvdG90eXBlIG9iamVjdCBhIEphdmFTY3JpcHQg
Q29uc3RydWN0b3Igb2JqZWN0IHdpbGwgYWxzbworLy8gYmUgcHJvZHVjZWQgZm9yIGVhY2ggT2Jq
ZWN0aXZlLUMgY2xhc3MuIFRoZSBDb25zdHJ1Y3RvciBvYmplY3QgaGFzIGEgcHJvcGVydHkKKy8v
IG5hbWVkICdwcm90b3R5cGUnIHRoYXQgcmVmZXJlbmNlcyB0aGUgUHJvdG90eXBlIG9iamVjdCwg
YW5kIHRoZSBQcm90b3R5cGUKKy8vIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBuYW1lZCAnY29uc3Ry
dWN0b3InIHRoYXQgcmVmZXJlbmNlcyB0aGUgQ29uc3RydWN0b3IuCisvLyBUaGUgQ29uc3RydWN0
b3Igb2JqZWN0IGlzIG5vdCBjYWxsYWJsZS4KKy8vCisvLyBCeSBkZWZhdWx0IG5vIG1ldGhvZHMg
b3IgcHJvcGVydGllcyBvZiB0aGUgT2JqZWN0aXZlLUMgY2xhc3Mgd2lsbCBiZSBleHBvc2VkCisv
LyB0byBKYXZhU2NyaXB0LCBob3dldmVyIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgbWF5IGV4cGxp
Y2l0bHkgYmUgZXhwb3J0ZWQuCisvLyBGb3IgZWFjaCBwcm90b2NvbCB0aGF0IGEgY2xhc3MgY29u
Zm9ybXMgdG8sIGlmIHRoZSBwcm90b2NvbCBpbmNvcnBvcmF0ZXMgdGhlCisvLyBwcm90b2NvbCBK
U0V4cG9ydCwgdGhlbiB0aGUgcHJvdG9jb2wgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGxpc3Qg
b2YgbWV0aG9kcworLy8gYW5kIHByb3BlcnRpZXMgdG8gYmUgZXhwb3J0ZWQgdG8gSmF2YVNjcmlw
dC4KKy8vCisvLyBGb3IgZWFjaCBpbnN0YW5jZSBtZXRob2QgYmVpbmcgZXhwb3J0ZWQsIGEgY29y
cmVzcG9uZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9uCisvLyB3aWxsIGJlIGFzc2lnbmVkIGFzIGEg
cHJvcGVydHkgb2YgdGhlIFByb3RvdHlwZSBvYmplY3QsIGZvciBlYWNoIE9iamVjdGl2ZS1DCisv
LyBwcm9wZXJ0eSBiZWluZyBleHBvcnRlZCBhIEphdmFTY3JpcHQgYWNjZXNzb3IgcHJvcGVydHkg
d2lsbCBiZSBjcmVhdGVkIG9uIHRoZQorLy8gUHJvdG90eXBlLCBhbmQgZm9yIGVhY2ggY2xhc3Mg
bWV0aG9kIGV4cG9ydGVkIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiB3aWxsIGJlCisvLyBjcmVhdGVk
IG9uIHRoZSBDb25zdHJ1Y3RvciBvYmplY3QuIEZvciBleGFtcGxlOgorLy8KKy8vICAgIEBwcm90
b2NvbCBNeUNsYXNzSmF2YVNjcmlwdE1ldGhvZHMgPEpTRXhwb3J0PgorLy8gICAgLSAodm9pZClm
b287CisvLyAgICBAZW5kCisvLworLy8gICAgQGludGVyZmFjZSBNeUNsYXNzIDogTlNPYmplY3Qg
PE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcz4KKy8vICAgIC0gKHZvaWQpZm9vOworLy8gICAgLSAo
dm9pZCliYXI7CisvLyAgICBAZW5kCisvLworLy8gSWYgYW4gaW5zdGFuY2Ugb2YgTXlDbGFzcyBp
cyBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IHZhbHVlLCB0aGUgcmVzdWx0aW5nCisvLyB3cmFw
cGVyIG9iamVjdCB3aWxsICh2aWEgaXRzIHByb3RvdHlwZSkgZXhwb3J0IHRoZSBtZXRob2QgImZv
byIgdG8gSmF2YVNjcmlwdCwKKy8vIHNpbmNlIHRoZSBjbGFzcyBjb25mb3JtcyB0byB0aGUgTXlD
bGFzc0phdmFTY3JpcHRFeHBvcnRzIHByb3RvY29sLCBhbmQgdGhpcworLy8gcHJvdG9jb2wgaW5j
b3Jwb3JhdGVzIEpTRXhwb3J0LiAiYmFyIiB3aWxsIG5vdCBiZSBleHBvcnRlZC4KKy8vCisvLyBQ
cm9wZXJ0aWVzLCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcg
dHlwZXMgYXJlCisvLyBzdXBwb3J0ZWQ6CisvLworLy8gUHJpbWl0aXZlIG51bWJlcnM6IHNpZ25l
ZCB2YWx1ZXMgb2YgdXAgdG8gMzItYml0cyBhcmUgY29udmVydGVkIGluIGEgbWFubmVyCisvLyAg
ICBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoSW50MzIvdG9JbnQzMiwgdW5zaWduZWQgdmFsdWVz
IG9mIHVwIHRvIDMyLWJpdHMKKy8vICAgIGFyZSBjb252ZXJ0ZWQgaW4gYSBtYW5uZXIgY29uc2lz
dGVudCB3aXRoIHZhbHVlV2l0aFVJbnQzMi90b1VJbnQzMiwgYWxsCisvLyAgICBvdGhlciBudW1l
cmljIHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRoIHZhbHVlV2l0aERvdWJs
ZS8KKy8vICAgIHRvRG91YmxlLgorLy8gQk9PTDogdmFsdWVzIGFyZSBjb252ZXJ0ZWQgY29uc2lz
dGVudGx5IHdpdGggdmFsdWVXaXRoQm9vbC90b0Jvb2wuCisvLyBpZDogdmFsdWVzIGFyZSBjb252
ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFsdWVXaXRoT2JqZWN0L3RvT2JqZWN0LgorLy8gPE9i
amVjdGl2ZS1DIENsYXNzPjogLSB3aGVyZSB0aGUgdHlwZSBpcyBhIHBvaW50ZXIgdG8gYSBzcGVj
aWZpZWQgT2JqZWN0aXZlLUMKKy8vICAgIGNsYXNzLCBjb252ZXJzaW9uIGlzIGNvbnNpc3RlbnQg
d2l0aCB2YWx1ZVdpdGhPYmplY3RPZkNsYXNzL3RvT2JqZWN0LgorLy8gc3RydWN0IHR5cGVzOiBD
IHN0cnVjdCB0eXBlcyBhcmUgc3VwcG9ydGVkLCB3aGVyZSBKU1ZhbHVlIHByb3ZpZGVzIHN1cHBv
cnQKKy8vICAgIGZvciB0aGUgZ2l2ZW4gdHlwZS4gU3VwcG9ydCBpcyBidWlsdCBpbiBmb3IgQ0dQ
b2ludCwgTlNSYW5nZSwgQ0dSZWN0LCBhbmQKKy8vICAgIENHU2l6ZTsgc2VlIEpTVmFsdWVTdHJ1
Y3RTdXBwb3J0LmggZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhZGQgc3VwcG9ydAorLy8gICAg
Zm9yIGFkZGl0aW9uYWwgdHlwZXMuCisvLyBibG9jayB0eXBlczogSW4gYWRkaXRpb24gdG8gc3Vw
cG9ydCBwcm92aWRlZCBieSB2YWx1ZVdpdGhPYmplY3QvdG9PYmplY3QgZm9yCisvLyAgICBibG9j
ayB0eXBlcywgaWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVu
dCwgd2hlcmUgdGhlCisvLyAgICB0eXBlIHJlcXVpcmVkIGlzIGEgYmxvY2sgd2l0aCBhIHZvaWQg
cmV0dXJuIHZhbHVlIChhbmQgd2hlcmUgdGhlIGJsb2NrJ3MKKy8vICAgIGFyZ3VtZW50cyBhcmUg
YWxsIG9mIHN1cHBvcnRlZCB0eXBlcyksIHRoZW4gYSBzcGVjaWFsIGFkYXB0b3IgYmxvY2sKKy8v
ICAgIHdpbGwgYmUgY3JlYXRlZCwgYWxsb3dpbmcgdGhlIHRoZSBKYXZhU2NyaXB0IGZ1bmN0aW9u
IHRvIGJlIHVzZWQgaW4gdGhlCisvLyAgICBwbGFjZSBvZiBhIGJsb2NrLgorLy8KKy8vIEZvciBh
bnkgaW50ZXJmYWNlIHRoYXQgY29uZm9ybXMgdG8gSlNFeHBvcnQgdGhlIG5vcm1hbCBjb3B5aW5n
IGNvbnZlcnNpb24gZm9yCisvLyBidWlsdCBpbiB0eXBlcyB3aWxsIGJlIGluaGliaXRlZCAtIHNv
LCBmb3IgZXhhbXBsZSwgaWYgYW4gaW5zdGFuY2UgdGhhdAorLy8gZGVyaXZlcyBmcm9tIE5TU3Ry
aW5nIGJ5IGNvbmZvcm1zIHRvIEpTRXhwb3J0IGlzIHBhc3NlZCB0byB2YWx1ZVdpdGhPYmplY3Q6
LAorLy8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIE9iamVjdGl2ZS1DIG9iamVjdCB3aWxsIGJl
IHJldHVybmVkIHJhdGhlciB0aGFuIGEKKy8vIEphdmFTY3JpcHQgc3RyaW5nIHByaW1pdGl2ZS4K
K0Bwcm90b2NvbCBKU0V4cG9ydAorQGVuZAorCisvLyBXaGVuIGEgc2VsZWN0b3IgdGhhdCB0YWtl
cyBvbmUgb3IgbW9yZSBhcmd1bWVudHMgaXMgY29udmVydGVkIHRvIGEgSmF2YVNjcmlwdAorLy8g
cHJvcGVydHkgbmFtZSwgYnkgZGVmYXVsdCBhIHByb3BlcnR5IG5hbWUgd2lsbCBiZSBnZW5lcmF0
ZWQgYnkgcGVyZm9ybWluZyB0aGUKKy8vIGZvbGxvd2luZyBjb252ZXJzaW9uOgorLy8gIC0gQWxs
IHNlbWljb2xvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc2VsZWN0b3IKKy8vICAtIEFueSBsb3dl
cmNhc2UgbGV0dGVyIHRoYXQgaGFkIGZvbGxvd2VkIGEgc2VtaWNvbG9uIHdpbGwgYmUgY2FwaXRh
bGl6ZWQuCisvLyBVbmRlciB0aGUgZGVmYXVsdCBjb252ZXJzaW9uIGEgc2VsZWN0b3IgImRvRm9v
OndpdGhCYXI6IiB3aWxsIGJlIGV4cG9ydGVkIGFzCisvLyAiZG9Gb29XaXRoQmFyIi4gVGhlIGRl
ZmF1bHQgY29udmVyc2lvbiBtYXkgYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBKU0V4cG9ydEFzCisv
LyBtYWNybywgZm9yIGV4YW1wbGUgdG8gZXhwb3J0IGEgbWV0aG9kICJkb0Zvbzp3aXRoQmFyOiIg
YXMgImRvRm9vIjoKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlDbGFzc0phdmFTY3JpcHRNZXRob2Rz
IDxKU0V4cG9ydD4KKy8vICAgIEpTRXhwb3J0QXMoZG9Gb28sCisvLyAgICAtICh2b2lkKWRvRm9v
OihpZClmb28gd2l0aEJhcjooaWQpYmFyCisvLyAgICApOworLy8gICAgQGVuZAorLy8KKy8vIE5v
dGUgdGhhdCB0aGUgSlNFeHBvcnQgbWFjcm8gbWF5IG9ubHkgYmUgYXBwbGllZCB0byBhIHNlbGVj
dG9yIHRoYXQgdGFrZXMgb25lCisvLyBvciBtb3JlIGFyZ3VtZW50LgorI2RlZmluZSBKU0V4cG9y
dEFzKFByb3BlcnR5TmFtZSwgU2VsZWN0b3IpIFwKKyAgICBAb3B0aW9uYWwgU2VsZWN0b3IgX19K
U19FWFBPUlRfQVNfXyMjUHJvcGVydHlOYW1lOihpZClhcmd1bWVudDsgQHJlcXVpcmVkIFNlbGVj
dG9yCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkFQSUNhc3QuaCIK
KyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKKyNpbXBvcnQg
IkVycm9yLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9ydCAiSlNDb250ZXh0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQg
Ik9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisjaW1wb3J0ICJ3dGYv
SGFzaE1hcC5oIgorI2ltcG9ydCAid3RmL0hhc2hTZXQuaCIKKyNpbXBvcnQgInd0Zi9WZWN0b3Iu
aCIKKyNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisjaW1wb3J0ICJ3dGYvdGV4dC9XVEZTdHJp
bmcuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIEpTX09CSkNfQVBJ
X0VOQUJMRUQKKworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldyaXRhYmxl
S2V5ID0gQCJ3cml0YWJsZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9y
RW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVy
dHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5ID0gQCJjb25maWd1cmFibGUiOworTlNTdHJpbmcg
KiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5ID0gQCJ2YWx1ZSI7CitOU1N0cmlu
ZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5ID0gQCJnZXQiOworTlNTdHJpbmcg
KiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleSA9IEAic2V0IjsKKworQGltcGxlbWVu
dGF0aW9uIEpTVmFsdWUgeworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsKKyAgICBKU0NvbnRleHQg
Km1fd2Vha0NvbnRleHQ7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZh
bHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKSBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9PTCl2YWx1ZSBpbkNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRo
RG91YmxlOihkb3VibGUpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7Cisg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9
CisrIChKU1ZhbHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVl
KSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoVUludDMyOih1
aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpT
VmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQK
K3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApIGluQ29udGV4dDpjb250ZXh0XTsKK30K
KysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVjdE1ha2VB
cnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAwKSBpbkNvbnRl
eHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVndWxhckV4cHJlc3Np
b25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0cmluZyAqKWZsYWdz
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIEpTU3RyaW5nUmVmIHBhdHRl
cm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcGF0dGVy
bik7CisgICAgSlNTdHJpbmdSZWYgZmxhZ3NTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0
cmluZygoQ0ZTdHJpbmdSZWYpZmxhZ3MpOworICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdID0g
eyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBwYXR0
ZXJuU3RyaW5nKSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgZmxhZ3NTdHJpbmcpIH07CisgICAgSlNTdHJpbmdSZWxlYXNlKHBhdHRlcm5TdHJpbmcp
OworICAgIEpTU3RyaW5nUmVsZWFzZShmbGFnc1N0cmluZyk7CisKKyAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlUmVnRXhwKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIDIsIGFyZ3VtZW50cywgMCkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAo
SlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICBKU1N0cmluZ1JlZiBzdHJp
bmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbWVzc2FnZSk7Cisg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7
CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlRXJyb3Io
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3VtZW50LCAwKSBpbkNvbnRl
eHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTnVsbEluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpK
U1ZhbHVlTWFrZU51bGwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSkgaW5Db250ZXh0
OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTpKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKSBp
bkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKGlkKXRvT2JqZWN0Cit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1fdmFsdWUpOwor
fQorLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHMKK3sKKyAgICBpZCByZXN1bHQgPSBb
c2VsZiB0b09iamVjdF07CisgICAgcmV0dXJuIFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpjbHNdID8g
cmVzdWx0IDogbmlsOworfQorCistIChCT09MKXRvQm9vbAoreworICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6
IE5POworfQorLSAoZG91YmxlKXRvRG91YmxlCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChpbnQzMl90KXRvSW50MzIKK3sK
KyAgICByZXR1cm4gSlNDOjp0b0ludDMyKFtzZWxmIHRvRG91YmxlXSk7Cit9CistICh1aW50MzJf
dCl0b1VJbnQzMgoreworICAgIHJldHVybiBKU0M6OnRvVUludDMyKFtzZWxmIHRvRG91YmxlXSk7
Cit9CistIChOU051bWJlciAqKXRvTnVtYmVyCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9O
dW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlv
bik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TU3RyaW5nICopdG9TdHJp
bmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAo
IWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhjb250ZXh0SW50ZXJuYWxDb250
ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQor
ICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorLSAoTlNEYXRlICopdG9EYXRlCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3VsdCA9IHZhbHVl
VG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChOU0FycmF5ICopdG9BcnJh
eQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKy0gKE5TRGljdGlvbmFyeSAqKXRvRGljdGlvbmFyeQoreworICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1
bHQgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBt
X3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4
dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCist
IChKU1ZhbHVlICopdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sK
KyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRp
b24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhj
ZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0
cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9
IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2Jq
ZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistICh2b2lkKXNldFZhbHVlOihpZCl2YWx1
ZSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
bV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICBbY29u
dGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgb2JqZWN0VG9WYWx1ZShjb250
ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsK
KyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorfQorLSAoQk9PTClkZWxldGVQcm9w
ZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsK
KworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250
ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1Jl
ZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5
TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdERlbGV0ZVByb3BlcnR5KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbikgPyBZRVMg
OiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcg
Kilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0
XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFtZSk7CisgICAgQk9P
TCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG9iamVjdCwgbmFtZSkgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFt
ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKHZvaWQpZGVmaW5lUHJvcGVydHk6KE5TU3Ry
aW5nICopcHJvcGVydHkgZGVzY3JpcHRvcjooaWQpZGVzY3JpcHRvcgoreworICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworICAgIFtbY29udGV4dCBnbG9iYWxPYmplY3RdW0AiT2JqZWN0Il0gaW52b2tlTWV0
aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVudHM6QFsgc2VsZiwgcHJvcGVydHksIGRl
c2NyaXB0b3IgXV07Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIp
aW5kZXgKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoaW5kZXggIT0gKHVu
c2lnbmVkKWluZGV4KQorICAgICAgICBbc2VsZiB2YWx1ZUZvclByb3BlcnR5OltbSlNWYWx1ZSB2
YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZl
eGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2
YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVz
dWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRp
b246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1
bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxm
IGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHNldFZhbHVl
OnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250
ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRp
b24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsICh1bnNpZ25lZClpbmRleCwgb2Jq
ZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRp
b24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNVbmRlZmluZWQKK3sKKyAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYg
SlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFs
dWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051bGwKK3sKKyAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlz
TnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBO
TzsKK30KKy0gKEJPT0wpaXNCb29sZWFuCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3Nl
bGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc0Jvb2xlYW4oY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9Cist
IChCT09MKWlzTnVtYmVyCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNT
dHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBy
ZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc09iamVjdAorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29u
dGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
bV92YWx1ZSkpID8gWUVTIDogTk87Cit9CisKKy0gKEJPT0wpaXNFcXVhbFRvT2JqZWN0OihpZCl2
YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuIEpTVmFsdWVJc1N0
cmljdEVxdWFsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsIG9iamVj
dFRvVmFsdWUoY29udGV4dCwgdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
IE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEJPT0wgcmVzdWx0ID0g
SlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pID8gWUVTIDogTk87Cisg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5
RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9PTClp
c0luc3RhbmNlT2Y6KGlkKXZhbHVlCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYg
Y29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgY29uc3RydWN0b3IgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0VG9W
YWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgY29uc3RydWN0b3IsICZleGNl
cHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtj
b250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCistIChKU1ZhbHVlICopY2FsbFdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50ZWdlciBhcmd1bWVu
dENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW2FyZ3VtZW50
Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kp
CisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoY29udGV4dCwgW2FyZ3Mgb2Jq
ZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNP
YmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIDAsIGFyZ3VtZW50Q291bnQsIGFyZ3Vt
ZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtj
b250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9Cist
IChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3MKK3sKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJbnRlZ2VyIGFyZ3VtZW50Q291bnQgPSBb
YXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbYXJndW1lbnRDb3VudF07Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKKyAgICAgICAg
YXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCBbYXJncyBvYmplY3RBdEluZGV4
OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
bV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNP
YmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgJmV4
Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZh
bHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistIChKU1ZhbHVl
ICopaW52b2tlTWV0aG9kOihOU1N0cmluZyAqKW1ldGhvZCB3aXRoQXJndW1lbnRzOihOU0FycmF5
ICopYXJndW1lbnRzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50ZWdl
ciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50cyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmdz
W2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENv
dW50OyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIFthcmd1
bWVudHMgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
CisgICAgSlNPYmplY3RSZWYgdGhpc09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7CisgICAgSlNWYWx1ZVJlZiBmdW5jID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB0aGlzT2Jq
ZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZ1bmMsICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmpl
Y3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNlcHRpb24pOworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNl
cHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpy
ZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU0NvbnRleHQgKiljb250ZXh0Cit7
CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQpOworfQorCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN0cnVjdFN1cHBvcnQpCisKKy0gKENHUG9pbnQpdG9Q
b2ludAoreworICAgIHJldHVybiAoQ0dQb2ludCl7CisgICAgICAgIFtzZWxmW0AieCJdIHRvRG91
YmxlXSwKKyAgICAgICAgW3NlbGZbQCJ5Il0gdG9Eb3VibGVdCisgICAgfTsKK30KKworLSAoTlNS
YW5nZSl0b1JhbmdlCit7CisgICAgcmV0dXJuIChOU1JhbmdlKXsKKyAgICAgICAgKE5TVUludGVn
ZXIpW3NlbGZbQCJsb2NhdGlvbiJdIHRvRG91YmxlXSwKKyAgICAgICAgKE5TVUludGVnZXIpW3Nl
bGZbQCJsZW5ndGgiXSB0b0RvdWJsZV0KKyAgICB9OworfQorCistIChDR1JlY3QpdG9SZWN0Cit7
CisgICAgcmV0dXJuIChDR1JlY3QpeworICAgICAgICBbc2VsZiB0b1BvaW50XSwKKyAgICAgICAg
W3NlbGYgdG9TaXplXQorICAgIH07Cit9CisKKy0gKENHU2l6ZSl0b1NpemUKK3sKKyAgICByZXR1
cm4gKENHU2l6ZSl7CisgICAgICAgIFtzZWxmW0Aid2lkdGgiXSB0b0RvdWJsZV0sCisgICAgICAg
IFtzZWxmW0AiaGVpZ2h0Il0gdG9Eb3VibGVdCisgICAgfTsKK30KKworKyAoSlNWYWx1ZSAqKXZh
bHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJ4
IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBvaW50LnhdLAorICAgICAgICBAInkiOltOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueV0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsK
K30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJhbmdlOihOU1JhbmdlKXJhbmdlIGluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhP
YmplY3Q6QHsKKyAgICAgICAgQCJsb2NhdGlvbiI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpy
YW5nZS5sb2NhdGlvbl0sCisgICAgICAgIEAibGVuZ3RoIjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZs
b2F0OnJhbmdlLmxlbmd0aF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAg
ICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJlY3Qub3JpZ2luLnhdLAorICAgICAg
ICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmlnaW4ueV0sCisgICAgICAg
IEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5zaXplLndpZHRoXSwKKyAg
ICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5zaXplLmhlaWdo
dF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAg
IHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJ3aWR0aCI6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLndpZHRoXSwKKyAgICAgICAgQCJoZWlnaHQiOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWlnaHRdCisgICAgfSBpbkNvbnRleHQ6Y29u
dGV4dF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUoU3Vic2NyaXB0U3Vw
cG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2NyaXB0OihpZClrZXkKK3sK
KyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVsoTlNPYmplY3QqKWtleSBpc0tp
bmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgIGtleSA9IFtbSlNWYWx1ZSB2
YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmluZ107CisgICAgICAg
IGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5l
ZEluQ29udGV4dDpjb250ZXh0XTsKKyAgICB9CisKKyAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JQ
cm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCistIChKU1ZhbHVlICopb2JqZWN0QXRJbmRl
eGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgcmV0dXJuIFtzZWxmIHZhbHVl
QXRJbmRleDppbmRleF07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5
ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmtleSBpbkNvbnRl
eHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBzZXRWYWx1ZTpvYmplY3QgZm9yUHJvcGVydHk6KE5T
U3RyaW5nICopa2V5XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVjdCBhdEluZGV4
ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBbc2VsZiBzZXRWYWx1ZTpvYmpl
Y3QgYXRJbmRleDppbmRleF07Cit9CisKK0BlbmQKKworaW5saW5lIGJvb2wgaXNEYXRlKEpTT2Jq
ZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgSlNDOjpB
UElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4dCkpOworICAgIHJldHVybiB0b0pTKG9i
amVjdCktPmluaGVyaXRzKCZKU0M6OkRhdGVJbnN0YW5jZTo6c19pbmZvKTsKK30KKworaW5saW5l
IGJvb2wgaXNBcnJheShKU09iamVjdFJlZiBvYmplY3QsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0b0pTKGNvbnRleHQpKTsK
KyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpKU0FycmF5OjpzX2luZm8p
OworfQorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShJbnRlcm5hbCkKKworZW51bSBDb252ZXJz
aW9uVHlwZSB7CisgICAgQ29udGFpbmVyTm9uZSwKKyAgICBDb250YWluZXJBcnJheSwKKyAgICBD
b250YWluZXJEaWN0aW9uYXJ5Cit9OworCitjbGFzcyBKU0NvbnRhaW5lckNvbnZlcnRvciB7Citw
dWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBKU1ZhbHVlUmVmIGpzOworICAgICAg
ICBpZCBvYmpjOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07CisKKyAgICBK
U0NvbnRhaW5lckNvbnZlcnRvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCkKKyAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgaWQgY29udmVydChKU1Zh
bHVlUmVmIHByb3BlcnR5KTsKKyAgICB2b2lkIGFkZChUYXNrIHRhc2spOworICAgIFRhc2sgdGFr
ZSgpOworICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4gIW1fd29ya2xpc3Quc2l6
ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKKyAg
ICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1fb2JqZWN0TWFwOworICAgIFdURjo6VmVj
dG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitpbmxpbmUgaWQgSlNDb250YWluZXJDb252ZXJ0
b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1
ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmplY3RNYXAuZmluZCh2YWx1ZSk7CisgICAg
aWYgKGl0ZXIgIT0gbV9vYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKKworICAgIFRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KG1fY29udGV4
dCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuanMpCisgICAgICAgIGFkZChyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQub2JqYzsKK30KKwordm9pZCBKU0NvbnRhaW5lckNvbnZlcnRvcjo6YWRk
KFRhc2sgdGFzaykKK3sKKyAgICBtX29iamVjdE1hcC5hZGQodGFzay5qcywgdGFzay5vYmpjKTsK
KyAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5vbmUpCisgICAgICAgIG1fd29ya2xpc3Qu
YXBwZW5kKHRhc2spOworfQorCitKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBKU0NvbnRhaW5l
ckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJUKCFpc1dvcmtMaXN0RW1wdHkoKSk7Cisg
ICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgbV93b3JrbGlzdC5yZW1vdmVM
YXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBKU0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHkoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4
dCwgdmFsdWUpKSB7CisgICAgICAgIGlkIHByaW1pdGl2ZTsKKyAgICAgICAgaWYgKEpTVmFsdWVJ
c0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgcHJpbWl0aXZlID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVTIDogQE5POworICAgICAgICBlbHNlIGlm
IChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgICAgICAvLyBOb3Jt
YWxpemUgdGhlIG51bWJlciwgc28gaXQgd2lsbCB1bmlxdWUgY29ycmVjdGx5IGluIHRoZSBoYXNo
IG1hcCAtCisgICAgICAgICAgICAvLyBpdCdzIG5pY2VyIG5vdCB0byBsZWFrIHRoaXMgaW50ZXJu
YWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIQorICAgICAgICAgICAgdmFsdWUgPSBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0LCBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApKTsKKyAg
ICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCldOworICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIFdvdWxkIGJlIG5pY2Ug
dG8gdW5pcXVlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgICAgIEpTU3RyaW5nUmVmIGpzc3RyaW5n
ID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7CisgICAgICAgICAgICBO
U1N0cmluZyAqIHN0cmluZ05TID0gKE5TU3RyaW5nICopSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwganNzdHJpbmcpOworICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNl
KGpzc3RyaW5nKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtzdHJpbmdOUyBhdXRvcmVsZWFz
ZV07CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkpCisg
ICAgICAgICAgICBwcmltaXRpdmUgPSBbTlNOdWxsIG51bGxdOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpKTsKKyAg
ICAgICAgICAgIHByaW1pdGl2ZSA9IG5pbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKEpT
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUsIHByaW1pdGl2ZSwgQ29udGFpbmVyTm9u
ZSB9OworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCB2YWx1ZSwgMCk7CisKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNP
YmplY3QoY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZl
cnRvcjo6VGFzayl7IG9iamVjdCwgd3JhcHBlZCwgQ29udGFpbmVyTm9uZSB9OworCisgICAgaWYg
KGlzRGF0ZShvYmplY3QsIGNvbnRleHQpKQorICAgICAgICByZXR1cm4gKEpTQ29udGFpbmVyQ29u
dmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2Ux
OTcwOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvYmplY3QsIDApXSwgQ29udGFpbmVyTm9uZSB9
OworCisgICAgaWYgKGlzQXJyYXkob2JqZWN0LCBjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIChK
U0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgW05TTXV0YWJsZUFycmF5IGFycmF5
XSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgIHJldHVybiAoSlNDb250YWluZXJDb252ZXJ0b3I6
OlRhc2speyBvYmplY3QsIFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldLCBDb250YWlu
ZXJEaWN0aW9uYXJ5IH07Cit9CisKK3N0YXRpYyBpZCBjb250YWluZXJWYWx1ZVRvT2JqZWN0KEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayB0YXNr
KQoreworICAgIEFTU0VSVCh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9uZSk7CisgICAgSlNDb250
YWluZXJDb252ZXJ0b3IgY29udmVydG9yKGNvbnRleHQpOworICAgIGNvbnZlcnRvci5hZGQodGFz
ayk7CisgICAgQVNTRVJUKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworICAgIAorICAg
IGRvIHsKKyAgICAgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3VycmVudCA9IHRhc2sg
PSBjb252ZXJ0b3IudGFrZSgpOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmplY3RSZWYganMgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgY3VycmVudC5qcywgMCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9
PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAgICAgQVNTRVJUKFtjdXJyZW50Lm9iamMgaXNL
aW5kT2ZDbGFzczpbTlNNdXRhYmxlQXJyYXkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU011dGFi
bGVBcnJheSAqYXJyYXkgPSAoTlNNdXRhYmxlQXJyYXkgKiljdXJyZW50Lm9iamM7CisgICAgICAg
IAorICAgICAgICAgICAgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyaW5nID0gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
SlNDOjp0b1VJbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBqcywgbGVuZ3RoU3RyaW5nLCAwKSwgMCkpOworICAgICAgICAgICAgSlNTdHJp
bmdSZWxlYXNlKGxlbmd0aFN0cmluZyk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlkIG9iamMgPSBjb252ZXJ0
b3IuY29udmVydChKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBqcywgaSwgMCkp
OworICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6b2JqYyA/IG9iamMgOiBbTlNOdWxs
IG51bGxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TTXV0YWJsZURpY3Rpb25hcnkgY2xh
c3NdXSk7CisgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gKE5T
TXV0YWJsZURpY3Rpb25hcnkgKiljdXJyZW50Lm9iamM7CisKKyAgICAgICAgICAgIEpTUHJvcGVy
dHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lQXJyYXkgPSBKU09iamVjdENvcHlQcm9wZXJ0eU5h
bWVzKGNvbnRleHQsIGpzKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBKU1Byb3BlcnR5
TmFtZUFycmF5R2V0Q291bnQocHJvcGVydHlOYW1lQXJyYXkpOworCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNTdHJp
bmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4KHBy
b3BlcnR5TmFtZUFycmF5LCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQgb2JqYyA9IGNvbnZl
cnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganMsIHByb3BlcnR5TmFt
ZSwgMCkpKQorICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W1soTlNTdHJpbmcgKilKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwcm9wZXJ0eU5hbWUpIGF1dG9y
ZWxlYXNlXV0gPSBvYmpjOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1Byb3BlcnR5
TmFtZUFycmF5UmVsZWFzZShwcm9wZXJ0eU5hbWVBcnJheSk7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAgcmV0dXJuIHRhc2su
b2JqYzsKK30KKworaWQgdmFsdWVUb09iamVjdChKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVS
ZWYgdmFsdWUpCit7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgcmVzdWx0ID0gdmFs
dWVUb09iamVjdFdpdGhvdXRDb3B5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZh
bHVlKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29udGFpbmVyTm9uZSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5vYmpjOworICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRvT2JqZWN0KGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3VsdCk7Cit9CisKK2lkIHZhbHVlVG9OdW1i
ZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGlmIChpZCB3
cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAg
aWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCisgICAgICAgICAg
ICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1ZUlzQm9vbGVhbihjb250
ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZh
bHVlKSA/IEBZRVMgOiBATk87CisKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZToqZXhjZXB0aW9uID8gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKSA6IHJlc3VsdF07Cit9CitpZCB2YWx1ZVRvU3RyaW5nKEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9i
amNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBlZCBpc0tpbmRP
ZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7Cisg
ICAgfQorCisgICAgSlNTdHJpbmdSZWYganNzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAg
IEFTU0VSVCghanNzdHJpbmcpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIE5T
U3RyaW5nKiBzdHJpbmdOUyA9IFsoTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZykgYXV0b3JlbGVhc2VdOworICAgIEpTU3RyaW5nUmVs
ZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJuIHN0cmluZ05TOworfQoraWQgdmFsdWVUb0RhdGUo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGlmIChpZCB3cmFw
cGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYg
KFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKQorICAgICAgICAgICAgcmV0
dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgZG91YmxlIHJlc3VsdCA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gKmV4Y2VwdGlvbiA/IG5p
bCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6cmVzdWx0XTsKK30KK2lk
IHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkg
eworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQor
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgaWYgKEpTVmFsdWVJc09i
amVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IHZhbHVlLCBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheX0pOworCisgICAgaWYgKCEoSlNWYWx1ZUlz
TnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVl
KSkpCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pT
KGNvbnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0aXZlIHRvIE5TQXJyYXkiKSk7CisgICAg
cmV0dXJuIG5pbDsKK30KK2lkIHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNP
YmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBlZCBpc0tpbmRPZkNs
YXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkOwor
ICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQorICAgICAg
ICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0LCAoSlNDb250YWluZXJDb252
ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV0sIENv
bnRhaW5lckRpY3Rpb25hcnl9KTsKKworICAgIGlmICghKEpTVmFsdWVJc051bGwoY29udGV4dCwg
dmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkpKQorICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIkNh
bm5vdCBjb252ZXJ0IHByaW1pdGl2ZSB0byBOU0RpY3Rpb25hcnkiKSk7CisgICAgcmV0dXJuIG5p
bDsKK30KKworY2xhc3MgT2JqY0NvbnRhaW5lckNvbnZlcnRvciB7CitwdWJsaWM6CisgICAgc3Ry
dWN0IFRhc2sgeworICAgICAgICBpZCBvYmpjOworICAgICAgICBKU1ZhbHVlUmVmIGpzOworICAg
ICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07CisKKyAgICBPYmpjQ29udGFpbmVyQ29u
dmVydG9yKEpTQ29udGV4dCAqY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICB7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjb252ZXJ0KGlkIG9iamVjdCk7CisgICAg
dm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRha2UoKTsKKyAgICBib29sIGlzV29ya0xp
c3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQorCitwcml2YXRlOgorICAg
IEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIFdURjo6SGFzaE1hcDxpZCwgSlNWYWx1ZVJlZj4g
bV9vYmplY3RNYXA7CisgICAgV1RGOjpWZWN0b3I8VGFzaz4gbV93b3JrbGlzdDsKK307CisKK0pT
VmFsdWVSZWYgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6Y29udmVydChpZCBvYmplY3QpCit7Cisg
ICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBhdXRvIGl0ID0gbV9vYmplY3RNYXAuZmluZChvYmpl
Y3QpOworICAgIGlmIChpdCAhPSBtX29iamVjdE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKKworICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVj
dFRvVmFsdWVXaXRob3V0Q29weShtX2NvbnRleHQsIG9iamVjdCk7CisgICAgYWRkKHRhc2spOwor
ICAgIHJldHVybiB0YXNrLmpzOworfQorCit2b2lkIE9iamNDb250YWluZXJDb252ZXJ0b3I6OmFk
ZChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2spCit7CisgICAgbV9vYmplY3RNYXAu
YWRkKHRhc2sub2JqYywgdGFzay5qcyk7CisgICAgaWYgKHRhc2sudHlwZSAhPSBDb250YWluZXJO
b25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKK30KKworT2JqY0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayBPYmpjQ29udGFpbmVyQ29udmVydG9yOjp0YWtlKCkKK3sKKyAgICBB
U1NFUlQoIWlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICBUYXNrIGxhc3QgPSBtX3dvcmtsaXN0Lmxh
c3QoKTsKKyAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gbGFzdDsKK30K
Kworc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgb2JqZWN0VG9WYWx1ZVdpdGhv
dXRDb3B5KEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3Qs
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpLCBD
b250YWluZXJOb25lIH07CisKKyAgICBpZiAoIWNsYXNzX2NvbmZvcm1zVG9Qcm90b2NvbChvYmpl
Y3RfZ2V0Q2xhc3Mob2JqZWN0KSwgZ2V0SlNFeHBvcnRQcm90b2NvbCgpKSkgeworICAgICAgICBp
ZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCisgICAgICAgICAgICBy
ZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFr
ZUFycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIE5VTEwsIDApLCBDb250
YWluZXJBcnJheSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRGlj
dGlvbmFyeSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKKworICAgICAgICBpZiAoW29i
amVjdCBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAo
T2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VOdWxsKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpLCBDb250YWluZXJOb25lIH07CisKKyAgICAg
ICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNWYWx1ZSBjbGFzc11dKQorICAgICAgICAg
ICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCAoKEpTVmFs
dWUgKilvYmplY3QpLT5tX3ZhbHVlLCBDb250YWluZXJOb25lIH07CisKKyAgICAgICAgaWYgKFtv
YmplY3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
IChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2VBcnJh
eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAwKSwgQ29udGFpbmVy
QXJyYXkgfTsKKworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25h
cnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6
VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIDAsIDApLCBDb250YWluZXJEaWN0aW9uYXJ5IH07CisKKyAgICAgICAgaWYgKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICAgICAgSlNTdHJpbmdS
ZWYgc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW9iamVj
dCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGpzID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsKKyAgICAgICAgICAgIEpTU3RyaW5n
UmVsZWFzZShzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjpUYXNrKXsgb2JqZWN0LCBqcywgQ29udGFpbmVyTm9uZSB9OworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAg
ICAgICAgICAgaWQgbGl0ZXJhbFRydWUgPSBAWUVTOworICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBsaXRlcmFsVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252
ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCB0cnVlKSwgQ29udGFpbmVyTm9uZSB9OworICAgICAgICAgICAgaWQg
bGl0ZXJhbEZhbHNlID0gQE5POworICAgICAgICAgICAgaWYgKG9iamVjdCA9PSBsaXRlcmFsRmFs
c2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNr
KXsgb2JqZWN0LCBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgZmFsc2UpLCBDb250YWluZXJOb25lIH07CisgICAgICAgICAgICByZXR1cm4gKE9iamND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIFsoTlNOdW1iZXIqKW9iamVjdCBkb3VibGVWYWx1
ZV0pLCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoW29iamVjdCBp
c0tpbmRPZkNsYXNzOltOU0RhdGUgY2xhc3NdXSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZiBh
cmd1bWVudCA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIFsoTlNEYXRlICopb2JqZWN0IHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0pOworICAgICAgICAg
ICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlRGF0ZShjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCAxLCAmYXJndW1lbnQsIDApOworICAgICAgICAgICAgcmV0dXJuIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCByZXN1bHQsIENvbnRhaW5lck5v
bmUgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZl
cnRvcjo6VGFzayl7IG9iamVjdCwgdmFsdWVJbnRlcm5hbFZhbHVlKFtjb250ZXh0IHdyYXBwZXJG
b3JPYmplY3Q6b2JqZWN0XSksIENvbnRhaW5lck5vbmUgfTsKK30KKworSlNWYWx1ZVJlZiBvYmpl
Y3RUb1ZhbHVlKEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQoreworICAgIE9iamNDb250
YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShjb250
ZXh0LCBvYmplY3QpOworICAgIGlmICh0YXNrLnR5cGUgPT0gQ29udGFpbmVyTm9uZSkKKyAgICAg
ICAgcmV0dXJuIHRhc2suanM7CisKKyAgICBPYmpjQ29udGFpbmVyQ29udmVydG9yIGNvbnZlcnRv
cihjb250ZXh0KTsKKyAgICBjb252ZXJ0b3IuYWRkKHRhc2spOworICAgIEFTU0VSVCghY29udmVy
dG9yLmlzV29ya0xpc3RFbXB0eSgpKTsKKworICAgIGRvIHsKKyAgICAgICAgT2JqY0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayBjdXJyZW50ID0gY29udmVydG9yLnRha2UoKTsKKyAgICAgICAgQVNT
RVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBjdXJy
ZW50LmpzKSk7CisgICAgICAgIEpTT2JqZWN0UmVmIGpzID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGN1cnJlbnQuanMsIDApOworCisgICAgICAgIGlm
IChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyQXJyYXkpIHsKKyAgICAgICAgICAgIEFTU0VSVChb
Y3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSk7CisgICAgICAgICAg
ICBOU0FycmF5ICogYXJyYXkgPSAoTlNBcnJheSAqKWN1cnJlbnQub2JqYzsKKyAgICAgICAgICAg
IE5TVUludGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOworICAgICAgICAgICAgZm9yIChOU1VJ
bnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKKyAgICAgICAgICAgICAg
ICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBqcywgaW5kZXgsIGNvbnZlcnRvci5jb252ZXJ0KFthcnJheSBvYmplY3RBdEluZGV4Omlu
ZGV4XSksIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQu
dHlwZSA9PSBDb250YWluZXJEaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIEFTU0VSVChbY3VycmVu
dC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgICAg
IE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IChOU0RpY3Rpb25hcnkqKWN1cnJlbnQub2JqYzsK
KyAgICAgICAgICAgIE5TRW51bWVyYXRvciogZW51bWVyYXRvciA9IFtkaWN0aW9uYXJ5IGtleUVu
dW1lcmF0b3JdOworICAgICAgICAgICAgd2hpbGUgKGlkIGtleSA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSB7CisgICAgICAgICAgICAgICAgaWYgKFtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJp
bmcgY2xhc3NdXSkgeworICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5h
bWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpa2V5KTsKKyAgICAg
ICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBqcywgcHJvcGVydHlOYW1lLCBjb252ZXJ0b3IuY29udmVydChbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6a2V5XSksIDAsIDApOworICAgICAgICAgICAgICAgICAgICBKU1N0cmlu
Z1JlbGVhc2UocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfSB3aGlsZSAoIWNvbnZlcnRvci5pc1dvcmtMaXN0
RW1wdHkoKSk7CisKKyAgICByZXR1cm4gdGFzay5qczsKK30KKworSlNWYWx1ZVJlZiB2YWx1ZUlu
dGVybmFsVmFsdWUoSlNWYWx1ZSAqIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS0+bV92YWx1
ZTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtbW0pTVmFsdWUgYWxs
b2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgaW5Db250ZXh0OmNvbnRleHRdIGF1dG9yZWxlYXNlXTsK
K30KKworLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250
ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICBBU1NFUlQodmFsdWUpOworCisgICAgb2Jq
Y19pbml0V2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7CisKKyAgICBbc3VwZXIgaW5pdF07
CisgICAgW2NvbnRleHQgcHJvdGVjdDp2YWx1ZV07CisgICAgbV92YWx1ZSA9IHZhbHVlOworICAg
IHJldHVybiBzZWxmOworfQorCitzdHJ1Y3QgU3RydWN0VGFnSGFuZGxlciB7CisgICAgU0VMIHR5
cGVUb1ZhbHVlU0VMOworICAgIFNFTCB2YWx1ZVRvVHlwZVNFTDsKK307CisKK3N0YXRpYyBTdHJ1
Y3RUYWdIYW5kbGVyKiBnZXRTdHJ1Y3RUYWdIYW5kbGVyKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBl
KQoreworICAgIHN0YXRpYyBTcGluTG9jayBnZXRTdHJ1Y3RUYWdIYW5kbGVyTG9jayA9IFNQSU5M
T0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJmdldFN0cnVj
dFRhZ0hhbmRsZXJMb2NrKTsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPFJlZlB0cjxTdHJp
bmdJbXBsPiwgU3RydWN0VGFnSGFuZGxlcj4gU3RydWN0SGFuZGxlcnM7CisgICAgc3RhdGljIFN0
cnVjdEhhbmRsZXJzICptX3N0cnVjdEhhbmRsZXJzID0gMDsKKworICAgIGlmICghbV9zdHJ1Y3RI
YW5kbGVycykgeworICAgICAgICBtX3N0cnVjdEhhbmRsZXJzID0gbmV3IFN0cnVjdEhhbmRsZXJz
KCk7CisKKyAgICAgICAgLy8gU3RlcCAxOiBmaW5kIGFsbCB2YWx1ZVdpdGg8Rm9vPjppbkNvbnRl
eHQ6IGNsYXNzIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90IHZhbHVlV2l0aE1p
bkxlbiA9IHN0cmxlbigidmFsdWVXaXRoWDppbkNvbnRleHQ6Iik7CisgICAgICAgIGZvckVhY2hN
ZXRob2RJbkNsYXNzKG9iamVjdF9nZXRDbGFzcyhbSlNWYWx1ZSBjbGFzc10pLCBeKE1ldGhvZCBt
ZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9IG1ldGhvZF9nZXROYW1lKG1ldGhvZCk7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2VsX2dldE5hbWUoc2VsKTsKKyAgICAgICAg
ICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3Ig
dmFsdWVXaXRoPEZvbz46Y29udGV4dDoKKyAgICAgICAgICAgIGlmIChsZW4gPCB2YWx1ZVdpdGhN
aW5MZW4gfHwgc3RybmNtcChuYW1lLCAidmFsdWVXaXRoIiwgOSkgfHwgc3RybmNtcChuYW1lICsg
bGVuIC0gMTEsICI6aW5Db250ZXh0OiIsIDExKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAvLyBDaGVjayBmb3IgWyBpZCwgU0VMLCA8dHlwZT4sIDxjb250ZXh0VHlwZT4g
XQorICAgICAgICAgICAgaWYgKG1ldGhvZF9nZXROdW1iZXJPZkFyZ3VtZW50cyhtZXRob2QpICE9
IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hhciBpZFR5cGVbM107
CisgICAgICAgICAgICAvLyBDaGVjayAybmQgYXJndW1lbnQgdHlwZSBpcyAiQCIKKyAgICAgICAg
ICAgIGNoYXIqIHNlY29uZFR5cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlwZShtZXRob2QsIDMp
OworICAgICAgICAgICAgaWYgKHN0cmNtcChzZWNvbmRUeXBlLCAiQCIpKSB7CisgICAgICAgICAg
ICAgICAgZnJlZShzZWNvbmRUeXBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmcmVlKHNlY29uZFR5cGUpOworICAgICAgICAgICAgLy8gQ2hl
Y2sgcmVzdWx0IHR5cGUgaXMgYWxzbyAiQCIKKyAgICAgICAgICAgIG1ldGhvZF9nZXRSZXR1cm5U
eXBlKG1ldGhvZCwgaWRUeXBlLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoaWRUeXBlLCAi
QCIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNoYXIqIHR5cGUgPSBt
ZXRob2RfY29weUFyZ3VtZW50VHlwZShtZXRob2QsIDIpOworICAgICAgICAgICAgbV9zdHJ1Y3RI
YW5kbGVycy0+YWRkKFdURjo6U3RyaW5nKHR5cGUpLmltcGwoKSwgKFN0cnVjdFRhZ0hhbmRsZXIp
eyBzZWwsIDAgfSk7CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAgICB9KTsKKworICAg
ICAgICAvLyBTdGVwIDI6IGZpbmQgYWxsIHRvPEZvbz4gaW5zdGFuY2UgbWV0aG9kcyBpbiBKU1Zh
bHVlLgorICAgICAgICBzaXplX3QgbWluTGVuVmFsdWUgPSBzdHJsZW4oInRvWCIpOworICAgICAg
ICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhbSlNWYWx1ZSBjbGFzc10sIF4oTWV0aG9kIG1ldGhvZCl7
CisgICAgICAgICAgICBTRUwgc2VsID0gbWV0aG9kX2dldE5hbWUobWV0aG9kKTsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFtZShzZWwpOworICAgICAgICAgICAgc2l6
ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciB0bzxGb28+
CisgICAgICAgICAgICBpZiAobGVuIDwgbWluTGVuVmFsdWUgfHwgc3RybmNtcChuYW1lLCAidG8i
LCAyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVjayBmb3Ig
WyBpZCwgU0VMIF0KKyAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0TnVtYmVyT2ZBcmd1bWVudHMo
bWV0aG9kKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vIFRy
eSB0byBmaW5kIGEgbWF0Y2hpbmcgdmFsdWVXaXRoPEZvbz46Y29udGV4dDogbWV0aG9kLgorICAg
ICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5UmV0dXJuVHlwZShtZXRob2QpOworCisg
ICAgICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxl
cnMtPmZpbmQoV1RGOjpTdHJpbmcodHlwZSkuaW1wbCgpKTsKKyAgICAgICAgICAgIGZyZWUodHlw
ZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdEhhbmRsZXJzLT5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBTdHJ1Y3RUYWdIYW5kbGVyJiBoYW5k
bGVyID0gaXRlci0+dmFsdWU7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgc3RybGVuKDxm
b28+KSA9PSBzdHJsZW4oPEZvbz4pCisgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZVdpdGhO
YW1lID0gc2VsX2dldE5hbWUoaGFuZGxlci50eXBlVG9WYWx1ZVNFTCk7CisgICAgICAgICAgICBz
aXplX3QgdmFsdWVXaXRoTGVuID0gc3RybGVuKHZhbHVlV2l0aE5hbWUpOworICAgICAgICAgICAg
aWYgKHZhbHVlV2l0aExlbiAtIHZhbHVlV2l0aE1pbkxlbiAhPSBsZW4gLSBtaW5MZW5WYWx1ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVjayB0aGF0IDxGb28+
ID09IDxGb28+CisgICAgICAgICAgICBpZiAoc3RybmNtcCh2YWx1ZVdpdGhOYW1lICsgOSwgbmFt
ZSArIDIsIGxlbiAtIG1pbkxlblZhbHVlIC0gMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaGFuZGxlci52YWx1ZVRvVHlwZVNFTCA9IHNlbDsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgLy8gU3RlcCAzOiBjbGVhbiB1cCAtIHJlbW92ZSBlbnRyaWVzIHdoZXJlIHdlIGZv
dW5kIHByb3NwZWN0aXZlIHZhbHVlV2l0aDxGb28+OmluQ29udGV4dDogY29udmVyc2lvbnMsIGJ1
dCBubyBtYXRjaGluZyB0bzxGb28+IG1ldGhvZHMuCisgICAgICAgIHR5cGVkZWYgV1RGOjpIYXNo
U2V0PFJlZlB0cjxXVEY6OlN0cmluZ0ltcGw+ID4gUmVtb3ZlU2V0OworICAgICAgICBSZW1vdmVT
ZXQgcmVtb3ZlU2V0OworICAgICAgICBmb3IgKFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVy
ID0gbV9zdHJ1Y3RIYW5kbGVycy0+YmVnaW4oKTsgaXRlciAhPSBtX3N0cnVjdEhhbmRsZXJzLT5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBTdHJ1Y3RUYWdIYW5kbGVyJiBoYW5kbGVyID0g
aXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXIudmFsdWVUb1R5cGVTRUwpCisg
ICAgICAgICAgICAgICAgcmVtb3ZlU2V0LmFkZChpdGVyLT5rZXkpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChSZW1vdmVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSByZW1vdmVTZXQuYmVnaW4oKTsg
aXRlciAhPSByZW1vdmVTZXQuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIG1fc3RydWN0SGFu
ZGxlcnMtPnJlbW92ZSgqaXRlcik7CisgICAgfQorCisgICAgU3RydWN0SGFuZGxlcnM6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5nKGVuY29kZWRUeXBl
KS5pbXBsKCkpOworICAgIGlmIChpdGVyID09IG1fc3RydWN0SGFuZGxlcnMtPmVuZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJml0ZXItPnZhbHVlOworfQorCisrIChTRUwpc2Vs
ZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFnCit7CisgICAgU3Ry
dWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVjdFRhZ0hhbmRsZXIoc3RydWN0VGFnKTsK
KyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnR5cGVUb1ZhbHVlU0VMIDogbmlsOworfQor
CisrIChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Oihjb25zdCBjaGFyICopc3RydWN0VGFn
Cit7CisgICAgU3RydWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVjdFRhZ0hhbmRsZXIo
c3RydWN0VGFnKTsKKyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnZhbHVlVG9UeXBlU0VM
IDogbmlsOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgW2NvbnRleHQgdW5w
cm90ZWN0Om1fdmFsdWVdOworICAgIG9iamNfZGVzdHJveVdlYWsoJm1fd2Vha0NvbnRleHQpOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFw
T2JqY09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIFt3cmFwcGVkIGRlc2NyaXB0aW9uXTsKKyAgICByZXR1cm4gW3NlbGYgdG9T
dHJpbmddOworfQorCitOU0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25z
dCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBTRUwgc2VsZWN0b3IgPSBbSlNWYWx1ZSBzZWxl
Y3RvckZvclN0cnVjdFRvVmFsdWU6ZW5jb2RlZFR5cGVdOworICAgIGlmICghc2VsZWN0b3IpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hhciogbWV0aG9kVHlwZXMgPSBtZXRob2Rf
Z2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldENsYXNzTWV0aG9kKFtKU1ZhbHVlIGNsYXNzXSwgc2Vs
ZWN0b3IpKTsKKyAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGlu
dm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVX
aXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6
c2VsZWN0b3JdOworICAgIHJldHVybiBpbnZvY2F0aW9uOworfQorCitOU0ludm9jYXRpb24qIHZh
bHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBT
RUwgc2VsZWN0b3IgPSBbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6ZW5jb2RlZFR5
cGVdOworICAgIGlmICghc2VsZWN0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3Qg
Y2hhciogbWV0aG9kVHlwZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldEluc3Rh
bmNlTWV0aG9kKFtKU1ZhbHVlIGNsYXNzXSwgc2VsZWN0b3IpKTsKKyAgICBOU0ludm9jYXRpb24q
IGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJl
OltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07
CisgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAgIHJldHVybiBpbnZv
Y2F0aW9uOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9ydCAiQVBJSlNWYWx1ZS5o
IgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTVmFsdWUoSW50ZXJu
YWwpCisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUqKTsKKworKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dDsKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZh
bHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworSlNWYWx1ZVJlZiBvYmplY3RU
b1ZhbHVlKEpTQ29udGV4dCAqLCBpZCk7CitpZCB2YWx1ZVRvT2JqZWN0KEpTQ29udGV4dCAqLCBK
U1ZhbHVlUmVmKTsKK2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVl
UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENv
bnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRv
RGF0ZShKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CitpZCB2YWx1ZVRvQXJyYXkoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0RpY3Rpb25hcnkoSlNHbG9iYWxDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisrIChTRUwpc2VsZWN0
b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFnOworKyAoU0VMKXNlbGVj
dG9yRm9yVmFsdWVUb1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZzsKKworQGVuZAorCitO
U0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVk
VHlwZSk7CitOU0ludm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFy
KiBlbmNvZGVkVHlwZSk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5B
QkxFRAorCisvLyBBbiBpbnN0YW5jZSBvZiBKU1ZpcnR1YWxNYWNoaW5lIHJlcHJlc2VudHMgYSBz
aW5nbGUgSmF2YVNjcmlwdCAib2JqZWN0IHNwYWNlIgorLy8gb3Igc2V0IG9mIGV4ZWN1dGlvbiBy
ZXNvdXJjZXMuIFRocmVhZCBzYWZldHkgaXMgc3VwcG9ydGVkIGJ5IGxvY2tpbmcgdGhlCisvLyB2
aXJ0dWFsIG1hY2hpbmUsIHdpdGggY29uY3VycmVudCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBzdXBw
b3J0ZWQgYnkgYWxsb2NhdGluZworLy8gc2VwYXJhdGUgaW5zdGFuY2VzIG9mIEpTVmlydHVhbE1h
Y2hpbmUuCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCitAaW50ZXJmYWNlIEpTVmlydHVh
bE1hY2hpbmUgOiBOU09iamVjdAorCistIChpZClpbml0OworCitAZW5kCisKKyNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQ
SUNhc3QuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgorCitAaW1wbGVt
ZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZSB7CisgICAgSlNDb250ZXh0R3JvdXBSZWYgbV9ncm91
cDsKK30KKworLSAoaWQpaW5pdAoreworICAgIFtzdXBlciBpbml0XTsKKyAgICBtX2dyb3VwID0g
SlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICB0b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSBz
ZWxmOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1Zp
cnR1YWxNYWNoaW5lKEludGVybmFsKQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICB0b0pTKG1f
Z3JvdXApLT5tX2FwaURhdGEgPSAwOworICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZShtX2dyb3Vw
KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0pTQ29udGV4dEdyb3VwUmVmIGdldEdyb3Vw
RnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lKQorewor
ICAgIHJldHVybiB2aXJ0dWFsTWFjaGluZS0+bV9ncm91cDsKK30KKworQGVuZAorCisjZW5kaWYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTVmlydHVh
bE1hY2hpbmUoSW50ZXJuYWwpCisKK0pTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1
YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUqKTsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPEpT
VmFsdWVJbnRlcm5hbC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKworI2lmIEpT
X09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBKU1dyYXBwZXJNYXAgOiBOU09iamVjdAor
CistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisKKy0gKEpTVmFs
dWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKworaWQgdHJ5VW53cmFw
T2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworCitQcm90b2NvbCog
Z2V0SlNFeHBvcnRQcm90b2NvbCgpOworQ2xhc3MgZ2V0TlNCbG9ja0NsYXNzKCk7CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiSmF2YVNjcmlw
dENvcmUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiSlNDb250ZXh0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9ydCAiT2JqQ0NhbGxi
YWNrRnVuY3Rpb24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0IDx3
dGYvVENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL1ZlY3Rvci5oIgorCitzdGF0aWMgdm9pZCB3
cmFwcGVyRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFsoaWQpSlNPYmplY3RH
ZXRQcml2YXRlKG9iamVjdCkgcmVsZWFzZV07Cit9CisKKy8vIEFsbCB3cmFwcGVyIG9iamVjdHMg
YW5kIGNvbnN0cnVjdG9yIG9iamVjdHMgZGVyaXZlIGZyb20gdGhpcyB0eXBlLCBzbyB3ZSBjYW4g
ZGV0ZWN0ICYgdW53cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlcy9DbGFzc2VzLgorc3RhdGljIEpT
Q2xhc3NSZWYgd3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgU3BpbkxvY2sgaW5pdExvY2sg
PSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZp
bml0TG9jayk7CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IDA7CisKKyAgICBp
ZiAoIWNsYXNzUmVmKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247Cisg
ICAgICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVm
aW5pdGlvbi5jbGFzc05hbWUgPSAib2JqY19jbGFzcyI7CisgICAgICAgIGRlZmluaXRpb24uZmlu
YWxpemUgPSB3cmFwcGVyRmluYWxpemU7CisgICAgICAgIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0
ZSgmZGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGNsYXNzUmVmOworfQorCisvLyBE
ZWZhdWx0IGNvbnZlcnNpb24gb2Ygc2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgorLy8gQWxs
IHNlbWljb2xvbnMgYXJlIHJlbW92ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNl
bWljb2xvbiBhcmUgY2FwaXRhbGl6ZWQuCitzdGF0aWMgTlNTdHJpbmcqIHNlbGVjdG9yVG9Qcm9w
ZXJ0eU5hbWUoY29uc3QgY2hhciogc3RhcnQpCit7CisgICAgLy8gVXNlICdpbmRleCcgdG8gY2hl
Y2sgZm9yIGNvbG9ucywgaWYgdGhlcmUgYXJlIG5vbiwgdGhpcyBpcyBlYXN5IQorICAgIGNvbnN0
IGNoYXIqIGZpcnN0Q29sb24gPSBpbmRleChzdGFydCwgJzonKTsKKyAgICBpZiAoIWZpcnN0Q29s
b24pCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhcnRd
OworCisgICAgLy8gJ2hlYWRlcicgaXMgdGhlIGxlbmd0aCBvZiBzdHJpbmcgdXAgdG8gdGhlIGZp
cnN0IGNvbG9uLgorICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENvbG9uIC0gc3RhcnQ7CisgICAg
Ly8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91Z2ggdG8gaG9sZCAnaGVhZGVy
JywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4Y2x1ZGluZworICAgIC8vIGF0
IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAoVGhpcyBpcyBjb25zZXJ2YXRp
dmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KKyAgICBjaGFyKiBidWZmZXIgPSAo
Y2hhciopbWFsbG9jKGhlYWRlciArIHN0cmxlbihmaXJzdENvbG9uICsgMSkgKyAxKTsKKyAgICAv
LyBDb3B5ICdoZWFkZXInIGNoYXJhY3RlcnMsIHNldCBvdXRwdXQgdG8gcG9pbnQgdG8gdGhlIGVu
ZCBvZiB0aGlzICYgaW5wdXQgdG8gcG9pbnQgcGFzdCB0aGUgZmlyc3QgJzonLgorICAgIG1lbWNw
eShidWZmZXIsIHN0YXJ0LCBoZWFkZXIpOworICAgIGNoYXIqIG91dHB1dCA9IGJ1ZmZlciArIGhl
YWRlcjsKKyAgICBjb25zdCBjaGFyKiBpbnB1dCA9IHN0YXJ0ICsgaGVhZGVyICsgMTsKKworICAg
IC8vIE9uIGVudHJ5IHRvIHRoZSBsb29wLCB3ZSBoYXZlIGFscmVhZHkgc2tpcHBlZCBvdmVyIGEg
JzonIGZyb20gdGhlIGlucHV0LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgYzsK
KyAgICAgICAgLy8gU2tpcCBvdmVyIGFueSBhZGRpdGlvbmFsICc6J3MuIFdlJ2xsIGxlYXZlIGMg
aG9sZGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgIC8vIGxhc3QgJzon
LCBhbmQgaW5wdXQgcG9pbnRpbmcgcGFzdCBjLgorICAgICAgICB3aGlsZSAoKGMgPSAqKGlucHV0
KyspKSA9PSAnOicpOworICAgICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIsIGNvbnZlcnRpbmcg
dG8gdXBwZXIgY2FzZSBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIg
d2UgY29weSBpcyAnXDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgIGlmICghKCoob3V0cHV0
KyspID0gdG91cHBlcihjKSkpCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIC8vIExv
b3Agb3ZlciBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gJzonLgorICAgICAgICB3aGlsZSAoKGMgPSAq
KGlucHV0KyspKSAhPSAnOicpIHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGNoYXJhY3Rlci4K
KyAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAnXDAnLCB0aGVuIHdl
J3JlIGRvbmUhCisgICAgICAgICAgICBpZiAoISgqKG91dHB1dCsrKSA9IGMpKQorICAgICAgICAg
ICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwg
d2UndmUgY29uc3VtZWQgYSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgorICAgIH0KK2RvbmU6
CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpi
dWZmZXJdOworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBN
YWtlIGFuIG9iamVjdCB0aGF0IGlzIGluIGFsbCB3YXlzIGFyZSBjb21wbGV0ZWx5IHZhbmlsbGEg
SmF2YVNjcmlwdCBvYmplY3QsCisvLyBvdGhlciB0aGFuIHRoYXQgaXQgaGFzIGEgbmF0aXZlIGJy
YW5kIHNldCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGJ5IHRoZSBkZWZhdWx0CisvLyBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nIGNvbXZlcnNpb24uCitzdGF0aWMgSlNWYWx1ZSogY3JlYXRlT2Jq
ZWN0V2l0aEN1c3RvbUJyYW5kKEpTQ29udGV4dCogY29udGV4dCwgTlNTdHJpbmcqIGJyYW5kLCBK
U0NsYXNzUmVmIHBhcmVudENsYXNzID0gMCwgdm9pZCogcHJpdmF0ZURhdGEgPSAwKQoreworICAg
IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gW2JyYW5kIFVURjhT
dHJpbmddOworICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBwYXJlbnRDbGFzczsKKyAgICBK
U0NsYXNzUmVmIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgSlNP
YmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIGNsYXNzUmVmLCBwcml2YXRlRGF0YSk7CisgICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOworICAgIHJldHVybiBbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6cmVzdWx0IGlu
Q29udGV4dDpjb250ZXh0XTsKK30KKworLy8gTG9vayBmb3IgQG9wdGlvbmFsIHByb3BlcnRpZXMg
aW4gdGhlIHByb3RvdHlwZSBjb250YWluaW5nIGEgc2VsZWN0b3IgdG8gcHJvcGVydHkKKy8vIG5h
bWUgbWFwcGluZywgc2VwYXJhdGVkIGJ5IGEgX19KU19FWFBPUlRfQVNfXyBkZWxpbWl0ZXIuCitz
dGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSogY3JlYXRlUmVuYW1lTWFwKFByb3RvY29sKiBwcm90
b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kKQoreworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkq
IHJlbmFtZU1hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisKKyAgICBm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgTk8sIGlzSW5zdGFuY2VNZXRob2QsIF4o
U0VMIHNlbCwgY29uc3QgY2hhciopeworICAgICAgICBOU1N0cmluZyogcmVuYW1lID0gQChzZWxf
Z2V0TmFtZShzZWwpKTsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtyZW5hbWUgcmFuZ2VPZlN0
cmluZzpAIl9fSlNfRVhQT1JUX0FTX18iXTsKKyAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09
IE5TTm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5TU3RyaW5nKiBzZWxl
Y3RvciA9IFtyZW5hbWUgc3Vic3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlvbl07CisgICAgICAg
IE5TVUludGVnZXIgYmVnaW4gPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKKyAgICAg
ICAgTlNVSW50ZWdlciBsZW5ndGggPSBbcmVuYW1lIGxlbmd0aF0gLSBiZWdpbiAtIDE7CisgICAg
ICAgIE5TU3RyaW5nKiBuYW1lID0gW3JlbmFtZSBzdWJzdHJpbmdXaXRoUmFuZ2U6KE5TUmFuZ2Up
eyBiZWdpbiwgbGVuZ3RoIH1dOworICAgICAgICByZW5hbWVNYXBbc2VsZWN0b3JdID0gbmFtZTsK
KyAgICB9KTsKKworICAgIHJldHVybiByZW5hbWVNYXA7Cit9CisKK2lubGluZSB2b2lkIHB1dE5v
bkVudW1lcmFibGUoSlNWYWx1ZSogYmFzZSwgTlNTdHJpbmcqIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUpCit7CisgICAgW2Jhc2UgZGVmaW5lUHJvcGVydHk6cHJvcGVydHlOYW1lIGRlc2Ny
aXB0b3I6QHsKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JWYWx1ZUtleTogdmFsdWUsCisg
ICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yV3JpdGFibGVLZXk6IEBZRVMsCisgICAgICAgIEpT
UHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAgICBKU1Byb3BlcnR5
RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTogQFlFUworICAgIH1dOworfQorCisvLyBUaGlzIG1l
dGhvZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlcXVpcmVkIG1ldGhvZHMgaW4gdGhl
IHByb3RvY29sLCBhbmQ6CisvLyAgKiBEZXRlcm1pbmUgYSBwcm9wZXJ0eSBuYW1lIChlaXRoZXIg
dmlhIGEgcmVuYW1lTWFwIG9yIGRlZmF1bHQgY29udmVyc2lvbikuCisvLyAgKiBJZiBhbiBhY2Nl
c3Nvck1hcCBpcyBwcm92aWRlZCwgYW5kIGNvbmF0aW5zIGEgdGhpcyBuYW1lLCBzdG9yZSB0aGUg
bWV0aG9kIGluIHRoZSBtYXAuCisvLyAgKiBPdGhlcndpc2UsIGlmIHRoZSBvYmplY3QgZG9lc24n
dCBhbHJlYWR5IGNvbmF0aW4gYSBwcm9wZXJ0eSB3aXRoIG5hbWUsIGNyZWF0ZSBpdC4KK3N0YXRp
YyB2b2lkIGNvcHlNZXRob2RzVG9PYmplY3QoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBvYmpj
Q2xhc3MsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBKU1ZhbHVl
KiBvYmplY3QsIE5TTXV0YWJsZURpY3Rpb25hcnkqIGFjY2Vzc29yTWV0aG9kcyA9IG5pbCkKK3sK
KyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZW5hbWVNYXAgPSBjcmVhdGVSZW5hbWVNYXAocHJv
dG9jb2wsIGlzSW5zdGFuY2VNZXRob2QpOworCisgICAgZm9yRWFjaE1ldGhvZEluUHJvdG9jb2wo
cHJvdG9jb2wsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCwgXihTRUwgc2VsLCBjb25zdCBjaGFyKiB0
eXBlcyl7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWVDU3RyID0gc2VsX2dldE5hbWUoc2VsKTsK
KyAgICAgICAgTlNTdHJpbmcqIG5hbWUgPSBAKG5hbWVDU3RyKTsKKyAgICAgICAgaWYgKGFjY2Vz
c29yTWV0aG9kcyAmJiBhY2Nlc3Nvck1ldGhvZHNbbmFtZV0pIHsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9i
amNDbGFzcywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOworICAgICAg
ICAgICAgaWYgKCFtZXRob2QpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
YWNjZXNzb3JNZXRob2RzW25hbWVdID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGlu
Q29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSBy
ZW5hbWVNYXBbbmFtZV07CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAg
bmFtZSA9IHNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUobmFtZUNTdHIpOworICAgICAgICAgICAgaWYg
KFtvYmplY3QgaGFzUHJvcGVydHk6bmFtZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRo
b2QoY29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1ldGhvZCwgc2VsLCB0
eXBlcyk7CisgICAgICAgICAgICBpZiAobWV0aG9kKQorICAgICAgICAgICAgICAgIHB1dE5vbkVu
dW1lcmFibGUob2JqZWN0LCBuYW1lLCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTptZXRob2QgaW5D
b250ZXh0OmNvbnRleHRdKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgW3JlbmFtZU1hcCBy
ZWxlYXNlXTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZXMob2JqY19w
cm9wZXJ0eV90IHByb3BlcnR5LCBjaGFyKiYgZ2V0dGVyTmFtZSwgY2hhciomIHNldHRlck5hbWUp
Cit7CisgICAgYm9vbCByZWFkb25seSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZUNv
dW50OworICAgIG9iamNfcHJvcGVydHlfYXR0cmlidXRlX3QqIGF0dHJpYnV0ZXMgPSBwcm9wZXJ0
eV9jb3B5QXR0cmlidXRlTGlzdChwcm9wZXJ0eSwgJmF0dHJpYnV0ZUNvdW50KTsKKyAgICBpZiAo
YXR0cmlidXRlQ291bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJp
YnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKihhdHRyaWJ1dGVzW2ldLm5h
bWUpKSB7CisgICAgICAgICAgICBjYXNlICdHJzoKKyAgICAgICAgICAgICAgICBnZXR0ZXJOYW1l
ID0gc3RyZHVwKGF0dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgc2V0dGVyTmFtZSA9IHN0cmR1
cChhdHRyaWJ1dGVzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgICAgIHJlYWRvbmx5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJlZShhdHRyaWJ1dGVzKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlYWRvbmx5OworfQorCitzdGF0aWMgY2hhciogbWFrZVNldHRl
ck5hbWUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzaXplX3QgbmFtZUxlbmd0aCA9IHN0cmxl
bihuYW1lKTsKKyAgICBjaGFyKiBzZXR0ZXJOYW1lID0gKGNoYXIqKW1hbGxvYyhuYW1lTGVuZ3Ro
ICsgNSk7IC8vICJzZXQiIE5hbWUgIjpcMCIKKyAgICBzZXR0ZXJOYW1lWzBdID0gJ3MnOworICAg
IHNldHRlck5hbWVbMV0gPSAnZSc7CisgICAgc2V0dGVyTmFtZVsyXSA9ICd0JzsKKyAgICBzZXR0
ZXJOYW1lWzNdID0gdG91cHBlcigqbmFtZSk7CisgICAgbWVtY3B5KHNldHRlck5hbWUgKyA0LCBu
YW1lICsgMSwgbmFtZUxlbmd0aCAtIDEpOworICAgIHNldHRlck5hbWVbbmFtZUxlbmd0aCArIDNd
ID0gJzonOworICAgIHNldHRlck5hbWVbbmFtZUxlbmd0aCArIDRdID0gJ1wwJzsKKyAgICByZXR1
cm4gc2V0dGVyTmFtZTsKK30KKworc3RhdGljIHZvaWQgY29weVByb3RvdHlwZVByb3BlcnRpZXMo
SlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29sKiBwcm90b2NvbCwg
SlNWYWx1ZSogcHJvdG90eXBlVmFsdWUpCit7CisgICAgLy8gRmlyc3QgZ2F0aGVyIHByb3ByZXRp
ZXMgaW50byB0aGlzIGxpc3QsIHRoZW4gaGFuZGxlIHRoZSBtZXRob2RzIChjYXB0dXJpbmcgdGhl
IGFjY2Vzc29yIG1ldGhvZHMpLgorICAgIHN0cnVjdCBQcm9wZXJ0eSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIG5hbWU7CisgICAgICAgIGNoYXIqIGdldHRlck5hbWU7CisgICAgICAgIGNoYXIqIHNl
dHRlck5hbWU7CisgICAgfTsKKyAgICBfX2Jsb2NrIFdURjo6VmVjdG9yPFByb3BlcnR5PiBwcm9w
ZXJ0eUxpc3Q7CisKKyAgICAvLyBNYXAgcmVjb3JkaW5nIHRoZSBtZXRob2RzIHVzZWQgYXMgZ2V0
dGVycy9zZXR0ZXJzLgorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmFjY2Vzc29yTWV0aG9kcyA9
IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworCisgICAgLy8gVXNlZnVsIHZhbHVl
LgorICAgIEpTVmFsdWUqIHVuZGVmaW5lZCA9IFtKU1ZhbHVlIHZhbHVlV2l0aFVuZGVmaW5lZElu
Q29udGV4dDpjb250ZXh0XTsKKworICAgIGZvckVhY2hQcm9wZXJ0eUluUHJvdG9jb2wocHJvdG9j
b2wsIF4ob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5KXsKKyAgICAgICAgY2hhciogZ2V0dGVyTmFt
ZSA9IDA7CisgICAgICAgIGNoYXIqIHNldHRlck5hbWUgPSAwOworICAgICAgICBib29sIHJlYWRv
bmx5ID0gcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZXMocHJvcGVydHksIGdldHRlck5hbWUsIHNldHRl
ck5hbWUpOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gcHJvcGVydHlfZ2V0TmFtZShwcm9w
ZXJ0eSk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2V0dGVyICYgc2V0dGVy
IG1ldGhvZHMgdG8gCisgICAgICAgIGlmICghZ2V0dGVyTmFtZSkKKyAgICAgICAgICAgIGdldHRl
ck5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKGdldHRlck5h
bWUpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKCFyZWFkb25seSkgeworICAgICAgICAgICAg
aWYgKCFzZXR0ZXJOYW1lKQorICAgICAgICAgICAgICAgIHNldHRlck5hbWUgPSBtYWtlU2V0dGVy
TmFtZShuYW1lKTsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKHNldHRlck5hbWUpXSA9
IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUgcHJvcGVydGllcyB0
byBhIGxpc3QuCisgICAgICAgIHByb3BlcnR5TGlzdC5hcHBlbmQoKFByb3BlcnR5KXsgbmFtZSwg
Z2V0dGVyTmFtZSwgc2V0dGVyTmFtZSB9KTsKKyAgICB9KTsKKworICAgIC8vIENvcHkgbWV0aG9k
cyB0byB0aGUgcHJvdG90eXBlLCBjYXB0dXJpbmcgYWNjZXNzb3JzIGluIHRoZSBhY2Nlc3Nvck1l
dGhvZHMgbWFwLgorICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwgb2JqY0NsYXNzLCBw
cm90b2NvbCwgWUVTLCBwcm90b3R5cGVWYWx1ZSwgYWNjZXNzb3JNZXRob2RzKTsKKworICAgIC8v
IEl0ZXJhdGUgdGhlIHByb3BlcnR5TGlzdCAmIGdlbmVyYXRlIGFjY2Vzc29yIHByb3BlcnRpZXMu
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eUxpc3Quc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgUHJvcGVydHkmIHByb3BlcnR5ID0gcHJvcGVydHlMaXN0W2ldOworCisgICAgICAg
IEpTVmFsdWUqIGdldHRlciA9IGFjY2Vzc29yTWV0aG9kc1tAKHByb3BlcnR5LmdldHRlck5hbWUp
XTsKKyAgICAgICAgZnJlZShwcm9wZXJ0eS5nZXR0ZXJOYW1lKTsKKyAgICAgICAgQVNTRVJUKCFb
Z2V0dGVyIGlzVW5kZWZpbmVkXSk7CisKKyAgICAgICAgSlNWYWx1ZSogc2V0dGVyID0gdW5kZWZp
bmVkOworICAgICAgICBpZiAocHJvcGVydHkuc2V0dGVyTmFtZSkgeworICAgICAgICAgICAgc2V0
dGVyID0gYWNjZXNzb3JNZXRob2RzW0AocHJvcGVydHkuc2V0dGVyTmFtZSldOworICAgICAgICAg
ICAgZnJlZShwcm9wZXJ0eS5zZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVCghW3NldHRl
ciBpc1VuZGVmaW5lZF0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbcHJvdG90eXBl
VmFsdWUgZGVmaW5lUHJvcGVydHk6QChwcm9wZXJ0eS5uYW1lKSBkZXNjcmlwdG9yOkB7CisgICAg
ICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTogZ2V0dGVyLAorICAgICAgICAgICAg
SlNQcm9wZXJ0eURlc2NyaXB0b3JTZXRLZXk6IHNldHRlciwKKyAgICAgICAgICAgIEpTUHJvcGVy
dHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAgICAgICAgSlNQcm9wZXJ0eURl
c2NyaXB0b3JDb25maWd1cmFibGVLZXk6IEBZRVMKKyAgICAgICAgfV07CisgICAgfQorfQorCitA
aW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6IE5TT2JqZWN0IHsKKyAgICBKU0NvbnRleHQqIG1f
Y29udGV4dDsKKyAgICBDbGFzcyBtX2NsYXNzOworICAgIGJvb2wgbV9ibG9jazsKKyAgICBKU0Ns
YXNzUmVmIG1fY2xhc3NSZWY7CisgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7CisgICAgSlNWYWx1
ZSogbV9jb25zdHJ1Y3RvcjsKK30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQq
KWNvbnRleHQgZm9yQ2xhc3M6KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJ
bmZvKilzdXBlckNsYXNzSW5mbzsKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClv
YmplY3Q7CistIChKU1ZhbHVlICopY29uc3RydWN0b3I7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEpTT2JqQ0NsYXNzSW5mbworCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCop
Y29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihKU09iakNDbGFzc0lu
Zm8qKXN1cGVyQ2xhc3NJbmZvCit7CisgICAgW3N1cGVyIGluaXRdOworCisgICAgY29uc3QgY2hh
ciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFtZShjbHMpOworICAgIG1fY29udGV4dCA9IGNvbnRl
eHQ7CisgICAgbV9jbGFzcyA9IGNsczsKKyAgICBtX2Jsb2NrID0gW2NscyBpc1N1YmNsYXNzT2ZD
bGFzczpnZXROU0Jsb2NrQ2xhc3MoKV07CisgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlv
bjsKKyAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgZGVmaW5p
dGlvbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9
IHdyYXBwZXJDbGFzcygpOworICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0
aW9uKTsKKworICAgIEFTU0VSVCgoY2xzID09IFtOU09iamVjdCBjbGFzc10pID09ICFzdXBlckNs
YXNzSW5mbyk7CisgICAgaWYgKCFzdXBlckNsYXNzSW5mbykgeworICAgICAgICBtX2NvbnN0cnVj
dG9yID0gW2NvbnRleHRbQCJPYmplY3QiXSByZXRhaW5dOworICAgICAgICBtX3Byb3RvdHlwZSA9
IFttX2NvbnN0cnVjdG9yW0AicHJvdG90eXBlIl0gcmV0YWluXTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBDcmVhdGUgdGhlIHByb3RvdHlwZS9jb25zdHJ1Y3RvciBwYWlyLgorICAgICAgICBt
X3Byb3RvdHlwZSA9IGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChjb250ZXh0LCBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzUHJvdG90eXBlIiwgY2xhc3NOYW1lXSk7CisgICAgICAg
IG1fY29uc3RydWN0b3IgPSBjcmVhdGVPYmplY3RXaXRoQ3VzdG9tQnJhbmQoY29udGV4dCwgW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlc0NvbnN0cnVjdG9yIiwgY2xhc3NOYW1lXSwgd3Jh
cHBlckNsYXNzKCksIFtjbHMgcmV0YWluXSk7CisgICAgICAgIHB1dE5vbkVudW1lcmFibGUobV9w
cm90b3R5cGUsIEAiY29uc3RydWN0b3IiLCBtX2NvbnN0cnVjdG9yKTsKKyAgICAgICAgcHV0Tm9u
RW51bWVyYWJsZShtX2NvbnN0cnVjdG9yLCBAInByb3RvdHlwZSIsIG1fcHJvdG90eXBlKTsKKwor
ICAgICAgICBQcm90b2NvbCogZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7
CisgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKGNscywgZXhwb3J0
UHJvdG9jb2wsIF4oUHJvdG9jb2wqIHByb3RvY29sKXsKKyAgICAgICAgICAgIGNvcHlQcm90b3R5
cGVQcm9wZXJ0aWVzKGNvbnRleHQsIGNscywgcHJvdG9jb2wsIG1fcHJvdG90eXBlKTsKKyAgICAg
ICAgICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwgY2xzLCBwcm90b2NvbCwgTk8sIG1f
Y29uc3RydWN0b3IpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBTZXQgW1Byb3RvdHlwZV0u
CisgICAgICAgIG1fcHJvdG90eXBlW0AiX19wcm90b19fIl0gPSBzdXBlckNsYXNzSW5mby0+bV9w
cm90b3R5cGU7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYpOworICAgIFttX3Byb3RvdHlwZSBy
ZWxlYXNlXTsKKyAgICBbbV9jb25zdHJ1Y3RvciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QKK3sKKyAg
ICBBU1NFUlQoW29iamVjdCBpc0tpbmRPZkNsYXNzOm1fY2xhc3NdKTsKKyAgICBBU1NFUlQobV9i
bG9jayA9PSBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNzKCldKTsKKyAgICBp
ZiAobV9ibG9jaykgeworICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxi
YWNrRnVuY3Rpb25Gb3JCbG9jayhtX2NvbnRleHQsIG9iamVjdCkpCisgICAgICAgICAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDptX2NvbnRleHRdOwor
ICAgIH0KKworICAgIEpTVmFsdWVSZWYgcHJvdG90eXBlVmFsdWUgPSB2YWx1ZUludGVybmFsVmFs
dWUobV9wcm90b3R5cGUpOworICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVy
bmFsQ29udGV4dChtX2NvbnRleHQpLCBwcm90b3R5cGVWYWx1ZSkpOworICAgIEpTT2JqZWN0UmVm
IHByb3RvdHlwZSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29u
dGV4dCksIHByb3RvdHlwZVZhbHVlLCAwKTsKKworICAgIEpTT2JqZWN0UmVmIHdyYXBwZXIgPSBK
U09iamVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBtX2NsYXNzUmVm
LCBbb2JqZWN0IHJldGFpbl0pOworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHRJbnRl
cm5hbENvbnRleHQobV9jb250ZXh0KSwgd3JhcHBlciwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6d3JhcHBlciBpbkNvbnRleHQ6bV9jb250ZXh0XTsKK30K
KworLSAoSlNWYWx1ZSAqKWNvbnN0cnVjdG9yCit7CisgICAgcmV0dXJuIG1fY29uc3RydWN0b3I7
Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7CisgICAgSlNDb250
ZXh0ICptX2NvbnRleHQ7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogbV9jbGFzc01hcDsKK30K
KworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICBbc3Vw
ZXIgaW5pdF07CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NsYXNzTWFwID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgW21fY2xhc3NNYXAgcmVsZWFzZV07CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNsYXNzOihD
bGFzcyljbHMKK3sKKyAgICBpZiAoIWNscykKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8v
IENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBhIEpTT2JqQ0NsYXNzSW5mbyBmb3IgdGhp
cyBDbGFzcy4KKyAgICBpZiAoSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSAoSlNPYmpDQ2xh
c3NJbmZvKiltX2NsYXNzTWFwW2Nsc10pCisgICAgICAgIHJldHVybiBjbGFzc0luZm87CisKKyAg
ICAvLyBTa2lwIGludGVybmFsIGNsYXNzZXMgYmVnaW5pbmcgd2l0aCAnXycgLSBqdXN0IGNvcHkg
bGluayB0byB0aGUgcGFyZW50IGNsYXNzJ3MgaW5mby4KKyAgICBpZiAoJ18nID09ICpjbGFzc19n
ZXROYW1lKGNscykpCisgICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbc2VsZiBjbGFz
c0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldOworCisgICAgcmV0dXJuIG1f
Y2xhc3NNYXBbY2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0
Om1fY29udGV4dCBmb3JDbGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYgY2xhc3NJbmZvRm9y
Q2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2VdOworfQorCistIChK
U1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNWYWx1ZSogd3Jh
cHBlciA9IG9iamNfZ2V0QXNzb2NpYXRlZE9iamVjdChvYmplY3QsIG1fY29udGV4dCk7CisgICAg
aWYgKHdyYXBwZXIgJiYgd3JhcHBlci5jb250ZXh0KQorICAgICAgICByZXR1cm4gd3JhcHBlcjsK
KworICAgIGlmIChjbGFzc19pc01ldGFDbGFzcyhvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSkpCisg
ICAgICAgIHdyYXBwZXIgPSBbW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKW9iamVjdF0g
Y29uc3RydWN0b3JdOworICAgIGVsc2UgeworICAgICAgICBKU09iakNDbGFzc0luZm8qIGNsYXNz
SW5mbyA9IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOltvYmplY3QgY2xhc3NdXTsKKyAgICAgICAg
d3JhcHBlciA9IFtjbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpvYmplY3RdOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkxCisgICAgLy8gVGhpcyBnZW5lcmFsIGFwcHJvYWNoIHRvIHdyYXBwZXIgY2FjaGluZyBpcyBw
cmV0dHkgZWZmZWN0aXZlLCBidXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHByb2JsZW1zOgorICAg
IC8vICgxKSBGb3IgaW1tb3J0YWwgb2JqZWN0cyBKU1ZhbHVlcyB3aWxsIGVmZmVjdGl2ZWx5IGxl
YWogYW5kIHRoaXMgcmVzdWx0cyBpbiBlcnJvciBvdXRwdXQgYmVpbmcgbG9nZ2VkIC0gd2Ugc2hv
dWxkIGF2b2lkIGFkZGluZyBhc3NvY2lhdGVkIG9iamVjdHMgdG8gaW1tb3J0YWwgb2JqZWN0cy4K
KyAgICAvLyAoMikgQSBsb25nIGxpdmVkIG9iamVjdCBtYXkgcmFjayB1cCBtYW55IEpTVmFsdWVz
LiBXaGVuIHRoZSBjb250ZXh0cyBhcmUgcmVsZWFzZWQgdGhlc2Ugd2lsbCB1bnByb2N0ZWN0IHRo
ZSBhc3NvY2lhdGVkIEphdmFTY3JpcHQgb2JqZWN0cywKKyAgICAvLyAgICAgYnV0IHN0aWxsLCB3
b3VsZCBwcm9iYWJseSBuaWNlciBpZiB3ZSBtYWRlIGl0IHNvIHRoYXQgb25seSBvbmUgYXNzb2Np
YXRlZCBvYmplY3Qgd2FzIHJlcXVpcmVkLCBicm9hZGNhc3Rpbmcgb2JqZWN0IGRlYWxsb2MuCisg
ICAgb2JqY19zZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0LCB3cmFwcGVyLCBP
QkpDX0FTU09DSUFUSU9OX1JFVEFJTik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK0BlbmQK
KworaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1
ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwor
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwg
JmV4Y2VwdGlvbik7CisgICAgLy9BU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgaWYgKEpTVmFsdWVJ
c09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3MoKSkpCisgICAgICAg
IHJldHVybiAoaWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCk7CisgICAgaWYgKGlkIHRhcmdl
dCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVjdCkpCisgICAgICAgIHJldHVybiB0YXJn
ZXQ7CisgICAgcmV0dXJuIG5pbDsKK30KKworUHJvdG9jb2wqIGdldEpTRXhwb3J0UHJvdG9jb2wo
KQoreworICAgIHN0YXRpYyBQcm90b2NvbCogcHJvdG9jb2wgPSAwOworICAgIGlmICghcHJvdG9j
b2wpCisgICAgICAgIHByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNFeHBvcnQiKTsKKyAg
ICByZXR1cm4gcHJvdG9jb2w7Cit9CisKK0NsYXNzIGdldE5TQmxvY2tDbGFzcygpCit7CisgICAg
c3RhdGljIENsYXNzIGNscyA9IDA7CisgICAgaWYgKCFjbHMpCisgICAgICAgIGNscyA9IG9iamNf
Z2V0Q2xhc3MoIk5TQmxvY2siKTsKKyAgICByZXR1cm4gY2xzOworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlwdENvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgJKHJldmlzaW9uIDEz
ODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlwdENvcmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNCArMjksMTMgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgog
CisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU0NvbnRleHQuaCIKKyNpbXBv
cnQgIkFQSUpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUuaCIKKyNpbXBvcnQg
IkpTRXhwb3J0LmgiCisKKyNlbmRpZgorCiAjZW5kaWYgLyogSmF2YVNjcmlwdENvcmVfaCAqLwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitKU09iamVj
dFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQqLCBDbGFzcywgUHJv
dG9jb2wqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwgY29uc3QgY2hhciogdHlwZXMpOwor
SlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhKU0NvbnRleHQqLCBpZCk7
CisKK2lkIHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2Fs
bGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQ
SV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisj
aW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiSlNCbG9ja0FkYXB0b3IuaCIKKyNpbXBvcnQgIkpT
Q29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIkpT
VmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbXBv
cnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJvYmpjL3J1bnRpbWUuaCIKKyNpbXBv
cnQgPC91c3IvbG9jYWwvaW5jbHVkZS9CbG9ja19wcml2YXRlLmg+CisjaW1wb3J0ICJ3dGYvUmV0
YWluUHRyLmgiCisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkNhbGxiYWNrQXJndW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlv
biosIE5TSW50ZWdlciwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopID0gMDsK
KworICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiBtX25leHQ7Cit9OworCitDYWxsYmFja0Fy
Z3VtZW50Ojp+Q2FsbGJhY2tBcmd1bWVudCgpCit7Cit9CisKK2NsYXNzIENhbGxiYWNrQXJndW1l
bnRCb29sZWFuIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAg
IHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgYXJndW1lbnQpOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1
bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyIDogcHVibGljIENh
bGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52
b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpT
VmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAg
IFQgdmFsdWUgPSAoVClKU0M6OnRvSW50MzIoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pKTsKKyAgICAgICAgW2ludm9j
YXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDYWxsYmFja0FyZ3VtZW50RG91Ymxl
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAg
ICB7CisgICAgICAgIFQgdmFsdWUgPSAoVClKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0
aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9
OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6YXJndW1lbnQgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAg
ICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07
CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudElkIDogcHVibGljIENhbGxiYWNr
QXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlv
biwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVS
ZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50KTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJn
dW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNz
IENhbGxiYWNrQXJndW1lbnRPZkNsYXNzIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVi
bGljOgorICAgIENhbGxiYWNrQXJndW1lbnRPZkNsYXNzKENsYXNzIGNscykKKyAgICAgICAgOiBD
YWxsYmFja0FyZ3VtZW50KCkKKyAgICAgICAgLCBtX2NsYXNzKGNscykKKyAgICB7CisgICAgICAg
IFttX2NsYXNzIHJldGFpbl07CisgICAgfQorCisgICAgfkNhbGxiYWNrQXJndW1lbnRPZkNsYXNz
KCkKKyAgICB7CisgICAgICAgIFttX2NsYXNzIHJlbGVhc2VdOworICAgIH0KKworICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpOworCisgICAgICAgIGlkIG9iamVjdCA9IHRyeVVud3JhcE9i
amNPYmplY3QoY3R4LCBhcmd1bWVudCk7CisgICAgICAgIGlmIChvYmplY3QgJiYgW29iamVjdCBp
c0tpbmRPZkNsYXNzOm1fY2xhc3NdKSB7CisgICAgICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1
bWVudDomb2JqZWN0IGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKEpTVmFsdWVJc051bGwoY3R4LCBhcmd1bWVudCkg
fHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGN0eCwgYXJndW1lbnQpKSB7CisgICAgICAgICAgICBvYmpl
Y3QgPSBuaWw7CisgICAgICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0IGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY3R4
KSwgIkFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIE9iamVjdGl2ZS1DIENsYXNzIikpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDbGFzcyBtX2NsYXNzOworfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudE5TTnVtYmVyIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZv
aWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVy
LCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb051bWJlcihjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwor
ICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU1N0cmluZyA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBp
ZCB2YWx1ZSA9IHZhbHVlVG9TdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
YXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2
YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFj
a0FyZ3VtZW50TlNEYXRlIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAg
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVt
YmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0RhdGUoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsK
KyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNBcnJheSA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBp
ZCB2YWx1ZSA9IHZhbHVlVG9BcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBh
cmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZh
bHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNr
QXJndW1lbnROU0RpY3Rpb25hcnkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1l
bnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvRGljdGlv
bmFyeShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9u
KTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1l
bnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QgOiBw
dWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNv
ZGVkVHlwZSkKKyAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWluXTsK
KyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6ZUFu
ZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAtLWFs
aWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsgYWxp
Z25tZW50KTsKKyAgICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+YWxp
Z25tZW50KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+Q2FsbGJhY2tBcmd1bWVudFN0cnVj
dCgpCisgICAgeworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAg
ICAgICAgZnJlZShtX2FsbG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6YXJndW1lbnQgaW5D
b250ZXh0OmNvbnRleHRdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBpbnZva2VX
aXRoVGFyZ2V0OnZhbHVlXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gZ2V0UmV0
dXJuVmFsdWU6bV9idWZmZXJdOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDptX2J1
ZmZlciBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTlNJ
bnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1fYnVmZmVyOwor
ICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRCbG9j
a0NhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIENhbGxi
YWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKEpTQmxvY2tBZGFwdG9yKiBhZGFwdG9yKQorICAgICAg
ICA6IG1fYWRhcHRvcihhZGFwdG9yKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
Q2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgW21fYWRhcHRv
ciByZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNW
YWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAg
aWQgYmxvY2sgPSBbbV9hZGFwdG9yIGJsb2NrRnJvbVZhbHVlOmFyZ3VtZW50IGluQ29udGV4dDpj
b250ZXh0IHdpdGhFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0
QXJndW1lbnQ6JmJsb2NrIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBKU0Jsb2NrQWRhcHRvciogbV9hZGFwdG9yOworfTsKKworY2xhc3MgQXJndW1lbnRU
eXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQ2FsbGJhY2tBcmd1bWVudCogUmVz
dWx0VHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5
cGUgdHlwZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3Vt
ZW50SW50ZWdlcjxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBD
YWxsYmFja0FyZ3VtZW50RG91YmxlPFQ+OworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVCb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEJv
b2xlYW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQ2FsbGJhY2tBcmd1bWVudElkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBl
IHR5cGVPZkNsYXNzKGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgewor
ICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgICAgICBDbGFzcyBjbHMg
PSBvYmpjX2dldENsYXNzKGNvcHkpOworICAgICAgICBpZiAoIWNscykKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICAgICAgaWYgKGNscyA9PSBbSlNWYWx1ZSBjbGFzc10pCisgICAgICAg
ICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRKU1ZhbHVlOworICAgICAgICBpZiAoY2xz
ID09IFtOU1N0cmluZyBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJn
dW1lbnROU1N0cmluZzsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNOdW1iZXIgY2xhc3NdKQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXI7CisgICAgICAgIGlm
IChjbHMgPT0gW05TRGF0ZSBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNr
QXJndW1lbnROU0RhdGU7CisgICAgICAgIGlmIChjbHMgPT0gW05TQXJyYXkgY2xhc3NdKQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNBcnJheTsKKyAgICAgICAgaWYg
KGNscyA9PSBbTlNEaWN0aW9uYXJ5IGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2Fs
bGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeTsKKworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNr
QXJndW1lbnRPZkNsYXNzKGNscyk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlw
ZUJsb2NrKGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAg
ICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgICAgICByZXR1cm4gbmV3IENhbGxi
YWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKFtbSlNCbG9ja0FkYXB0b3IgYWxsb2NdIGluaXRXaXRo
QmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6Y29weV0pOworICAgIH0KKworICAgIHN0YXRpYyBS
ZXN1bHRUeXBlIHR5cGVTdHJ1Y3QoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkK
KyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlm
IChOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29w
eSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoaW52b2Nh
dGlvbiwgY29weSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tSZXN1bHQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhbGxiYWNrUmVzdWx0KCkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qLCBK
U0NvbnRleHQqLCBKU1ZhbHVlUmVmKikgPSAwOworfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1bHRW
b2lkIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEpTVmFs
dWVSZWYgZ2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiop
CisgICAgeworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSk7CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1bHRJ
ZCA6IHB1YmxpYyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVl
UmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBpZCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24g
Z2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJuIG9iamVjdFRvVmFsdWUoY29u
dGV4dCwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBD
YWxsYmFja1Jlc3VsdE51bWVyaWMgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZTsKKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIChkb3Vi
bGUpdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0Qm9vbGVhbiA6IHB1
YmxpYyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJl
ZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRS
ZXR1cm5WYWx1ZTomdmFsdWVdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFz
cyBDYWxsYmFja1Jlc3VsdFN0cnVjdCA6IHB1YmxpYyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6
CisgICAgQ2FsbGJhY2tSZXN1bHRTdHJ1Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2Nh
dGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52
b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50
OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxp
Z25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChj
aGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlv
bikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
fkNhbGxiYWNrUmVzdWx0U3RydWN0KCkKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZv
Y2F0aW9uIHJlbGVhc2VdOworICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQorICAg
IAorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgW2ludm9jYXRp
b24gZ2V0UmV0dXJuVmFsdWU6bV9hbGxvY2F0aW9uXTsKKworICAgICAgICBbbV9jb252ZXJzaW9u
SW52b2NhdGlvbiBzZXRBcmd1bWVudDptX2FsbG9jYXRpb24gYXRJbmRleDoyXTsKKyAgICAgICAg
W21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6JmNvbnRleHQgYXRJbmRleDozXTsK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDpbSlNWYWx1
ZSBjbGFzc11dOworCisgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgICAgICByZXR1cm4gdmFs
dWVJbnRlcm5hbFZhbHVlKHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTlNJbnZvY2F0
aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1fYnVmZmVyOworICAgIGNo
YXIqIG1fYWxsb2NhdGlvbjsKK307CisKK2NsYXNzIFJlc3VsdFR5cGVEZWxlZ2F0ZSB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBDYWxsYmFja1Jlc3VsdCogUmVzdWx0VHlwZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUludGVnZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdE51bWVyaWM8VD47CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlRG91
YmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHROdW1lcmljPFQ+
OworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCb29sKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHRCb29sZWFuOworICAgIH0KKworICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tSZXN1bHRWb2lkOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0SWQoKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFzcyhjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0SWQoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2soY29uc3QgY2hhciosIGNvbnN0IGNoYXIq
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdElkKCk7CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBiZWdpbiwgY29u
c3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5k
KTsKKyAgICAgICAgaWYgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHR5cGVUb1ZhbHVlSW52
b2NhdGlvbkZvcihjb3B5KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1bHRT
dHJ1Y3QoaW52b2NhdGlvbiwgY29weSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorfTsK
KworZW51bSBDYWxsYmFja1R5cGUgeworICAgIENhbGxiYWNrSW5zdGFuY2VNZXRob2QsCisgICAg
Q2FsbGJhY2tDbGFzc01ldGhvZCwKKyAgICBDYWxsYmFja0Jsb2NrCit9OworCitjbGFzcyBPYmpD
Q2FsbGJhY2tGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oSlND
b250ZXh0ICpjb250ZXh0LCBOU0ludm9jYXRpb24qIGludm9jYXRpb24sIENhbGxiYWNrVHlwZSB0
eXBlLCBDbGFzcyBpbnN0YW5jZUNsYXNzLCBQYXNzT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+IGFy
Z3VtZW50cywgUGFzc093blB0cjxDYWxsYmFja1Jlc3VsdD4gcmVzdWx0KQorICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faW5z
dGFuY2VDbGFzcyhbaW5zdGFuY2VDbGFzcyByZXRhaW5dKQorICAgICAgICAsIG1faW52b2NhdGlv
bihpbnZvY2F0aW9uKQorICAgICAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKKyAgICAgICAg
LCBtX3Jlc3VsdChyZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSAhPSBDYWxsYmFj
a0luc3RhbmNlTWV0aG9kIHx8IGluc3RhbmNlQ2xhc3MpOworICAgIH0KKworICAgIH5PYmpDQ2Fs
bGJhY2tGdW5jdGlvbigpCisgICAgeworICAgICAgICBbbV9pbnN0YW5jZUNsYXNzIHJlbGVhc2Vd
OworICAgIH0KKworICAgIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgSlNDb250ZXh0KiBj
b250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CisgICAgfQor
CisgICAgaWQgd3JhcHBlZEJsb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0g
Q2FsbGJhY2tCbG9jayA/IFttX2ludm9jYXRpb24gdGFyZ2V0XSA6IG5pbDsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgV2Vha0NvbnRleHRSZWYgbV9jb250ZXh0OworICAgIENhbGxiYWNrVHlwZSBt
X3R5cGU7CisgICAgQ2xhc3MgbV9pbnN0YW5jZUNsYXNzOworICAgIFdURjo6UmV0YWluUHRyPE5T
SW52b2NhdGlvbj4gbV9pbnZvY2F0aW9uOworICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiBt
X2FyZ3VtZW50czsKKyAgICBPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IG1fcmVzdWx0OworfTsKKwor
c3RhdGljIHZvaWQgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GaW5hbGl6ZShKU09iamVjdFJlZiBvYmpl
Y3QpCit7CisgICAgZGVsZXRlIChPYmpDQ2FsbGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2
YXRlKG9iamVjdCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1bmN0aW9u
Q2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IC8vIFJldGFrZSB0aGUgQVBJIGxvY2sgLSB3ZSBuZWVkIHRoaXMgZm9yIGEgZmV3IHJlYXNvbnM6
CisgICAgLy8gKDEpIFdlIGRvbid0IHdhbnQgdG8gc3VwcG9ydCB0aGUgQy1BUEkncyBjb25mdXNp
bmcgZHJvcHMtbG9ja3Mtb25jZSBwb2xpY3kgLSBzaG91bGQgb25seSBkcm9wIGxvY2tzIGlmIHdl
IGNhbiBkbyBzbyByZWN1cnNpdmV5LgorICAgIC8vICgyKSBXZSdyZSBjYWxpbmcgc29tZSBKU0Mg
aW50ZXJuYWxzIHRoYXQgcmVxdWlyZSB1cyB0byBiZSBvbiB0aGUgJ2luc2lkZScgLSBlLmcuIGNy
ZWF0ZVR5cGVFcnJvci4KKyAgICAvLyAoMykgV2UgbmVlZCB0byBiZSBsb2NrZWQgKHBlciBjb250
ZXh0IHdvdWxkIGJlIGZpbmUpIGFnYWluc3QgY29uZmxpY3RpbmcgdXNnYWUgb2YgdGhlIE9iakND
YWxsYmFja0Z1bmN0aW9uJ3MgTlNJbnZvY2F0aW9uLgorICAgIEpTQzo6QVBJRW50cnlTaGltIGVu
dHJ5U2hpbSh0b0pTKGNhbGxlckNvbnRleHQpKTsKKworICAgIE9iakNDYWxsYmFja0Z1bmN0aW9u
KiBjYWxsYmFjayA9IChPYmpDQ2FsbGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2YXRlKGZ1
bmN0aW9uKTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBjYWxsYmFjay0+Y29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkgeworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NAorICAgICAgICAvLyBSYXRoZXIgdGhhbiByZXF1
aXJpbmcgdGhhdCB0aGUgY29udGV4dCBiZSByZXRhaW5lZCwgaXQgd291bGQgcHJvYmFibHkgYmUg
bW9yZQorICAgICAgICAvLyBhcHByb3ByaWF0ZSB0byB1c2UgYSBuZXcgSlNDb250ZXh0IGluc3Rh
bmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY2FsbGVyQ29udGV4dCksICJPYmplY3RpdmUt
QyBjYWxsYmFjayBmdW5jdGlvbiBjb250ZXh0IHJlbGVhc2VkIikpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY2FsbGVyQ29udGV4dCk7CisgICAgfQorCisgICAgQ2FsbGJh
Y2tEYXRhIGNhbGxiYWNrRGF0YTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdDsKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgW2NvbnRleHQgYmVnaW5DYWxsYmFja1dpdGhEYXRhOiZjYWxs
YmFja0RhdGEgdGhpc1ZhbHVlOnRoaXNPYmplY3QgYXJndW1lbnRDb3VudDphcmd1bWVudENvdW50
IGFyZ3VtZW50czphcmd1bWVudHNdOworICAgICAgICByZXN1bHQgPSBjYWxsYmFjay0+Y2FsbChj
b250ZXh0LCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7
CisgICAgICAgIGlmIChjb250ZXh0LmV4Y2VwdGlvbikKKyAgICAgICAgICAgICpleGNlcHRpb24g
PSB2YWx1ZUludGVybmFsVmFsdWUoY29udGV4dC5leGNlcHRpb24pOworICAgICAgICBbY29udGV4
dCBlbmRDYWxsYmFja1dpdGhEYXRhOiZjYWxsYmFja0RhdGFdOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgSlNDbGFzc1JlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNz
KCkKK3sKKyAgICBzdGF0aWMgU3BpbkxvY2sgaW5pdExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpF
UjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZpbml0TG9jayk7CisKKyAgICBzdGF0
aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IDA7CisKKyAgICBpZiAoIWNsYXNzUmVmKSB7CisgICAg
ICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgICAgIGRlZmluaXRpb24gPSBr
SlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAi
RnVuY3Rpb24iOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25GaW5hbGl6ZTsKKyAgICAgICAgZGVmaW5pdGlvbi5jYWxsQXNGdW5jdGlvbiA9IG9iakND
YWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb247CisgICAgICAgIGNsYXNzUmVmID0gSlNDbGFz
c0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGNsYXNzUmVmOworfQor
CitKU1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEpTQ29udGV4dCAqY29udGV4
dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0ds
b2JhbENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKwor
ICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50OworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2Fz
ZSBDYWxsYmFja0luc3RhbmNlTWV0aG9kOiB7CisgICAgICAgIGlkIHRhcmdldCA9IHRyeVVud3Jh
cE9iamNPYmplY3QoY3R4LCB0aGlzT2JqZWN0KTsKKyAgICAgICAgaWYgKCF0YXJnZXQgfHwgIVt0
YXJnZXQgaXNLaW5kT2ZDbGFzczptX2luc3RhbmNlQ2xhc3NdKSB7CisgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAic2VsZiB0eXBl
IGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0aXZlLUMgaW5zdGFuY2UgbWV0aG9kIikpOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgICAgIH0KKyAgICAg
ICAgW21faW52b2NhdGlvbiBzZXRUYXJnZXQ6dGFyZ2V0XTsKKyAgICB9CisgICAgY2FzZSBDYWxs
YmFja0NsYXNzTWV0aG9kOgorICAgICAgICBmaXJzdEFyZ3VtZW50ID0gMjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDYWxsYmFja0Jsb2NrOgorICAgICAgICBmaXJzdEFyZ3VtZW50ID0gMTsK
KyAgICB9CisKKyAgICBzaXplX3QgYXJndW1lbnROdW1iZXIgPSAwOworICAgIGZvciAoQ2FsbGJh
Y2tBcmd1bWVudCogYXJndW1lbnQgPSBtX2FyZ3VtZW50cy5nZXQoKTsgYXJndW1lbnQ7IGFyZ3Vt
ZW50ID0gYXJndW1lbnQtPm1fbmV4dC5nZXQoKSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVl
ID0gYXJndW1lbnROdW1iZXIgPCBhcmd1bWVudENvdW50ID8gYXJndW1lbnRzW2FyZ3VtZW50TnVt
YmVyXSA6IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgICAgIGFyZ3VtZW50LT5zZXQo
bV9pbnZvY2F0aW9uLmdldCgpLCBhcmd1bWVudE51bWJlciArIGZpcnN0QXJndW1lbnQsIGNvbnRl
eHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworICAgICAgICArK2FyZ3VtZW50
TnVtYmVyOworICAgIH0KKworICAgIFttX2ludm9jYXRpb24gaW52b2tlXTsKKworICAgIHJldHVy
biBtX3Jlc3VsdC0+Z2V0KG1faW52b2NhdGlvbi5nZXQoKSwgY29udGV4dCwgZXhjZXB0aW9uKTsK
K30KKworc3RhdGljIGJvb2wgYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKCkKK3sKKyAgICBl
bnVtIENoZWNrUmVzdWx0IHsKKyAgICAgICAgQ2hlY2tSZXN1bHRGYWxzZSwKKyAgICAgICAgQ2hl
Y2tSZXN1bHRUcnVlLAorICAgICAgICBDaGVja1Jlc3VsdFVua25vd24KKyAgICB9OworICAgIHN0
YXRpYyBlbnVtIENoZWNrUmVzdWx0IGNoZWNrID0gQ2hlY2tSZXN1bHRVbmtub3duOworICAgIGlm
IChjaGVjayA9PSBDaGVja1Jlc3VsdFVua25vd24pIHsKKyAgICAgICAgaWQgYmxvY2sgPSBeKE5T
U3RyaW5nICpzdHJpbmcpeyByZXR1cm4gc3RyaW5nOyB9OworICAgICAgICBjaGVjayA9IF9CbG9j
a19oYXNfc2lnbmF0dXJlKGJsb2NrKSAmJiBzdHJzdHIoX0Jsb2NrX3NpZ25hdHVyZShibG9jayks
ICJOU1N0cmluZyIpID8gQ2hlY2tSZXN1bHRUcnVlIDogQ2hlY2tSZXN1bHRGYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIChib29sKWNoZWNrOworfQorCitpbmxpbmUgYm9vbCBza2lwTnVtYmVyKGNv
bnN0IGNoYXIqJiBwb3NpdGlvbikKK3sKKyAgICBpZiAoIWlzZGlnaXQoKnBvc2l0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdoaWxlKGlzZGlnaXQoKisrcG9zaXRpb24pKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0
aW9uRm9ySW52b2NhdGlvbihKU0NvbnRleHQqIGNvbnRleHQsIE5TSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIGNvbnN0IGNoYXIq
IHNpZ25hdHVyZVdpdGhPYmpjQ2xhc3NlcykKK3sKKyAgICBjb25zdCBjaGFyKiBwb3NpdGlvbiA9
IHNpZ25hdHVyZVdpdGhPYmpjQ2xhc3NlczsKKworICAgIE93blB0cjxDYWxsYmFja1Jlc3VsdD4g
cmVzdWx0ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxSZXN1bHRUeXBlRGVsZWdhdGU+KHBvc2l0
aW9uKSk7CisgICAgaWYgKCFyZXN1bHQgfHwgIXNraXBOdW1iZXIocG9zaXRpb24pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDYWxsYmFja0lu
c3RhbmNlTWV0aG9kOgorICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKKyAgICAgICAgaWYg
KCdAJyAhPSAqKHBvc2l0aW9uKyspIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSB8fCAnOicgIT0g
Kihwb3NpdGlvbisrKSB8fCAhc2tpcE51bWJlcihwb3NpdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxiYWNrQmxvY2s6CisgICAgICAg
IGlmICgoJ0AnICE9ICoocG9zaXRpb24rKykpIHx8ICgnPycgIT0gKihwb3NpdGlvbisrKSkgfHwg
IXNraXBOdW1iZXIocG9zaXRpb24pIHx8ICghYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKCkg
JiYgc3RyY2hyKHBvc2l0aW9uLCAnQCcpKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiBhcmd1bWVu
dHMgPSAwOworICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiogbmV4dEFyZ3VtZW50ID0gJmFy
Z3VtZW50czsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsKKyAgICB3aGlsZSAoKnBv
c2l0aW9uKSB7CisgICAgICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiBhcmd1bWVudCA9IGFk
b3B0UHRyKHBhcnNlT2JqQ1R5cGU8QXJndW1lbnRUeXBlRGVsZWdhdGU+KHBvc2l0aW9uKSk7Cisg
ICAgICAgIGlmICghYXJndW1lbnQgfHwgIXNraXBOdW1iZXIocG9zaXRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgICAgICAqbmV4dEFyZ3VtZW50ID0gYXJndW1lbnQucmVsZWFz
ZSgpOworICAgICAgICBuZXh0QXJndW1lbnQgPSAmKCpuZXh0QXJndW1lbnQpLT5tX25leHQ7Cisg
ICAgICAgICsrYXJndW1lbnRDb3VudDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5MgorICAgIC8vIFRoZSByZXN1bHQg
c2hvdWxkIGJlIGEgcmVndWxhciBob3N0IGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIGNhbGxhYmxl
IEMgQVBJIG9iamVjdC4KKyAgICAvLyBQYXRjaCBpbiB0aGUgcmlnaHQgbGVuZ3RoICYgW1Byb3Rv
dHlwZV0gdmFsdWVzIGZvciBub3csIGJ1dCBzaG91bGQgZml4IHRoaXMuCisgICAgLy8gRnVuY3Rp
b24ucHJvdG90eXBlLnRvU3RyaW5nIGN1cnJlbnRseSBmYWlscywgc2luY2UgdGhpcyBpcyBub3Qg
eWV0IGEgc3ViY2xhc3Mgb2YgZnVuY3RvbiwgYnV0IGNhbGwgJiBhcHBseSBkbyB3b3JrLgorICAg
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKSwgbmV3IE9iakND
YWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xhc3Ms
IGFyZ3VtZW50cy5yZWxlYXNlKCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKKyAgICBKU1ZhbHVlKiB2
YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmZ1bmN0aW9uT2JqZWN0IGluQ29udGV4dDpj
b250ZXh0XTsKKyAgICB2YWx1ZVtAImxlbmd0aCJdID0gQChhcmd1bWVudENvdW50KTsKKyAgICB2
YWx1ZVtAIl9fcHJvdG9fXyJdID0gY29udGV4dFtAIkZ1bmN0aW9uIl1bQCJwcm90b3R5cGUiXTsK
KyAgICB2YWx1ZVtAInRvU3RyaW5nIl0gPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIihmdW5j
dGlvbigpeyByZXR1cm4gJyIKKyAgICAgICAgImZ1bmN0aW9uIDxPYmplY3RpdmUtQz4oKSB7IiAi
XFxuIgorICAgICAgICAiICAgIFtuYXRpdmUgY29kZV0iICAgICAgICAgICJcXG4iCisgICAgICAg
ICJ9IiAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcbiIKKyAgICAiJ30pIl07CisgICAgcmV0
dXJuIGZ1bmN0aW9uT2JqZWN0OworfQorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlv
bkZvck1ldGhvZChKU0NvbnRleHQqIGNvbnRleHQsIENsYXNzIGNscywgUHJvdG9jb2wqIHByb3Rv
Y29sLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKQor
eworICAgIE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlv
bldpdGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpD
VHlwZXM6dHlwZXNdXTsKKyAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3RvcjpzZWxdOworICAgIGlm
ICghaXNJbnN0YW5jZU1ldGhvZCkKKyAgICAgICAgW2ludm9jYXRpb24gc2V0VGFyZ2V0OmNsc107
CisgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihjb250ZXh0LCBp
bnZvY2F0aW9uLCBpc0luc3RhbmNlTWV0aG9kID8gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCA6IENh
bGxiYWNrQ2xhc3NNZXRob2QsIGlzSW5zdGFuY2VNZXRob2QgPyBjbHMgOiBuaWwsIF9wcm90b2Nv
bF9nZXRNZXRob2RUeXBlRW5jb2RpbmcocHJvdG9jb2wsIHNlbCwgWUVTLCBpc0luc3RhbmNlTWV0
aG9kKSk7Cit9CisKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2soSlND
b250ZXh0KiBjb250ZXh0LCBpZCB0YXJnZXQpCit7CisgICAgaWYgKCFfQmxvY2tfaGFzX3NpZ25h
dHVyZSh0YXJnZXQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBjaGFyKiBzaWduYXR1
cmUgPSBfQmxvY2tfc2lnbmF0dXJlKHRhcmdldCk7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRo
b2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczpzaWduYXR1cmVdXTsKKyAgICBbaW52
b2NhdGlvbiBzZXRUYXJnZXQ6dGFyZ2V0XTsKKyAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JJbnZvY2F0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIENhbGxiYWNrQmxvY2ssIG5pbCwg
c2lnbmF0dXJlKTsKK30KKworaWQgdHJ5VW53cmFwQmxvY2soSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY29udGV4dCwgb2JqZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNzKCkpKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiAoKE9iakNDYWxsYmFja0Z1bmN0aW9uKilKU09i
amVjdEdldFByaXZhdGUob2JqZWN0KSktPndyYXBwZWRCbG9jaygpOworfQorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqY1J1bnRpbWVFeHRyYXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50aW1lRXh0cmFz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorCitpbmxp
bmUgYm9vbCBwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChQcm90b2NvbCogY2FuZGlkYXRlLCBQ
cm90b2NvbCogdGFyZ2V0KQoreworICAgIHVuc2lnbmVkIHByb3RvY29sUHJvdG9jb2xzQ291bnQ7
CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbFByb3RvY29scyA9IHByb3RvY29sX2NvcHlQcm90b2Nv
bExpc3QoY2FuZGlkYXRlLCAmcHJvdG9jb2xQcm90b2NvbHNDb3VudCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3RvY29sUHJvdG9jb2xzQ291bnQ7ICsraSkgeworICAgICAgICBp
ZiAocHJvdG9jb2xfaXNFcXVhbChwcm90b2NvbFByb3RvY29sc1tpXSwgdGFyZ2V0KSkgeworICAg
ICAgICAgICAgZnJlZShwcm90b2NvbFByb3RvY29scyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlKHByb3RvY29sUHJvdG9jb2xzKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGlu
Z1Byb3RvY29sKFByb3RvY29sKiBiYXNlLCBQcm90b2NvbCogcHJvdG9jb2wsIHZvaWQgKF5jYWxs
YmFjaykoUHJvdG9jb2wqKSkKK3sKKyAgICBBU1NFUlQoYmFzZSk7CisgICAgQVNTRVJUKHByb3Rv
Y29sKTsKKworICAgIHVuc2lnbmVkIHByb3RvY29sc0NvdW50OworICAgIFByb3RvY29sKiogcHJv
dG9jb2xzID0gcHJvdG9jb2xfY29weVByb3RvY29sTGlzdChiYXNlLCAmcHJvdG9jb2xzQ291bnQp
OworICAgIGlmIChwcm90b2NvbHNDb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJvdG9jb2xzQ291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHByb3RvY29sSW1w
bGVtZW50c1Byb3RvY29sKHByb3RvY29sc1tpXSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAg
IGNhbGxiYWNrKHByb3RvY29sc1tpXSk7CisgICAgICAgICAgICBmb3JFYWNoUHJvdG9jb2xJbXBs
ZW1lbnRpbmdQcm90b2NvbChwcm90b2NvbHNbaV0sIHByb3RvY29sLCBjYWxsYmFjayk7CisgICAg
ICAgIH0KKyAgICAgICAgZnJlZShwcm90b2NvbHMpOworICAgIH0KK30KKworaW5saW5lIHZvaWQg
Zm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2woQ2xhc3MgYmFzZSwgUHJvdG9jb2wq
IHByb3RvY29sLCB2b2lkICheY2FsbGJhY2spKFByb3RvY29sKikpCit7CisgICAgQVNTRVJUKGJh
c2UpOworICAgIEFTU0VSVChwcm90b2NvbCk7CisKKyAgICB1bnNpZ25lZCBwcm90b2NvbHNDb3Vu
dDsKKyAgICBQcm90b2NvbCoqIHByb3RvY29scyA9IGNsYXNzX2NvcHlQcm90b2NvbExpc3QoYmFz
ZSwgJnByb3RvY29sc0NvdW50KTsKKyAgICBpZiAocHJvdG9jb2xzQ291bnQpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0NvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChwcm90b2NvbHNbaV0sIHByb3RvY29s
KSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm90b2NvbHNbaV0pOworICAgICAgICAgICAg
Zm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wocHJvdG9jb2xzW2ldLCBwcm90b2Nv
bCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIGZyZWUocHJvdG9jb2xzKTsKKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hNZXRob2RJbkNsYXNzKENsYXNzIGNscywgdm9pZCAo
XmNhbGxiYWNrKShNZXRob2QgbWV0aG9kKSkKK3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBN
ZXRob2QqIG1ldGhvZHMgPSBjbGFzc19jb3B5TWV0aG9kTGlzdChjbHMsICZjb3VudCk7CisgICAg
aWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICAgICAgY2FsbGJhY2sobWV0aG9kc1tpXSk7CisgICAgICAgIGZyZWUobWV0aG9k
cyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChQcm90
b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNSZXF1aXJlZE1ldGhvZCwgQk9PTCBpc0luc3RhbmNlTWV0
aG9kLCB2b2lkICheY2FsbGJhY2spKFNFTCwgY29uc3QgY2hhciopKQoreworICAgIHVuc2lnbmVk
IGNvdW50OworICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiogbWV0aG9kcyA9IHBy
b3RvY29sX2NvcHlNZXRob2REZXNjcmlwdGlvbkxpc3QocHJvdG9jb2wsIGlzUmVxdWlyZWRNZXRo
b2QsIGlzSW5zdGFuY2VNZXRob2QsICZjb3VudCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgY2FsbGJh
Y2sobWV0aG9kc1tpXS5uYW1lLCBtZXRob2RzW2ldLnR5cGVzKTsKKyAgICAgICAgZnJlZShtZXRo
b2RzKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm9wZXJ0eUluUHJvdG9jb2wo
UHJvdG9jb2wqIHByb3RvY29sLCB2b2lkICheY2FsbGJhY2spKG9iamNfcHJvcGVydHlfdCkpCit7
CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgb2JqY19wcm9wZXJ0eV90KiBwcm9wZXJ0aWVzID0g
cHJvdG9jb2xfY29weVByb3BlcnR5TGlzdChwcm90b2NvbCwgJmNvdW50KTsKKyAgICBpZiAoY291
bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAg
ICAgICAgICBjYWxsYmFjayhwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgZnJlZShwcm9wZXJ0aWVz
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPGNoYXIgb3BlbiwgY2hhciBjbG9zZT4KK3ZvaWQgc2tp
cFBhaXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIE5TVUludGVnZXIgY291bnQgPSAx
OworICAgIGRvIHsKKyAgICAgICAgY2hhciBjID0gKihwb3NpdGlvbisrKTsKKyAgICAgICAgaWYg
KCFjKQorICAgICAgICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpO
U0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiByZWFzb246QCJNYWxmb3JtZWQgdHlwZSBl
bmNvZGluZyIgdXNlckluZm86bmlsXTsKKyAgICAgICAgaWYgKGMgPT0gb3BlbikKKyAgICAgICAg
ICAgICsrY291bnQ7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gY2xvc2UpCisgICAgICAgICAgICAt
LWNvdW50OworICAgIH0gd2hpbGUgKGNvdW50KTsKK30KKworY2xhc3MgU3RyaW5nUmFuZ2Ugewor
cHVibGljOgorICAgIFN0cmluZ1JhbmdlKGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBl
bmQpIDogbV9wdHIoc3RybmR1cChiZWdpbiwgZW5kIC0gYmVnaW4pKSB7IH0KKyAgICB+U3RyaW5n
UmFuZ2UoKSB7IGZyZWUobV9wdHIpOyB9CisgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSB7IHJl
dHVybiBtX3B0cjsgfQorICAgIGNvbnN0IGNoYXIqIGdldCgpIHsgcmV0dXJuIG1fcHRyOyB9CisK
K3ByaXZhdGU6CisgICAgY2hhciogbV9wdHI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWxl
Z2F0ZVR5cGU+Cit0eXBlbmFtZSBEZWxlZ2F0ZVR5cGU6OlJlc3VsdFR5cGUgcGFyc2VPYmpDVHlw
ZShjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgQVNTRVJUKCpwb3NpdGlvbik7CisKKyAg
ICBzd2l0Y2ggKCoocG9zaXRpb24rKykpIHsKKyAgICBjYXNlICdjJzoKKyAgICAgICAgcmV0dXJu
IERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8Y2hhcj4oKTsKKyAgICBjYXNlICdp
JzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8aW50
PigpOworICAgIGNhc2UgJ3MnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0
ZSB0eXBlSW50ZWdlcjxzaG9ydD4oKTsKKyAgICBjYXNlICdsJzoKKyAgICAgICAgcmV0dXJuIERl
bGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8bG9uZz4oKTsKKyAgICBjYXNlICdxJzoK
KyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZURvdWJsZTx1bnNpZ25l
ZCBsb25nIGxvbmc+KCk7CisgICAgY2FzZSAnQyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5
cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPHVuc2lnbmVkIGNoYXI+KCk7CisgICAgY2FzZSAnSSc6
CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPHVuc2ln
bmVkPigpOworICAgIGNhc2UgJ1MnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1w
bGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4oKTsKKyAgICBjYXNlICdMJzoKKyAgICAg
ICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8dW5zaWduZWQgbG9u
Zz4oKTsKKyAgICBjYXNlICdRJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxh
dGUgdHlwZURvdWJsZTx1bnNpZ25lZCBsb25nIGxvbmc+KCk7CisgICAgY2FzZSAnZic6CisgICAg
ICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8ZmxvYXQ+KCk7Cisg
ICAgY2FzZSAnZCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVE
b3VibGU8ZG91YmxlPigpOworICAgIGNhc2UgJ0InOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVU
eXBlOjp0eXBlQm9vbCgpOworICAgIGNhc2UgJ3YnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVU
eXBlOjp0eXBlVm9pZCgpOworICAgIAorICAgIGNhc2UgJ0AnOiB7IC8vIEFuIG9iamVjdCAod2hl
dGhlciBzdGF0aWNhbGx5IHR5cGVkIG9yIHR5cGVkIGlkKQorICAgICAgICBpZiAocG9zaXRpb25b
MF0gPT0gJz8nICYmIHBvc2l0aW9uWzFdID09ICc8JykgeworICAgICAgICAgICAgcG9zaXRpb24g
Kz0gMjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gcG9zaXRpb247CisgICAgICAg
ICAgICBza2lwUGFpcjwnPCcsJz4nPihwb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gRGVs
ZWdhdGVUeXBlOjp0eXBlQmxvY2soYmVnaW4sIHBvc2l0aW9uIC0gMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoKnBvc2l0aW9uID09ICciJykgeworICAgICAgICAgICAgY29uc3QgY2hhciog
YmVnaW4gPSArK3Bvc2l0aW9uOworICAgICAgICAgICAgcG9zaXRpb24gPSBpbmRleChwb3NpdGlv
biwgJyInKTsKKyAgICAgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVPZkNsYXNzKGJl
Z2luLCBwb3NpdGlvbisrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5
cGU6OnR5cGVJZCgpOworICAgIH0KKworICAgIGNhc2UgJ3snOiB7IC8vIHtuYW1lPXR5cGUuLi59
IEEgc3RydWN0dXJlCisgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gcG9zaXRpb24gLSAxOwor
ICAgICAgICBza2lwUGFpcjwneycsJ30nPihwb3NpdGlvbik7CisgICAgICAgIHJldHVybiBEZWxl
Z2F0ZVR5cGU6OnR5cGVTdHJ1Y3QoYmVnaW4sIHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICAvLyBO
T1Qgc3VwcG9ydGluZyBDIHN0cmluZ3MsIGFycmF5cywgcG9pbnRlcnMsIHVuaW9ucywgYml0Zmll
bGRzLCBmdW5jdGlvbiBwb2ludGVycy4KKyAgICBjYXNlICcqJzogLy8gQSBjaGFyYWN0ZXIgc3Ry
aW5nIChjaGFyICopCisgICAgY2FzZSAnWyc6IC8vIFthcnJheSB0eXBlXSBBbiBhcnJheQorICAg
IGNhc2UgJygnOiAvLyAobmFtZT10eXBlLi4uKSBBIHVuaW9uCisgICAgY2FzZSAnYic6IC8vIGJu
dW0gQSBiaXQgZmllbGQgb2YgbnVtIGJpdHMKKyAgICBjYXNlICdeJzogLy8gXnR5cGUgQSBwb2lu
dGVyIHRvIHR5cGUKKyAgICBjYXNlICc/JzogLy8gQW4gdW5rbm93biB0eXBlIChhbW9uZyBvdGhl
ciB0aGluZ3MsIHRoaXMgY29kZSBpcyB1c2VkIGZvciBmdW5jdGlvbiBwb2ludGVycykKKyAgICAv
LyBOT1Qgc3VwcG9ydGluZyBPYmplY3RpdmUtQyBDbGFzcywgU0VMCisgICAgY2FzZSAnIyc6IC8v
IEEgY2xhc3Mgb2JqZWN0IChDbGFzcykKKyAgICBjYXNlICc6JzogLy8gQSBtZXRob2Qgc2VsZWN0
b3IgKFNFTCkKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbmlsOworICAgIH0KK30KKwor
ZXh0ZXJuICJDIiB7CisgICAgY29uc3QgY2hhciAqX3Byb3RvY29sX2dldE1ldGhvZFR5cGVFbmNv
ZGluZyhQcm90b2NvbCAqLCBTRUwsIEJPT0wgaXNSZXF1aXJlZE1ldGhvZCwgQk9PTCBpc0luc3Rh
bmNlTWV0aG9kKTsKKyAgICBpZCBvYmpjX2luaXRXZWFrKGlkICosIGlkKTsKKyAgICB2b2lkIG9i
amNfZGVzdHJveVdlYWsoaWQgKik7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEyIEBA
IHN0YXRpYyBkb3VibGUgbmFuKGNvbnN0IGNoYXIqKQogCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KE1BQykKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisjZW5kaWYKKwogc3RhdGljIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0Owotc3RhdGljIGludCBmYWlsZWQ7CitpbnQgZmFpbGVk
Owogc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzQXNCb29sZWFuKEpTVmFsdWVSZWYgdmFsdWUsIGJv
b2wgZXhwZWN0ZWRWYWx1ZSkKIHsKICAgICBpZiAoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2
YWx1ZSkgIT0gZXhwZWN0ZWRWYWx1ZSkgewpAQCAtMTA0MCw2ICsxMDQ0LDEwIEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgOjpTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworI2VuZGlmCisK
ICAgICBjb25zdCBjaGFyICpzY3JpcHRQYXRoID0gInRlc3RhcGkuanMiOwogICAgIGlmIChhcmdj
ID4gMSkgewogICAgICAgICBzY3JpcHRQYXRoID0gYXJndlsxXTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKy8vIEZvciBfQmxvY2tfaGFzX3NpZ25hdHVyZSAm
IF9CbG9ja19zaWduYXR1cmUKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgX19jcGx1c3Bs
dXMgMAorI2VuZGlmCisjaW1wb3J0IDwvdXNyL2xvY2FsL2luY2x1ZGUvQmxvY2tfcHJpdmF0ZS5o
PgorCitleHRlcm4gaW50IGZhaWxlZDsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisK
KyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0Bwcm90b2NvbCBQYXJlbnRPYmplY3QgPEpTRXhw
b3J0PgorQGVuZAorCitAaW50ZXJmYWNlIFBhcmVudE9iamVjdCA6IE5TT2JqZWN0PFBhcmVudE9i
amVjdD4KKysgKE5TU3RyaW5nICopcGFyZW50VGVzdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFBhcmVudE9iamVjdAorKyAoTlNTdHJpbmcgKilwYXJlbnRUZXN0Cit7CisgICAgcmV0dXJuIFtz
ZWxmIGRlc2NyaXB0aW9uXTsKK30KK0BlbmQKKworQHByb3RvY29sIFRlc3RPYmplY3QgPEpTRXhw
b3J0PgorQHByb3BlcnR5IGludCB2YXJpYWJsZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIGludCBz
aXg7CitAcHJvcGVydHkgQ0dQb2ludCBwb2ludDsKKysgKE5TU3RyaW5nICopY2xhc3NUZXN0Owor
KyAoTlNTdHJpbmcgKilwYXJlbnRUZXN0OworLSAoTlNTdHJpbmcgKilnZXRTdHJpbmc7CitKU0V4
cG9ydEFzKHRlc3RBcmd1bWVudFR5cGVzLAorLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBl
c1dpdGhJbnQ6KGludClpIGRvdWJsZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzoo
TlNTdHJpbmcqKXMgbnVtYmVyOihOU051bWJlciopbiBhcnJheTooTlNBcnJheSopYSBkaWN0aW9u
YXJ5OihOU0RpY3Rpb25hcnkqKW8KKyk7CistICh2b2lkKWNhbGxiYWNrOih2b2lkKF4pKGludCkp
YmxvY2s7CitAZW5kCisKK0BpbnRlcmZhY2UgVGVzdE9iamVjdCA6IFBhcmVudE9iamVjdCA8VGVz
dE9iamVjdD4KK0Bwcm9wZXJ0eSBpbnQgc2l4OworKyAoaWQpdGVzdE9iamVjdDsKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RPYmplY3QKK0BzeW50aGVzaXplIHZhcmlhYmxlOworQHN5bnRo
ZXNpemUgc2l4OworQHN5bnRoZXNpemUgcG9pbnQ7CisrIChpZCl0ZXN0T2JqZWN0Cit7CisgICAg
cmV0dXJuIFtbW1Rlc3RPYmplY3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKysgKE5T
U3RyaW5nICopY2xhc3NUZXN0Cit7CisgICAgcmV0dXJuIEAiY2xhc3NUZXN0IC0gb2theSI7Cit9
CistIChOU1N0cmluZyAqKWdldFN0cmluZworeworICAgIHJldHVybiBAIjQyIjsKK30KKy0gKE5T
U3RyaW5nICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6KGRvdWJsZSlk
IGJvb2xlYW46KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNOdW1iZXIqKW4g
YXJyYXk6KE5TQXJyYXkqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCit7CisgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQsJWcsJWQsJUAsJWQsJUAsJUAiLCBp
LCBkLCBiPT1ZRVM/dHJ1ZTpmYWxzZSxzLFtuIGludFZhbHVlXSxhWzFdLG9bQCJ4Il1dOworfQor
LSAodm9pZCljYWxsYmFjazoodm9pZCheKShpbnQpKWJsb2NrCit7CisgICAgYmxvY2soNDIpOwor
fQorQGVuZAorCitib29sIHRlc3RYWVpUZXN0ZWQgPSBmYWxzZTsKKworQHByb3RvY29sIFRleHRY
WVogPEpTRXhwb3J0PgorQHByb3BlcnR5IGludCB4OworQHByb3BlcnR5IChyZWFkb25seSkgaW50
IHk7CistICh2b2lkKXRlc3Q6KE5TU3RyaW5nICopbWVzc2FnZTsKK0BlbmQKKworQGludGVyZmFj
ZSBUZXh0WFlaIDogTlNPYmplY3QgPFRleHRYWVo+CitAcHJvcGVydHkgaW50IHg7CitAcHJvcGVy
dHkgaW50IHk7CitAcHJvcGVydHkgaW50IHo7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0
WFlaCitAc3ludGhlc2l6ZSB4OworQHN5bnRoZXNpemUgeTsKK0BzeW50aGVzaXplIHo7CistICh2
b2lkKXRlc3Q6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHRlc3RYWVpUZXN0ZWQgPSBbbWVz
c2FnZSBpc0VxdWFsOkAidGVzdCJdICYmIHggPT0gMTMgJiB5ID09IDQgJiYgeiA9PSA1OworfQor
QGVuZAorCitzdGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJv
b2wgcGFzc2VkKQoreworICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9u
LCBwYXNzZWQgPyBAIlBBU1NFRCIgOiBAIkZBSUxFRCIpOworICAgIGlmICghcGFzc2VkKQorICAg
ICAgICBmYWlsZWQgPSAxOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5z
Q2xhc3MoKQoreworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jlc3VsdEZh
bHNlLAorICAgICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0VW5rbm93
bgorICAgIH07CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVja1Jlc3Vs
dFVua25vd247CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgeworICAgICAg
ICBpZCBibG9jayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07CisgICAg
ICAgIGNoZWNrID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihfQmxvY2tf
c2lnbmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBDaGVja1Jl
c3VsdEZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK3ZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkoKQoreworICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEki
KTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdOworICAgICAgICBj
aGVja1Jlc3VsdChAIjIgKyAyIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0KTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nICpyZXN1
bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlR3byBwbHVzIHR3byBpcyAlQCIsIFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiMiArIDIiXV07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
c3RyaW5nV2l0aEZvcm1hdCIsIFtyZXN1bHQgaXNFcXVhbDpAIlR3byBwbHVzIHR3byBpcyA0Il0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
Y29udGV4dFtAIm1lc3NhZ2UiXSA9IEAiSGVsbG8iOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm1lc3NhZ2UgKyAnLCBXb3JsZCEnIl07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAiSGVsbG8sIFdvcmxkISIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0Vx
dWFsOkAiSGVsbG8sIFdvcmxkISJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiKHsgeDo0MiB9KSJdOworICAgICAgICBpZCBvYmogPSBbcmVzdWx0IHRvT2JqZWN0
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVyYWwiLCBbb2Jq
IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgaWQgbnVtID0g
KE5TRGljdGlvbmFyeSopb2JqW0AieCJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkNoZWNrIG51
bWVyaWMgbGl0ZXJhbCIsIFtudW0gaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBfX2Js
b2NrIGludCByZXN1bHQ7CisgICAgICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0gPSBeKGlu
dCB2YWx1ZSl7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICAg
ICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAg
ICBjaGVja1Jlc3VsdChAImJsb2NrQ2FsbGJhY2siLCByZXN1bHQgPT0gNDIpOworICAgIH0KKwor
ICAgIGlmIChibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKSkgeworICAgICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgX19ibG9jayBib29sIHJl
c3VsdCA9IGZhbHNlOworICAgICAgICAgICAgY29udGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4o
TlNTdHJpbmcgKnZhbHVlKXsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbQCI0MiIgaXNFcXVh
bFRvU3RyaW5nOnZhbHVlXSA9PSBZRVM7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICAgICAg
Y2hlY2tSZXN1bHQoQCJibG9ja0NhbGxiYWNrKE5TU3RyaW5nICopIiwgcmVzdWx0KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBOU0xvZyhAIlNraXBwaW5nICdibG9ja0NhbGxiYWNr
KE5TU3RyaW5nICopJyB0ZXN0IGNhc2UiKTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIhY29udGV4dC5leGNlcHRpb24iLCAhY29u
dGV4dC5leGNlcHRpb24pOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQl
XiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAImNvbnRleHQuZXhjZXB0aW9uIiwgY29udGV4dC5leGNlcHRp
b24pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAg
ICAgX19ibG9jayBib29sIGNhdWdodCA9IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlv
bkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7Cisg
ICAgICAgICAgICAodm9pZCljb250ZXh0OworICAgICAgICAgICAgKHZvaWQpZXhjZXB0aW9uOwor
ICAgICAgICAgICAgY2F1Z2h0ID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQg
U1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU0NvbnRleHQuZXhj
ZXB0aW9uSGFuZGxlciIsIGNhdWdodCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisgICAgICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAg
ICAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JG
cm9tTWVzc2FnZTpAIlNvbWV0aGluZyB3ZW50IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRdOwor
ICAgICAgICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAInZhciByZXN1bHQ7IHRyeSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0
ID0gJ0NhdWdodCBleGNlcHRpb24nOyB9Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGlj
aXQgdGhyb3cgaW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbW3Jlc3Vs
dCB0b1N0cmluZ10gaXNFcXVhbDpAIkNhdWdodCBleGNlcHRpb24iXSk7CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSBub3QgdGhyb3duIHRvIE9iamVj
dGl2ZS1DIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKKyAg
ICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRd
OworICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMg
SVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgfTsK
KyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIg
cmVzdWx0OyB0cnkgeyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQg
ZXhjZXB0aW9uJzsgfSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGlu
IGNhbGxiYWNrIC0gd2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW1tyZXN1bHQgdG9TdHJpbmdd
IGlzRXF1YWw6QCJDYXVnaHQgZXhjZXB0aW9uIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIklt
cGxpY2l0IHRocm93IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFj
b250ZXh0LmV4Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAi
ZnVuY3Rpb24gc3VtKGFycmF5KSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDsg
XAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IGFycmF5W2ldOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsgXAorICAgICAgICAgICAgfSJdOworICAgICAgICBKU1ZhbHVlICphcnJheSA9IFtKU1ZhbHVl
IHZhbHVlV2l0aE9iamVjdDpAW0AxMywgQDIsIEA3XSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAg
ICAgIEpTVmFsdWUgKnN1bUZ1bmN0aW9uID0gY29udGV4dFtAInN1bSJdOworICAgICAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbc3VtRnVuY3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsgYXJyYXkgXV07
CisgICAgICAgIGNoZWNrUmVzdWx0KEAic3VtKFsxMywgMiwgN10pIiwgW3Jlc3VsdCB0b0ludDMy
XSA9PSAyMik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBKU1ZhbHVlICptdWxBZGRGdW5jdGlvbiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OgorICAgICAgICAgICAgQCIoZnVuY3Rpb24oYXJyYXksIG9iamVjdCkgeyBcCisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IFtdOyBcCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBh
cnJheSkgXAorICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSAqIG9iamVj
dC54ICsgb2JqZWN0LnkpOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAg
ICAgICAgICAgfSkiXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW211bEFkZEZ1bmN0aW9u
IGNhbGxXaXRoQXJndW1lbnRzOkBbIEBbIEAyLCBANCwgQDggXSwgQHsgQCJ4IjpAMC41LCBAInki
OkA0MiB9IF1dOworICAgICAgICBjaGVja1Jlc3VsdChAIm11bEFkZEZ1bmN0aW9uIiwgW1tyZXN1
bHQgdG9TdHJpbmddIGlzRXF1YWw6QCI0Myw0NCw0NiJdKTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1Zh
bHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKworICAgICAgICBvYmpl
Y3RbQCJwb2ludCJdID0gQHsgQCJ4IjpAMSwgQCJ5IjpAMiB9OworICAgICAgICBvYmplY3RbQCJw
b2ludCJdW0AieCJdID0gQDM7CisgICAgICAgIENHUG9pbnQgcG9pbnQgPSBbb2JqZWN0W0AicG9p
bnQiXSB0b1BvaW50XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0b1BvaW50IiwgcG9pbnQueCA9
PSAzICYmIHBvaW50LnkgPT0gMik7CisKKyAgICAgICAgb2JqZWN0W0B7IEAidG9TdHJpbmciOl57
IHJldHVybiBAImZvbyI7IH0gfV0gPSBAImJhciI7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidG9T
dHJpbmcgaW4gb2JqZWN0IGxpdGVyYWwgdXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZv
byJdIHRvU3RyaW5nXSBpc0VxdWFsOkAiYmFyIl0pOworCisgICAgICAgIG9iamVjdFtbQCJmb29i
YXIiIHN1YnN0cmluZ1RvSW5kZXg6M11dID0gQCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChA
InN1YnN0cmluZyB1c2VkIGFzIHN1YnNjcmlwdCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmdd
IGlzRXF1YWw6QCJiYXIiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICBUZXh0WFlaICp0ZXN0WFlaID0gW1tUZXh0WFlaIGFsbG9jXSBpbml0
XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RYWVoiXSA9IHRlc3RYWVo7CisgICAgICAgIHRlc3RY
WVoueCA9IDM7CisgICAgICAgIHRlc3RYWVoueSA9IDQ7CisgICAgICAgIHRlc3RYWVoueiA9IDU7
CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ID0gMTM7IHRlc3RY
WVoueSA9IDE0OyJdOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVou
dGVzdCgndGVzdCcpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHRlc3RYWVpU
ZXN0ZWQiLCB0ZXN0WFlaVGVzdGVkKTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnggKyAnLCcgKyB0ZXN0WFlaLnkgKyAnLCcgKyB0
ZXN0WFlaLnoiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gcmVzdWx0IiwgW1ty
ZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCIxMyw0LHVuZGVmaW5lZCJdKTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtjb250ZXh0W0AiT2Jq
ZWN0Il1bQCJwcm90b3R5cGUiXSBkZWZpbmVQcm9wZXJ0eTpAImdldHRlclByb3BlcnR5IiBkZXNj
cmlwdG9yOkB7CisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTpeeworICAg
ICAgICAgICAgICAgIHJldHVybiBbSlNDb250ZXh0IGN1cnJlbnRUaGlzXVtAIngiXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVl
IHZhbHVlV2l0aE9iamVjdDpAeyBAIngiOkAxMDEgfSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAg
ICAgIGludCByZXN1bHQgPSBbb2JqZWN0IFtAImdldHRlclByb3BlcnR5Il0gdG9JbnQzMl07Cisg
ICAgICAgIGNoZWNrUmVzdWx0KEAiZ2V0dGVyUHJvcGVydHkiLCByZXN1bHQgPT0gMTAxKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRl
eHRbQCJjb25jYXRlbmF0ZSJdID0gXnsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFyZ3VtZW50cyA9
IFtKU0NvbnRleHQgY3VycmVudEFyZ3VtZW50c107CisgICAgICAgICAgICBpZiAoIVthcmd1bWVu
dHMgY291bnRdKQorICAgICAgICAgICAgICAgIHJldHVybiBAIiI7CisgICAgICAgICAgICBOU1N0
cmluZyAqbWVzc2FnZSA9IFthcmd1bWVudHNbMF0gZGVzY3JpcHRpb25dOworICAgICAgICAgICAg
Zm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMTsgaW5kZXggPCBbYXJndW1lbnRzIGNvdW50XTsgKytp
bmRleCkKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQCAlQCIsIG1lc3NhZ2UsIGFyZ3VtZW50c1tpbmRleF1dOworICAgICAgICAgICAgcmV0
dXJuIG1lc3NhZ2U7CisgICAgICAgIH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiY29uY2F0ZW5hdGUoJ0hlbGxvLCcsICdXb3JsZCEnKSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAImNvbmNhdGVuYXRlIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmpl
Y3Q6QCJIZWxsbywgV29ybGQhIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAImZvbyJdID0gQFlFUzsKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07Cisg
ICAgICAgIGNoZWNrUmVzdWx0KEAiQFlFUyBpcyBib29sZWFuIiwgW1tyZXN1bHQgdG9TdHJpbmdd
IGlzRXF1YWw6QCJib29sZWFuIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0
IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVj
dDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJT
dHJpbmcodGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9i
amVjdCkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdF0i
XSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAg
ICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyh0ZXN0T2JqZWN0Ll9f
cHJvdG9fXykiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdC5fX3By
b3RvX18pIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RQ
cm90b3R5cGVdIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsK
KyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJp
bmcoVGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVzdE9iamVj
dCkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdENvbnN0
cnVjdG9yXSJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OltUZXN0
T2JqZWN0IGNsYXNzXSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
W3ZhbHVlIHRvT2JqZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10iLCBbdmFsdWUgdG9PYmplY3Rd
ID09IFtUZXN0T2JqZWN0IGNsYXNzXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmpl
Y3QgY2xhc3NdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAIlRlc3RPYmplY3QucGFyZW50VGVzdCgpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
VGVzdE9iamVjdC5wYXJlbnRUZXN0KCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIlRlc3RP
YmplY3QiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07
CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QSJdID0gdGVzdE9iamVjdDsKKyAgICAgICAg
Y29udGV4dFtAInRlc3RPYmplY3RCIl0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3RBID09IHRlc3RPYmpl
Y3RCIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdEEgPT0gdGVzdE9iamVjdEIi
LCBbcmVzdWx0IHRvQm9vbF0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRl
c3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsK
KyAgICAgICAgdGVzdE9iamVjdC5wb2ludCA9IChDR1BvaW50KXszLDR9OworICAgICAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSBKU09O
LnN0cmluZ2lmeSh0ZXN0T2JqZWN0LnBvaW50KTsgdGVzdE9iamVjdC5wb2ludCA9IHt4OjEyLHk6
MTR9OyByZXN1bHQiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0g
cmVzdWx0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJ7XCJ4XCI6MyxcInlcIjo0fSJd
KTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0ge3g6MTIseToxNH0i
LCB0ZXN0T2JqZWN0LnBvaW50LnggPT0gMTIgJiYgdGVzdE9iamVjdC5wb2ludC55ID09IDE0KTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRl
c3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAg
dGVzdE9iamVjdC5zaXggPSA2OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKKyAgICAgICAgY29udGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkpeyByZXR1
cm4geCAqIHk7IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAibXVsKHRlc3RPYmplY3Quc2l4LCA3KSJdOworICAgICAgICBjaGVja1Jlc3VsdChA
Im11bCh0ZXN0T2JqZWN0LnNpeCwgNykiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9
CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmpl
Y3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4
dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2Jq
ZWN0Il1bQCJ2YXJpYWJsZSJdID0gQDQ7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiKyt0ZXN0T2JqZWN0LnZhcmlhYmxlIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiKyt0ZXN0
T2JqZWN0LnZhcmlhYmxlIiwgdGVzdE9iamVjdC52YXJpYWJsZSA9PSA1KTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2lu
dCJdID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAicG9pbnQueCArICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0
cmluZ10gaXNFcXVhbDpAIjYsNyJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5
IjpANyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicG9p
bnQueCArICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAg
ICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUg
KnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmco
KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCBbcmVz
dWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0
ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7
CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVz
dE9iamVjdC50ZXN0QXJndW1lbnRUeXBlcygxMDEsMC41LHRydWUsJ2ZvbycsNjY2LFtmYWxzZSwn
YmFyJyxmYWxzZV0se3g6J2Jheid9KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmpl
Y3QudGVzdEFyZ3VtZW50VHlwZXMiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIjEwMSwwLjUs
MSxmb28sNjY2LGJhcixiYXoiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3Qg
dGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRl
c3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCB0b0lu
dDMyXSA9PSA0Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVj
dF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAg
ICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIHByZSIsICFjb250
ZXh0LmV4Y2VwdGlvbik7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9i
amVjdC5nZXRTdHJpbmcuY2FsbCh7fSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2Jq
ZWN0LmdldFN0cmluZy5jYWxsKHt9KSBwb3N0IiwgY29udGV4dC5leGNlcHRpb24pOworICAgIH0K
KworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVj
dCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0
W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0g
W2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0gMDsgdGVzdE9iamVjdC5jYWxs
YmFjayhmdW5jdGlvbih4KXsgcmVzdWx0ID0geDsgfSk7IHJlc3VsdCJdOworICAgICAgICBjaGVj
a1Jlc3VsdChAInRlc3RPYmplY3QuY2FsbGJhY2siLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0MSA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0MiA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQx
LnZpcnR1YWxNYWNoaW5lXTsKKyAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1
ZVdpdGhEb3VibGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJ2YWx1ZS5jb250ZXh0ID09IGNvbnRleHQyIiwgdmFsdWUuY29udGV4dCA9PSBjb250ZXh0Mik7
CisgICAgICAgIGNvbnRleHQxW0AicGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRzIl0gPSB2YWx1ZTsK
KyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQxIGV2YWx1YXRlU2NyaXB0OkAicGFz
c1ZhbHVlQmV0d2VlbkNvbnRleHRzIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0LmNv
bnRleHQgPT0gY29udGV4dDEiLCByZXN1bHQuY29udGV4dCA9PSBjb250ZXh0MSk7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiW3ZhbHVlIGlzRXF1YWxUb09iamVjdDpyZXN1bHRdIiwgW3ZhbHVlIGlz
RXF1YWxUb09iamVjdDpyZXN1bHRdKTsKKyAgICAgICAgW2NvbnRleHQxIHJlbGVhc2VdOworICAg
ICAgICBbY29udGV4dDIgcmVsZWFzZV07CisgICAgfQorfQorCisjZWxzZQorCit2b2lkIHRlc3RP
YmplY3RpdmVDQVBJKCkKK3sKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0
MCw2ICs1NDAsNyBAQAogCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMjBF
RTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi87IH07CiAJCTg2Q0M4NUM0MEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJv
cGVydHlBY2Nlc3MuY3BwICovOyB9OwogCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklU
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZD
Q0VGREQwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkQyMjIxQTE2N0VGOTQ0MDAyNEM4MDQgLyog
dGVzdGFwaS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLzsgfTsKIAkJODZEM0IyQzMx
MDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJCRjEwMTU2QkRFMDAyODY1RTcgLyogQVJN
QXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZEM0IyQzAxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RDNCMkM1MTAxNTZCREUwMDI4
NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcg
LyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NDgsNiArNTQ5LDE4IEBACiAJCTg2RDNC
M0M0MTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyog
UmVwYXRjaEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAgKi87IH07CiAJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2
MEEgLyogQVBJSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjEzMTY3QkFC
RDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjE0
MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUz
QzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmlydHVhbE1hY2hpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CisJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwODE2
N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tICovOyB9OworCQk4NkUzQzYxNzE2N0JBQkVF
MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRl
eHRJbnRlcm5hbC5oICovOyB9OworCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFw
cGVyTWFwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFM0M2MEIxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLzsgfTsKKwkJODZF
M0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5oICovOyB9OworCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
YWx1ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RTNDNjBEMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLm1tICovOyB9OworCQk4NkUzQzYxQjE2
N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNW
YWx1ZUludGVybmFsLmggKi87IH07CisJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1Zp
cnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi87
IH07CisJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTND
NjExMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgfTsK
IAkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4
RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3Ry
dWN0b3IuY3BwICovOyB9OwogCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkVCRjJGQTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC01
NjksNiArNTgyLDExIEBACiAJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxh
dGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi87IH07CiAJ
CTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyog
REZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZF
Q0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLzsgfTsKKwkJODZGM0VF
QkIxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyog
SlNCbG9ja0FkYXB0b3IuaCAqLzsgfTsKKwkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpT
QmxvY2tBZGFwdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZGM0VFQjgxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovOyB9
OworCQk4NkYzRUVCRDE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI5MTY4
Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OworCQk4NkYzRUVC
RTE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCQTE2OENDRjc1MDA3N0I5
MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi87IH07CisJCTg2RjNFRUJGMTY4Q0RFOTMw
MDc3QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50
aW1lRXh0cmFzLmggKi87IH07CiAJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi87IH07
CiAJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RTkwMTQyQkJCMkUw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLzsgfTsKIAkJOTAyMTNFM0QxMjNBNDBDMjAw
RDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0
YXRpc3RpY3MuY3BwICovOyB9OwpAQCAtMTM3OCw2ICsxMzk2LDcgQEAKIAkJODZDQzg1QTIwRUU3
OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4
NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGku
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gdGVzdGFwaS5tOyBwYXRoID0g
QVBJL3Rlc3RzL3Rlc3RhcGkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0Iy
QkYxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBUk1Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkQzQjJDMDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTUFzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVy
QnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzg2LDYgKzE0MDUsMTggQEAKIAkJODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3
IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVw
YXRjaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkRCNjQ2MzBGOTVD
NkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZN
UG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RTExNkIwMEZFNzVBQzgw
MEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA2
MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZF
M0M2MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODZFM0M2MDgxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dEludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAv
KiBKU0V4cG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEg
LyogSlNXcmFwcGVyTWFwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gSlNXcmFwcGVyTWFwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYw
QzE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV3JhcHBlck1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NkUzQzYwRDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTVmFsdWUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1Zp
cnR1YWxNYWNoaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVh
bE1hY2hpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTAxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBKU1ZpcnR1YWxNYWNoaW5lLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5
OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkVCRjJGOTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWVDb25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUJGMkZBMTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1l
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZUNvbnN0
cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA3LDYgKzE0MzgsMTEg
QEAKIAkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklULmg7IHBhdGgg
PSBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHTm9kZS5oOyBwYXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3Jl
Qm9hcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NvcmVCb2FyZC5o
OyBwYXRoID0gZGZnL0RGR1Njb3JlQm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2Nr
QWRhcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jsb2NrQWRhcHRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCODE2OENDRjc1MDA3N0I5
MkEgLyogSlNCbG9ja0FkYXB0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBKU0Jsb2NrQWRhcHRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODZGM0VFQjkxNjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkY3NUVGQjE1MUMwNjJGMDA3QzlCQTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAv
KiBSZWdFeHBDYWNoZWRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVnRXhwQ2FjaGVkUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1
RUZEMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NzgsNiArMTkxNCw3IEBACiAJCQkJMTQ0MDA1MTcw
QTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFG
NTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVz
dGFwaS5qcyAqLywKKwkJCQk4NkQyMjIxOTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tICov
LAogCQkJCTY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLywKIAkJ
CSk7CiAJCQluYW1lID0gdGVzdHM7CkBAIC0yMDQ1LDYgKzIwODIsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgyQjc4QTBBNDMwNUFCMDA1MTdDRkMgLyog
QVBJQ2FzdC5oICovLAorCQkJCTg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVl
LmggKi8sCiAJCQkJODY1RjQwODcxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggKi8sCiAJ
CQkJMUNBQThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJCQkxQ0FB
OEI0QjBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLywKQEAgLTIwNTMsNiAr
MjA5MSw4IEBACiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8s
CiAJCQkJMTQyNzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAogCQkJCTE0MEQx
N0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCisJCQkJODZGM0VFQjcx
NjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggKi8sCisJCQkJODZGM0VFQjgxNjhD
Q0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovLAogCQkJCTE0NDBGOEFEMEE1MDhE
MjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFD
MEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKIAkJCQkxNDQw
Rjg5MDBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLywKQEAgLTIw
NjIsOSArMjEwMiwxMyBAQAogCQkJCUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmggKi8sCiAJCQkJMTQ0MEZDRTIwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwICovLAogCQkJCTE0NDBGQ0UxMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0Ns
YXNzUmVmLmggKi8sCisJCQkJODZFM0M2MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5o
ICovLAorCQkJCTg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi8sCisJ
CQkJODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8sCiAJ
CQkJMTRCRDVBMjkwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgKi8sCiAJCQkJ
MTRCRDVBMkEwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5oICovLAogCQkJCTE0OENE
MUQ3MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8sCisJCQkJODZF
M0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi8sCiAJCQkJMTQ4MkI3RTIwQTQz
MDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLywKIAkJCQkxNDgyQjdFMTBBNDMwNzYw
MDA1MTdDRkMgLyogSlNPYmplY3RSZWYuaCAqLywKIAkJCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5
MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmggKi8sCkBAIC0yMDc3LDExICsyMTIxLDIxIEBACiAJ
CQkJMTQ4MkI3NEIwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmggKi8sCiAJCQkJMTQ2
QUFCMzcwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwICovLAogCQkJCTE0NkFB
QjJBMEI2NkE4NDkwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmggKi8sCisJCQkJODZFM0M2MEQx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gKi8sCisJCQkJODZFM0M2MEUxNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oICovLAogCQkJCTE0QkQ1QTJCMEEzRTkxRjYwMEJB
RjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCAqLywKIAkJCQkxNDgyQjZFQTBBNDMwMEIzMDA1MTdDRkMg
LyogSlNWYWx1ZVJlZi5oICovLAorCQkJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1Zp
cnR1YWxNYWNoaW5lLmggKi8sCisJCQkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmUubW0gKi8sCisJCQkJODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmVJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyRTM3MTE2QTY5N0IwMDNCMDcxMiAv
KiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oICovLAogCQkJCUE3NDgyQjdBMTE2NkNERUEw
MDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCAqLywKIAkJCQlBNzQ4MkI3
OTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oICovLAorCQkJ
CTg2RTNDNjBCMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi8sCisJCQkJODZF
M0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oICovLAorCQkJCTg2RjNFRUI5
MTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovLAorCQkJCTg2RjNF
RUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSAqLywKKwkJCQk4
NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlF
MTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUx
MjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAogCQkJCTVERTNE
MEY0MEREOERERkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKQEAgLTMyMDUs
NiArMzI1OSwxNyBAQAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdE
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5
RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTND
NjEyMTY3QkFCRDcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dy
YXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAv
KiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFEMTY3QkFCRUUw
MDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg2RjNFRUJCMTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODZGM0VFQkQxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkYzRUVCRjE2OENERTkzMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzUyOCw2ICszNTkzLDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxNDQwRjYxMDBB
NEY4NTY3MDAwNUYwNjEgLyogdGVzdGFwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJODZEMjIyMUEx
NjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzgyNSw2ICsz
ODkxLDEyIEBACiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUVGOTFFMTY4NzhG
N0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MTYx
NjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTND
NjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakND
YWxsYmFja0Z1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw2ICsxODUsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9i
YWxEYXRhVHlwCiAgICAgLCBtX3RpbWVvdXRDb3VudCg1MTIpCiAjZW5kaWYKICAgICAsIG1fbmV3
U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zdCgwKQorICAgICwgbV9hcGlEYXRhKDApCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKICAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihl
eGVjdXRhYmxlQWxsb2NhdG9yKSkKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NTMsNiArNDUzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCisgICAgICAgIHZvaWQgKm1fYXBpRGF0YTsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRAogICAgICwg
bV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZv
cmNlZFdlYWtSYW5kb21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVy
KCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAg
LCBtX2V2YWxFbmFibGVkKHRydWUpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGds
b2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICAsIG1fYXBpRGF0YSgwKQogewogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlz
aW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0K
ICAgICAgICAgYm9vbCBoYXNQcm9maWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmlsaW5nKHRoaXMpOyB9CiAKKyAgICAgICAgdm9pZCog
bV9hcGlEYXRhOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBl
eHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBH
bG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMTItMzEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIE9iamVjdGl2ZS1DIEFQSSBmb3IgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg4OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEu
Y3BwOgorICAgICAgICAoV1RGOjpXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAg
ICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5oOgorICAgICAgICAoV1RGVGhyZWFkRGF0YSk6CisgICAg
ICAgICAgICAtIEFkZGVkIG1fYXBpRGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZv
ciB1c2UgYnkgdGhlIEFQSS4KKwogMjAxMi0xMi0yOCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNs
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJ
bnN0cnVtZW50YXRpb246IGluc3RydW1lbnQgbm90IGluc3RydW1lbnRlZCBtZW1iZXJzLgpJbmRl
eDogU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9X
VEYvd3RmL1dURlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogVGhyZWFkU3BlY2lmaWM8V1RGVGhyZWFkRGF0YT4qIFdURlRocmVh
ZERhdGE6OnN0YXRpY0RhdGE7CiAKIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQotICAg
IDogbV9hdG9taWNTdHJpbmdUYWJsZSgwKQorICAgIDogbV9hcGlEYXRhKDApCisgICAgLCBtX2F0
b21pY1N0cmluZ1RhYmxlKDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3Rvcigw
KQogI2lmIFVTRShKU0MpCiAgICAgLCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpTQzo6
SWRlbnRpZmllclRhYmxlKCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAx
Mzg2MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNDKQog
CisgICAgdm9pZCogbV9hcGlEYXRhOworCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZ1RhYmxl
KiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgIEF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciBt
X2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcjsK
</data>
<flag name="commit-queue"
          id="198449"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180994</attachid>
            <date>2013-01-01 12:05:58 -0800</date>
            <delta_ts>2013-01-01 17:37:46 -0800</delta_ts>
            <desc>Build bot fix</desc>
            <filename>105889.5.patch</filename>
            <type>text/plain</type>
            <size>225159</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU0NvbnRleHQ7CisKKy8vIEEgSlNWYWx1ZSBpcyBhIHJl
ZmVyZW5jZSB0byBhIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBvYmplY3Qgc3BhY2Ugb2Yg
YQorLy8gSlNWaXJ0dWFsTWFjaGluZS4gQWxsIGluc3RhbmNlcyBvZiBKU1ZhbHVlIG9yaWdpbmF0
ZSBmcm9tIGEgSlNDb250ZXh0LCBhbmQKKy8vIGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGlz
IEpTQ29udGV4dC4gV2hlcmUgYW4gaW5zdGFuY2UgbWV0aG9kIGlzIGludm9rZWQKKy8vIHVwb24g
YSBKU1ZhbHVlLCBhbmQgdGhpcyByZXR1cm5zIGFub3RoZXIgSlNWYWx1ZSwgdGhlIHJldHVybmVk
IEpTVmFsdWUgd2lsbAorLy8gb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgSlNDb250ZXh0IGFzIHRo
ZSBKU1ZhbHVlIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzCisvLyBpbnZva2VkLgorLy8KKy8vIFRo
ZSBKU0NvbnRleHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVy
ZWNlZCBKYXZhU2NyaXB0CisvLyB2YWx1ZSB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gU28g
bG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGJlaW5nIHJldGFpbmVkCisvLyB0aGUgSlNWYWx1ZSB3
aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZCB2YWx1ZSB3aXRoaW4gdGhlIEphdmFT
Y3JpcHQKKy8vIHZpcnR1YWwgbWFjaGluZSBhbGl2ZS4gV2hlbiB0aGUgSlNDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCBhIEpTVmFsdWUgaXMKKy8vIGRlYWxsb2NhdGVkIHRoZSB3ZWFrIGNvbnRleHQg
cHJvcGVydHkgb2YgdGhlIEpTVmFsdWUgd2lsbCBiZWNvbWUgbmlsLiBBZnRlcgorLy8gdGhpcyBv
Y2N1cnMgdGhlIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgaXMg
bm8gbG9uZ2VyCisvLyBiZWluZyBtYWludGFpbmVkIGJ5IHRoaXMgSlNWYWx1ZSwgYW5kIHRoZSBK
U1ZhbHVlIGluc3RhbmNlIG1heSBubyBsb25nZXIgYnkKKy8vIHVzZWQgYXMgYSByZWZlcmVuY2Ug
dG8gdGhpcyB2YWx1ZS4gRm9yIGFueSBtZXRob2QgaW52b2tlZCBvbiBpbnN0YW5jZSBvZgorLy8g
SlNWYWx1ZSB3aXRoIGEgbmlsIGNvbnRleHQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSBuaWwv
emVyby9mYWxzZSByZXN1bHQuCisvLworLy8gRm9yIGFsbCBtZXRob2RzIHRha2luZyBhcmd1bWVu
dHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkCisvLyBpbnRvIGEgSmF2
YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJlbG93
LgorLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIEpTVmlydHVhbE1hY2hpbmUKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5l
IGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRleHQKKy8vIHByb3BlcnR5KS4gQW4g
aW5zdGFuY2Ugb2YgSlNWYWx1ZSBtYXkgb25seSBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8K
Ky8vIG1ldGhvZHMgb24gaW5zdGFuY2VzIG9mIEpTVmFsdWUgYW5kIEpTQ29udGV4dCB0aGF0IGJl
bG9uZyB0byB0aGUgc2FtZQorLy8gSlNWaXJ0dWFsTWFjaGluZSAtIHBhc3NpbmcgYSBKU1ZhbHVl
IHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdCBvcmlnaW5hdGluZworLy8gZnJvbSBhIGRpZmZlcmVu
dCBKU1ZpcnR1YWxNYWNoaW5lIHdpbGwgcmVzdWx0IGluIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlv
bgorLy8gYmVpbmcgcmFpc2VkLgorLy8KKy8vIENvbnZlcnNpb24gYmV0d2VlbiBPYmplY3RpdmUt
QyBhbmQgSmF2YVNjcmlwdCB0eXBlcy4KKy8vCisvLyBXaGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBK
YXZhU2NyaXB0IHZhbHVlcyBhbmQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhIGNvcHkgaXMKKy8vIHBl
cmZvcm1lZC4gVmFsdWVzIG9mIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgY29waWVkIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisvLyB0eXBlcyBvbiBjb252ZXJzaW9uIGluIGVhY2ggZGlyZWN0aW9uLiBG
b3IgTlNEaWN0aW9uYXJpZXMsIGVudHJpZXMgaW4gdGhlCisvLyBkaWN0aW9uYXJ5IHRoYXQgYXJl
IGtleWVkIGJ5IHN0cmluZ3MgYXJlIGNvcGllZCBvbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCisv
LyBGb3IgZGljdGlvbmFyaWVzIGFuZCBhcnJheXMsIGNvbnZlcnNpb24gaXMgcmVjdXJzaXZlLCB3
aXRoIHRoZSBzYW1lIG9iamVjdAorLy8gY29udmVyc2lvbiBiZWluZyBhcHBsaWVkIHRvIGFsbCBl
bnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorLy8KKy8vICAgT2JqZWN0aXZlLUMgdHlwZSAgfCAg
IEphdmFTY3JpcHQgdHlwZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyAgICAgICAgIG5pbCAgICAgICAgIHwgICAgIHVuZGVmaW5lZAorLy8gICAgICAg
IE5TTnVsbCAgICAgICB8ICAgICAgICBudWxsCisvLyAgICAgICBOU1N0cmluZyAgICAgIHwgICAg
ICAgc3RyaW5nCisvLyAgICAgICBOU051bWJlciAgICAgIHwgICBudW1iZXIsIGJvb2xlYW4KKy8v
ICAgICBOU0RpY3Rpb25hcnkgICAgfCAgIE9iamVjdCBvYmplY3QKKy8vICAgICAgIE5TQXJyYXkg
ICAgICAgfCAgICBBcnJheSBvYmplY3QKKy8vICAgICAgICBOU0RhdGUgICAgICAgfCAgICAgRGF0
ZSBvYmplY3QKKy8vICAgICAgIE5TQmxvY2sgKiAgICAgfCAgIEZ1bmN0aW9uIG9iamVjdCAqCisv
LyAgICAgICAgICBpZCAqKiAgICAgIHwgICBXcmFwcGVyIG9iamVjdCAqKgorLy8gICAgICAgIENs
YXNzICoqKiAgICB8IENvbnN0cnVjdG9yIG9iamVjdCAqKioKKy8vCisvLyAqIEluc3RhbmNlcyBv
ZiBOU0Jsb2NrIHdpdGggc3VwcG9ydGVkIGFyZ3VtZW50cyB0eXBlcyB3aWxsIGJlIHByZXNlbnRl
ZCB0bworLy8gSmF2YVNjcmlwdCBhcyBhIGNhbGxhYmxlIEZ1bmN0aW9uIG9iamVjdC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkCisvLyBhcmd1bWVudCB0eXBlcyBzZWUgSlNFeHBv
cnQuaC4gSWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIG9yaWdpbmF0aW5nIGZyb20gYW4KKy8vIE9i
amVjdGl2ZS1DIGJsb2NrIGlzIGNvbnZlcnRlZCBiYWNrIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVj
dCB0aGUgYmxvY2sgd2lsbAorLy8gYmUgcmV0dXJuZWQuIEFsbCBvdGhlciBKYXZhU2NyaXB0IGZ1
bmN0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCBpbiB0aGUgc2FtZQorLy8gbWFubmVyIGFzIGEgSmF2
YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBPYmplY3QuCisvLworLy8gKiogRm9yIE9iamVjdGl2ZS1D
IGluc3RhbmNlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGxpc3Rl
ZAorLy8gYWJvdmUsIGEgd3JhcHBlciBvYmplY3QgdG8gcHJvdmlkZSBhIHJldGFpbmluZyBoYW5k
bGUgdG8gdGhlIE9iamVjdGl2ZS1DCisvLyBpbnN0YW5jZSBmcm9tIEphdmFTY3JpcHQuIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHdyYXBwZXIgb2JqZWN0cywgc2VlCisvLyBKU0V4cG9y
dC5oLiBXaGVuIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCBpcyBjb252ZXJ0ZWQgYmFjayB0
byBPYmplY3RpdmUtQworLy8gdGhlIE9iamVjdGl2ZS1DIGluc3RhbmNlIGJlaW5nIHJldGFpbmVk
IGJ5IHRoZSB3cmFwcGVyIGlzIHJldHVybmVkLgorLy8KKy8vICoqKiBGb3IgT2JqZWN0aXZlLUMg
Q2xhc3Mgb2JqZWN0cyBhIGNvbnN0cnVjdG9yIG9iamVjdCBjb250YWluaW5nIGV4cG9ydGVkCisv
LyBjbGFzcyBtZXRob2RzIHdpbGwgYmUgcmV0dXJuZWQuIFNlZSBKU0V4cG9ydC5oIHNvciBtb3Jl
IGluZm9ybWF0aW9uIG9uCisvLyBjb25zdHJ1Y3RvciBvYmplY3RzLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZhbHVlIDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNWYWx1ZSBieSBjb252ZXJ0aW5nIGFuIE9iamVjdGl2ZS1DIG9iamVjdC4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgZnJvbSBhbiBPYmplY3RpdmUtQyBw
cmltaXRpdmUgdHlwZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09MKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhEb3Vi
bGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNjcmlwdCB2
YWx1ZSBpbiB0aGlzIGNvbnRleHQuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Fy
cmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5nICopcGF0dGVybiBmbGFn
czooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChK
U1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCB0
aGlzIHZhbHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGFjY29yZGlu
ZyB0byB0aGUKKy8vIGNvbnZlcnNpb24gc3BlY2lmaWVkIGFib3ZlLgorLSAoaWQpdG9PYmplY3Q7
CisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCwgaWYgdGhlIHJlc3VsdCBpcworLy8gbm90IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgdGhl
biBuaWwgd2lsbCBiZSByZXR1cm5lZC4KKy0gKGlkKXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpY2xz
OworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhIGJvb2xlYW4gYWNjb3JkaW5nIHRvIHRoZSBj
b252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistIChC
T09MKXRvQm9vbDsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBudW1iZXIgYWNjb3JkaW5n
IHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3Vh
Z2UuCistIChkb3VibGUpdG9Eb3VibGU7CisvLyBUaGUgdmFsdWUgaXMgY29waWVkIHRvIGFuIGlu
dGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieQorLy8gdGhlIEph
dmFTY3JpcHQgbGFuZ3VhZ2UuCistIChpbnQzMl90KXRvSW50MzI7CisvLyBUaGUgdmFsdWUgaXMg
Y29waWVkIHRvIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll
ZCBieQorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistICh1aW50MzJfdCl0b1VJbnQzMjsK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4sIGEgTlNOdW1iZXIgdmFsdWUgb2YgQFlFUyBv
ciBATk8gd2lsbCBiZSByZXR1cm5lZC4KKy8vIEZvciBhbGwgb3RoZXIgdHlwZXMgdGhlIHZhbHVl
IHdpbGwgYmUgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUKKy8vIGNvbnZlcnNp
b24gc3BlY2lmaWVkIGJ5IHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNOdW1iZXIgKil0
b051bWJlcjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRv
IHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2Uu
CistIChOU1N0cmluZyAqKXRvU3RyaW5nOworLy8gVGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBh
IG51bWJlciByZXByZXNlbnRpbmcgYSB0aW1lIGludGVydmFsIHNpbmNlIDE5NzAsCisvLyBhbmQg
YSBuZXcgTlNEYXRlIGluc3RhbmNlIGlzIHJldHVybmVkLgorLSAoTlNEYXRlICopdG9EYXRlOwor
Ly8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVk
LgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlw
ZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gVGhlIHByb3BlcnR5ICJsZW5ndGgiIGlzIHJlYWQg
ZnJvbSB0aGUgb2JqZWN0LCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQKKy8vIGludGVnZXIsIGFu
ZCBhbiBOU0FycmF5IG9mIHRoaXMgc2l6ZSBpcyBhbGxvY2F0ZWQuIFByb3BlcnRpZXMgY29ycmVz
cG9uZGluZworLy8gdG8gaW5kaWNpZXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgd2lsbCBiZSBj
b3BpZWQgdG8gdGhlIGFycmF5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRl
ZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0Fy
cmF5OworLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJl
dHVybmVkLgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3Jp
cHQgVHlwZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGll
cyBvZiB0aGUgb2JqZWN0IGFyZSBjb3BpZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9i
amVjdGl2ZS1DIG9iamVjdHMgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3Bl
Y2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBw
cm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFT
Y3JpcHQgdmFsdWUKKy8vICd1bmRlZmluZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlz
dC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5Owor
Ly8gU2V0IGEgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFs
dWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0
eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJucyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4K
Ky0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5z
IFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9k
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgor
LSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9k
IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4g
b2JqZWN0OworLy8gdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWV0aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVh
Z2UuCistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8vIEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20g
dGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFs
dWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKKworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBw
cmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJP
T0wpaXNOdWxsOworLSAoQk9PTClpc0Jvb2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9P
TClpc1N0cmluZzsKKy0gKEJPT0wpaXNPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUg
c2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wp
aXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIu
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhlIHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3Vt
ZW50cy4KKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50
czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNp
ZmllZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50czsKKy8vIEFjY2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIg
ZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRoZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHBy
b3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0
aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUgc3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUg
KilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkg
Kilhcmd1bWVudHM7CisKKy8vIFRoZSBKU0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0
ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFkb25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0Owor
CitAZW5kCisKKy8vIE9iamVjdGl2ZS1DIG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBhcmd1bWVudCBhbmQvb3IgcmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVz
IGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVyc2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBp
cyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4gU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVz
IHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRhaW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0
aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5kIGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBl
PiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1h
dGNoLAorLy8gd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0
aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIu
CisvLyBTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNS
YW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUuCitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9y
dCkKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0
IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRo
IHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihD
R1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmlu
ZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAibG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1
ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5n
ZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJv
cGVydGllcworLy8gbmFtZWQgIngiLCAieSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVj
dClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgiIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0
aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUg
Q0dQb2ludCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8g
dGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQ
b2ludCl0b1BvaW50OworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nl
c3NpbmcgcHJvcGVydGllcyBuYW1lZCAibG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0
aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0
b1JhbmdlOworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJv
cGVydGllcyBuYW1lZCAieCIsICJ5IiwgIndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRo
aXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVj
dCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEgdmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2lu
ZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFs
dWUgY29udmVydGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOwor
CitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5n
IG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNj
ZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9i
amVjdEEsICpvYmplY3RCOworLy8gICAgSlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdl
dCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgiIGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2
MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3Qn
LgorLy8gICAgb2JqZWN0W0AiWSJdID0gdjE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHBy
b3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAg
ICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRleCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2Jq
ZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5n
IHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lLgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1
cHBvcnQpCisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Owor
LSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsK
Ky0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0Nv
cHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2Ny
aXB0OihOU1VJbnRlZ2VyKWluZGV4OworCitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5n
IGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0
eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8vIFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9u
ZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRl
c2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAi
d3JpdGFibGUiLAorLy8gICAgYW5kIG9wdGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBv
ZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRh
IGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJz
ZXQiIGtleS4KKy8vICAgIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBv
ciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNj
ZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBi
b3RoIG9mIHRoZSBrZXlzICJnZXQiIGFuZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNv
bnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAg
ImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vzc29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVp
dGhlciB0aGUgInZhbHVlIgorLy8gICAgb3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nl
c3NvciBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJp
YnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFj
aW5nIGFueSBleGlzdGluZyBkYXRhIHByb3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoK
Ky8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJl
bnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBtYXkgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBrZXlzCisvLyAgICAidmFsdWUiLCAiIHdyaXRh
YmxlIiwgImdldCIsIG9yICJzZXQiLgorLy8gICAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IGJl
IHVzZWQgdG8gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nCisvLyAgICBkYXRh
IG9yIGFjY2Vzc29yIHByb3BlcnR5LCBvciB0byBjcmVhdGUgYSBuZXcgZGF0YSBwcm9wZXJ0eS4K
K0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldy
aXRhYmxlS2V5OworSlNfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlE
ZXNjcmlwdG9yRW51bWVyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5OworSlNfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OworSlNf
RVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCiAKKyNpZmRlZiBf
X09CSkNfXworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKKwogLyog
SmF2YVNjcmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCiAKIC8qISBAdHlwZWRlZiBKU0NvbnRleHRH
cm91cFJlZiBBIGdyb3VwIHRoYXQgYXNzb2NpYXRlcyBKYXZhU2NyaXB0IGNvbnRleHRzIHdpdGgg
b25lIGFub3RoZXIuIENvbnRleHRzIGluIHRoZSBzYW1lIGdyb3VwIG1heSBzaGFyZSBhbmQgZXhj
aGFuZ2UgSmF2YVNjcmlwdCBvYmplY3RzLiAqLwpAQCAtMTM1LDQgKzEzOSw4IEBAIEpTX0VYUE9S
VCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXgKIH0KICNlbmRpZgogCisvKiBFbmFibGUg
dGhlIE9iamVjdGl2ZS1DIEFQSSBmb3IgcGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4g
Ki8KKyN1bmRlZiBKU19PQkpDX0FQSV9FTkFCTEVECisjZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJM
RUQgKGRlZmluZWQoX19PQkpDX18pICYmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgKF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkgJiYg
IWRlZmluZWQoX19pMzg2X18pKQorCiAjZW5kaWYgLyogSlNCYXNlX2ggKi8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFj
ZSBKU0Jsb2NrQWRhcHRvciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1
cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIgKilzaWduYXR1cmU7CistIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQg
d2l0aEV4Y2VwdGlvbjooSlNWYWx1ZVJlZiAqKWV4Y2VwdGlvbjsKKworQGVuZAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFT
Y3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNh
c3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAi
SlNCbG9ja0FkYXB0b3IuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0
ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgInd0Zi9P
d25QdHIuaCIKKworZXh0ZXJuICJDIiB7CitpZCBfX05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2Fw
dHVyZUJsb2NrKGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgdm9pZCAoXmhhbmRsZXIpKE5TSW52b2Nh
dGlvbiAqaW52KSk7Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5CbG9ja0FyZ3VtZW50KCk7CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0lu
dm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7CisKKyAg
ICBPd25QdHI8QmxvY2tBcmd1bWVudD4gbV9uZXh0OworfTsKKworQmxvY2tBcmd1bWVudDo6fkJs
b2NrQXJndW1lbnQoKQoreworfQorCitjbGFzcyBCbG9ja0FyZ3VtZW50Qm9vbGVhbiA6IHB1Ymxp
YyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRp
b24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIFtp
bnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEJsb2NrQXJndW1lbnROdW1lcmljIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgor
ICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAg
ICAgICAgVCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpOworICAgIH0KK307CisKK2Ns
YXNzIEJsb2NrQXJndW1lbnRJZCA6IHB1YmxpYyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAg
ICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAg
ICAgIGlkIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVybiBvYmplY3RUb1ZhbHVlKGNvbnRl
eHQsIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50U3RydWN0IDogcHVi
bGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEJsb2NrQXJndW1lbnRTdHJ1Y3QoTlNJ
bnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUp
CisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikK
KyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAg
IE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1l
bnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7
CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7
CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUo
bV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIFtpbnZvY2F0aW9uIGdl
dEFyZ3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKworICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDptX2FsbG9jYXRpb24gYXRJbmRl
eDoyXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6JmNvbnRl
eHQgYXRJbmRleDozXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0
aFRhcmdldDpbSlNWYWx1ZSBjbGFzc11dOworCisgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAg
ICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAg
ICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1f
YnVmZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK2NsYXNzIEJsb2NrQXJndW1l
bnRUeXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQmxvY2tBcmd1bWVudCogUmVz
dWx0VHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5
cGUgdHlwZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50
TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9j
a0FyZ3VtZW50TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
Qm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnRCb29sZWFuOwor
ICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFz
cyhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2so
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJlZ2lu
LCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2lu
LCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVUb1R5
cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3Vt
ZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0K
K307CisKK2NsYXNzIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9ja1Jl
c3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9u
KiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopID0gMDsKK307CisKK2NsYXNz
IEJsb2NrUmVzdWx0Vm9pZCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiop
CisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja1Jl
c3VsdEludGVnZXIgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9
IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgcmVzdWx0LCBleGNlcHRpb24pKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0UmV0
dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgQmxvY2tSZXN1bHREb3VibGUgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAg
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAg
VCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCByZXN1bHQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZh
bHVlOiZ2YWx1ZV07CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHRCb29sZWFuIDogcHVi
bGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVS
ZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0KTsKKyAgICAgICAgW2ludm9jYXRpb24g
c2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja1Jlc3VsdFN0
cnVjdCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgQmxvY2tSZXN1bHRTdHJ1
Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2Rl
ZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2Nh
dGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07Cisg
ICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRB
bGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGln
bm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdu
bWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdu
bWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrUmVzdWx0U3RydWN0KCkKKyAg
ICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBm
cmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlv
biogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZvY2F0
aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52
b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAg
ICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitAaW1wbGVtZW50YXRpb24gSlNCbG9ja0FkYXB0
b3IgeworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhPZmZzZXRz
OworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRz
OworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gbV9yZXN1bHQ7CisgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IG1fYXJndW1lbnRzOworICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnQ7Cit9CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byBhZGQgb2Zmc2V0IGluZm9ybWF0aW9uIGJhY2sgaW50byBhIGJv
Y2sgc2lnbmF0dXJlLgorc3RhdGljIE5TU3RyaW5nKiBidWlsZEJsb2NrU2lnbmF0dXJlKE5TU3Ry
aW5nKiBwcmVmaXgsIGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQsIE5TVUludGVn
ZXImIG9mZnNldCwgTlNTdHJpbmcqIHBvc3RmaXgpCit7CisgICAgU3RyaW5nUmFuZ2UgY29weShi
ZWdpbiwgZW5kKTsKKyAgICBOU1N0cmluZyogcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlQCVzJWx1JUAiLCBwcmVmaXgsIGNvcHkuZ2V0KCksIG9mZnNldCwgcG9zdGZpeF07
CisgICAgTlNVSW50ZWdlciBzaXplOworICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChjb3B5LCAm
c2l6ZSwgMCk7CisgICAgaWYgKHNpemUgPCA0KQorICAgICAgICBzaXplID0gNDsKKyAgICBvZmZz
ZXQgKz0gc2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChpZClpbml0V2l0aEJsb2Nr
U2lnbmF0dXJlRnJvbVByb3RvY29sOihjb25zdCBjaGFyKillbmNvZGVkVHlwZQoreworICAgIFtz
dXBlciBpbml0XTsKKworICAgIG1fc2lnbmF0dXJlV2l0aG91dE9mZnNldHMgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6ZW5jb2RlZFR5cGVdOworICAgIG1fYXJndW1lbnRDb3VudCA9
IDA7CisKKyAgICAvLyBDdXJyZW50bHkgb25seSBhZGFwdGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9u
cyB0byBibG9ja3MgcmV0dXJuaW5nIHZvaWQuCisgICAgY29uc3QgY2hhciogcmVzdWx0VHlwZUJl
Z2luID0gZW5jb2RlZFR5cGU7CisgICAgaWYgKCplbmNvZGVkVHlwZSsrICE9ICd2JykKKyAgICAg
ICAgcmV0dXJuIHNlbGY7CisgICAgT3duUHRyPEJsb2NrUmVzdWx0PiByZXN1bHQgPSBhZG9wdFB0
cihuZXcgQmxvY2tSZXN1bHRWb2lkKTsKKyAgICBjb25zdCBjaGFyKiByZXN1bHRUeXBlRW5kID0g
ZW5jb2RlZFR5cGU7CisKKyAgICBpZiAoZW5jb2RlZFR5cGVbMF0gIT0gJ0AnIHx8IGVuY29kZWRU
eXBlWzFdICE9ICc/JykgeworICAgICAgICByZXR1cm4gc2VsZjsKKyAgICB9CisgICAgZW5jb2Rl
ZFR5cGUgKz0gMjsKKworICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byBhIGJsb2NrIGlzIHRo
ZSBibG94ayBpdHNlbGYuCisgICAgTlNTdHJpbmcqIHNpZ25hdHVyZSA9IEAiQD8wIjsKKyAgICBO
U1VJbnRlZ2VyIG9mZnNldCA9IHNpemVvZih2b2lkKik7CisKKyAgICBPd25QdHI8QmxvY2tBcmd1
bWVudD4gYXJndW1lbnRzID0gMDsKKyAgICBPd25QdHI8QmxvY2tBcmd1bWVudD4qIG5leHRBcmd1
bWVudCA9ICZhcmd1bWVudHM7CisgICAgd2hpbGUgKCplbmNvZGVkVHlwZSkgeworICAgICAgICBj
b25zdCBjaGFyKiBiZWdpbiA9IGVuY29kZWRUeXBlOworICAgICAgICBPd25QdHI8QmxvY2tBcmd1
bWVudD4gYXJndW1lbnQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPEJsb2NrQXJndW1lbnRUeXBl
RGVsZWdhdGU+KGVuY29kZWRUeXBlKSk7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAg
ICAgICByZXR1cm4gc2VsZjsKKyAgICAgICAgY29uc3QgY2hhciogZW5kID0gZW5jb2RlZFR5cGU7
CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSB0eXBlICYgc3RhY2sgb2Zmc2V0IG9mIHRoaXMgYXJn
dW1lbnQgdG8gdGhlIHNpZ25hdHVyZSBzdHJpbmcuCisgICAgICAgIHNpZ25hdHVyZSA9IGJ1aWxk
QmxvY2tTaWduYXR1cmUoc2lnbmF0dXJlLCBiZWdpbiwgZW5kLCBvZmZzZXQsIEAiIik7CisKKyAg
ICAgICAgKm5leHRBcmd1bWVudCA9IGFyZ3VtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV4dEFy
Z3VtZW50ID0gJigqbmV4dEFyZ3VtZW50KS0+bV9uZXh0OworICAgICAgICArK21fYXJndW1lbnRD
b3VudDsKKyAgICB9CisKKyAgICAvLyBQcmVmaWMgdGhlIHNpZ25hdHVyZSB3aXRoIHRoZSByZXR1
cm4gdHlwZSAmIHRvdGFsIHN0YWNrZnJhbWUgc2l6ZS4KKyAgICAvLyAodGhpcyBjYWxsIHdpbGwg
YWxzbyBhZGQgdGhlIHJldHVybiB0eXBlIHNpemUgdG8gdGhlIG9mZnNldCwKKyAgICAvLyB3aGlj
aCBpcyBhIG5vbnNlc25lLCBidXQgaGFybWxlc3Mgc2luY2UgdGhpcyBpcyB0aGUgbGFzdCB1c2Up
LgorICAgIHNpZ25hdHVyZSA9IGJ1aWxkQmxvY2tTaWduYXR1cmUoQCIiLCByZXN1bHRUeXBlQmVn
aW4sIHJlc3VsdFR5cGVFbmQsIG9mZnNldCwgc2lnbmF0dXJlKTsKKworICAgIG1fc2lnbmF0dXJl
V2l0aE9mZnNldHMgPSBzaWduYXR1cmU7CisgICAgbV9yZXN1bHQgPSByZXN1bHQucmVsZWFzZSgp
OworICAgIG1fYXJndW1lbnRzID0gYXJndW1lbnRzLnJlbGVhc2UoKTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCisvLyBUaGUgSlNCbG9ja0FkYXB0b3Igc3RvcmVzIHRoZSB0eXBlIHN0cmluZyB0
YWtlbiBmcm9tIHRoZSBwcm90b2NvbC4gVGhpcyBzdHJpbmcKKy8vIGRvZXMgbm90IGNvbnRhaW4g
aW52b2NhdGlvbiBsYXlvdXQgaW5mb3JtYXRpb24uIFRoZSBzaWduYXR1cmUgZnJvbSB0aGUgYmxv
Y2sKKy8vIGRvZXMgY29udGFpbiB0aGUgc3RhY2tmcmFtZSBvZmZzZXRzLiBTa2lwIHRoZXNlIHdo
ZW4gY29tcGFyaW5nIHN0cmluZ3MuCistIChib29sKWJsb2NrTWF0Y2hlc1NpZ25hdHVyZTooaWQp
YmxvY2sKK3sKKyAgICBpZiAoIV9CbG9ja19oYXNfc2lnbmF0dXJlKGJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgY2hhciogd2l0aG91dE9mZnNldHM9IFttX3NpZ25h
dHVyZVdpdGhvdXRPZmZzZXRzIFVURjhTdHJpbmddOworICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVy
ZSA9IF9CbG9ja19zaWduYXR1cmUoYmxvY2spOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgd2hpbGUgKGlzZGlnaXQoKndpdGhvdXRPZmZzZXRzKSkKKyAgICAgICAgICAgICsrd2l0aG91
dE9mZnNldHM7CisgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpzaWduYXR1cmUpKQorICAgICAgICAg
ICAgKytzaWduYXR1cmU7CisgICAgICAgIAorICAgICAgICBpZiAoKndpdGhvdXRPZmZzZXRzICE9
ICpzaWduYXR1cmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghKndp
dGhvdXRPZmZzZXRzKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICsrd2l0aG91
dE9mZnNldHM7CisgICAgICAgICsrc2lnbmF0dXJlOworICAgIH0KK30KKworLSAoaWQpYmxvY2tG
cm9tVmFsdWU6KEpTVmFsdWVSZWYpYXJndW1lbnQgaW5Db250ZXh0OihKU0NvbnRleHQqKWNvbnRl
eHQgd2l0aEV4Y2VwdGlvbjooSlNWYWx1ZVJlZiopZXhjZXB0aW9uCit7CisgICAgSlNHbG9iYWxD
b250ZXh0UmVmIGN0eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAv
LyBDaGVjayBmb3IgbnVsbC91bmRlZmluZWQuCisgICAgaWYgKEpTVmFsdWVJc1VuZGVmaW5lZChj
dHgsIGFyZ3VtZW50KSB8fCBKU1ZhbHVlSXNOdWxsKGN0eCwgYXJndW1lbnQpKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSAwOworICAgIGlmIChpZCBv
YmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgYXJndW1lbnQpKSB7CisgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBPYmplY3RpdmUtQyBibG9jay4KKyAgICAgICAg
aWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpnZXROU0Jsb2NrQ2xhc3MoKV0pIHsKKyAgICAgICAg
ICAgIGlmIChbc2VsZiBibG9ja01hdGNoZXNTaWduYXR1cmU6b2JqZWN0XSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3NpZ25hdHVy
ZVdpdGhPZmZzZXRzICYmIEpTVmFsdWVJc09iamVjdChjdHgsIGFyZ3VtZW50KSkgeworICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uCisgICAg
ICAgIC8vIChhbmQgdGhhdCB3ZXJlIGFibGUgdG8gY3JlYXRlIGEgZm9yd2FyZGluZyBibG9jayBm
b3IgdGhpcyBzaWduYXR1cmUpLgorICAgICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVl
VG9PYmplY3QoY3R4LCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0
SXNGdW5jdGlvbihjdHgsIG9iamVjdCkpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9iamVjdDsK
KyAgICB9CisKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgIEpTQzo6QVBJRW50cnlTaGlt
IGVudHJ5U2hpbSh0b0pTKGN0eCkpOworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAiSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCBmb3Ig
T2JqZWN0aXZlLUMgYmxvY2siKSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAg
Ly8gQ2FwdHVyZWQgdmFyaWFibGVzLgorICAgIEpTQmxvY2tBZGFwdG9yKiBhZGFwdG9yID0gc2Vs
ZjsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmZ1bmN0aW9u
IGluQ29udGV4dDpjb250ZXh0XTsKKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk1CisgICAgLy8gQ3VycmVudGx5IG9ubHkgc3VwcG9y
dGluZyB2b2lkIGZ1bmN0aW9ucy4KKyAgICByZXR1cm4gX19OU01ha2VTcGVjaWFsRm9yd2FyZGlu
Z0NhcHR1cmVCbG9jayhbbV9zaWduYXR1cmVXaXRoT2Zmc2V0cyBVVEY4U3RyaW5nXSwgXihOU0lu
dm9jYXRpb24gKmludm9jYXRpb24peworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NAorICAgICAgICAvLyBSYXRoZXIgdGhhbiBy
ZXF1aXJpbmcgdGhhdCB0aGUgY29udGV4dCBiZSByZXRhaW5lZCwgaXQgd291bGQgcHJvYmFibHkg
YmUgbW9yZQorICAgICAgICAvLyBhcHByb3ByaWF0ZSB0byB1c2UgYSBuZXcgSlNDb250ZXh0IGlu
c3RhbmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNzYXJ5KS4KKyAgICAgICAgLy8gSXQgd291bGQg
YmUgbmljZSBpZiB3ZSBjb3VsZCB0aHJvdyBhIEpTIGV4Y2VwdGlvbiBoZXJlLCBidXQgd2l0aG91
dCBhIGNvbnRleHQgd2UgaGF2ZQorICAgICAgICAvLyBub3RoaW5nIHRvIHdvcmsgd2l0aC4KKyAg
ICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gdmFsdWUuY29udGV4dDsKKyAgICAgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYg
Y3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICBKU1ZhbHVl
UmVmIGFyZ3NbYWRhcHRvci0+bV9hcmd1bWVudENvdW50XTsKKworICAgICAgICBzaXplX3QgYXJn
dW1lbnROdW1iZXIgPSAwOworICAgICAgICBCbG9ja0FyZ3VtZW50KiBhcmd1bWVudHMgPSBhZGFw
dG9yLT5tX2FyZ3VtZW50cy5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0FyZ3VtZW50KiBhcmd1
bWVudCA9IGFyZ3VtZW50czsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJndW1lbnQtPm1fbmV4dC5n
ZXQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICAg
ICAgYXJnc1thcmd1bWVudE51bWJlcl0gPSBhcmd1bWVudC0+Z2V0KGludm9jYXRpb24sIGFyZ3Vt
ZW50TnVtYmVyICsgMSwgY29udGV4dCwgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICArK2FyZ3VtZW50TnVtYmVyOworICAgICAgICB9CisgICAgICAgIHNp
emVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnROdW1iZXI7CisKKyAgICAgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb24gPSAwOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGN0eCwgSlNW
YWx1ZVRvT2JqZWN0KGN0eCwgdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCksIDAsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uKSB7Cisg
ICAgICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDgsMTAg
KzUwOCwxMCBAQCB2b2lkKiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldFByaXZhCiB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluaGVy
aXRzKEpTQ2xhc3NSZWYgYykgY29uc3QKIHsKLSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9
IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykKKyAg
ICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3Mg
PSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoanNDbGFzcyA9PSBjKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKworI2lmIEpTX09C
SkNfQVBJX0VOQUJMRUQKKworQGNsYXNzIEpTVmlydHVhbE1hY2hpbmUsIEpTVmFsdWU7CisKKy8v
IEFuIGluc3RhbmNlIG9mIEpTQ29udGV4dCByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBleGVjdXRp
b24gZW52aXJvbm1lbnQsIGFsbAorLy8gSmF2YVNjcmlwdCBleGVjdXRpb24gdGFrZXMgcGxhY2Ug
d2l0aGluIGEgY29udGV4dC4KKy8vIEpTQ29udGV4dCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRo
ZSBsaWZlLWN5Y2xlIG9mIG9iamVjdHMgd2l0aGluIHRoZQorLy8gSmF2YVNjcmlwdCB2aXJ0dWFs
IG1hY2hpbmUuIEV2ZXJ5IGluc3RhbmNlIG9mIEpTVmFsdWUgaXMgYXNzb2NpYXRlZCB3aXRoIGEK
Ky8vIEpTQ29udGV4dCB2aWEgYSB3ZWFrIHJlZmVyZW5jZS4gVGhlIEpTVmFsdWUgd2lsbCBrZWVw
IHRoZSBKYXZhU2NyaXB0IHZhbHVlIGl0CisvLyByZWZlcmVuY2VzIGFsaXZlIHNvIGxvbmcgYXMg
dGhlIEpTQ29udGV4dCBpcyBhbHNvIHJldGFpbmVkLiBXaGVuIGFuIGluc3RhbmNlCisvLyBvZiBK
U0NvbnRleHQgaXMgZGVhbGxvY2F0ZWQgYW5kIHRoZSB3ZWFrIHJlZmVyZW5jZXMgdG8gaXQgYXJl
IGNsZWFyZWQgdGhlCisvLyBKU1ZhbHVlcyB0aGF0IGhhZCBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGNvbnRleHQgd2lsbCBiZSBpbnZhbGlkYXRlZCwgYW5kCisvLyB3aWxsIGNlYXNlIHRvIGtl
ZXAgdGhlIHZhbHVlcyB3aXRoaW4gdGhlIEphdmFTY3JpcHQgZW5naW5lIGFsaXZlLgorTlNfQ0xB
U1NfQVZBSUxBQkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU0NvbnRleHQgOiBOU09iamVjdAor
CisvLyBDcmVhdGUgYSBKU0NvbnRleHQuCistIChpZClpbml0OworLy8gQ3JlYXRlIGEgSlNDb250
ZXh0IGluIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lLgorLSAoaWQpaW5pdFdpdGhWaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lOworCisvLyBFdmFs
dWF0ZSBhIHN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUuCistIChKU1ZhbHVlICopZXZhbHVhdGVT
Y3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0OworCisvLyBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhl
IGdsb2JhbCBvYmplY3Qgb2YgdGhlIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisvLyBJ
bnN0YW5jZXMgb2YgSlNDb250ZXh0IG9yaWdpbmF0aW5nIGZyb20gV2ViS2l0IHdpbGwgcmV0dXJu
IGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gV2luZG93UHJveHkgb2JqZWN0LgorLSAoSlNWYWx1ZSAq
KWdsb2JhbE9iamVjdDsKKworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhp
biBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFj
ayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgY29udGV4dC4gT3V0
c2lkZSBvZgorLy8gYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdGhpcyBtZXRob2Qgd2lsbCBy
ZXR1cm4gbmlsLgorKyAoSlNDb250ZXh0ICopY3VycmVudENvbnRleHQ7CisvLyBUaGlzIG1ldGhv
ZCBtYXkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIE9iamVjdGl2ZS1DIGJsb2NrIG9yIG1ldGhv
ZCBpbnZva2VkCisvLyBhcyBhIGNhbGxiYWNrIGZyb20gSmF2YVNjcmlwdCB0byByZXRyaWV2ZSB0
aGUgY2FsbGJhY2sncyB0aGlzIHZhbHVlLiBPdXRzaWRlCisvLyBvZiBhIGNhbGxiYWNrIGZyb20g
SmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisrIChKU1ZhbHVlICopY3Vy
cmVudFRoaXM7CisvLyBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIE9i
amVjdGl2ZS1DIGJsb2NrIG9yIG1ldGhvZCBpbnZva2VkCisvLyBhcyBhIGNhbGxiYWNrIGZyb20g
SmF2YVNjcmlwdCB0byByZXRyaWV2ZSB0aGUgY2FsbGJhY2sncyBhcmd1bWVudHMsIG9iamVjdHMK
Ky8vIGluIHRoZSByZXR1cm5lZCBhcnJheSBhcmUgaW5zdGFuY2VzIG9mIEpTVmFsdWUuIE91dHNp
ZGUgb2YgYSBjYWxsYmFjayBmcm9tCisvLyBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwgcmV0
dXJuIG5pbC4KKysgKE5TQXJyYXkgKiljdXJyZW50QXJndW1lbnRzOworCisvLyBUaGUgImV4Y2Vw
dGlvbiIgcHJvcGVydHkgbWF5IGJlIHVzZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHRvIEphdmFT
Y3JpcHQuCisvLyBCZWZvcmUgYSBjYWxsYmFjayBpcyBtYWRlIGZyb20gSmF2YVNjcmlwdCB0byBh
biBPYmplY3RpdmUtQyBibG9jayBvciBtZXRob2QsCisvLyB0aGUgcHJpb3IgdmFsdWUgb2YgdGhl
IGV4Y2VwdGlvbiBwcm9wZXJ0eSB3aWxsIGJlIHByZXNlcnZlZCBhbmQgdGhlIHByb3BlcnR5Cisv
LyB3aWxsIGJlIHNldCB0byBuaWwuIEFmdGVyIHRoZSBjYWxsYmFjayBoYXMgY29tcGxldGVkIHRo
ZSBuZXcgdmFsdWUgb2YgdGhlCisvLyBleGNlcHRpb24gcHJvcGVydHkgd2lsbCBiZSByZWFkLCBh
bmQgcHJpb3IgdmFsdWUgcmVzdG9yZWQuIElmIHRoZSBuZXcgdmFsdWUKKy8vIG9mIGV4Y2VwdGlv
biBpcyBub3QgbmlsLCB0aGUgY2FsbGJhY2sgd2lsbCByZXN1bHQgaW4gdGhhdCB2YWx1ZSBiZWlu
ZyB0aHJvd24uCisvLyBUaGlzIHByb3BlcnR5IG1heSBhbHNvIGJlIHVzZWQgdG8gY2hlY2sgZm9y
IHVuY2F1Z2h0IGV4Y2VwdGlvbnMgYXJpc2luZyBmcm9tCisvLyBBUEkgZnVuY3Rpb24gY2FsbHMg
KHNpbmNlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiAiZXhjZXB0aW9uSGFuZGxlciIgaXMgdG8K
Ky8vIGFzc2lnbiBhbnQgdW5jYXVnaHQgZXhjZXB0aW9uIHRvIHRoaXMgcHJvcGVydHkpLgorLy8g
SWYgYSBKU1ZhbHVlIG9yZ2luYXRpbmcgZnJvbSBhIGRpZmZlcmVudCBKU1ZpcnR1YWxNYWNoaW5l
IHRoaXMgdGhpcyBjb250ZXh0CisvLyBpcyBhc3NpZ25lZCB0byB0aGlzIHByb3BlcnR5LCBhbiBP
YmplY3RpdmUtQyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuCitAcHJvcGVydHkocmV0YWluKSBK
U1ZhbHVlICpleGNlcHRpb247CisKKy8vIElmIGEgY2FsbCB0byBhbiBBUEkgZnVuY3Rpb24gcmVz
dWx0cyBpbiBhbiB1bmNhdWdodCBKYXZhU2NyaXB0IGV4Y2VwdGlvbiwgdGhlCisvLyAiZXhjZXB0
aW9uSGFuZGxlciIgYmxvY2sgd2lsbCBiZSBpbnZva2VkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBmb3IgdGhlCisvLyBleGNlcHRpb24gaGFuZGxlciB3aWxsIHN0b3JlIHRoZSBleGNlcHRp
b24gdG8gdGhlIGV4Y2VwdGlvbiBwcm9wZXJ0eSBvbgorLy8gY29udGV4dC4gQXMgYSBjb25zZXF1
ZW5jZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgZm9yIHVuaGFuZGxlZCBleGNlcHRpb25zCisv
LyBvY2N1cmluZyB3aXRoaW4gYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gYmUgcmV0aHJv
d24gdXBvbiByZXR1cm4uCisvLyBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gbmlsIHdpbGwgcmVzdWx0
IGluIGFsbCB1bmNhdWdodCBleGNlcHRpb25zIHRocm93biBmcm9tCisvLyB0aGUgQVBJIGJlaW5n
IHNpbGVudGx5IGNvbnN1bWVkLgorQHByb3BlcnR5KGNvcHkpIHZvaWQoXmV4Y2VwdGlvbkhhbmRs
ZXIpKEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKTsKKworLy8gQWxsIGlu
c3RhbmNlcyBvZiBKU0NvbnRleHQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBKU1ZpcnR1
YWxNYWNoaW5lLiBUaGUKKy8vIHZpcnR1YWwgbWFjaGluZSBwcm92aWRlcyBhbiAib2JqZWN0IHNw
YWNlIiBvciBzZXQgb2YgZXhlY3V0aW9uIHJlc291cmNlcy4KK0Bwcm9wZXJ0eShyZWFkb25seSwg
cmV0YWluKSBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZTsKKworQGVuZAorCisvLyBJ
bnN0YW5jZXMgb2YgSlNDb250ZXh0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4g
b3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNjZXNzIGJ5IGtleSBh
bmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTQ29udGV4dCAqY29udGV4dDsKKy8v
ICAgIEpTVmFsdWUgKnYgPSBjb250ZXh0W0AiWCJdOyAvLyBHZXQgdmFsdWUgZm9yICJYIiBmcm9t
IHRoZSBnbG9iYWwgb2JqZWN0LgorLy8gICAgY29udGV4dFtAIlkiXSA9IHY7ICAgICAgICAgIC8v
IEFzc2lnbiAndicgdG8gIlkiIG9uIHRoZSBnbG9iYWwgb2JqZWN0LgorLy8KKy8vIEFuIG9iamVj
dCBrZXkgcGFzc2VkIGFzIGEgc3Vic2NyaXB0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgSmF2YVNj
aXB0IHZhbHVlLAorLy8gYW5kIHRoZW4gdGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB1
c2VkIHRvIHJlc29sdmUgYSBwcm9wZXJ0eSBvZiB0aGUKKy8vIGdsb2JhbCBvYmplY3QuCitAaW50
ZXJmYWNlIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQorCistIChKU1ZhbHVlICopb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3Qg
Zm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleTsKKworQGVuZAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW1w
b3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5o
IgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+
CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPEpTVmFs
dWVSZWYsIHNpemVfdD4gUHJvdGVjdE1hcDsKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dCB7
CisgICAgSlNWaXJ0dWFsTWFjaGluZSAqbV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU0dsb2JhbENv
bnRleHRSZWYgbV9jb250ZXh0OworICAgIEpTV3JhcHBlck1hcCAqbV93cmFwcGVyTWFwOworICAg
IFByb3RlY3RNYXAgbV9wcm90ZWN0ZWQ7Cit9CisKK0BzeW50aGVzaXplIGV4Y2VwdGlvbjsKK0Bz
eW50aGVzaXplIGV4Y2VwdGlvbkhhbmRsZXI7CisKKy0gKGlkKWluaXQKK3sKKyAgICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV1dOworfQorCistIChpZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1hY2hpbmUKK3sKKyAgICBbc3VwZXIgaW5pdF07CisK
KyAgICBtX3ZpcnR1YWxNYWNoaW5lID0gW3ZpcnR1YWxNYWNoaW5lIHJldGFpbl07CisgICAgbV9j
b250ZXh0ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cChnZXRHcm91cEZyb21WaXJ0dWFs
TWFjaGluZSh2aXJ0dWFsTWFjaGluZSksIDApOworICAgIG1fd3JhcHBlck1hcCA9IFtbSlNXcmFw
cGVyTWFwIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c2VsZl07CisKKyAgICBzZWxmLmV4Y2VwdGlv
biA9IG5pbDsKKyAgICBzZWxmLmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCogY29udGV4
dCwgSlNWYWx1ZSAqZXhjZXB0aW9uVmFsdWUpIHsKKyAgICAgICAgY29udGV4dC5leGNlcHRpb24g
PSBleGNlcHRpb25WYWx1ZTsKKyAgICB9OworCisgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPm1fYXBpRGF0YSA9IHNlbGY7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKK3sKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gMDsKKyAgICBKU1N0cmluZ1JlZiBzY3JpcHRKUyA9
IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilzY3JpcHQpOworICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQsIHNjcmlwdEpTLCAw
LCAwLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRKUyk7
CisKKyAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworCisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6c2VsZl07Cit9CisKKy0gKEpTVmFsdWUg
KilnbG9iYWxPYmplY3QKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29udGV4dCkgaW5Db250ZXh0OnNlbGZdOworfQorCisr
IChKU0NvbnRleHQgKiljdXJyZW50Q29udGV4dAoreworICAgIFdURlRocmVhZERhdGEmIHRocmVh
ZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJhY2tEYXRhICplbnRyeSA9IChDYWxs
YmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKyAgICByZXR1cm4gZW50cnkgPyBlbnRy
eS0+Y29udGV4dCA6IG5pbDsKK30KKworKyAoSlNWYWx1ZSAqKWN1cnJlbnRUaGlzCit7CisgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKKyAgICBDYWxsYmFj
a0RhdGEgKmVudHJ5ID0gKENhbGxiYWNrRGF0YSAqKXRocmVhZERhdGEubV9hcGlEYXRhOworCisg
ICAgaWYgKCFlbnRyeS0+Y3VycmVudFRoaXMpCisgICAgICAgIGVudHJ5LT5jdXJyZW50VGhpcyA9
IFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTplbnRyeS0+dGhpc1ZhbHVlIGluQ29udGV4
dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XV07CisKKyAgICByZXR1cm4gZW50cnktPmN1cnJl
bnRUaGlzOworfQorCisrIChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50cworeworICAgIFdURlRo
cmVhZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJhY2tEYXRh
ICplbnRyeSA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKworICAgIGlm
ICghZW50cnktPmN1cnJlbnRBcmd1bWVudHMpIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgICAgIHNpemVfdCBjb3VudCA9IGVu
dHJ5LT5hcmd1bWVudENvdW50OworICAgICAgICBKU1ZhbHVlICogYXJnc1tjb3VudF07CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPTA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgYXJnc1tp
XSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmVudHJ5LT5hcmd1bWVudHNbaV0gaW5Db250ZXh0
OmNvbnRleHRdOworICAgICAgICBlbnRyeS0+Y3VycmVudEFyZ3VtZW50cyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOmFyZ3MgY291bnQ6Y291bnRdOworICAgIH0KKworICAgIHJl
dHVybiBlbnRyeS0+Y3VycmVudEFyZ3VtZW50czsKK30KKworLSAoSlNWaXJ0dWFsTWFjaGluZSop
dmlydHVhbE1hY2hpbmUKK3sKKyAgICByZXR1cm4gbV92aXJ0dWFsTWFjaGluZTsKK30KKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0KFN1YnNjcmlwdFN1cHBvcnQpCisKKy0gKEpT
VmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Cit7CisgICAgcmV0dXJuIFtz
ZWxmIGdsb2JhbE9iamVjdF1ba2V5XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVj
dCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4pa2V5Cit7CisgICAgW3NlbGYgZ2xv
YmFsT2JqZWN0XVtrZXldID0gb2JqZWN0OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBK
U0NvbnRleHQoSW50ZXJuYWwpCisKK0pTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0SW50ZXJuYWxD
b250ZXh0KEpTQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gY29udGV4dC0+bV9jb250
ZXh0OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICB0b0pTKG1fY29udGV4dCktPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+bV9hcGlEYXRhID0gMDsKKworICAgIFByb3RlY3RNYXA6Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9wcm90ZWN0ZWQuYmVnaW4oKTsKKyAgICBQcm90ZWN0TWFwOjppdGVy
YXRvciBlbmQgPSBtX3Byb3RlY3RlZC5lbmQoKTsKKyAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5k
OyArK2l0ZXJhdG9yKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgaXRlcmF0
b3ItPmtleSk7CisKKyAgICBbbV93cmFwcGVyTWFwIHJlbGVhc2VdOworICAgIEpTR2xvYmFsQ29u
dGV4dFJlbGVhc2UobV9jb250ZXh0KTsKKyAgICBbbV92aXJ0dWFsTWFjaGluZSByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihKU1Zh
bHVlUmVmKWV4Y2VwdGlvblZhbHVlCit7CisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyKHNlbGYs
IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmV4Y2VwdGlvblZhbHVlIGluQ29udGV4dDpzZWxmXSk7
Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYp
ZXhjZXB0aW9uVmFsdWUKK3sKKyAgICBbc2VsZiBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFs
dWVdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6c2Vs
Zl07Cit9CisKKy0gKEJPT0wpYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhj
ZXB0aW9uVmFsdWUKK3sKKyAgICBbc2VsZiBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVd
OworICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZCliZWdpbkNhbGxiYWNrV2l0aERhdGE6KENh
bGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVl
IGFyZ3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNW
YWx1ZVJlZiAqKWFyZ3VtZW50cworeworICAgIFdURlRocmVhZERhdGEmIHRocmVhZERhdGEgPSB3
dGZUaHJlYWREYXRhKCk7CisgICAgW3NlbGYgcmV0YWluXTsKKyAgICBDYWxsYmFja0RhdGEgKnBy
ZXZTdGFjayA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKyAgICAqY2Fs
bGJhY2tEYXRhID0gKENhbGxiYWNrRGF0YSl7IHByZXZTdGFjaywgc2VsZiwgW3NlbGYuZXhjZXB0
aW9uIHJldGFpbl0sIHRoaXNWYWx1ZSwgbmlsLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIG5p
bCB9OworICAgIHRocmVhZERhdGEubV9hcGlEYXRhID0gY2FsbGJhY2tEYXRhOworICAgIHNlbGYu
ZXhjZXB0aW9uID0gbmlsOworfQorCistICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxi
YWNrRGF0YSAqKWNhbGxiYWNrRGF0YQoreworICAgIFdURlRocmVhZERhdGEmIHRocmVhZERhdGEg
PSB3dGZUaHJlYWREYXRhKCk7CisgICAgc2VsZi5leGNlcHRpb24gPSBjYWxsYmFja0RhdGEtPnBy
ZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBbY2FsbGJhY2tEYXRhLT5wcmVzZXJ2ZWRFeGNlcHRpb24g
cmVsZWFzZV07CisgICAgW2NhbGxiYWNrRGF0YS0+Y3VycmVudFRoaXMgcmVsZWFzZV07CisgICAg
W2NhbGxiYWNrRGF0YS0+Y3VycmVudEFyZ3VtZW50cyByZWxlYXNlXTsKKyAgICB0aHJlYWREYXRh
Lm1fYXBpRGF0YSA9IGNhbGxiYWNrRGF0YS0+bmV4dDsKKyAgICBbc2VsZiByZWxlYXNlXTsKK30K
KworLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlCit7CisgICAgLy8gTG9jayBhY2Nl
c3MgdG8gbV9wcm90ZWN0ZWQKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHRvSlMobV9jb250
ZXh0KSk7CisKKyAgICBQcm90ZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9wcm90ZWN0ZWQu
YWRkKHZhbHVlLCAxKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIEpTVmFs
dWVQcm90ZWN0KG1fY29udGV4dCwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgKytyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOworfQorCistICh2b2lkKXVucHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1
ZQoreworICAgIC8vIExvY2sgYWNjZXNzIHRvIG1fcHJvdGVjdGVkCisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworCisgICAgUHJvdGVjdE1hcDo6aXRlcmF0b3Ig
aXRlcmF0b3IgPSBtX3Byb3RlY3RlZC5maW5kKHZhbHVlKTsKKyAgICBpZiAoaXRlcmF0b3ItPnZh
bHVlID09IDEpIHsKKyAgICAgICAgbV9wcm90ZWN0ZWQucmVtb3ZlKHZhbHVlKTsKKyAgICAgICAg
SlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIHZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
LS1pdGVyYXRvci0+dmFsdWU7Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0Oihp
ZClvYmplY3QKK3sKKyAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3dyYXBwZXJNYXAKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHRvSlMobV9jb250ZXh0KSk7CisgICAgcmV0dXJuIFttX3dyYXBw
ZXJNYXAgd3JhcHBlckZvck9iamVjdDpvYmplY3RdOworfQorCitAZW5kCisKK1dlYWtDb250ZXh0
UmVmOjpXZWFrQ29udGV4dFJlZihKU0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgb2JqY19pbml0
V2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7Cit9CisKK1dlYWtDb250ZXh0UmVmOjp+V2Vh
a0NvbnRleHRSZWYoKQoreworICAgIG9iamNfZGVzdHJveVdlYWsoJm1fd2Vha0NvbnRleHQpOwor
fQorCitKU0NvbnRleHQgKiBXZWFrQ29udGV4dFJlZjo6Z2V0KCkKK3sKKyAgICByZXR1cm4gb2Jq
Y19sb2FkV2VhaygmbV93ZWFrQ29udGV4dCk7Cit9CisKK3ZvaWQgV2Vha0NvbnRleHRSZWY6OnNl
dChKU0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgb2JqY19zdG9yZVdlYWsoJm1fd2Vha0NvbnRl
eHQsIGNvbnRleHQpOworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lmIEpTX09CSkNfQVBJ
X0VOQUJMRUQKKworI2ltcG9ydCAiSlNDb250ZXh0LmgiCisKK3N0cnVjdCBDYWxsYmFja0RhdGEg
eworICAgIENhbGxiYWNrRGF0YSAqbmV4dDsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQ7CisgICAg
SlNWYWx1ZSAqcHJlc2VydmVkRXhjZXB0aW9uOworICAgIEpTVmFsdWVSZWYgdGhpc1ZhbHVlOwor
ICAgIEpTVmFsdWUgKmN1cnJlbnRUaGlzOworICAgIHNpemVfdCBhcmd1bWVudENvdW50OworICAg
IGNvbnN0IEpTVmFsdWVSZWYgKmFyZ3VtZW50czsKKyAgICBOU0FycmF5ICpjdXJyZW50QXJndW1l
bnRzOworfTsKKworY2xhc3MgV2Vha0NvbnRleHRSZWYgeworcHVibGljOgorICAgIFdlYWtDb250
ZXh0UmVmKEpTQ29udGV4dCogPSBuaWwpOworICAgIH5XZWFrQ29udGV4dFJlZigpOworCisgICAg
SlNDb250ZXh0ICogZ2V0KCk7CisgICAgdm9pZCBzZXQoSlNDb250ZXh0Kik7CisKK3ByaXZhdGU6
CisgICAgSlNDb250ZXh0ICptX3dlYWtDb250ZXh0OworfTsKKworQGludGVyZmFjZSBKU0NvbnRl
eHQoSW50ZXJuYWwpCisKK0pTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0SW50ZXJuYWxDb250ZXh0
KEpTQ29udGV4dCAqKTsKKworLSAodm9pZClub3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhj
ZXB0aW9uOworLSAoSlNWYWx1ZSAqKXZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJl
ZilleGNlcHRpb247CistIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVm
KWV4Y2VwdGlvbjsKKworLSAodm9pZCliZWdpbkNhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0
YSAqKWNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVlIGFyZ3VtZW50
Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNWYWx1ZVJlZiAq
KWFyZ3VtZW50czsKKy0gKHZvaWQpZW5kQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICop
Y2FsbGJhY2tEYXRhOworCistICh2b2lkKXByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWU7CistICh2
b2lkKXVucHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZTsKKworLSAoSlNWYWx1ZSAqKXdyYXBwZXJG
b3JPYmplY3Q6KGlkKW9iamVjdDsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTRXhwb3J0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTRXhwb3J0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKy8v
IFdoZW4gYW4gSmF2YVNjcmlwdCB2YWx1ZSBpcyBjcmVhdGVkIGZyb20gYW4gaW5zdGFuY2Ugb2Yg
YW4gT2JqZWN0aXZlLUMgY2xhc3MKKy8vIGZvciB3aGljaCBubyBjb3B5aW5nIGNvbnZlcnNpb24g
aXMgc3BlY2lmaWVkIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCB3aWxsCisvLyBiZSBjcmVh
dGVkLgorLy8KKy8vIEluIEphdmFTY3JpcHQgaW5oZXJpdGFuY2UgaXMgc3VwcG9ydGVkIHZpYSBh
IGNoYWluIG9mIHByb3RvdHlwZSBvYmplY3RzLCBhbmQKKy8vIGZvciBlYWNoIE9iamVjdGl2ZS1D
IGNsYXNzIChhbmQgcGVyIEpTQ29udGV4dCkgYW4gb2JqZWN0IGFwcHJvcHJpYXRlIGZvciB1c2UK
Ky8vIGFzIGEgcHJvdG90eXBlIHdpbGwgYmUgcHJvdmlkZWQuIEZvciB0aGUgY2xhc3MgTlNPYmpl
Y3QgdGhlIHByb3RvdHlwZSBvYmplY3QKKy8vIHdpbGwgYmUgdGhlIEphdmFTY3JpcHQgY29udGV4
dCdzIE9iamVjdCBQcm90b3R5cGUuIEZvciBhbGwgb3RoZXIgT2JqZWN0aXZlLUMKKy8vIGNsYXNz
ZXMgYSBQcm90b3R5cGUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC4gVGhlIFByb3RvdHlwZSBvYmpl
Y3QgZm9yIGEgZ2l2ZW4KKy8vIE9iamVjdGl2ZS1DIGNsYXNzIHdpbGwgaGF2ZSBpdHMgaW50ZXJu
YWwgW1Byb3RvdHlwZV0gcHJvcGVydHkgc2V0IHRvIHBvaW50IHRvCisvLyB0aGUgUHJvdG90eXBl
IG9iamVjdCBvZiB0aGUgT2JqZWN0aXZlLUMgY2xhc3MncyBzdXBlcmNsYXNzLiBBcyBzdWNoIHRo
ZQorLy8gcHJvdG90eXBlIGNoYWluIGZvciBhIEphdmFTY3JpcHQgd3JhcHBlciBvYmplY3Qgd2ls
bCByZWZsZWN0IHRoZSB3cmFwcGVkCisvLyBPYmplY3RpdmUtQyB0eXBlJ3MgaW5oZXJpdGFuY2Ug
aGllcmFyY2h5LgorLy8KKy8vIEluIGFkZGl0aW9uIHRvIHRoZSBQcm90b3R5cGUgb2JqZWN0IGEg
SmF2YVNjcmlwdCBDb25zdHJ1Y3RvciBvYmplY3Qgd2lsbCBhbHNvCisvLyBiZSBwcm9kdWNlZCBm
b3IgZWFjaCBPYmplY3RpdmUtQyBjbGFzcy4gVGhlIENvbnN0cnVjdG9yIG9iamVjdCBoYXMgYSBw
cm9wZXJ0eQorLy8gbmFtZWQgJ3Byb3RvdHlwZScgdGhhdCByZWZlcmVuY2VzIHRoZSBQcm90b3R5
cGUgb2JqZWN0LCBhbmQgdGhlIFByb3RvdHlwZQorLy8gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG5h
bWVkICdjb25zdHJ1Y3RvcicgdGhhdCByZWZlcmVuY2VzIHRoZSBDb25zdHJ1Y3Rvci4KKy8vIFRo
ZSBDb25zdHJ1Y3RvciBvYmplY3QgaXMgbm90IGNhbGxhYmxlLgorLy8KKy8vIEJ5IGRlZmF1bHQg
bm8gbWV0aG9kcyBvciBwcm9wZXJ0aWVzIG9mIHRoZSBPYmplY3RpdmUtQyBjbGFzcyB3aWxsIGJl
IGV4cG9zZWQKKy8vIHRvIEphdmFTY3JpcHQsIGhvd2V2ZXIgbWV0aG9kcyBhbmQgcHJvcGVydGll
cyBtYXkgZXhwbGljaXRseSBiZSBleHBvcnRlZC4KKy8vIEZvciBlYWNoIHByb3RvY29sIHRoYXQg
YSBjbGFzcyBjb25mb3JtcyB0bywgaWYgdGhlIHByb3RvY29sIGluY29ycG9yYXRlcyB0aGUKKy8v
IHByb3RvY29sIEpTRXhwb3J0LCB0aGVuIHRoZSBwcm90b2NvbCB3aWxsIGJlIGludGVycHJldGVk
IGFzIGEgbGlzdCBvZiBtZXRob2RzCisvLyBhbmQgcHJvcGVydGllcyB0byBiZSBleHBvcnRlZCB0
byBKYXZhU2NyaXB0LgorLy8KKy8vIEZvciBlYWNoIGluc3RhbmNlIG1ldGhvZCBiZWluZyBleHBv
cnRlZCwgYSBjb3JyZXNwb25kaW5nIEphdmFTY3JpcHQgZnVuY3Rpb24KKy8vIHdpbGwgYmUgYXNz
aWduZWQgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgUHJvdG90eXBlIG9iamVjdCwgZm9yIGVhY2ggT2Jq
ZWN0aXZlLUMKKy8vIHByb3BlcnR5IGJlaW5nIGV4cG9ydGVkIGEgSmF2YVNjcmlwdCBhY2Nlc3Nv
ciBwcm9wZXJ0eSB3aWxsIGJlIGNyZWF0ZWQgb24gdGhlCisvLyBQcm90b3R5cGUsIGFuZCBmb3Ig
ZWFjaCBjbGFzcyBtZXRob2QgZXhwb3J0ZWQgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIHdpbGwgYmUK
Ky8vIGNyZWF0ZWQgb24gdGhlIENvbnN0cnVjdG9yIG9iamVjdC4gRm9yIGV4YW1wbGU6CisvLwor
Ly8gICAgQHByb3RvY29sIE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcyA8SlNFeHBvcnQ+CisvLyAg
ICAtICh2b2lkKWZvbzsKKy8vICAgIEBlbmQKKy8vCisvLyAgICBAaW50ZXJmYWNlIE15Q2xhc3Mg
OiBOU09iamVjdCA8TXlDbGFzc0phdmFTY3JpcHRNZXRob2RzPgorLy8gICAgLSAodm9pZClmb287
CisvLyAgICAtICh2b2lkKWJhcjsKKy8vICAgIEBlbmQKKy8vCisvLyBJZiBhbiBpbnN0YW5jZSBv
ZiBNeUNsYXNzIGlzIGNvbnZlcnRlZCB0byBhIEphdmFTY3JpcHQgdmFsdWUsIHRoZSByZXN1bHRp
bmcKKy8vIHdyYXBwZXIgb2JqZWN0IHdpbGwgKHZpYSBpdHMgcHJvdG90eXBlKSBleHBvcnQgdGhl
IG1ldGhvZCAiZm9vIiB0byBKYXZhU2NyaXB0LAorLy8gc2luY2UgdGhlIGNsYXNzIGNvbmZvcm1z
IHRvIHRoZSBNeUNsYXNzSmF2YVNjcmlwdEV4cG9ydHMgcHJvdG9jb2wsIGFuZCB0aGlzCisvLyBw
cm90b2NvbCBpbmNvcnBvcmF0ZXMgSlNFeHBvcnQuICJiYXIiIHdpbGwgbm90IGJlIGV4cG9ydGVk
LgorLy8KKy8vIFByb3BlcnRpZXMsIGFyZ3VtZW50cywgYW5kIHJldHVybiB2YWx1ZXMgb2YgdGhl
IGZvbGxvd2luZyB0eXBlcyBhcmUKKy8vIHN1cHBvcnRlZDoKKy8vCisvLyBQcmltaXRpdmUgbnVt
YmVyczogc2lnbmVkIHZhbHVlcyBvZiB1cCB0byAzMi1iaXRzIGFyZSBjb252ZXJ0ZWQgaW4gYSBt
YW5uZXIKKy8vICAgIGNvbnNpc3RlbnQgd2l0aCB2YWx1ZVdpdGhJbnQzMi90b0ludDMyLCB1bnNp
Z25lZCB2YWx1ZXMgb2YgdXAgdG8gMzItYml0cworLy8gICAgYXJlIGNvbnZlcnRlZCBpbiBhIG1h
bm5lciBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoVUludDMyL3RvVUludDMyLCBhbGwKKy8vICAg
IG90aGVyIG51bWVyaWMgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFs
dWVXaXRoRG91YmxlLworLy8gICAgdG9Eb3VibGUuCisvLyBCT09MOiB2YWx1ZXMgYXJlIGNvbnZl
cnRlZCBjb25zaXN0ZW50bHkgd2l0aCB2YWx1ZVdpdGhCb29sL3RvQm9vbC4KKy8vIGlkOiB2YWx1
ZXMgYXJlIGNvbnZlcnRlZCBjb25zaXN0ZW50bHkgd2l0aCB2YWx1ZVdpdGhPYmplY3QvdG9PYmpl
Y3QuCisvLyA8T2JqZWN0aXZlLUMgQ2xhc3M+OiAtIHdoZXJlIHRoZSB0eXBlIGlzIGEgcG9pbnRl
ciB0byBhIHNwZWNpZmllZCBPYmplY3RpdmUtQworLy8gICAgY2xhc3MsIGNvbnZlcnNpb24gaXMg
Y29uc2lzdGVudCB3aXRoIHZhbHVlV2l0aE9iamVjdE9mQ2xhc3MvdG9PYmplY3QuCisvLyBzdHJ1
Y3QgdHlwZXM6IEMgc3RydWN0IHR5cGVzIGFyZSBzdXBwb3J0ZWQsIHdoZXJlIEpTVmFsdWUgcHJv
dmlkZXMgc3VwcG9ydAorLy8gICAgZm9yIHRoZSBnaXZlbiB0eXBlLiBTdXBwb3J0IGlzIGJ1aWx0
IGluIGZvciBDR1BvaW50LCBOU1JhbmdlLCBDR1JlY3QsIGFuZAorLy8gICAgQ0dTaXplOyBzZWUg
SlNWYWx1ZVN0cnVjdFN1cHBvcnQuaCBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGFkZCBzdXBw
b3J0CisvLyAgICBmb3IgYWRkaXRpb25hbCB0eXBlcy4KKy8vIGJsb2NrIHR5cGVzOiBJbiBhZGRp
dGlvbiB0byBzdXBwb3J0IHByb3ZpZGVkIGJ5IHZhbHVlV2l0aE9iamVjdC90b09iamVjdCBmb3IK
Ky8vICAgIGJsb2NrIHR5cGVzLCBpZiBhIEphdmFTY3JpcHQgRnVuY3Rpb24gaXMgcGFzc2VkIGFz
IGFuIGFyZ3VtZW50LCB3aGVyZSB0aGUKKy8vICAgIHR5cGUgcmVxdWlyZWQgaXMgYSBibG9jayB3
aXRoIGEgdm9pZCByZXR1cm4gdmFsdWUgKGFuZCB3aGVyZSB0aGUgYmxvY2sncworLy8gICAgYXJn
dW1lbnRzIGFyZSBhbGwgb2Ygc3VwcG9ydGVkIHR5cGVzKSwgdGhlbiBhIHNwZWNpYWwgYWRhcHRv
ciBibG9jaworLy8gICAgd2lsbCBiZSBjcmVhdGVkLCBhbGxvd2luZyB0aGUgdGhlIEphdmFTY3Jp
cHQgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiB0aGUKKy8vICAgIHBsYWNlIG9mIGEgYmxvY2suCisv
LworLy8gRm9yIGFueSBpbnRlcmZhY2UgdGhhdCBjb25mb3JtcyB0byBKU0V4cG9ydCB0aGUgbm9y
bWFsIGNvcHlpbmcgY29udmVyc2lvbiBmb3IKKy8vIGJ1aWx0IGluIHR5cGVzIHdpbGwgYmUgaW5o
aWJpdGVkIC0gc28sIGZvciBleGFtcGxlLCBpZiBhbiBpbnN0YW5jZSB0aGF0CisvLyBkZXJpdmVz
IGZyb20gTlNTdHJpbmcgYnkgY29uZm9ybXMgdG8gSlNFeHBvcnQgaXMgcGFzc2VkIHRvIHZhbHVl
V2l0aE9iamVjdDosCisvLyBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgT2JqZWN0aXZlLUMgb2Jq
ZWN0IHdpbGwgYmUgcmV0dXJuZWQgcmF0aGVyIHRoYW4gYQorLy8gSmF2YVNjcmlwdCBzdHJpbmcg
cHJpbWl0aXZlLgorQHByb3RvY29sIEpTRXhwb3J0CitAZW5kCisKKy8vIFdoZW4gYSBzZWxlY3Rv
ciB0aGF0IHRha2VzIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBpcyBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NyaXB0CisvLyBwcm9wZXJ0eSBuYW1lLCBieSBkZWZhdWx0IGEgcHJvcGVydHkgbmFtZSB3aWxs
IGJlIGdlbmVyYXRlZCBieSBwZXJmb3JtaW5nIHRoZQorLy8gZm9sbG93aW5nIGNvbnZlcnNpb246
CisvLyAgLSBBbGwgc2VtaWNvbG9ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RvcgorLy8g
IC0gQW55IGxvd2VyY2FzZSBsZXR0ZXIgdGhhdCBoYWQgZm9sbG93ZWQgYSBzZW1pY29sb24gd2ls
bCBiZSBjYXBpdGFsaXplZC4KKy8vIFVuZGVyIHRoZSBkZWZhdWx0IGNvbnZlcnNpb24gYSBzZWxl
Y3RvciAiZG9Gb286d2l0aEJhcjoiIHdpbGwgYmUgZXhwb3J0ZWQgYXMKKy8vICJkb0Zvb1dpdGhC
YXIiLiBUaGUgZGVmYXVsdCBjb252ZXJzaW9uIG1heSBiZSBvdmVycmlkZW4gdXNpbmcgdGhlIEpT
RXhwb3J0QXMKKy8vIG1hY3JvLCBmb3IgZXhhbXBsZSB0byBleHBvcnQgYSBtZXRob2QgImRvRm9v
OndpdGhCYXI6IiBhcyAiZG9Gb28iOgorLy8KKy8vICAgIEBwcm90b2NvbCBNeUNsYXNzSmF2YVNj
cmlwdE1ldGhvZHMgPEpTRXhwb3J0PgorLy8gICAgSlNFeHBvcnRBcyhkb0ZvbywKKy8vICAgIC0g
KHZvaWQpZG9Gb286KGlkKWZvbyB3aXRoQmFyOihpZCliYXIKKy8vICAgICk7CisvLyAgICBAZW5k
CisvLworLy8gTm90ZSB0aGF0IHRoZSBKU0V4cG9ydCBtYWNybyBtYXkgb25seSBiZSBhcHBsaWVk
IHRvIGEgc2VsZWN0b3IgdGhhdCB0YWtlcyBvbmUKKy8vIG9yIG1vcmUgYXJndW1lbnQuCisjZGVm
aW5lIEpTRXhwb3J0QXMoUHJvcGVydHlOYW1lLCBTZWxlY3RvcikgXAorICAgIEBvcHRpb25hbCBT
ZWxlY3RvciBfX0pTX0VYUE9SVF9BU19fIyNQcm9wZXJ0eU5hbWU6KGlkKWFyZ3VtZW50OyBAcmVx
dWlyZWQgU2VsZWN0b3IKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmFsdWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAi
QVBJQ2FzdC5oIgorI2ltcG9ydCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkRhdGVJbnN0YW5jZS5o
IgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisjaW1wb3J0
ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5o
IgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNp
bXBvcnQgInd0Zi9IYXNoTWFwLmgiCisjaW1wb3J0ICJ3dGYvSGFzaFNldC5oIgorI2ltcG9ydCAi
d3RmL1ZlY3Rvci5oIgorI2ltcG9ydCA8d3RmL1RDU3BpbkxvY2suaD4KKyNpbXBvcnQgInd0Zi90
ZXh0L1dURlN0cmluZy5oIgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYg
SlNfT0JKQ19BUElfRU5BQkxFRAorCitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlw
dG9yV3JpdGFibGVLZXkgPSBAIndyaXRhYmxlIjsKK05TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0
eURlc2NyaXB0b3JFbnVtZXJhYmxlS2V5ID0gQCJlbnVtZXJhYmxlIjsKK05TU3RyaW5nICogY29u
c3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JDb25maWd1cmFibGVLZXkgPSBAImNvbmZpZ3VyYWJsZSI7
CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yVmFsdWVLZXkgPSBAInZhbHVl
IjsKK05TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JHZXRLZXkgPSBAImdldCI7
CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5ID0gQCJzZXQiOwor
CitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZSB7CisgICAgSlNWYWx1ZVJlZiBtX3ZhbHVlOworICAg
IEpTQ29udGV4dCAqbV93ZWFrQ29udGV4dDsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE9i
amVjdDooaWQpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOm9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUp
IGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09M
KXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUg
Kil2YWx1ZVdpdGhEb3VibGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VO
dW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpj
b250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhJbnQzMjooaW50MzJfdCl2YWx1ZSBp
bkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdp
dGhVSW50MzI6KHVpbnQzMl90KXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAor
eworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bWJlcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRd
OworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDooSlNDb250ZXh0
ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVj
dE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgMCkgaW5Db250ZXh0OmNv
bnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0OihKU0Nv
bnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpT
T2JqZWN0TWFrZUFycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIE5VTEws
IDApIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdSZWd1
bGFyRXhwcmVzc2lvbkZyb21QYXR0ZXJuOihOU1N0cmluZyAqKXBhdHRlcm4gZmxhZ3M6KE5TU3Ry
aW5nICopZmxhZ3MgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgSlNTdHJp
bmdSZWYgcGF0dGVyblN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmlu
Z1JlZilwYXR0ZXJuKTsKKyAgICBKU1N0cmluZ1JlZiBmbGFnc1N0cmluZyA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilmbGFncyk7CisgICAgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbMl0gPSB7IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIHBhdHRlcm5TdHJpbmcpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBmbGFnc1N0cmluZykgfTsKKyAgICBKU1N0cmluZ1JlbGVhc2UocGF0
dGVyblN0cmluZyk7CisgICAgSlNTdHJpbmdSZWxlYXNlKGZsYWdzU3RyaW5nKTsKKworICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVjdE1ha2VSZWdFeHAoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgMiwgYXJndW1lbnRzLCAwKSBpbkNvbnRleHQ6Y29udGV4
dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIEpTU3Ry
aW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilt
ZXNzYWdlKTsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsKKyAgICBKU1N0cmluZ1JlbGVh
c2Uoc3RyaW5nKTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVj
dE1ha2VFcnJvcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAxLCAmYXJndW1lbnQs
IDApIGluQ29udGV4dDpjb250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOdWxsSW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
KSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCkpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKworLSAoaWQpdG9PYmplY3QKK3sKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHZhbHVlVG9PYmplY3QoY29udGV4dCwg
bV92YWx1ZSk7Cit9CistIChpZCl0b09iamVjdE9mQ2xhc3M6KENsYXNzKWNscworeworICAgIGlk
IHJlc3VsdCA9IFtzZWxmIHRvT2JqZWN0XTsKKyAgICByZXR1cm4gW3Jlc3VsdCBpc0tpbmRPZkNs
YXNzOmNsc10gPyByZXN1bHQgOiBuaWw7Cit9CisKKy0gKEJPT0wpdG9Cb29sCit7CisgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYm
IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSkpID8gWUVTIDogTk87Cit9CistIChkb3VibGUpdG9Eb3VibGUKK3sKKyAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworCisgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGRvdWJsZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7
CisgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKGludDMyX3Qp
dG9JbnQzMgoreworICAgIHJldHVybiBKU0M6OnRvSW50MzIoW3NlbGYgdG9Eb3VibGVdKTsKK30K
Ky0gKHVpbnQzMl90KXRvVUludDMyCit7CisgICAgcmV0dXJuIEpTQzo6dG9VSW50MzIoW3NlbGYg
dG9Eb3VibGVdKTsKK30KKy0gKE5TTnVtYmVyICopdG9OdW1iZXIKK3sKKyAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0
ID0gdmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVl
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNTdHJp
bmcgKil0b1N0cmluZworeworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRd
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvU3RyaW5nKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CistIChOU0RhdGUgKil0b0RhdGUKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVz
dWx0ID0gdmFsdWVUb0RhdGUoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TQXJy
YXkgKil0b0FycmF5Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9BcnJheShjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5Cit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwor
ICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9EaWN0aW9uYXJ5KGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3Bl
cnR5TmFtZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWVS
ZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBvYmplY3QsIG5hbWUsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShu
YW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVG
cm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKK30KKy0gKHZvaWQpc2V0VmFs
dWU6KGlkKXZhbHVlIGZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5TmFtZQoreworICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpT
T2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7Cisg
ICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKChDRlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOworICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCBuYW1lLCBvYmplY3RU
b1ZhbHVlKGNvbnRleHQsIHZhbHVlKSwgMCwgJmV4Y2VwdGlvbik7CisgICAgSlNTdHJpbmdSZWxl
YXNlKG5hbWUpOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5
RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CistIChCT09M
KWRlbGV0ZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5TmFtZQoreworICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0
UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBy
ZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAg
IEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdS
ZWYpcHJvcGVydHlOYW1lKTsKKyAgICBCT09MIHJlc3VsdCA9IEpTT2JqZWN0RGVsZXRlUHJvcGVy
dHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0
aW9uKSA/IFlFUyA6IE5POworICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChCT09MKWhhc1Byb3BlcnR5
OihOU1N0cmluZyAqKXByb3BlcnR5TmFtZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtz
ZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisg
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQg
Ym9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5h
bWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1l
KTsKKyAgICBCT09MIHJlc3VsdCA9IEpTT2JqZWN0SGFzUHJvcGVydHkoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgb2JqZWN0LCBuYW1lKSA/IFlFUyA6IE5POworICAgIEpTU3RyaW5n
UmVsZWFzZShuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAodm9pZClkZWZpbmVQcm9w
ZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eSBkZXNjcmlwdG9yOihpZClkZXNjcmlwdG9yCit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm47CisgICAgW1tjb250ZXh0IGdsb2JhbE9iamVjdF1bQCJPYmplY3Qi
XSBpbnZva2VNZXRob2Q6QCJkZWZpbmVQcm9wZXJ0eSIgd2l0aEFyZ3VtZW50czpAWyBzZWxmLCBw
cm9wZXJ0eSwgZGVzY3JpcHRvciBdXTsKK30KKworLSAoSlNWYWx1ZSAqKXZhbHVlQXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChp
bmRleCAhPSAodW5zaWduZWQpaW5kZXgpCisgICAgICAgIFtzZWxmIHZhbHVlRm9yUHJvcGVydHk6
W1tKU1ZhbHVlIHZhbHVlV2l0aERvdWJsZTppbmRleCBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJp
bmddXTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
bV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNW
YWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsICh1bnNpZ25lZClpbmRleCwgJmV4Y2VwdGlvbik7
CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistICh2b2lkKXNldFZhbHVlOihp
ZCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoaW5kZXggIT0gKHVuc2lnbmVkKWluZGV4KQorICAgICAgICByZXR1cm4gW3Nl
bGYgc2V0VmFsdWU6dmFsdWUgZm9yUHJvcGVydHk6W1tKU1ZhbHVlIHZhbHVlV2l0aERvdWJsZTpp
bmRleCBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJpbmddXTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAg
aWYgKGV4Y2VwdGlvbikgeworICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0U2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgKHVuc2lnbmVk
KWluZGV4LCBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKSwgJmV4Y2VwdGlvbik7CisgICAg
aWYgKGV4Y2VwdGlvbikgeworICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLSAoQk9PTClpc1VuZGVmaW5lZAor
eworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAo
Y29udGV4dCAmJiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChCT09MKWlzTnVsbAoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4dCAm
JiBKU1ZhbHVlSXNOdWxsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUp
KSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc0Jvb2xlYW4KK3sKKyAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlz
Qm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMg
OiBOTzsKK30KKy0gKEJPT0wpaXNOdW1iZXIKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQor
LSAoQk9PTClpc1N0cmluZworeworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlSXNTdHJpbmcoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChCT09MKWlz
T2JqZWN0Cit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAg
cmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30KKworLSAoQk9PTClpc0VxdWFsVG9P
YmplY3Q6KGlkKXZhbHVlCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4g
SlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92
YWx1ZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkpID8gWUVTIDogTk87Cit9CistIChC
T09MKWlzRXF1YWxXaXRoVHlwZUNvZXJjaW9uVG9PYmplY3Q6KGlkKXZhbHVlCit7CisgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm4gTk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgQk9P
TCByZXN1bHQgPSBKU1ZhbHVlSXNFcXVhbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKSwgJmV4Y2VwdGlvbikgPyBZ
RVMgOiBOTzsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9v
bEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBO
TzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBjb25z
dHJ1Y3RvciA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisKKyAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0luc3RhbmNlT2ZDb25z
dHJ1Y3Rvcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCBjb25zdHJ1
Y3RvciwgJmV4Y2VwdGlvbikgPyBZRVMgOiBOTzsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAg
ICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czoo
TlNBcnJheSAqKWFyZ3MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0
XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJbnRl
Z2VyIGFyZ3VtZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbYXJndW1lbnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50
Q291bnQ7ICsraSkKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0
LCBbYXJncyBvYmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOworCisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0
aW9uKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgMCwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAg
ICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisK
KyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250
ZXh0XTsKK30KKy0gKEpTVmFsdWUgKiljb25zdHJ1Y3RXaXRoQXJndW1lbnRzOihOU0FycmF5ICop
YXJncworeworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TVUludGVnZXIgYXJndW1l
bnRDb3VudCA9IFthcmdzIGNvdW50XTsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1thcmd1bWVu
dENvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytp
KQorICAgICAgICBhcmd1bWVudHNbaV0gPSBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIFthcmdzIG9i
amVjdEF0SW5kZXg6aV0pOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpT
T2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAg
ICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CisKKyAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgYXJndW1lbnRDb3VudCwgYXJn
dW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4g
W2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKK30K
Ky0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVu
dHM6KE5TQXJyYXkgKilhcmd1bWVudHMKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2Vs
ZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBOU1VJbnRlZ2VyIGFyZ3VtZW50Q291bnQgPSBbYXJndW1lbnRzIGNvdW50XTsKKyAgICBKU1Zh
bHVlUmVmIGFyZ3NbYXJndW1lbnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFyZ3VtZW50Q291bnQ7ICsraSkKKyAgICAgICAgYXJnc1tpXSA9IG9iamVjdFRvVmFsdWUoY29u
dGV4dCwgW2FyZ3VtZW50cyBvYmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiB0aGlzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3Rp
ZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbWV0aG9kKTsKKyAgICBKU1ZhbHVlUmVm
IGZ1bmMgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIHRoaXNPYmplY3QsIG5hbWUsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShu
YW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVG
cm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU09iamVjdFJlZiBvYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgZnVuYywg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0
IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG9iamVjdCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJncywgJmV4Y2VwdGlv
bik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJv
bU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKEpTQ29udGV4dCAq
KWNvbnRleHQKK3sKKyAgICByZXR1cm4gb2JqY19sb2FkV2VhaygmbV93ZWFrQ29udGV4dCk7Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUoU3RydWN0U3VwcG9ydCkKKworLSAo
Q0dQb2ludCl0b1BvaW50Cit7CisgICAgcmV0dXJuIChDR1BvaW50KXsKKyAgICAgICAgW3NlbGZb
QCJ4Il0gdG9Eb3VibGVdLAorICAgICAgICBbc2VsZltAInkiXSB0b0RvdWJsZV0KKyAgICB9Owor
fQorCistIChOU1JhbmdlKXRvUmFuZ2UKK3sKKyAgICByZXR1cm4gKE5TUmFuZ2UpeworICAgICAg
ICAoTlNVSW50ZWdlcilbc2VsZltAImxvY2F0aW9uIl0gdG9Eb3VibGVdLAorICAgICAgICAoTlNV
SW50ZWdlcilbc2VsZltAImxlbmd0aCJdIHRvRG91YmxlXQorICAgIH07Cit9CisKKy0gKENHUmVj
dCl0b1JlY3QKK3sKKyAgICByZXR1cm4gKENHUmVjdCl7CisgICAgICAgIFtzZWxmIHRvUG9pbnRd
LAorICAgICAgICBbc2VsZiB0b1NpemVdCisgICAgfTsKK30KKworLSAoQ0dTaXplKXRvU2l6ZQor
eworICAgIHJldHVybiAoQ0dTaXplKXsKKyAgICAgICAgW3NlbGZbQCJ3aWR0aCJdIHRvRG91Ymxl
XSwKKyAgICAgICAgW3NlbGZbQCJoZWlnaHQiXSB0b0RvdWJsZV0KKyAgICB9OworfQorCisrIChK
U1ZhbHVlICopdmFsdWVXaXRoUG9pbnQ6KENHUG9pbnQpcG9pbnQgaW5Db250ZXh0OihKU0NvbnRl
eHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAewor
ICAgICAgICBAIngiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueF0sCisgICAgICAg
IEAieSI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpwb2ludC55XQorICAgIH0gaW5Db250ZXh0
OmNvbnRleHRdOworfQorCisrIChKU1ZhbHVlICopdmFsdWVXaXRoUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aE9iamVjdDpAeworICAgICAgICBAImxvY2F0aW9uIjpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OnJhbmdlLmxvY2F0aW9uXSwKKyAgICAgICAgQCJsZW5ndGgiOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6cmFuZ2UubGVuZ3RoXQorICAgIH0gaW5Db250ZXh0OmNvbnRleHRdOwor
fQorCisrIChKU1ZhbHVlICopdmFsdWVXaXRoUmVjdDooQ0dSZWN0KXJlY3QgaW5Db250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVj
dDpAeworICAgICAgICBAIngiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmlnaW4u
eF0sCisgICAgICAgIEAieSI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0Lm9yaWdpbi55
XSwKKyAgICAgICAgQCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0LnNpemUu
d2lkdGhdLAorICAgICAgICBAImhlaWdodCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0
LnNpemUuaGVpZ2h0XQorICAgIH0gaW5Db250ZXh0OmNvbnRleHRdOworfQorCisrIChKU1ZhbHVl
ICopdmFsdWVXaXRoU2l6ZTooQ0dTaXplKXNpemUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAeworICAgICAgICBA
IndpZHRoIjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNpemUud2lkdGhdLAorICAgICAgICBA
ImhlaWdodCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLmhlaWdodF0KKyAgICB9IGlu
Q29udGV4dDpjb250ZXh0XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShT
dWJzY3JpcHRTdXBwb3J0KQorCistIChKU1ZhbHVlICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6
KGlkKWtleQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghWyhOU09iamVj
dCopa2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAga2V5ID0g
W1tKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDprZXkgaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5n
XTsKKyAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoVW5kZWZpbmVkSW5Db250ZXh0OmNvbnRleHRdOworICAgIH0KKworICAgIHJldHVybiBbc2Vs
ZiB2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKWtleV07Cit9CisKKy0gKEpTVmFsdWUgKilv
YmplY3RBdEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICByZXR1cm4g
W3NlbGYgdmFsdWVBdEluZGV4OmluZGV4XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9i
amVjdCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4pa2V5Cit7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIVsoTlNPYmplY3QqKWtleSBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBjbGFzc11dKSB7CisgICAgICAgIGtleSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6
a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmluZ107CisgICAgICAgIGlmICgha2V5KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtzZWxmIHNldFZhbHVlOm9iamVjdCBmb3JQ
cm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCistICh2b2lkKXNldE9iamVjdDooaWQpb2Jq
ZWN0IGF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleAoreworICAgIFtzZWxmIHNl
dFZhbHVlOm9iamVjdCBhdEluZGV4OmluZGV4XTsKK30KKworQGVuZAorCitpbmxpbmUgYm9vbCBp
c0RhdGUoSlNPYmplY3RSZWYgb2JqZWN0LCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCkKK3sK
KyAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjb250ZXh0KSk7CisgICAgcmV0
dXJuIHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJkpTQzo6RGF0ZUluc3RhbmNlOjpzX2luZm8pOwor
fQorCitpbmxpbmUgYm9vbCBpc0FycmF5KEpTT2JqZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQpCit7CisgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMo
Y29udGV4dCkpOworICAgIHJldHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6OkpTQXJy
YXk6OnNfaW5mbyk7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKEludGVybmFsKQorCitl
bnVtIENvbnZlcnNpb25UeXBlIHsKKyAgICBDb250YWluZXJOb25lLAorICAgIENvbnRhaW5lckFy
cmF5LAorICAgIENvbnRhaW5lckRpY3Rpb25hcnkKK307CisKK2NsYXNzIEpTQ29udGFpbmVyQ29u
dmVydG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgVGFzayB7CisgICAgICAgIEpTVmFsdWVSZWYg
anM7CisgICAgICAgIGlkIG9iamM7CisgICAgICAgIENvbnZlcnNpb25UeXBlIHR5cGU7CisgICAg
fTsKKworICAgIEpTQ29udGFpbmVyQ29udmVydG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICBpZCBj
b252ZXJ0KEpTVmFsdWVSZWYgcHJvcGVydHkpOworICAgIHZvaWQgYWRkKFRhc2sgdGFzayk7Cisg
ICAgVGFzayB0YWtlKCk7CisgICAgYm9vbCBpc1dvcmtMaXN0RW1wdHkoKSB7IHJldHVybiAhbV93
b3JrbGlzdC5zaXplKCk7IH0KKworcHJpdmF0ZToKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9j
b250ZXh0OworICAgIFdURjo6SGFzaE1hcDxKU1ZhbHVlUmVmLCBpZD4gbV9vYmplY3RNYXA7Cisg
ICAgV1RGOjpWZWN0b3I8VGFzaz4gbV93b3JrbGlzdDsKK307CisKK2lubGluZSBpZCBKU0NvbnRh
aW5lckNvbnZlcnRvcjo6Y29udmVydChKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIFdURjo6SGFz
aE1hcDxKU1ZhbHVlUmVmLCBpZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX29iamVjdE1hcC5maW5kKHZh
bHVlKTsKKyAgICBpZiAoaXRlciAhPSBtX29iamVjdE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOworCisgICAgVGFzayByZXN1bHQgPSB2YWx1ZVRvT2JqZWN0V2l0aG91dENv
cHkobV9jb250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdC5qcykKKyAgICAgICAgYWRkKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5vYmpjOworfQorCit2b2lkIEpTQ29udGFpbmVyQ29u
dmVydG9yOjphZGQoVGFzayB0YXNrKQoreworICAgIG1fb2JqZWN0TWFwLmFkZCh0YXNrLmpzLCB0
YXNrLm9iamMpOworICAgIGlmICh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9uZSkKKyAgICAgICAg
bV93b3JrbGlzdC5hcHBlbmQodGFzayk7Cit9CisKK0pTQ29udGFpbmVyQ29udmVydG9yOjpUYXNr
IEpTQ29udGFpbmVyQ29udmVydG9yOjp0YWtlKCkKK3sKKyAgICBBU1NFUlQoIWlzV29ya0xpc3RF
bXB0eSgpKTsKKyAgICBUYXNrIGxhc3QgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICBtX3dvcmts
aXN0LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gbGFzdDsKK30KKworc3RhdGljIEpTQ29udGFp
bmVyQ29udmVydG9yOjpUYXNrIHZhbHVlVG9PYmplY3RXaXRob3V0Q29weShKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09i
amVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWQgcHJpbWl0aXZlOworICAgICAgICBp
ZiAoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBwcmltaXRp
dmUgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSA/IEBZRVMgOiBATk87CisgICAg
ICAgIGVsc2UgaWYgKEpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIC8vIE5vcm1hbGl6ZSB0aGUgbnVtYmVyLCBzbyBpdCB3aWxsIHVuaXF1ZSBjb3JyZWN0bHkg
aW4gdGhlIGhhc2ggbWFwIC0KKyAgICAgICAgICAgIC8vIGl0J3MgbmljZXIgbm90IHRvIGxlYWsg
dGhpcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwhCisgICAgICAgICAgICB2YWx1ZSA9
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1
ZSwgMCkpOworICAgICAgICAgICAgcHJpbWl0aXZlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKV07CisgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkgeworICAgICAgICAgICAgLy8gV291
bGQgYmUgbmljZSB0byB1bmlxdWUgc3RyaW5ncywgdG9vLgorICAgICAgICAgICAgSlNTdHJpbmdS
ZWYganNzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKTsKKyAg
ICAgICAgICAgIE5TU3RyaW5nICogc3RyaW5nTlMgPSAoTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZyk7CisgICAgICAgICAgICBKU1N0
cmluZ1JlbGVhc2UoanNzdHJpbmcpOworICAgICAgICAgICAgcHJpbWl0aXZlID0gW3N0cmluZ05T
IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNOdWxsKGNvbnRleHQs
IHZhbHVlKSkKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bGwgbnVsbF07CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2
YWx1ZSkpOworICAgICAgICAgICAgcHJpbWl0aXZlID0gbmlsOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAoSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgcHJpbWl0aXZlLCBD
b250YWluZXJOb25lIH07CisgICAgfQorCisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCAwKTsKKworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5
VW53cmFwT2JqY09iamVjdChjb250ZXh0LCBvYmplY3QpKQorICAgICAgICByZXR1cm4gKEpTQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCB3cmFwcGVkLCBDb250YWluZXJOb25lIH07
CisKKyAgICBpZiAoaXNEYXRlKG9iamVjdCwgY29udGV4dCkpCisgICAgICAgIHJldHVybiAoSlND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50
ZXJ2YWxTaW5jZTE5NzA6SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIG9iamVjdCwgMCldLCBDb250
YWluZXJOb25lIH07CisKKyAgICBpZiAoaXNBcnJheShvYmplY3QsIGNvbnRleHQpKQorICAgICAg
ICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheSB9OworCisgICAgcmV0dXJuIChKU0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFy
eV0sIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKK30KKworc3RhdGljIGlkIGNvbnRhaW5lclZhbHVl
VG9PYmplY3QoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTQ29udGFpbmVyQ29udmVydG9y
OjpUYXNrIHRhc2spCit7CisgICAgQVNTRVJUKHRhc2sudHlwZSAhPSBDb250YWluZXJOb25lKTsK
KyAgICBKU0NvbnRhaW5lckNvbnZlcnRvciBjb252ZXJ0b3IoY29udGV4dCk7CisgICAgY29udmVy
dG9yLmFkZCh0YXNrKTsKKyAgICBBU1NFUlQoIWNvbnZlcnRvci5pc1dvcmtMaXN0RW1wdHkoKSk7
CisgICAgCisgICAgZG8geworICAgICAgICBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBjdXJy
ZW50ID0gdGFzayA9IGNvbnZlcnRvci50YWtlKCk7CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgY3VycmVudC5qcykpOworICAgICAgICBKU09iamVjdFJlZiBqcyA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBjdXJyZW50LmpzLCAwKTsKKworICAgICAgICBpZiAoY3Vy
cmVudC50eXBlID09IENvbnRhaW5lckFycmF5KSB7CisgICAgICAgICAgICBBU1NFUlQoW2N1cnJl
bnQub2JqYyBpc0tpbmRPZkNsYXNzOltOU011dGFibGVBcnJheSBjbGFzc11dKTsKKyAgICAgICAg
ICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IChOU011dGFibGVBcnJheSAqKWN1cnJlbnQub2Jq
YzsKKyAgICAgICAgCisgICAgICAgICAgICBKU1N0cmluZ1JlZiBsZW5ndGhTdHJpbmcgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7CisgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBKU0M6OnRvVUludDMyKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIGpzLCBsZW5ndGhTdHJpbmcsIDApLCAwKSk7CisgICAgICAg
ICAgICBKU1N0cmluZ1JlbGVhc2UobGVuZ3RoU3RyaW5nKTsKKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWQgb2Jq
YyA9IGNvbnZlcnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGpzLCBpLCAwKSk7CisgICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpvYmpjID8gb2Jq
YyA6IFtOU051bGwgbnVsbF1dOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNNdXRhYmxlRGlj
dGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rp
b25hcnkgPSAoTlNNdXRhYmxlRGljdGlvbmFyeSAqKWN1cnJlbnQub2JqYzsKKworICAgICAgICAg
ICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVBcnJheSA9IEpTT2JqZWN0Q29w
eVByb3BlcnR5TmFtZXMoY29udGV4dCwganMpOworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IEpTUHJvcGVydHlOYW1lQXJyYXlHZXRDb3VudChwcm9wZXJ0eU5hbWVBcnJheSk7CisKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUgPSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFt
ZUF0SW5kZXgocHJvcGVydHlOYW1lQXJyYXksIGkpOworICAgICAgICAgICAgICAgIGlmIChpZCBv
YmpjID0gY29udmVydG9yLmNvbnZlcnQoSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqcywg
cHJvcGVydHlOYW1lLCAwKSkpCisgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbWyhOU1N0
cmluZyAqKUpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHByb3BlcnR5
TmFtZSkgYXV0b3JlbGVhc2VdXSA9IG9iamM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKHByb3BlcnR5TmFtZUFycmF5KTsKKyAgICAgICAg
fQorCisgICAgfSB3aGlsZSAoIWNvbnZlcnRvci5pc1dvcmtMaXN0RW1wdHkoKSk7CisKKyAgICBy
ZXR1cm4gdGFzay5vYmpjOworfQorCitpZCB2YWx1ZVRvT2JqZWN0KEpTQ29udGV4dCAqY29udGV4
dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBy
ZXN1bHQgPSB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHkoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgdmFsdWUpOworICAgIGlmIChyZXN1bHQudHlwZSA9PSBDb250YWluZXJOb25lKQor
ICAgICAgICByZXR1cm4gcmVzdWx0Lm9iamM7CisgICAgcmV0dXJuIGNvbnRhaW5lclZhbHVlVG9P
YmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0KTsKK30KKworaWQg
dmFsdWVUb051bWJlcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkg
eworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkK
KyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNC
b29sZWFuKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgdmFsdWUpID8gQFlFUyA6IEBOTzsKKworICAgIGRvdWJsZSByZXN1bHQgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOipleGNlcHRpb24gPyBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpIDogcmVzdWx0XTsKK30KK2lkIHZhbHVlVG9TdHJpbmcoSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGlmIChpZCB3cmFwcGVkID0g
dHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFw
cGVkIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4g
d3JhcHBlZDsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlZiBqc3N0cmluZyA9IEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24p
IHsKKyAgICAgICAgQVNTRVJUKCFqc3N0cmluZyk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgTlNTdHJpbmcqIHN0cmluZ05TID0gWyhOU1N0cmluZyAqKUpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGpzc3RyaW5nKSBhdXRvcmVsZWFzZV07CisgICAg
SlNTdHJpbmdSZWxlYXNlKGpzc3RyaW5nKTsKKyAgICByZXR1cm4gc3RyaW5nTlM7Cit9CitpZCB2
YWx1ZVRvRGF0ZShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAg
aWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkgewor
ICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNEYXRlIGNsYXNzXV0pCisgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIHJldHVybiAqZXhj
ZXB0aW9uID8gbmlsIDogW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpyZXN1
bHRdOworfQoraWQgdmFsdWVUb0FycmF5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4
dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBlZCBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAo
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5l
clZhbHVlVG9PYmplY3QoY29udGV4dCwgKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFs
dWUsIFtOU011dGFibGVBcnJheSBhcnJheV0sIENvbnRhaW5lckFycmF5fSk7CisKKyAgICBpZiAo
IShKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNVbmRlZmluZWQoY29u
dGV4dCwgdmFsdWUpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKHRvSlMoY29udGV4dCksICJDYW5ub3QgY29udmVydCBwcmltaXRpdmUgdG8gTlNBcnJh
eSIpKTsKKyAgICByZXR1cm4gbmlsOworfQoraWQgdmFsdWVUb0RpY3Rpb25hcnkoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5
VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFt3cmFwcGVk
IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
IHdyYXBwZWQ7CisgICAgfQorCisgICAgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1
ZSkpCisgICAgICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIChKU0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IHZhbHVlLCBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0
aW9uYXJ5XSwgQ29udGFpbmVyRGljdGlvbmFyeX0pOworCisgICAgaWYgKCEoSlNWYWx1ZUlzTnVs
bChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSkp
CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNv
bnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0aXZlIHRvIE5TRGljdGlvbmFyeSIpKTsKKyAg
ICByZXR1cm4gbmlsOworfQorCitjbGFzcyBPYmpjQ29udGFpbmVyQ29udmVydG9yIHsKK3B1Ymxp
YzoKKyAgICBzdHJ1Y3QgVGFzayB7CisgICAgICAgIGlkIG9iamM7CisgICAgICAgIEpTVmFsdWVS
ZWYganM7CisgICAgICAgIENvbnZlcnNpb25UeXBlIHR5cGU7CisgICAgfTsKKworICAgIE9iamND
b250YWluZXJDb252ZXJ0b3IoSlNDb250ZXh0ICpjb250ZXh0KQorICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGNvbnZlcnQoaWQgb2Jq
ZWN0KTsKKyAgICB2b2lkIGFkZChUYXNrIHRhc2spOworICAgIFRhc2sgdGFrZSgpOworICAgIGJv
b2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4gIW1fd29ya2xpc3Quc2l6ZSgpOyB9CisKK3By
aXZhdGU6CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CisgICAgV1RGOjpIYXNoTWFwPGlkLCBK
U1ZhbHVlUmVmPiBtX29iamVjdE1hcDsKKyAgICBXVEY6OlZlY3RvcjxUYXNrPiBtX3dvcmtsaXN0
OworfTsKKworSlNWYWx1ZVJlZiBPYmpjQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KGlkIG9i
amVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKworICAgIGF1dG8gaXQgPSBtX29iamVjdE1h
cC5maW5kKG9iamVjdCk7CisgICAgaWYgKGl0ICE9IG1fb2JqZWN0TWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayB0
YXNrID0gb2JqZWN0VG9WYWx1ZVdpdGhvdXRDb3B5KG1fY29udGV4dCwgb2JqZWN0KTsKKyAgICBh
ZGQodGFzayk7CisgICAgcmV0dXJuIHRhc2suanM7Cit9CisKK3ZvaWQgT2JqY0NvbnRhaW5lckNv
bnZlcnRvcjo6YWRkKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzaykKK3sKKyAgICBt
X29iamVjdE1hcC5hZGQodGFzay5vYmpjLCB0YXNrLmpzKTsKKyAgICBpZiAodGFzay50eXBlICE9
IENvbnRhaW5lck5vbmUpCisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKHRhc2spOworfQorCitP
YmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIE9iamNDb250YWluZXJDb252ZXJ0b3I6OnRha2Uo
KQoreworICAgIEFTU0VSVCghaXNXb3JrTGlzdEVtcHR5KCkpOworICAgIFRhc2sgbGFzdCA9IG1f
d29ya2xpc3QubGFzdCgpOworICAgIG1fd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgIHJldHVy
biBsYXN0OworfQorCitzdGF0aWMgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBvYmplY3RU
b1ZhbHVlV2l0aG91dENvcHkoSlNDb250ZXh0ICpjb250ZXh0LCBpZCBvYmplY3QpCit7CisgICAg
aWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFz
ayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSksIENvbnRhaW5lck5vbmUgfTsKKworICAgIGlmICghY2xhc3NfY29uZm9ybXNUb1By
b3RvY29sKG9iamVjdF9nZXRDbGFzcyhvYmplY3QpLCBnZXRKU0V4cG9ydFByb3RvY29sKCkpKSB7
CisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAg
ICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwg
SlNPYmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgTlVM
TCwgMCksIENvbnRhaW5lckFycmF5IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZD
bGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250
YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCAwLCAwKSwgQ29udGFpbmVyRGljdGlvbmFyeSB9OworCisgICAg
ICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TTnVsbCBjbGFzc11dKQorICAgICAgICAg
ICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVl
TWFrZU51bGwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSksIENvbnRhaW5lck5vbmUg
fTsKKworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltKU1ZhbHVlIGNsYXNzXV0p
CisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmpl
Y3QsICgoSlNWYWx1ZSAqKW9iamVjdCktPm1fdmFsdWUsIENvbnRhaW5lck5vbmUgfTsKKworICAg
ICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCisgICAgICAg
ICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIE5VTEwsIDAp
LCBDb250YWluZXJBcnJheSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6
W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVy
Q29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2UoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKKworICAgICAgICBp
ZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJp
bmdSZWYpb2JqZWN0KTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYganMgPSBKU1ZhbHVlTWFrZVN0
cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBzdHJpbmcpOworICAgICAgICAg
ICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250
YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIGpzLCBDb250YWluZXJOb25lIH07CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFz
c11dKSB7CisgICAgICAgICAgICBpZCBsaXRlcmFsVHJ1ZSA9IEBZRVM7CisgICAgICAgICAgICBp
ZiAob2JqZWN0ID09IGxpdGVyYWxUcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHRydWUpLCBDb250YWluZXJOb25lIH07CisgICAg
ICAgICAgICBpZCBsaXRlcmFsRmFsc2UgPSBATk87CisgICAgICAgICAgICBpZiAob2JqZWN0ID09
IGxpdGVyYWxGYWxzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252
ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBmYWxzZSksIENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgICAgIHJl
dHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VO
dW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgWyhOU051bWJlciopb2JqZWN0
IGRvdWJsZVZhbHVlXSksIENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKSB7CisgICAgICAgICAgICBK
U1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFsQ29u
dGV4dChjb250ZXh0KSwgWyhOU0RhdGUgKilvYmplY3QgdGltZUludGVydmFsU2luY2UxOTcwXSk7
CisgICAgICAgICAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdE1ha2VEYXRlKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDEsICZhcmd1bWVudCwgMCk7CisgICAgICAgICAg
ICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHJlc3VsdCwg
Q29udGFpbmVyTm9uZSB9OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCB2YWx1ZUludGVybmFsVmFsdWUoW2NvbnRl
eHQgd3JhcHBlckZvck9iamVjdDpvYmplY3RdKSwgQ29udGFpbmVyTm9uZSB9OworfQorCitKU1Zh
bHVlUmVmIG9iamVjdFRvVmFsdWUoSlNDb250ZXh0ICpjb250ZXh0LCBpZCBvYmplY3QpCit7Cisg
ICAgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayB0YXNrID0gb2JqZWN0VG9WYWx1ZVdpdGhv
dXRDb3B5KGNvbnRleHQsIG9iamVjdCk7CisgICAgaWYgKHRhc2sudHlwZSA9PSBDb250YWluZXJO
b25lKQorICAgICAgICByZXR1cm4gdGFzay5qczsKKworICAgIE9iamNDb250YWluZXJDb252ZXJ0
b3IgY29udmVydG9yKGNvbnRleHQpOworICAgIGNvbnZlcnRvci5hZGQodGFzayk7CisgICAgQVNT
RVJUKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAgZG8geworICAgICAgICBP
YmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIGN1cnJlbnQgPSBjb252ZXJ0b3IudGFrZSgpOwor
ICAgICAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmplY3RSZWYganMgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgY3VycmVudC5qcywgMCk7CisK
KyAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAg
ICAgQVNTRVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKTsK
KyAgICAgICAgICAgIE5TQXJyYXkgKiBhcnJheSA9IChOU0FycmF5ICopY3VycmVudC5vYmpjOwor
ICAgICAgICAgICAgTlNVSW50ZWdlciBjb3VudCA9IFthcnJheSBjb3VudF07CisgICAgICAgICAg
ICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQorICAg
ICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIGpzLCBpbmRleCwgY29udmVydG9yLmNvbnZlcnQoW2FycmF5IG9iamVj
dEF0SW5kZXg6aW5kZXhdKSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoY3VycmVudC50eXBlID09IENvbnRhaW5lckRpY3Rpb25hcnkpOworICAgICAgICAgICAgQVNT
RVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwor
ICAgICAgICAgICAgTlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gKE5TRGljdGlvbmFyeSopY3Vy
cmVudC5vYmpjOworICAgICAgICAgICAgTlNFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gW2RpY3Rp
b25hcnkga2V5RW51bWVyYXRvcl07CisgICAgICAgICAgICB3aGlsZSAoaWQga2V5ID0gW2VudW1l
cmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoW2tleSBpc0tpbmRPZkNs
YXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilr
ZXkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIGpzLCBwcm9wZXJ0eU5hbWUsIGNvbnZlcnRvci5jb252ZXJ0
KFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldKSwgMCwgMCk7CisgICAgICAgICAgICAgICAg
ICAgIEpTU3RyaW5nUmVsZWFzZShwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9IHdoaWxlICghY29udmVydG9y
LmlzV29ya0xpc3RFbXB0eSgpKTsKKworICAgIHJldHVybiB0YXNrLmpzOworfQorCitKU1ZhbHVl
UmVmIHZhbHVlSW50ZXJuYWxWYWx1ZShKU1ZhbHVlICogdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlLT5tX3ZhbHVlOworfQorCisrIChKU1ZhbHVlICopdmFsdWVXaXRoVmFsdWU6KEpTVmFsdWVS
ZWYpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW1tb
SlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29udGV4dF0gYXV0
b3JlbGVhc2VdOworfQorCistIChKU1ZhbHVlICopaW5pdFdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2
YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dAoreworICAgIEFTU0VSVCh2YWx1ZSk7
CisKKyAgICBvYmpjX2luaXRXZWFrKCZtX3dlYWtDb250ZXh0LCBjb250ZXh0KTsKKworICAgIFtz
dXBlciBpbml0XTsKKyAgICBbY29udGV4dCBwcm90ZWN0OnZhbHVlXTsKKyAgICBtX3ZhbHVlID0g
dmFsdWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0cnVjdCBTdHJ1Y3RUYWdIYW5kbGVyIHsK
KyAgICBTRUwgdHlwZVRvVmFsdWVTRUw7CisgICAgU0VMIHZhbHVlVG9UeXBlU0VMOworfTsKKwor
c3RhdGljIFN0cnVjdFRhZ0hhbmRsZXIqIGdldFN0cnVjdFRhZ0hhbmRsZXIoY29uc3QgY2hhciog
ZW5jb2RlZFR5cGUpCit7CisgICAgc3RhdGljIFNwaW5Mb2NrIGdldFN0cnVjdFRhZ0hhbmRsZXJM
b2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRl
cigmZ2V0U3RydWN0VGFnSGFuZGxlckxvY2spOworCisgICAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8
UmVmUHRyPFN0cmluZ0ltcGw+LCBTdHJ1Y3RUYWdIYW5kbGVyPiBTdHJ1Y3RIYW5kbGVyczsKKyAg
ICBzdGF0aWMgU3RydWN0SGFuZGxlcnMgKm1fc3RydWN0SGFuZGxlcnMgPSAwOworCisgICAgaWYg
KCFtX3N0cnVjdEhhbmRsZXJzKSB7CisgICAgICAgIG1fc3RydWN0SGFuZGxlcnMgPSBuZXcgU3Ry
dWN0SGFuZGxlcnMoKTsKKworICAgICAgICAvLyBTdGVwIDE6IGZpbmQgYWxsIHZhbHVlV2l0aDxG
b28+OmluQ29udGV4dDogY2xhc3MgbWV0aG9kcyBpbiBKU1ZhbHVlLgorICAgICAgICBzaXplX3Qg
dmFsdWVXaXRoTWluTGVuID0gc3RybGVuKCJ2YWx1ZVdpdGhYOmluQ29udGV4dDoiKTsKKyAgICAg
ICAgZm9yRWFjaE1ldGhvZEluQ2xhc3Mob2JqZWN0X2dldENsYXNzKFtKU1ZhbHVlIGNsYXNzXSks
IF4oTWV0aG9kIG1ldGhvZCl7CisgICAgICAgICAgICBTRUwgc2VsID0gbWV0aG9kX2dldE5hbWUo
bWV0aG9kKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFtZShzZWwp
OworICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgIC8v
IENoZWNrIGZvciB2YWx1ZVdpdGg8Rm9vPjpjb250ZXh0OgorICAgICAgICAgICAgaWYgKGxlbiA8
IHZhbHVlV2l0aE1pbkxlbiB8fCBzdHJuY21wKG5hbWUsICJ2YWx1ZVdpdGgiLCA5KSB8fCBzdHJu
Y21wKG5hbWUgKyBsZW4gLSAxMSwgIjppbkNvbnRleHQ6IiwgMTEpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBbIGlkLCBTRUwsIDx0eXBlPiwgPGNv
bnRleHRUeXBlPiBdCisgICAgICAgICAgICBpZiAobWV0aG9kX2dldE51bWJlck9mQXJndW1lbnRz
KG1ldGhvZCkgIT0gNCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjaGFy
IGlkVHlwZVszXTsKKyAgICAgICAgICAgIC8vIENoZWNrIDJuZCBhcmd1bWVudCB0eXBlIGlzICJA
IgorICAgICAgICAgICAgY2hhciogc2Vjb25kVHlwZSA9IG1ldGhvZF9jb3B5QXJndW1lbnRUeXBl
KG1ldGhvZCwgMyk7CisgICAgICAgICAgICBpZiAoc3RyY21wKHNlY29uZFR5cGUsICJAIikpIHsK
KyAgICAgICAgICAgICAgICBmcmVlKHNlY29uZFR5cGUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7CisgICAgICAg
ICAgICAvLyBDaGVjayByZXN1bHQgdHlwZSBpcyBhbHNvICJAIgorICAgICAgICAgICAgbWV0aG9k
X2dldFJldHVyblR5cGUobWV0aG9kLCBpZFR5cGUsIDMpOworICAgICAgICAgICAgaWYgKHN0cmNt
cChpZFR5cGUsICJAIikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hh
ciogdHlwZSA9IG1ldGhvZF9jb3B5QXJndW1lbnRUeXBlKG1ldGhvZCwgMik7CisgICAgICAgICAg
ICBtX3N0cnVjdEhhbmRsZXJzLT5hZGQoV1RGOjpTdHJpbmcodHlwZSkuaW1wbCgpLCAoU3RydWN0
VGFnSGFuZGxlcil7IHNlbCwgMCB9KTsKKyAgICAgICAgICAgIGZyZWUodHlwZSk7CisgICAgICAg
IH0pOworCisgICAgICAgIC8vIFN0ZXAgMjogZmluZCBhbGwgdG88Rm9vPiBpbnN0YW5jZSBtZXRo
b2RzIGluIEpTVmFsdWUuCisgICAgICAgIHNpemVfdCBtaW5MZW5WYWx1ZSA9IHN0cmxlbigidG9Y
Iik7CisgICAgICAgIGZvckVhY2hNZXRob2RJbkNsYXNzKFtKU1ZhbHVlIGNsYXNzXSwgXihNZXRo
b2QgbWV0aG9kKXsKKyAgICAgICAgICAgIFNFTCBzZWwgPSBtZXRob2RfZ2V0TmFtZShtZXRob2Qp
OworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbCk7CisgICAg
ICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIHRvPEZvbz4KKyAgICAgICAgICAgIGlmIChsZW4gPCBtaW5MZW5WYWx1ZSB8fCBzdHJuY21w
KG5hbWUsICJ0byIsIDIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8v
IENoZWNrIGZvciBbIGlkLCBTRUwgXQorICAgICAgICAgICAgaWYgKG1ldGhvZF9nZXROdW1iZXJP
ZkFyZ3VtZW50cyhtZXRob2QpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBtYXRjaGluZyB2YWx1ZVdpdGg8Rm9vPjpjb250ZXh0OiBt
ZXRob2QuCisgICAgICAgICAgICBjaGFyKiB0eXBlID0gbWV0aG9kX2NvcHlSZXR1cm5UeXBlKG1l
dGhvZCk7CisKKyAgICAgICAgICAgIFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gbV9z
dHJ1Y3RIYW5kbGVycy0+ZmluZChXVEY6OlN0cmluZyh0eXBlKS5pbXBsKCkpOworICAgICAgICAg
ICAgZnJlZSh0eXBlKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IG1fc3RydWN0SGFuZGxlcnMt
PmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFN0cnVjdFRhZ0hh
bmRsZXImIGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKKworICAgICAgICAgICAgLy8gY2hlY2sgdGhh
dCBzdHJsZW4oPGZvbz4pID09IHN0cmxlbig8Rm9vPikKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHZhbHVlV2l0aE5hbWUgPSBzZWxfZ2V0TmFtZShoYW5kbGVyLnR5cGVUb1ZhbHVlU0VMKTsKKyAg
ICAgICAgICAgIHNpemVfdCB2YWx1ZVdpdGhMZW4gPSBzdHJsZW4odmFsdWVXaXRoTmFtZSk7Cisg
ICAgICAgICAgICBpZiAodmFsdWVXaXRoTGVuIC0gdmFsdWVXaXRoTWluTGVuICE9IGxlbiAtIG1p
bkxlblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgPEZvbz4gPT0gPEZvbz4KKyAgICAgICAgICAgIGlmIChzdHJuY21wKHZhbHVlV2l0aE5h
bWUgKyA5LCBuYW1lICsgMiwgbGVuIC0gbWluTGVuVmFsdWUgLSAxKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBoYW5kbGVyLnZhbHVlVG9UeXBlU0VMID0gc2VsOworICAg
ICAgICB9KTsKKworICAgICAgICAvLyBTdGVwIDM6IGNsZWFuIHVwIC0gcmVtb3ZlIGVudHJpZXMg
d2hlcmUgd2UgZm91bmQgcHJvc3BlY3RpdmUgdmFsdWVXaXRoPEZvbz46aW5Db250ZXh0OiBjb252
ZXJzaW9ucywgYnV0IG5vIG1hdGNoaW5nIHRvPEZvbz4gbWV0aG9kcy4KKyAgICAgICAgdHlwZWRl
ZiBXVEY6Okhhc2hTZXQ8UmVmUHRyPFdURjo6U3RyaW5nSW1wbD4gPiBSZW1vdmVTZXQ7CisgICAg
ICAgIFJlbW92ZVNldCByZW1vdmVTZXQ7CisgICAgICAgIGZvciAoU3RydWN0SGFuZGxlcnM6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5iZWdpbigpOyBpdGVyICE9IG1fc3RydWN0
SGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFN0cnVjdFRhZ0hhbmRsZXIm
IGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmICghaGFuZGxlci52YWx1ZVRv
VHlwZVNFTCkKKyAgICAgICAgICAgICAgICByZW1vdmVTZXQuYWRkKGl0ZXItPmtleSk7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKFJlbW92ZVNldDo6aXRlcmF0b3IgaXRlciA9IHJlbW92ZVNl
dC5iZWdpbigpOyBpdGVyICE9IHJlbW92ZVNldC5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAg
bV9zdHJ1Y3RIYW5kbGVycy0+cmVtb3ZlKCppdGVyKTsKKyAgICB9CisKKyAgICBTdHJ1Y3RIYW5k
bGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxlcnMtPmZpbmQoV1RGOjpTdHJpbmco
ZW5jb2RlZFR5cGUpLmltcGwoKSk7CisgICAgaWYgKGl0ZXIgPT0gbV9zdHJ1Y3RIYW5kbGVycy0+
ZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAmaXRlci0+dmFsdWU7Cit9CisK
KysgKFNFTClzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6KGNvbnN0IGNoYXIgKilzdHJ1Y3RUYWcK
K3sKKyAgICBTdHJ1Y3RUYWdIYW5kbGVyKiBoYW5kbGVyID0gZ2V0U3RydWN0VGFnSGFuZGxlcihz
dHJ1Y3RUYWcpOworICAgIHJldHVybiBoYW5kbGVyID8gaGFuZGxlci0+dHlwZVRvVmFsdWVTRUwg
OiBuaWw7Cit9CisKKysgKFNFTClzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6KGNvbnN0IGNoYXIg
KilzdHJ1Y3RUYWcKK3sKKyAgICBTdHJ1Y3RUYWdIYW5kbGVyKiBoYW5kbGVyID0gZ2V0U3RydWN0
VGFnSGFuZGxlcihzdHJ1Y3RUYWcpOworICAgIHJldHVybiBoYW5kbGVyID8gaGFuZGxlci0+dmFs
dWVUb1R5cGVTRUwgOiBuaWw7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmIChjb250ZXh0KQorICAgICAgICBb
Y29udGV4dCB1bnByb3RlY3Q6bV92YWx1ZV07CisgICAgb2JqY19kZXN0cm95V2VhaygmbV93ZWFr
Q29udGV4dCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmluZyAqKWRlc2Ny
aXB0aW9uCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKGlkIHdyYXBwZWQg
PSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUpKQorICAgICAgICByZXR1cm4gW3dyYXBwZWQgZGVzY3JpcHRpb25dOworICAgIHJldHVy
biBbc2VsZiB0b1N0cmluZ107Cit9CisKK05TSW52b2NhdGlvbiogdHlwZVRvVmFsdWVJbnZvY2F0
aW9uRm9yKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQoreworICAgIFNFTCBzZWxlY3RvciA9IFtK
U1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTplbmNvZGVkVHlwZV07CisgICAgaWYgKCFz
ZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFyKiBtZXRob2RUeXBl
cyA9IG1ldGhvZF9nZXRUeXBlRW5jb2RpbmcoY2xhc3NfZ2V0Q2xhc3NNZXRob2QoW0pTVmFsdWUg
Y2xhc3NdLCBzZWxlY3RvcikpOworICAgIE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0lu
dm9jYXRpb24gaW52b2NhdGlvbldpdGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJl
IHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6bWV0aG9kVHlwZXNdXTsKKyAgICBbaW52b2NhdGlvbiBz
ZXRTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgcmV0dXJuIGludm9jYXRpb247Cit9CisKK05TSW52
b2NhdGlvbiogdmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9yKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBl
KQoreworICAgIFNFTCBzZWxlY3RvciA9IFtKU1ZhbHVlIHNlbGVjdG9yRm9yVmFsdWVUb1N0cnVj
dDplbmNvZGVkVHlwZV07CisgICAgaWYgKCFzZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBjb25zdCBjaGFyKiBtZXRob2RUeXBlcyA9IG1ldGhvZF9nZXRUeXBlRW5jb2RpbmcoY2xh
c3NfZ2V0SW5zdGFuY2VNZXRob2QoW0pTVmFsdWUgY2xhc3NdLCBzZWxlY3RvcikpOworICAgIE5T
SW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlvbldpdGhNZXRo
b2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6bWV0
aG9kVHlwZXNdXTsKKyAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAg
cmV0dXJuIGludm9jYXRpb247Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0ICJB
UElKU1ZhbHVlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNW
YWx1ZShJbnRlcm5hbCkKKworSlNWYWx1ZVJlZiB2YWx1ZUludGVybmFsVmFsdWUoSlNWYWx1ZSop
OworCisrIChKU1ZhbHVlICopdmFsdWVXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpT
VmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworCitKU1ZhbHVl
UmVmIG9iamVjdFRvVmFsdWUoSlNDb250ZXh0ICosIGlkKTsKK2lkIHZhbHVlVG9PYmplY3QoSlND
b250ZXh0ICosIEpTVmFsdWVSZWYpOworaWQgdmFsdWVUb051bWJlcihKU0dsb2JhbENvbnRleHRS
ZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRvU3RyaW5n
KEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
K2lkIHZhbHVlVG9EYXRlKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKK2lkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFs
dWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRvRGljdGlvbmFyeShKU0ds
b2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKysg
KFNFTClzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6KGNvbnN0IGNoYXIgKilzdHJ1Y3RUYWc7Cisr
IChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Oihjb25zdCBjaGFyICopc3RydWN0VGFnOwor
CitAZW5kCisKK05TSW52b2NhdGlvbiogdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvbnN0IGNo
YXIqIGVuY29kZWRUeXBlKTsKK05TSW52b2NhdGlvbiogdmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9y
KGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19P
QkpDX0FQSV9FTkFCTEVECisKKy8vIEFuIGluc3RhbmNlIG9mIEpTVmlydHVhbE1hY2hpbmUgcmVw
cmVzZW50cyBhIHNpbmdsZSBKYXZhU2NyaXB0ICJvYmplY3Qgc3BhY2UiCisvLyBvciBzZXQgb2Yg
ZXhlY3V0aW9uIHJlc291cmNlcy4gVGhyZWFkIHNhZmV0eSBpcyBzdXBwb3J0ZWQgYnkgbG9ja2lu
ZyB0aGUKKy8vIHZpcnR1YWwgbWFjaGluZSwgd2l0aCBjb25jdXJyZW50IEphdmFTY3JpcHQgZXhl
Y3V0aW9uIHN1cHBvcnRlZCBieSBhbGxvY2F0aW5nCisvLyBzZXBhcmF0ZSBpbnN0YW5jZXMgb2Yg
SlNWaXJ0dWFsTWFjaGluZS4KK05TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZh
Y2UgSlNWaXJ0dWFsTWFjaGluZSA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXQ7CisKK0BlbmQKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKwor
I2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgi
CisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lIHsKKyAgICBKU0NvbnRleHRHcm91
cFJlZiBtX2dyb3VwOworfQorCistIChpZClpbml0Cit7CisgICAgW3N1cGVyIGluaXRdOworICAg
IG1fZ3JvdXAgPSBKU0NvbnRleHRHcm91cENyZWF0ZSgpOworICAgIHRvSlMobV9ncm91cCktPm1f
YXBpRGF0YSA9IHNlbGY7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIHRvSlMobV9ncm91cCktPm1fYXBpRGF0YSA9IDA7CisgICAgSlNDb250ZXh0R3JvdXBSZWxl
YXNlKG1fZ3JvdXApOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworSlNDb250ZXh0R3JvdXBS
ZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1h
Y2hpbmUpCit7CisgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5tX2dyb3VwOworfQorCitAZW5k
CisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKK0BpbnRlcmZh
Y2UgSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkKKworSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3Jv
dXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSopOworCitAZW5kCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgor
I2ltcG9ydCA8SlNWYWx1ZUludGVybmFsLmg+CisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5o
PgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpTV3JhcHBlck1hcCA6
IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsK
KworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKKworQGVuZAorCitp
ZCB0cnlVbndyYXBPYmpjT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisK
K1Byb3RvY29sKiBnZXRKU0V4cG9ydFByb3RvY29sKCk7CitDbGFzcyBnZXROU0Jsb2NrQ2xhc3Mo
KTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1h
cC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1h
cC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVy
TWFwLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1wb3J0
ICJKYXZhU2NyaXB0Q29yZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0
ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCisjaW1wb3J0
ICJPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIK
KyNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisjaW1wb3J0ICJ3dGYvVmVjdG9yLmgiCisKK3N0
YXRpYyB2b2lkIHdyYXBwZXJGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgWyhp
ZClKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSByZWxlYXNlXTsKK30KKworLy8gQWxsIHdyYXBw
ZXIgb2JqZWN0cyBhbmQgY29uc3RydWN0b3Igb2JqZWN0cyBkZXJpdmUgZnJvbSB0aGlzIHR5cGUs
IHNvIHdlIGNhbiBkZXRlY3QgJiB1bndyYXAgT2JqZWN0aXZlLUMgaW5zdGFuY2VzL0NsYXNzZXMu
CitzdGF0aWMgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBTcGluTG9j
ayBpbml0TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tIb2xkZXIoJmluaXRMb2NrKTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0g
MDsKKworICAgIGlmICghY2xhc3NSZWYpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVm
aW5pdGlvbjsKKyAgICAgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5Owor
ICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJvYmpjX2NsYXNzIjsKKyAgICAgICAgZGVm
aW5pdGlvbi5maW5hbGl6ZSA9IHdyYXBwZXJGaW5hbGl6ZTsKKyAgICAgICAgY2xhc3NSZWYgPSBK
U0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2xhc3NSZWY7
Cit9CisKKy8vIERlZmF1bHQgY29udmVyc2lvbiBvZiBzZWxlY3RvcnMgdG8gcHJvcGVydHkgbmFt
ZXMuCisvLyBBbGwgc2VtaWNvbG9ucyBhcmUgcmVtb3ZlZCwgbG93ZXJjYXNlIGxldHRlcnMgZm9s
bG93aW5nIGEgc2VtaWNvbG9uIGFyZSBjYXBpdGFsaXplZC4KK3N0YXRpYyBOU1N0cmluZyogc2Vs
ZWN0b3JUb1Byb3BlcnR5TmFtZShjb25zdCBjaGFyKiBzdGFydCkKK3sKKyAgICAvLyBVc2UgJ2lu
ZGV4JyB0byBjaGVjayBmb3IgY29sb25zLCBpZiB0aGVyZSBhcmUgbm9uLCB0aGlzIGlzIGVhc3kh
CisgICAgY29uc3QgY2hhciogZmlyc3RDb2xvbiA9IGluZGV4KHN0YXJ0LCAnOicpOworICAgIGlm
ICghZmlyc3RDb2xvbikKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpzdGFydF07CisKKyAgICAvLyAnaGVhZGVyJyBpcyB0aGUgbGVuZ3RoIG9mIHN0cmluZyB1
cCB0byB0aGUgZmlyc3QgY29sb24uCisgICAgc2l6ZV90IGhlYWRlciA9IGZpcnN0Q29sb24gLSBz
dGFydDsKKyAgICAvLyBUaGUgbmV3IHN0cmluZyBuZWVkcyB0byBiZSBsb25nIGVub3VnaCB0byBo
b2xkICdoZWFkZXInLCBwbHVzIHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZywgZXhjbHVkaW5n
CisgICAgLy8gYXQgbGVhc3Qgb25lICc6JywgYnV0IGluY2x1ZGluZyBhICdcMCcuIChUaGlzIGlz
IGNvbnNlcnZhdGl2ZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAnOicpLgorICAgIGNoYXIq
IGJ1ZmZlciA9IChjaGFyKiltYWxsb2MoaGVhZGVyICsgc3RybGVuKGZpcnN0Q29sb24gKyAxKSAr
IDEpOworICAgIC8vIENvcHkgJ2hlYWRlcicgY2hhcmFjdGVycywgc2V0IG91dHB1dCB0byBwb2lu
dCB0byB0aGUgZW5kIG9mIHRoaXMgJiBpbnB1dCB0byBwb2ludCBwYXN0IHRoZSBmaXJzdCAnOicu
CisgICAgbWVtY3B5KGJ1ZmZlciwgc3RhcnQsIGhlYWRlcik7CisgICAgY2hhciogb3V0cHV0ID0g
YnVmZmVyICsgaGVhZGVyOworICAgIGNvbnN0IGNoYXIqIGlucHV0ID0gc3RhcnQgKyBoZWFkZXIg
KyAxOworCisgICAgLy8gT24gZW50cnkgdG8gdGhlIGxvb3AsIHdlIGhhdmUgYWxyZWFkeSBza2lw
cGVkIG92ZXIgYSAnOicgZnJvbSB0aGUgaW5wdXQuCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgY2hhciBjOworICAgICAgICAvLyBTa2lwIG92ZXIgYW55IGFkZGl0aW9uYWwgJzoncy4gV2Un
bGwgbGVhdmUgYyBob2xkaW5nIHRoZSBuZXh0IGNoYXJhY3RlciBhZnRlciB0aGUKKyAgICAgICAg
Ly8gbGFzdCAnOicsIGFuZCBpbnB1dCBwb2ludGluZyBwYXN0IGMuCisgICAgICAgIHdoaWxlICgo
YyA9ICooaW5wdXQrKykpID09ICc6Jyk7CisgICAgICAgIC8vIENvcHkgdGhlIGNoYXJhY3Rlciwg
Y29udmVydGluZyB0byB1cHBlciBjYXNlIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gSWYgdGhl
IGNoYXJhY3RlciB3ZSBjb3B5IGlzICdcMCcsIHRoZW4gd2UncmUgZG9uZSEKKyAgICAgICAgaWYg
KCEoKihvdXRwdXQrKykgPSB0b3VwcGVyKGMpKSkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAg
ICAgICAgLy8gTG9vcCBvdmVyIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiAnOicuCisgICAgICAgIHdo
aWxlICgoYyA9ICooaW5wdXQrKykpICE9ICc6JykgeworICAgICAgICAgICAgLy8gQ29weSB0aGUg
Y2hhcmFjdGVyLgorICAgICAgICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciB3ZSBjb3B5IGlzICdc
MCcsIHRoZW4gd2UncmUgZG9uZSEKKyAgICAgICAgICAgIGlmICghKCoob3V0cHV0KyspID0gYykp
CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIC8vIElmIHdl
IGdldCBoZXJlLCB3ZSd2ZSBjb25zdW1lZCBhICc6JyAtIHdhc2gsIHJpbnNlLCByZXBlYXQuCisg
ICAgfQorZG9uZToKKyAgICBOU1N0cmluZyogcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOmJ1ZmZlcl07CisgICAgZnJlZShidWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKy8vIE1ha2UgYW4gb2JqZWN0IHRoYXQgaXMgaW4gYWxsIHdheXMgYXJlIGNvbXBsZXRl
bHkgdmFuaWxsYSBKYXZhU2NyaXB0IG9iamVjdCwKKy8vIG90aGVyIHRoYW4gdGhhdCBpdCBoYXMg
YSBuYXRpdmUgYnJhbmQgc2V0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgYnkgdGhlIGRlZmF1bHQK
Ky8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgY29tdmVyc2lvbi4KK3N0YXRpYyBKU1ZhbHVl
KiBjcmVhdGVPYmplY3RXaXRoQ3VzdG9tQnJhbmQoSlNDb250ZXh0KiBjb250ZXh0LCBOU1N0cmlu
ZyogYnJhbmQsIEpTQ2xhc3NSZWYgcGFyZW50Q2xhc3MgPSAwLCB2b2lkKiBwcml2YXRlRGF0YSA9
IDApCit7CisgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKKyAgICBkZWZpbml0aW9u
ID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBb
YnJhbmQgVVRGOFN0cmluZ107CisgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IHBhcmVudENs
YXNzOworICAgIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9u
KTsKKyAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdE1ha2UoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgY2xhc3NSZWYsIHByaXZhdGVEYXRhKTsKKyAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7CisgICAgcmV0dXJuIFtbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1
ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCisvLyBMb29rIGZvciBAb3B0aW9uYWwg
cHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNvbnRhaW5pbmcgYSBzZWxlY3RvciB0byBwcm9w
ZXJ0eQorLy8gbmFtZSBtYXBwaW5nLCBzZXBhcmF0ZWQgYnkgYSBfX0pTX0VYUE9SVF9BU19fIGRl
bGltaXRlci4KK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5KiBjcmVhdGVSZW5hbWVNYXAoUHJv
dG9jb2wqIHByb3RvY29sLCBCT09MIGlzSW5zdGFuY2VNZXRob2QpCit7CisgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSogcmVuYW1lTWFwID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XTsKKworICAgIGZvckVhY2hNZXRob2RJblByb3RvY29sKHByb3RvY29sLCBOTywgaXNJbnN0YW5j
ZU1ldGhvZCwgXihTRUwgc2VsLCBjb25zdCBjaGFyKil7CisgICAgICAgIE5TU3RyaW5nKiByZW5h
bWUgPSBAKHNlbF9nZXROYW1lKHNlbCkpOworICAgICAgICBOU1JhbmdlIHJhbmdlID0gW3JlbmFt
ZSByYW5nZU9mU3RyaW5nOkAiX19KU19FWFBPUlRfQVNfXyJdOworICAgICAgICBpZiAocmFuZ2Uu
bG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTlNT
dHJpbmcqIHNlbGVjdG9yID0gW3JlbmFtZSBzdWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9u
XTsKKyAgICAgICAgTlNVSW50ZWdlciBiZWdpbiA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVu
Z3RoOworICAgICAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtyZW5hbWUgbGVuZ3RoXSAtIGJlZ2lu
IC0gMTsKKyAgICAgICAgTlNTdHJpbmcqIG5hbWUgPSBbcmVuYW1lIHN1YnN0cmluZ1dpdGhSYW5n
ZTooTlNSYW5nZSl7IGJlZ2luLCBsZW5ndGggfV07CisgICAgICAgIHJlbmFtZU1hcFtzZWxlY3Rv
cl0gPSBuYW1lOworICAgIH0pOworCisgICAgcmV0dXJuIHJlbmFtZU1hcDsKK30KKworaW5saW5l
IHZvaWQgcHV0Tm9uRW51bWVyYWJsZShKU1ZhbHVlKiBiYXNlLCBOU1N0cmluZyogcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBbYmFzZSBkZWZpbmVQcm9wZXJ0eTpwcm9wZXJ0
eU5hbWUgZGVzY3JpcHRvcjpAeworICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5
OiB2YWx1ZSwKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JXcml0YWJsZUtleTogQFlFUywK
KyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JFbnVtZXJhYmxlS2V5OiBATk8sCisgICAgICAg
IEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5OiBAWUVTCisgICAgfV07Cit9CisK
Ky8vIFRoaXMgbWV0aG9kIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBzZXQgb2YgcmVxdWlyZWQgbWV0
aG9kcyBpbiB0aGUgcHJvdG9jb2wsIGFuZDoKKy8vICAqIERldGVybWluZSBhIHByb3BlcnR5IG5h
bWUgKGVpdGhlciB2aWEgYSByZW5hbWVNYXAgb3IgZGVmYXVsdCBjb252ZXJzaW9uKS4KKy8vICAq
IElmIGFuIGFjY2Vzc29yTWFwIGlzIHByb3ZpZGVkLCBhbmQgY29uYXRpbnMgYSB0aGlzIG5hbWUs
IHN0b3JlIHRoZSBtZXRob2QgaW4gdGhlIG1hcC4KKy8vICAqIE90aGVyd2lzZSwgaWYgdGhlIG9i
amVjdCBkb2Vzbid0IGFscmVhZHkgY29uYXRpbiBhIHByb3BlcnR5IHdpdGggbmFtZSwgY3JlYXRl
IGl0Lgorc3RhdGljIHZvaWQgY29weU1ldGhvZHNUb09iamVjdChKU0NvbnRleHQqIGNvbnRleHQs
IENsYXNzIG9iamNDbGFzcywgUHJvdG9jb2wqIHByb3RvY29sLCBCT09MIGlzSW5zdGFuY2VNZXRo
b2QsIEpTVmFsdWUqIG9iamVjdCwgTlNNdXRhYmxlRGljdGlvbmFyeSogYWNjZXNzb3JNZXRob2Rz
ID0gbmlsKQoreworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlbmFtZU1hcCA9IGNyZWF0ZVJl
bmFtZU1hcChwcm90b2NvbCwgaXNJbnN0YW5jZU1ldGhvZCk7CisKKyAgICBmb3JFYWNoTWV0aG9k
SW5Qcm90b2NvbChwcm90b2NvbCwgWUVTLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNv
bnN0IGNoYXIqIHR5cGVzKXsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZUNTdHIgPSBzZWxfZ2V0
TmFtZShzZWwpOworICAgICAgICBOU1N0cmluZyogbmFtZSA9IEAobmFtZUNTdHIpOworICAgICAg
ICBpZiAoYWNjZXNzb3JNZXRob2RzICYmIGFjY2Vzc29yTWV0aG9kc1tuYW1lXSkgeworICAgICAg
ICAgICAgSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2Qo
Y29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1ldGhvZCwgc2VsLCB0eXBl
cyk7CisgICAgICAgICAgICBpZiAoIW1ldGhvZCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBhY2Nlc3Nvck1ldGhvZHNbbmFtZV0gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbmFtZSA9IHJlbmFtZU1hcFtuYW1lXTsKKyAgICAgICAgICAgIGlmICghbmFtZSkKKyAgICAg
ICAgICAgICAgICBuYW1lID0gc2VsZWN0b3JUb1Byb3BlcnR5TmFtZShuYW1lQ1N0cik7CisgICAg
ICAgICAgICBpZiAoW29iamVjdCBoYXNQcm9wZXJ0eTpuYW1lXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBKU09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkZvck1ldGhvZChjb250ZXh0LCBvYmpjQ2xhc3MsIHByb3RvY29sLCBpc0luc3RhbmNlTWV0
aG9kLCBzZWwsIHR5cGVzKTsKKyAgICAgICAgICAgIGlmIChtZXRob2QpCisgICAgICAgICAgICAg
ICAgcHV0Tm9uRW51bWVyYWJsZShvYmplY3QsIG5hbWUsIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
Om1ldGhvZCBpbkNvbnRleHQ6Y29udGV4dF0pOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBb
cmVuYW1lTWFwIHJlbGVhc2VdOworfQorCitzdGF0aWMgYm9vbCBwYXJzZVByb3BlcnR5QXR0cmli
dXRlcyhvYmpjX3Byb3BlcnR5X3QgcHJvcGVydHksIGNoYXIqJiBnZXR0ZXJOYW1lLCBjaGFyKiYg
c2V0dGVyTmFtZSkKK3sKKyAgICBib29sIHJlYWRvbmx5ID0gZmFsc2U7CisgICAgdW5zaWduZWQg
YXR0cmlidXRlQ291bnQ7CisgICAgb2JqY19wcm9wZXJ0eV9hdHRyaWJ1dGVfdCogYXR0cmlidXRl
cyA9IHByb3BlcnR5X2NvcHlBdHRyaWJ1dGVMaXN0KHByb3BlcnR5LCAmYXR0cmlidXRlQ291bnQp
OworICAgIGlmIChhdHRyaWJ1dGVDb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICAgICAgc3dpdGNoICgqKGF0dHJp
YnV0ZXNbaV0ubmFtZSkpIHsKKyAgICAgICAgICAgIGNhc2UgJ0cnOgorICAgICAgICAgICAgICAg
IGdldHRlck5hbWUgPSBzdHJkdXAoYXR0cmlidXRlc1tpXS52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAgICBzZXR0ZXJO
YW1lID0gc3RyZHVwKGF0dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSAnUic6CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKGF0
dHJpYnV0ZXMpOworICAgIH0KKyAgICByZXR1cm4gcmVhZG9ubHk7Cit9CisKK3N0YXRpYyBjaGFy
KiBtYWtlU2V0dGVyTmFtZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHNpemVfdCBuYW1lTGVu
Z3RoID0gc3RybGVuKG5hbWUpOworICAgIGNoYXIqIHNldHRlck5hbWUgPSAoY2hhciopbWFsbG9j
KG5hbWVMZW5ndGggKyA1KTsgLy8gInNldCIgTmFtZSAiOlwwIgorICAgIHNldHRlck5hbWVbMF0g
PSAncyc7CisgICAgc2V0dGVyTmFtZVsxXSA9ICdlJzsKKyAgICBzZXR0ZXJOYW1lWzJdID0gJ3Qn
OworICAgIHNldHRlck5hbWVbM10gPSB0b3VwcGVyKCpuYW1lKTsKKyAgICBtZW1jcHkoc2V0dGVy
TmFtZSArIDQsIG5hbWUgKyAxLCBuYW1lTGVuZ3RoIC0gMSk7CisgICAgc2V0dGVyTmFtZVtuYW1l
TGVuZ3RoICsgM10gPSAnOic7CisgICAgc2V0dGVyTmFtZVtuYW1lTGVuZ3RoICsgNF0gPSAnXDAn
OworICAgIHJldHVybiBzZXR0ZXJOYW1lOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJvdG90eXBl
UHJvcGVydGllcyhKU0NvbnRleHQqIGNvbnRleHQsIENsYXNzIG9iamNDbGFzcywgUHJvdG9jb2wq
IHByb3RvY29sLCBKU1ZhbHVlKiBwcm90b3R5cGVWYWx1ZSkKK3sKKyAgICAvLyBGaXJzdCBnYXRo
ZXIgcHJvcHJldGllcyBpbnRvIHRoaXMgbGlzdCwgdGhlbiBoYW5kbGUgdGhlIG1ldGhvZHMgKGNh
cHR1cmluZyB0aGUgYWNjZXNzb3IgbWV0aG9kcykuCisgICAgc3RydWN0IFByb3BlcnR5IHsKKyAg
ICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgY2hhciogZ2V0dGVyTmFtZTsKKyAgICAg
ICAgY2hhciogc2V0dGVyTmFtZTsKKyAgICB9OworICAgIF9fYmxvY2sgV1RGOjpWZWN0b3I8UHJv
cGVydHk+IHByb3BlcnR5TGlzdDsKKworICAgIC8vIE1hcCByZWNvcmRpbmcgdGhlIG1ldGhvZHMg
dXNlZCBhcyBnZXR0ZXJzL3NldHRlcnMuCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYWNjZXNz
b3JNZXRob2RzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisKKyAgICAvLyBV
c2VmdWwgdmFsdWUuCisgICAgSlNWYWx1ZSogdW5kZWZpbmVkID0gW0pTVmFsdWUgdmFsdWVXaXRo
VW5kZWZpbmVkSW5Db250ZXh0OmNvbnRleHRdOworCisgICAgZm9yRWFjaFByb3BlcnR5SW5Qcm90
b2NvbChwcm90b2NvbCwgXihvYmpjX3Byb3BlcnR5X3QgcHJvcGVydHkpeworICAgICAgICBjaGFy
KiBnZXR0ZXJOYW1lID0gMDsKKyAgICAgICAgY2hhciogc2V0dGVyTmFtZSA9IDA7CisgICAgICAg
IGJvb2wgcmVhZG9ubHkgPSBwYXJzZVByb3BlcnR5QXR0cmlidXRlcyhwcm9wZXJ0eSwgZ2V0dGVy
TmFtZSwgc2V0dGVyTmFtZSk7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBwcm9wZXJ0eV9n
ZXROYW1lKHByb3BlcnR5KTsKKworICAgICAgICAvLyBBZGQgdGhlIG5hbWVzIG9mIHRoZSBnZXR0
ZXIgJiBzZXR0ZXIgbWV0aG9kcyB0byAKKyAgICAgICAgaWYgKCFnZXR0ZXJOYW1lKQorICAgICAg
ICAgICAgZ2V0dGVyTmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICAgICAgYWNjZXNzb3JNZXRob2Rz
W0AoZ2V0dGVyTmFtZSldID0gdW5kZWZpbmVkOworICAgICAgICBpZiAoIXJlYWRvbmx5KSB7Cisg
ICAgICAgICAgICBpZiAoIXNldHRlck5hbWUpCisgICAgICAgICAgICAgICAgc2V0dGVyTmFtZSA9
IG1ha2VTZXR0ZXJOYW1lKG5hbWUpOworICAgICAgICAgICAgYWNjZXNzb3JNZXRob2RzW0Aoc2V0
dGVyTmFtZSldID0gdW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSBw
cm9wZXJ0aWVzIHRvIGEgbGlzdC4KKyAgICAgICAgcHJvcGVydHlMaXN0LmFwcGVuZCgoUHJvcGVy
dHkpeyBuYW1lLCBnZXR0ZXJOYW1lLCBzZXR0ZXJOYW1lIH0pOworICAgIH0pOworCisgICAgLy8g
Q29weSBtZXRob2RzIHRvIHRoZSBwcm90b3R5cGUsIGNhcHR1cmluZyBhY2Nlc3NvcnMgaW4gdGhl
IGFjY2Vzc29yTWV0aG9kcyBtYXAuCisgICAgY29weU1ldGhvZHNUb09iamVjdChjb250ZXh0LCBv
YmpjQ2xhc3MsIHByb3RvY29sLCBZRVMsIHByb3RvdHlwZVZhbHVlLCBhY2Nlc3Nvck1ldGhvZHMp
OworCisgICAgLy8gSXRlcmF0ZSB0aGUgcHJvcGVydHlMaXN0ICYgZ2VuZXJhdGUgYWNjZXNzb3Ig
cHJvcGVydGllcy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TGlzdC5zaXpl
KCk7ICsraSkgeworICAgICAgICBQcm9wZXJ0eSYgcHJvcGVydHkgPSBwcm9wZXJ0eUxpc3RbaV07
CisKKyAgICAgICAgSlNWYWx1ZSogZ2V0dGVyID0gYWNjZXNzb3JNZXRob2RzW0AocHJvcGVydHku
Z2V0dGVyTmFtZSldOworICAgICAgICBmcmVlKHByb3BlcnR5LmdldHRlck5hbWUpOworICAgICAg
ICBBU1NFUlQoIVtnZXR0ZXIgaXNVbmRlZmluZWRdKTsKKworICAgICAgICBKU1ZhbHVlKiBzZXR0
ZXIgPSB1bmRlZmluZWQ7CisgICAgICAgIGlmIChwcm9wZXJ0eS5zZXR0ZXJOYW1lKSB7CisgICAg
ICAgICAgICBzZXR0ZXIgPSBhY2Nlc3Nvck1ldGhvZHNbQChwcm9wZXJ0eS5zZXR0ZXJOYW1lKV07
CisgICAgICAgICAgICBmcmVlKHByb3BlcnR5LnNldHRlck5hbWUpOworICAgICAgICAgICAgQVNT
RVJUKCFbc2V0dGVyIGlzVW5kZWZpbmVkXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFtwcm90b3R5cGVWYWx1ZSBkZWZpbmVQcm9wZXJ0eTpAKHByb3BlcnR5Lm5hbWUpIGRlc2NyaXB0
b3I6QHsKKyAgICAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OiBnZXR0ZXIsCisg
ICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleTogc2V0dGVyLAorICAgICAgICAg
ICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JFbnVtZXJhYmxlS2V5OiBATk8sCisgICAgICAgICAgICBK
U1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTogQFlFUworICAgICAgICB9XTsKKyAg
ICB9Cit9CisKK0BpbnRlcmZhY2UgSlNPYmpDQ2xhc3NJbmZvIDogTlNPYmplY3QgeworICAgIEpT
Q29udGV4dCogbV9jb250ZXh0OworICAgIENsYXNzIG1fY2xhc3M7CisgICAgYm9vbCBtX2Jsb2Nr
OworICAgIEpTQ2xhc3NSZWYgbV9jbGFzc1JlZjsKKyAgICBKU1ZhbHVlKiBtX3Byb3RvdHlwZTsK
KyAgICBKU1ZhbHVlKiBtX2NvbnN0cnVjdG9yOworfQorCistIChpZClpbml0V2l0aENvbnRleHQ6
KEpTQ29udGV4dCopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihK
U09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZvOworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JP
YmplY3Q6KGlkKW9iamVjdDsKKy0gKEpTVmFsdWUgKiljb25zdHJ1Y3RvcjsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gSlNPYmpDQ2xhc3NJbmZvCisKKy0gKGlkKWluaXRXaXRoQ29udGV4dDoo
SlNDb250ZXh0Kiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpT
T2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KK3sKKyAgICBbc3VwZXIgaW5pdF07CisKKyAg
ICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSBjbGFzc19nZXROYW1lKGNscyk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NsYXNzID0gY2xzOworICAgIG1fYmxvY2sgPSBbY2xzIGlz
U3ViY2xhc3NPZkNsYXNzOmdldE5TQmxvY2tDbGFzcygpXTsKKyAgICBKU0NsYXNzRGVmaW5pdGlv
biBkZWZpbml0aW9uOworICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsK
KyAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgICBkZWZpbml0aW9uLnBh
cmVudENsYXNzID0gd3JhcHBlckNsYXNzKCk7CisgICAgbV9jbGFzc1JlZiA9IEpTQ2xhc3NDcmVh
dGUoJmRlZmluaXRpb24pOworCisgICAgQVNTRVJUKChjbHMgPT0gW05TT2JqZWN0IGNsYXNzXSkg
PT0gIXN1cGVyQ2xhc3NJbmZvKTsKKyAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7CisgICAgICAg
IG1fY29uc3RydWN0b3IgPSBbY29udGV4dFtAIk9iamVjdCJdIHJldGFpbl07CisgICAgICAgIG1f
cHJvdG90eXBlID0gW21fY29uc3RydWN0b3JbQCJwcm90b3R5cGUiXSByZXRhaW5dOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvdG90eXBlL2NvbnN0cnVjdG9yIHBhaXIu
CisgICAgICAgIG1fcHJvdG90eXBlID0gY3JlYXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRl
eHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXNQcm90b3R5cGUiLCBjbGFzc05hbWVd
KTsKKyAgICAgICAgbV9jb25zdHJ1Y3RvciA9IGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChj
b250ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzQ29uc3RydWN0b3IiLCBjbGFz
c05hbWVdLCB3cmFwcGVyQ2xhc3MoKSwgW2NscyByZXRhaW5dKTsKKyAgICAgICAgcHV0Tm9uRW51
bWVyYWJsZShtX3Byb3RvdHlwZSwgQCJjb25zdHJ1Y3RvciIsIG1fY29uc3RydWN0b3IpOworICAg
ICAgICBwdXROb25FbnVtZXJhYmxlKG1fY29uc3RydWN0b3IsIEAicHJvdG90eXBlIiwgbV9wcm90
b3R5cGUpOworCisgICAgICAgIFByb3RvY29sKiBleHBvcnRQcm90b2NvbCA9IGdldEpTRXhwb3J0
UHJvdG9jb2woKTsKKyAgICAgICAgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wo
Y2xzLCBleHBvcnRQcm90b2NvbCwgXihQcm90b2NvbCogcHJvdG9jb2wpeworICAgICAgICAgICAg
Y29weVByb3RvdHlwZVByb3BlcnRpZXMoY29udGV4dCwgY2xzLCBwcm90b2NvbCwgbV9wcm90b3R5
cGUpOworICAgICAgICAgICAgY29weU1ldGhvZHNUb09iamVjdChjb250ZXh0LCBjbHMsIHByb3Rv
Y29sLCBOTywgbV9jb25zdHJ1Y3Rvcik7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFNldCBb
UHJvdG90eXBlXS4KKyAgICAgICAgbV9wcm90b3R5cGVbQCJfX3Byb3RvX18iXSA9IHN1cGVyQ2xh
c3NJbmZvLT5tX3Byb3RvdHlwZTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgSlNDbGFzc1JlbGVhc2UobV9jbGFzc1JlZik7CisgICAgW21f
cHJvdG90eXBlIHJlbGVhc2VdOworICAgIFttX2NvbnN0cnVjdG9yIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9i
amVjdAoreworICAgIEFTU0VSVChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pOworICAg
IEFTU0VSVChtX2Jsb2NrID09IFtvYmplY3QgaXNLaW5kT2ZDbGFzczpnZXROU0Jsb2NrQ2xhc3Mo
KV0pOworICAgIGlmIChtX2Jsb2NrKSB7CisgICAgICAgIGlmIChKU09iamVjdFJlZiBtZXRob2Qg
PSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKG1fY29udGV4dCwgb2JqZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTptZXRob2QgaW5Db250ZXh0Om1f
Y29udGV4dF07CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBwcm90b3R5cGVWYWx1ZSA9IHZhbHVl
SW50ZXJuYWxWYWx1ZShtX3Byb3RvdHlwZSk7CisgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChj
b250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29udGV4dCksIHByb3RvdHlwZVZhbHVlKSk7CisgICAg
SlNPYmplY3RSZWYgcHJvdG90eXBlID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENv
bnRleHQobV9jb250ZXh0KSwgcHJvdG90eXBlVmFsdWUsIDApOworCisgICAgSlNPYmplY3RSZWYg
d3JhcHBlciA9IEpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KG1fY29udGV4dCks
IG1fY2xhc3NSZWYsIFtvYmplY3QgcmV0YWluXSk7CisgICAgSlNPYmplY3RTZXRQcm90b3R5cGUo
Y29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCB3cmFwcGVyLCBwcm90b3R5cGUpOwor
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTp3cmFwcGVyIGluQ29udGV4dDptX2Nv
bnRleHRdOworfQorCistIChKU1ZhbHVlICopY29uc3RydWN0b3IKK3sKKyAgICByZXR1cm4gbV9j
b25zdHJ1Y3RvcjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNXcmFwcGVyTWFwIHsK
KyAgICBKU0NvbnRleHQgKm1fY29udGV4dDsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBtX2Ns
YXNzTWFwOworfQorCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dAor
eworICAgIFtzdXBlciBpbml0XTsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY2xh
c3NNYXAgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbbV9jbGFzc01hcCByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEpTT2JqQ0NsYXNzSW5mbyopY2xhc3NJbmZv
Rm9yQ2xhc3M6KENsYXNzKWNscworeworICAgIGlmICghY2xzKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSBjcmVhdGVkIGEgSlNPYmpDQ2xhc3NJ
bmZvIGZvciB0aGlzIENsYXNzLgorICAgIGlmIChKU09iakNDbGFzc0luZm8qIGNsYXNzSW5mbyA9
IChKU09iakNDbGFzc0luZm8qKW1fY2xhc3NNYXBbY2xzXSkKKyAgICAgICAgcmV0dXJuIGNsYXNz
SW5mbzsKKworICAgIC8vIFNraXAgaW50ZXJuYWwgY2xhc3NlcyBiZWdpbmluZyB3aXRoICdfJyAt
IGp1c3QgY29weSBsaW5rIHRvIHRoZSBwYXJlbnQgY2xhc3MncyBpbmZvLgorICAgIGlmICgnXycg
PT0gKmNsYXNzX2dldE5hbWUoY2xzKSkKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9
IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MoY2xzKV07CisKKyAg
ICByZXR1cm4gbV9jbGFzc01hcFtjbHNdID0gW1tbSlNPYmpDQ2xhc3NJbmZvIGFsbG9jXSBpbml0
V2l0aENvbnRleHQ6bV9jb250ZXh0IGZvckNsYXNzOmNscyBzdXBlckNsYXNzSW5mbzpbc2VsZiBj
bGFzc0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldXSBhdXRvcmVsZWFzZV07
Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QKK3sKKyAgICBK
U1ZhbHVlKiB3cmFwcGVyID0gb2JqY19nZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250
ZXh0KTsKKyAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLmNvbnRleHQpCisgICAgICAgIHJldHVy
biB3cmFwcGVyOworCisgICAgaWYgKGNsYXNzX2lzTWV0YUNsYXNzKG9iamVjdF9nZXRDbGFzcyhv
YmplY3QpKSkKKyAgICAgICAgd3JhcHBlciA9IFtbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczooQ2xh
c3Mpb2JqZWN0XSBjb25zdHJ1Y3Rvcl07CisgICAgZWxzZSB7CisgICAgICAgIEpTT2JqQ0NsYXNz
SW5mbyogY2xhc3NJbmZvID0gW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6W29iamVjdCBjbGFzc11d
OworICAgICAgICB3cmFwcGVyID0gW2NsYXNzSW5mbyB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF07
CisgICAgfQorCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDU4OTEKKyAgICAvLyBUaGlzIGdlbmVyYWwgYXBwcm9hY2ggdG8gd3JhcHBlciBj
YWNoaW5nIGlzIHByZXR0eSBlZmZlY3RpdmUsIGJ1dCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgcHJv
YmxlbXM6CisgICAgLy8gKDEpIEZvciBpbW1vcnRhbCBvYmplY3RzIEpTVmFsdWVzIHdpbGwgZWZm
ZWN0aXZlbHkgbGVhaiBhbmQgdGhpcyByZXN1bHRzIGluIGVycm9yIG91dHB1dCBiZWluZyBsb2dn
ZWQgLSB3ZSBzaG91bGQgYXZvaWQgYWRkaW5nIGFzc29jaWF0ZWQgb2JqZWN0cyB0byBpbW1vcnRh
bCBvYmplY3RzLgorICAgIC8vICgyKSBBIGxvbmcgbGl2ZWQgb2JqZWN0IG1heSByYWNrIHVwIG1h
bnkgSlNWYWx1ZXMuIFdoZW4gdGhlIGNvbnRleHRzIGFyZSByZWxlYXNlZCB0aGVzZSB3aWxsIHVu
cHJvY3RlY3QgdGhlIGFzc29jaWF0ZWQgSmF2YVNjcmlwdCBvYmplY3RzLAorICAgIC8vICAgICBi
dXQgc3RpbGwsIHdvdWxkIHByb2JhYmx5IG5pY2VyIGlmIHdlIG1hZGUgaXQgc28gdGhhdCBvbmx5
IG9uZSBhc3NvY2lhdGVkIG9iamVjdCB3YXMgcmVxdWlyZWQsIGJyb2FkY2FzdGluZyBvYmplY3Qg
ZGVhbGxvYy4KKyAgICBvYmpjX3NldEFzc29jaWF0ZWRPYmplY3Qob2JqZWN0LCBtX2NvbnRleHQs
IHdyYXBwZXIsIE9CSkNfQVNTT0NJQVRJT05fUkVUQUlOKTsKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKworQGVuZAorCitpZCB0cnlVbndyYXBPYmpjT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIHZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICAvL0FTU0VSVCghZXhjZXB0aW9uKTsKKyAgICBp
ZiAoSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCBvYmplY3QsIHdyYXBwZXJDbGFzcygp
KSkKKyAgICAgICAgcmV0dXJuIChpZClKU09iamVjdEdldFByaXZhdGUob2JqZWN0KTsKKyAgICBp
ZiAoaWQgdGFyZ2V0ID0gdHJ5VW53cmFwQmxvY2soY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRhcmdldDsKKyAgICByZXR1cm4gbmlsOworfQorCitQcm90b2NvbCogZ2V0SlNFeHBv
cnRQcm90b2NvbCgpCit7CisgICAgc3RhdGljIFByb3RvY29sKiBwcm90b2NvbCA9IDA7CisgICAg
aWYgKCFwcm90b2NvbCkKKyAgICAgICAgcHJvdG9jb2wgPSBvYmpjX2dldFByb3RvY29sKCJKU0V4
cG9ydCIpOworICAgIHJldHVybiBwcm90b2NvbDsKK30KKworQ2xhc3MgZ2V0TlNCbG9ja0NsYXNz
KCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgY2xzID0gMDsKKyAgICBpZiAoIWNscykKKyAgICAgICAg
Y2xzID0gb2JqY19nZXRDbGFzcygiTlNCbG9jayIpOworICAgIHJldHVybiBjbHM7Cit9CisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZhU2NyaXB0Q29yZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlwdENvcmUuaAko
cmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZhU2NyaXB0
Q29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw0ICsyOSwxMyBAQAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Z1JlZkNGLmg+CiAKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkpTQ29udGV4
dC5oIgorI2ltcG9ydCAiQVBJSlNWYWx1ZS5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZS5o
IgorI2ltcG9ydCAiSlNFeHBvcnQuaCIKKworI2VuZGlmCisKICNlbmRpZiAvKiBKYXZhU2NyaXB0
Q29yZV9oICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2Fs
bGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVE
CisKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCos
IENsYXNzLCBQcm90b2NvbCosIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMLCBjb25zdCBjaGFy
KiB0eXBlcyk7CitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29u
dGV4dCosIGlkKTsKKworaWQgdHJ5VW53cmFwQmxvY2soSlNHbG9iYWxDb250ZXh0UmVmLCBKU09i
amVjdFJlZik7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKworI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQVBJ
U2hpbXMuaCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1wb3J0ICJKU0Jsb2NrQWRhcHRvci5oIgor
I2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgor
I2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJPYmpDQ2FsbGJhY2tGdW5jdGlv
bi5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgIm9iamMvcnVudGlt
ZS5oIgorI2ltcG9ydCAid3RmL1JldGFpblB0ci5oIgorCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHNldChOU0ludm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpTVmFsdWVS
ZWYsIEpTVmFsdWVSZWYqKSA9IDA7CisKKyAgICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gbV9u
ZXh0OworfTsKKworQ2FsbGJhY2tBcmd1bWVudDo6fkNhbGxiYWNrQXJndW1lbnQoKQoreworfQor
CitjbGFzcyBDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbiA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50
ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50KTsKKyAgICAg
ICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJd
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDYWxsYmFja0FyZ3Vt
ZW50SW50ZWdlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVU
b051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0
aW9uKSk7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
Q2FsbGJhY2tBcmd1bWVudERvdWJsZSA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRp
b24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1
bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEpTVmFsdWUg
OiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAg
ICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmFyZ3VtZW50IGluQ29u
dGV4dDpjb250ZXh0XTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1l
bnRJZCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikKKyAgICB7Cisg
ICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudCk7CisgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyA6IHB1YmxpYyBD
YWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyhD
bGFzcyBjbHMpCisgICAgICAgIDogQ2FsbGJhY2tBcmd1bWVudCgpCisgICAgICAgICwgbV9jbGFz
cyhjbHMpCisgICAgeworICAgICAgICBbbV9jbGFzcyByZXRhaW5dOworICAgIH0KKworICAgIH5D
YWxsYmFja0FyZ3VtZW50T2ZDbGFzcygpCisgICAgeworICAgICAgICBbbV9jbGFzcyByZWxlYXNl
XTsKKyAgICB9CisKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50
ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBKU0dsb2JhbENvbnRl
eHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICBp
ZCBvYmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgYXJndW1lbnQpOworICAgICAgICBp
ZiAob2JqZWN0ICYmIFtvYmplY3QgaXNLaW5kT2ZDbGFzczptX2NsYXNzXSkgeworICAgICAgICAg
ICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChKU1ZhbHVl
SXNOdWxsKGN0eCwgYXJndW1lbnQpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjdHgsIGFyZ3VtZW50
KSkgeworICAgICAgICAgICAgb2JqZWN0ID0gbmlsOworICAgICAgICAgICAgW2ludm9jYXRpb24g
c2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNy
ZWF0ZVR5cGVFcnJvcih0b0pTKGN0eCksICJBcmd1bWVudCBkb2VzIG5vdCBtYXRjaCBPYmplY3Rp
dmUtQyBDbGFzcyIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xhc3MgbV9jbGFzczsKK307
CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU051bWJlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZCB2YWx1ZSA9
IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQs
IGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdElu
ZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50
TlNTdHJpbmcgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpT
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvU3RyaW5nKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
fQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZSA6IHB1YmxpYyBDYWxsYmFja0Fy
Z3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24s
IE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZCB2YWx1
ZSA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50
LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dE5TQXJyYXkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpT
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvQXJyYXkoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZv
Y2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9
Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDogcHVibGljIENhbGxi
YWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFs
dWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIGlk
IHZhbHVlID0gdmFsdWVUb0RpY3Rpb25hcnkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50
OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxs
YmFja0FyZ3VtZW50U3RydWN0IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgor
ICAgIENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2Nh
dGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52
b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50
OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxp
Z25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChj
aGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlv
bikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgW21fY29udmVyc2lvbklu
dm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgW21fY29udmVy
c2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDp2YWx1ZV07CisgICAgICAgIFttX2NvbnZl
cnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYnVmZmVyXTsKKyAgICAgICAgW2ludm9j
YXRpb24gc2V0QXJndW1lbnQ6bV9idWZmZXIgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
fQorCitwcml2YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsK
KyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitjbGFz
cyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50
IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayhKU0Jsb2NrQWRh
cHRvciogYWRhcHRvcikKKyAgICAgICAgOiBtX2FkYXB0b3IoYWRhcHRvcikKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgfkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKCkKKyAg
ICB7CisgICAgICAgIFttX2FkYXB0b3IgcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIGlkIGJsb2NrID0gW21fYWRhcHRvciBibG9ja0Zyb21WYWx1
ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dCB3aXRoRXhjZXB0aW9uOmV4Y2VwdGlvbl07Cisg
ICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZibG9jayBhdEluZGV4OmFyZ3VtZW50TnVt
YmVyXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNCbG9ja0FkYXB0b3IqIG1fYWRhcHRvcjsK
K307CisKK2NsYXNzIEFyZ3VtZW50VHlwZURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IENhbGxiYWNrQXJndW1lbnQqIFJlc3VsdFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJbnRlZ2VyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEludGVnZXI8VD47CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlRG91YmxlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudERvdWJsZTxUPjsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IENhbGxiYWNrQXJndW1lbnRCb29sZWFuOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRU
eXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgp
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRJZDsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFzcyhjb25zdCBjaGFyKiBiZWdpbiwgY29u
c3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5k
KTsKKyAgICAgICAgQ2xhc3MgY2xzID0gb2JqY19nZXRDbGFzcyhjb3B5KTsKKyAgICAgICAgaWYg
KCFjbHMpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgIGlmIChjbHMgPT0gW0pT
VmFsdWUgY2xhc3NdKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNTdHJpbmcgY2xhc3NdKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmc7CisgICAgICAgIGlmIChjbHMgPT0g
W05TTnVtYmVyIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVu
dE5TTnVtYmVyOworICAgICAgICBpZiAoY2xzID09IFtOU0RhdGUgY2xhc3NdKQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEYXRlOworICAgICAgICBpZiAoY2xzID09
IFtOU0FycmF5IGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVu
dE5TQXJyYXk7CisgICAgICAgIGlmIChjbHMgPT0gW05TRGljdGlvbmFyeSBjbGFzc10pCisgICAg
ICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk7CisKKyAgICAg
ICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyhjbHMpOworICAgIH0KKworICAg
IHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hh
ciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayhbW0pTQmxvY2tB
ZGFwdG9yIGFsbG9jXSBpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3RvY29sOmNvcHldKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJl
Z2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJl
Z2luLCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVU
b1R5cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFj
a0FyZ3VtZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1cm4gbmlsOwor
ICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5DYWxsYmFja1Jlc3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgSlNWYWx1ZVJl
ZiBnZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiopID0gMDsKK307CisK
K2NsYXNzIENhbGxiYWNrUmVzdWx0Vm9pZCA6IHB1YmxpYyBDYWxsYmFja1Jlc3VsdCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpOworICAgIH0KK307CisK
K2NsYXNzIENhbGxiYWNrUmVzdWx0SWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWU7
CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJl
dHVybiBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tSZXN1bHROdW1lcmljIDogcHVibGljIENhbGxi
YWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2Nh
dGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7
CisgICAgICAgIFQgdmFsdWU7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2
YWx1ZV07CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCAoZG91YmxlKXZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxs
YmFja1Jlc3VsdEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVibGljOgorICAg
IHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAg
ICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2YWx1
ZSk7CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tSZXN1bHRTdHJ1Y3QgOiBwdWJsaWMgQ2Fs
bGJhY2tSZXN1bHQgeworcHVibGljOgorICAgIENhbGxiYWNrUmVzdWx0U3RydWN0KE5TSW52b2Nh
dGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAg
ICAgICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAg
eworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJ
bnRlZ2VyIHNpemUsIGFsaWdubWVudDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVu
Y29kZWRUeXBlLCAmc2l6ZSwgJmFsaWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAg
ICAgICBtX2FsbG9jYXRpb24gPSAoY2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAg
ICAgICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX2FsbG9jYXRpb24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFja1Jlc3VsdFN0cnVjdCgpCisgICAgeworICAg
ICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiByZWxlYXNlXTsKKyAgICAgICAgZnJlZShtX2Fs
bG9jYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAg
ICB7CisgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOm1fYWxsb2NhdGlvbl07CisK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9u
IGF0SW5kZXg6Ml07CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50
OiZjb250ZXh0IGF0SW5kZXg6M107CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGlu
dm9rZVdpdGhUYXJnZXQ6W0pTVmFsdWUgY2xhc3NdXTsKKworICAgICAgICBKU1ZhbHVlKiB2YWx1
ZTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVl
XTsKKyAgICAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIE5TSW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBj
aGFyKiBtX2J1ZmZlcjsKKyAgICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitjbGFzcyBSZXN1
bHRUeXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQ2FsbGJhY2tSZXN1bHQqIFJl
c3VsdFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZXN1bHRU
eXBlIHR5cGVJbnRlZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tSZXN1
bHROdW1lcmljPFQ+OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Rh
dGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENh
bGxiYWNrUmVzdWx0TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0
eXBlQm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0Qm9vbGVh
bjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlVm9pZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVzdWx0Vm9pZDsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVzdWx0VHlwZSB0eXBlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jl
c3VsdElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFj
a1Jlc3VsdElkKCk7CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJsb2NrKGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tSZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVTdHJ1Y3Qo
Y29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmlu
Z1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CisgICAgICAgIGlmIChOU0ludm9jYXRpb24qIGludm9j
YXRpb24gPSB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgICAgICByZXR1
cm4gbmV3IENhbGxiYWNrUmVzdWx0U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICBy
ZXR1cm4gbmlsOworICAgIH0KK307CisKK2VudW0gQ2FsbGJhY2tUeXBlIHsKKyAgICBDYWxsYmFj
a0luc3RhbmNlTWV0aG9kLAorICAgIENhbGxiYWNrQ2xhc3NNZXRob2QsCisgICAgQ2FsbGJhY2tC
bG9jaworfTsKKworY2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24geworcHVibGljOgorICAgIE9i
akNDYWxsYmFja0Z1bmN0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFzcywgUGFzc093blB0
cjxDYWxsYmFja0FyZ3VtZW50PiBhcmd1bWVudHMsIFBhc3NPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+
IHJlc3VsdCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX2luc3RhbmNlQ2xhc3MoW2luc3RhbmNlQ2xhc3MgcmV0YWluXSkK
KyAgICAgICAgLCBtX2ludm9jYXRpb24oaW52b2NhdGlvbikKKyAgICAgICAgLCBtX2FyZ3VtZW50
cyhhcmd1bWVudHMpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCB8fCBpbnN0YW5jZUNsYXNzKTsK
KyAgICB9CisKKyAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgW21f
aW5zdGFuY2VDbGFzcyByZWxlYXNlXTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGNhbGwoSlND
b250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKKworICAgIEpTQ29udGV4dCogY29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9j
b250ZXh0LmdldCgpOworICAgIH0KKworICAgIGlkIHdyYXBwZWRCbG9jaygpCisgICAgeworICAg
ICAgICByZXR1cm4gbV90eXBlID09IENhbGxiYWNrQmxvY2sgPyBbbV9pbnZvY2F0aW9uIHRhcmdl
dF0gOiBuaWw7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYWtDb250ZXh0UmVmIG1fY29udGV4
dDsKKyAgICBDYWxsYmFja1R5cGUgbV90eXBlOworICAgIENsYXNzIG1faW5zdGFuY2VDbGFzczsK
KyAgICBXVEY6OlJldGFpblB0cjxOU0ludm9jYXRpb24+IG1faW52b2NhdGlvbjsKKyAgICBPd25Q
dHI8Q2FsbGJhY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CisgICAgT3duUHRyPENhbGxiYWNrUmVz
dWx0PiBtX3Jlc3VsdDsKK307CisKK3N0YXRpYyB2b2lkIG9iakNDYWxsYmFja0Z1bmN0aW9uRmlu
YWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIGRlbGV0ZSAoT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxsZXJD
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBSZXRha2UgdGhlIEFQSSBsb2NrIC0gd2UgbmVlZCB0
aGlzIGZvciBhIGZldyByZWFzb25zOgorICAgIC8vICgxKSBXZSBkb24ndCB3YW50IHRvIHN1cHBv
cnQgdGhlIEMtQVBJJ3MgY29uZnVzaW5nIGRyb3BzLWxvY2tzLW9uY2UgcG9saWN5IC0gc2hvdWxk
IG9ubHkgZHJvcCBsb2NrcyBpZiB3ZSBjYW4gZG8gc28gcmVjdXJzaXZleS4KKyAgICAvLyAoMikg
V2UncmUgY2FsaW5nIHNvbWUgSlNDIGludGVybmFscyB0aGF0IHJlcXVpcmUgdXMgdG8gYmUgb24g
dGhlICdpbnNpZGUnIC0gZS5nLiBjcmVhdGVUeXBlRXJyb3IuCisgICAgLy8gKDMpIFdlIG5lZWQg
dG8gYmUgbG9ja2VkIChwZXIgY29udGV4dCB3b3VsZCBiZSBmaW5lKSBhZ2FpbnN0IGNvbmZsaWN0
aW5nIHVzZ2FlIG9mIHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbidzIE5TSW52b2NhdGlvbi4KKyAg
ICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250ZXh0KSk7CisKKyAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24q
KUpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbik7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
Y2FsbGJhY2stPmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTQKKyAgICAg
ICAgLy8gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRleHQgYmUgcmV0YWluZWQs
IGl0IHdvdWxkIHByb2JhYmx5IGJlIG1vcmUKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgdG8gdXNl
IGEgbmV3IEpTQ29udGV4dCBpbnN0YW5jZSAoY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeSkuCisg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNhbGxl
ckNvbnRleHQpLCAiT2JqZWN0aXZlLUMgY2FsbGJhY2sgZnVuY3Rpb24gY29udGV4dCByZWxlYXNl
ZCIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNhbGxlckNvbnRleHQp
OworICAgIH0KKworICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7CisgICAgSlNWYWx1ZVJl
ZiByZXN1bHQ7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtjb250ZXh0IGJlZ2lu
Q2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTp0aGlzT2JqZWN0IGFyZ3Vt
ZW50Q291bnQ6YXJndW1lbnRDb3VudCBhcmd1bWVudHM6YXJndW1lbnRzXTsKKyAgICAgICAgcmVz
dWx0ID0gY2FsbGJhY2stPmNhbGwoY29udGV4dCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzLCBleGNlcHRpb24pOworICAgICAgICBpZiAoY29udGV4dC5leGNlcHRpb24pCisg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdmFsdWVJbnRlcm5hbFZhbHVlKGNvbnRleHQuZXhjZXB0
aW9uKTsKKyAgICAgICAgW2NvbnRleHQgZW5kQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tEYXRh
XTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpTQ2xhc3NSZWYgb2Jq
Q0NhbGxiYWNrRnVuY3Rpb25DbGFzcygpCit7CisgICAgc3RhdGljIFNwaW5Mb2NrIGluaXRMb2Nr
ID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigm
aW5pdExvY2spOworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSAwOworCisgICAg
aWYgKCFjbGFzc1JlZikgeworICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOwor
ICAgICAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgICAgIGRl
ZmluaXRpb24uY2xhc3NOYW1lID0gIkZ1bmN0aW9uIjsKKyAgICAgICAgZGVmaW5pdGlvbi5maW5h
bGl6ZSA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemU7CisgICAgICAgIGRlZmluaXRpb24u
Y2FsbEFzRnVuY3Rpb24gPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uOworICAg
ICAgICBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0KKworICAg
IHJldHVybiBjbGFzc1JlZjsKK30KKworSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCk7CisKKyAgICBzaXplX3QgZmlyc3RBcmd1bWVudDsKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDogeworICAgICAg
ICBpZCB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGN0eCwgdGhpc09iamVjdCk7CisgICAg
ICAgIGlmICghdGFyZ2V0IHx8ICFbdGFyZ2V0IGlzS2luZE9mQ2xhc3M6bV9pbnN0YW5jZUNsYXNz
XSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoY3R4KSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9iamVjdGl2ZS1DIGluc3Rh
bmNlIG1ldGhvZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOworICAgICAgICB9CisgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07
CisgICAgfQorICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKKyAgICAgICAgZmlyc3RBcmd1
bWVudCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbGJhY2tCbG9jazoKKyAgICAg
ICAgZmlyc3RBcmd1bWVudCA9IDE7CisgICAgfQorCisgICAgc2l6ZV90IGFyZ3VtZW50TnVtYmVy
ID0gMDsKKyAgICBmb3IgKENhbGxiYWNrQXJndW1lbnQqIGFyZ3VtZW50ID0gbV9hcmd1bWVudHMu
Z2V0KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQuZ2V0KCkpIHsKKyAg
ICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IGFyZ3VtZW50TnVtYmVyIDwgYXJndW1lbnRDb3VudCA/
IGFyZ3VtZW50c1thcmd1bWVudE51bWJlcl0gOiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwor
ICAgICAgICBhcmd1bWVudC0+c2V0KG1faW52b2NhdGlvbi5nZXQoKSwgYXJndW1lbnROdW1iZXIg
KyBmaXJzdEFyZ3VtZW50LCBjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYg
KCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKKyAgICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICB9CisKKyAgICBbbV9pbnZvY2F0aW9u
IGludm9rZV07CisKKyAgICByZXR1cm4gbV9yZXN1bHQtPmdldChtX2ludm9jYXRpb24uZ2V0KCks
IGNvbnRleHQsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBib29sIGJsb2NrU2lnbmF0dXJlQ29u
dGFpbnNDbGFzcygpCit7CisgICAgZW51bSBDaGVja1Jlc3VsdCB7CisgICAgICAgIENoZWNrUmVz
dWx0RmFsc2UsCisgICAgICAgIENoZWNrUmVzdWx0VHJ1ZSwKKyAgICAgICAgQ2hlY2tSZXN1bHRV
bmtub3duCisgICAgfTsKKyAgICBzdGF0aWMgZW51bSBDaGVja1Jlc3VsdCBjaGVjayA9IENoZWNr
UmVzdWx0VW5rbm93bjsKKyAgICBpZiAoY2hlY2sgPT0gQ2hlY2tSZXN1bHRVbmtub3duKSB7Cisg
ICAgICAgIGlkIGJsb2NrID0gXihOU1N0cmluZyAqc3RyaW5nKXsgcmV0dXJuIHN0cmluZzsgfTsK
KyAgICAgICAgY2hlY2sgPSBfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykgJiYgc3Ryc3RyKF9C
bG9ja19zaWduYXR1cmUoYmxvY2spLCAiTlNTdHJpbmciKSA/IENoZWNrUmVzdWx0VHJ1ZSA6IENo
ZWNrUmVzdWx0RmFsc2U7CisgICAgfQorICAgIHJldHVybiAoYm9vbCljaGVjazsKK30KKworaW5s
aW5lIGJvb2wgc2tpcE51bWJlcihjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgaWYgKCFp
c2RpZ2l0KCpwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB3aGlsZShpc2Rp
Z2l0KCorK3Bvc2l0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBKU09iamVj
dFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oSlNDb250ZXh0KiBjb250ZXh0
LCBOU0ludm9jYXRpb24qIGludm9jYXRpb24sIENhbGxiYWNrVHlwZSB0eXBlLCBDbGFzcyBpbnN0
YW5jZUNsYXNzLCBjb25zdCBjaGFyKiBzaWduYXR1cmVXaXRoT2JqY0NsYXNzZXMpCit7CisgICAg
Y29uc3QgY2hhciogcG9zaXRpb24gPSBzaWduYXR1cmVXaXRoT2JqY0NsYXNzZXM7CisKKyAgICBP
d25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0UHRyKHBhcnNlT2JqQ1R5cGU8UmVz
dWx0VHlwZURlbGVnYXRlPihwb3NpdGlvbikpOworICAgIGlmICghcmVzdWx0IHx8ICFza2lwTnVt
YmVyKHBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDoKKyAgICBjYXNlIENhbGxiYWNrQ2xh
c3NNZXRob2Q6CisgICAgICAgIGlmICgnQCcgIT0gKihwb3NpdGlvbisrKSB8fCAhc2tpcE51bWJl
cihwb3NpdGlvbikgfHwgJzonICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBOdW1iZXIocG9zaXRp
b24pKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
YWxsYmFja0Jsb2NrOgorICAgICAgICBpZiAoKCdAJyAhPSAqKHBvc2l0aW9uKyspKSB8fCAoJz8n
ICE9ICoocG9zaXRpb24rKykpIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSB8fCAoIWJsb2NrU2ln
bmF0dXJlQ29udGFpbnNDbGFzcygpICYmIHN0cmNocihwb3NpdGlvbiwgJ0AnKSkpCisgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBPd25QdHI8Q2Fs
bGJhY2tBcmd1bWVudD4gYXJndW1lbnRzID0gMDsKKyAgICBPd25QdHI8Q2FsbGJhY2tBcmd1bWVu
dD4qIG5leHRBcmd1bWVudCA9ICZhcmd1bWVudHM7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3Vu
dCA9IDA7CisgICAgd2hpbGUgKCpwb3NpdGlvbikgeworICAgICAgICBPd25QdHI8Q2FsbGJhY2tB
cmd1bWVudD4gYXJndW1lbnQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPEFyZ3VtZW50VHlwZURl
bGVnYXRlPihwb3NpdGlvbikpOworICAgICAgICBpZiAoIWFyZ3VtZW50IHx8ICFza2lwTnVtYmVy
KHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgKm5leHRBcmd1
bWVudCA9IGFyZ3VtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgbmV4dEFyZ3VtZW50ID0gJigqbmV4
dEFyZ3VtZW50KS0+bV9uZXh0OworICAgICAgICArK2FyZ3VtZW50Q291bnQ7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4
OTIKKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBhIHJlZ3VsYXIgaG9zdCBmdW5jdGlvbiwg
cmF0aGVyIHRoYW4gYSBjYWxsYWJsZSBDIEFQSSBvYmplY3QuCisgICAgLy8gUGF0Y2ggaW4gdGhl
IHJpZ2h0IGxlbmd0aCAmIFtQcm90b3R5cGVdIHZhbHVlcyBmb3Igbm93LCBidXQgc2hvdWxkIGZp
eCB0aGlzLgorICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyBjdXJyZW50bHkgZmFp
bHMsIHNpbmNlIHRoaXMgaXMgbm90IHlldCBhIHN1YmNsYXNzIG9mIGZ1bmN0b24sIGJ1dCBjYWxs
ICYgYXBwbHkgZG8gd29yay4KKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbk9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKCksIG5ldyBPYmpDQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBpbnZvY2F0aW9u
LCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1bWVudHMucmVsZWFzZSgpLCByZXN1bHQucmVsZWFz
ZSgpKSk7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5j
dGlvbk9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgdmFsdWVbQCJsZW5ndGgiXSA9IEAo
YXJndW1lbnRDb3VudCk7CisgICAgdmFsdWVbQCJfX3Byb3RvX18iXSA9IGNvbnRleHRbQCJGdW5j
dGlvbiJdW0AicHJvdG90eXBlIl07CisgICAgdmFsdWVbQCJ0b1N0cmluZyJdID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24oKXsgcmV0dXJuICciCisgICAgICAgICJmdW5jdGlv
biA8T2JqZWN0aXZlLUM+KCkgeyIgIlxcbiIKKyAgICAgICAgIiAgICBbbmF0aXZlIGNvZGVdIiAg
ICAgICAgICAiXFxuIgorICAgICAgICAifSIgICAgICAgICAgICAgICAgICAgICAgICAgICJcXG4i
CisgICAgIid9KSJdOworICAgIHJldHVybiBmdW5jdGlvbk9iamVjdDsKK30KKworSlNPYmplY3RS
ZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFz
cyBjbHMsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBTRUwgc2Vs
LCBjb25zdCBjaGFyKiB0eXBlcykKK3sKKyAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBb
TlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25h
dHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOnR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0
U2VsZWN0b3I6c2VsXTsKKyAgICBpZiAoIWlzSW5zdGFuY2VNZXRob2QpCisgICAgICAgIFtpbnZv
Y2F0aW9uIHNldFRhcmdldDpjbHNdOworICAgIHJldHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZv
ckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlvbiwgaXNJbnN0YW5jZU1ldGhvZCA/IENhbGxi
YWNrSW5zdGFuY2VNZXRob2QgOiBDYWxsYmFja0NsYXNzTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9k
ID8gY2xzIDogbmlsLCBfcHJvdG9jb2xfZ2V0TWV0aG9kVHlwZUVuY29kaW5nKHByb3RvY29sLCBz
ZWwsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCkpOworfQorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJh
Y2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCogY29udGV4dCwgaWQgdGFyZ2V0KQoreworICAg
IGlmICghX0Jsb2NrX2hhc19zaWduYXR1cmUodGFyZ2V0KSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgY29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZSh0YXJnZXQpOworICAg
IE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlvbldpdGhN
ZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6
c2lnbmF0dXJlXV07CisgICAgW2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07CisgICAgcmV0
dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9u
LCBDYWxsYmFja0Jsb2NrLCBuaWwsIHNpZ25hdHVyZSk7Cit9CisKK2lkIHRyeVVud3JhcEJsb2Nr
KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAg
aWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIG9iamVjdCwgb2JqQ0NhbGxiYWNr
RnVuY3Rpb25DbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gKChPYmpD
Q2FsbGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpLT53cmFwcGVkQmxv
Y2soKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNS
dW50aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9P
YmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxv
YmpjL3J1bnRpbWUuaD4KKworaW5saW5lIGJvb2wgcHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2wo
UHJvdG9jb2wqIGNhbmRpZGF0ZSwgUHJvdG9jb2wqIHRhcmdldCkKK3sKKyAgICB1bnNpZ25lZCBw
cm90b2NvbFByb3RvY29sc0NvdW50OworICAgIFByb3RvY29sKiogcHJvdG9jb2xQcm90b2NvbHMg
PSBwcm90b2NvbF9jb3B5UHJvdG9jb2xMaXN0KGNhbmRpZGF0ZSwgJnByb3RvY29sUHJvdG9jb2xz
Q291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbFByb3RvY29sc0Nv
dW50OyArK2kpIHsKKyAgICAgICAgaWYgKHByb3RvY29sX2lzRXF1YWwocHJvdG9jb2xQcm90b2Nv
bHNbaV0sIHRhcmdldCkpIHsKKyAgICAgICAgICAgIGZyZWUocHJvdG9jb2xQcm90b2NvbHMpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZShwcm90
b2NvbFByb3RvY29scyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdm9pZCBmb3JF
YWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChQcm90b2NvbCogYmFzZSwgUHJvdG9jb2wq
IHByb3RvY29sLCB2b2lkICheY2FsbGJhY2spKFByb3RvY29sKikpCit7CisgICAgQVNTRVJUKGJh
c2UpOworICAgIEFTU0VSVChwcm90b2NvbCk7CisKKyAgICB1bnNpZ25lZCBwcm90b2NvbHNDb3Vu
dDsKKyAgICBQcm90b2NvbCoqIHByb3RvY29scyA9IHByb3RvY29sX2NvcHlQcm90b2NvbExpc3Qo
YmFzZSwgJnByb3RvY29sc0NvdW50KTsKKyAgICBpZiAocHJvdG9jb2xzQ291bnQpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0NvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChwcm90b2NvbHNbaV0sIHByb3Rv
Y29sKSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm90b2NvbHNbaV0pOworICAgICAgICAg
ICAgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wocHJvdG9jb2xzW2ldLCBwcm90
b2NvbCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIGZyZWUocHJvdG9jb2xzKTsKKyAg
ICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29s
KENsYXNzIGJhc2UsIFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxiYWNrKShQcm90b2Nv
bCopKQoreworICAgIEFTU0VSVChiYXNlKTsKKyAgICBBU1NFUlQocHJvdG9jb2wpOworCisgICAg
dW5zaWduZWQgcHJvdG9jb2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbHMgPSBjbGFz
c19jb3B5UHJvdG9jb2xMaXN0KGJhc2UsICZwcm90b2NvbHNDb3VudCk7CisgICAgaWYgKHByb3Rv
Y29sc0NvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHND
b3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAocHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2wo
cHJvdG9jb2xzW2ldLCBwcm90b2NvbCkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2socHJvdG9j
b2xzW2ldKTsKKyAgICAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29s
KHByb3RvY29sc1tpXSwgcHJvdG9jb2wsIGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBm
cmVlKHByb3RvY29scyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JFYWNoTWV0aG9kSW5D
bGFzcyhDbGFzcyBjbHMsIHZvaWQgKF5jYWxsYmFjaykoTWV0aG9kIG1ldGhvZCkpCit7CisgICAg
dW5zaWduZWQgY291bnQ7CisgICAgTWV0aG9kKiBtZXRob2RzID0gY2xhc3NfY29weU1ldGhvZExp
c3QoY2xzLCAmY291bnQpOworICAgIGlmIChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhvZHNbaV0p
OworICAgICAgICBmcmVlKG1ldGhvZHMpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgZm9yRWFj
aE1ldGhvZEluUHJvdG9jb2woUHJvdG9jb2wqIHByb3RvY29sLCBCT09MIGlzUmVxdWlyZWRNZXRo
b2QsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgdm9pZCAoXmNhbGxiYWNrKShTRUwsIGNvbnN0IGNo
YXIqKSkKK3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICBzdHJ1Y3Qgb2JqY19tZXRob2RfZGVz
Y3JpcHRpb24qIG1ldGhvZHMgPSBwcm90b2NvbF9jb3B5TWV0aG9kRGVzY3JpcHRpb25MaXN0KHBy
b3RvY29sLCBpc1JlcXVpcmVkTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9kLCAmY291bnQpOworICAg
IGlmIChjb3VudCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhvZHNbaV0ubmFtZSwgbWV0aG9kc1tpXS50eXBl
cyk7CisgICAgICAgIGZyZWUobWV0aG9kcyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JF
YWNoUHJvcGVydHlJblByb3RvY29sKFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxiYWNr
KShvYmpjX3Byb3BlcnR5X3QpKQoreworICAgIHVuc2lnbmVkIGNvdW50OworICAgIG9iamNfcHJv
cGVydHlfdCogcHJvcGVydGllcyA9IHByb3RvY29sX2NvcHlQcm9wZXJ0eUxpc3QocHJvdG9jb2ws
ICZjb3VudCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydGllc1tpXSk7Cisg
ICAgICAgIGZyZWUocHJvcGVydGllcyk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjaGFyIG9wZW4s
IGNoYXIgY2xvc2U+Cit2b2lkIHNraXBQYWlyKGNvbnN0IGNoYXIqJiBwb3NpdGlvbikKK3sKKyAg
ICBOU1VJbnRlZ2VyIGNvdW50ID0gMTsKKyAgICBkbyB7CisgICAgICAgIGNoYXIgYyA9ICoocG9z
aXRpb24rKyk7CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIEB0aHJvdyBbTlNFeGNlcHRp
b24gZXhjZXB0aW9uV2l0aE5hbWU6TlNJbnRlcm5hbEluY29uc2lzdGVuY3lFeGNlcHRpb24gcmVh
c29uOkAiTWFsZm9ybWVkIHR5cGUgZW5jb2RpbmciIHVzZXJJbmZvOm5pbF07CisgICAgICAgIGlm
IChjID09IG9wZW4pCisgICAgICAgICAgICArK2NvdW50OworICAgICAgICBlbHNlIGlmIChjID09
IGNsb3NlKQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICB9IHdoaWxlIChjb3VudCk7Cit9CisK
K2NsYXNzIFN0cmluZ1JhbmdlIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdSYW5nZShjb25zdCBjaGFy
KiBiZWdpbiwgY29uc3QgY2hhciogZW5kKSA6IG1fcHRyKHN0cm5kdXAoYmVnaW4sIGVuZCAtIGJl
Z2luKSkgeyB9CisgICAgflN0cmluZ1JhbmdlKCkgeyBmcmVlKG1fcHRyKTsgfQorICAgIG9wZXJh
dG9yIGNvbnN0IGNoYXIqKCkgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBjb25zdCBjaGFyKiBnZXQo
KSB7IHJldHVybiBtX3B0cjsgfQorCitwcml2YXRlOgorICAgIGNoYXIqIG1fcHRyOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRGVsZWdhdGVUeXBlPgordHlwZW5hbWUgRGVsZWdhdGVUeXBlOjpS
ZXN1bHRUeXBlIHBhcnNlT2JqQ1R5cGUoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIEFT
U0VSVCgqcG9zaXRpb24pOworCisgICAgc3dpdGNoICgqKHBvc2l0aW9uKyspKSB7CisgICAgY2Fz
ZSAnYyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2Vy
PGNoYXI+KCk7CisgICAgY2FzZSAnaSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRl
bXBsYXRlIHR5cGVJbnRlZ2VyPGludD4oKTsKKyAgICBjYXNlICdzJzoKKyAgICAgICAgcmV0dXJu
IERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8c2hvcnQ+KCk7CisgICAgY2FzZSAn
bCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPGxv
bmc+KCk7CisgICAgY2FzZSAncSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBs
YXRlIHR5cGVEb3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigpOworICAgIGNhc2UgJ0MnOgorICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBj
aGFyPigpOworICAgIGNhc2UgJ0knOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1w
bGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZD4oKTsKKyAgICBjYXNlICdTJzoKKyAgICAgICAgcmV0
dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8dW5zaWduZWQgc2hvcnQ+KCk7
CisgICAgY2FzZSAnTCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5
cGVJbnRlZ2VyPHVuc2lnbmVkIGxvbmc+KCk7CisgICAgY2FzZSAnUSc6CisgICAgICAgIHJldHVy
biBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8dW5zaWduZWQgbG9uZyBsb25nPigp
OworICAgIGNhc2UgJ2YnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0
eXBlRG91YmxlPGZsb2F0PigpOworICAgIGNhc2UgJ2QnOgorICAgICAgICByZXR1cm4gRGVsZWdh
dGVUeXBlOjp0ZW1wbGF0ZSB0eXBlRG91YmxlPGRvdWJsZT4oKTsKKyAgICBjYXNlICdCJzoKKyAg
ICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJvb2woKTsKKyAgICBjYXNlICd2JzoKKyAg
ICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZVZvaWQoKTsKKyAgICAKKyAgICBjYXNlICdA
JzogeyAvLyBBbiBvYmplY3QgKHdoZXRoZXIgc3RhdGljYWxseSB0eXBlZCBvciB0eXBlZCBpZCkK
KyAgICAgICAgaWYgKHBvc2l0aW9uWzBdID09ICc/JyAmJiBwb3NpdGlvblsxXSA9PSAnPCcpIHsK
KyAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdp
biA9IHBvc2l0aW9uOworICAgICAgICAgICAgc2tpcFBhaXI8JzwnLCc+Jz4ocG9zaXRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUJsb2NrKGJlZ2luLCBwb3NpdGlv
biAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpwb3NpdGlvbiA9PSAnIicpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHBv
c2l0aW9uID0gaW5kZXgocG9zaXRpb24sICciJyk7CisgICAgICAgICAgICByZXR1cm4gRGVsZWdh
dGVUeXBlOjp0eXBlT2ZDbGFzcyhiZWdpbiwgcG9zaXRpb24rKyk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlSWQoKTsKKyAgICB9CisKKyAgICBjYXNlICd7
JzogeyAvLyB7bmFtZT10eXBlLi4ufSBBIHN0cnVjdHVyZQorICAgICAgICBjb25zdCBjaGFyKiBi
ZWdpbiA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgc2tpcFBhaXI8J3snLCd9Jz4ocG9zaXRpb24p
OworICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlU3RydWN0KGJlZ2luLCBwb3NpdGlv
bik7CisgICAgfQorCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgQyBzdHJpbmdzLCBhcnJheXMsIHBv
aW50ZXJzLCB1bmlvbnMsIGJpdGZpZWxkcywgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgY2FzZSAn
Kic6IC8vIEEgY2hhcmFjdGVyIHN0cmluZyAoY2hhciAqKQorICAgIGNhc2UgJ1snOiAvLyBbYXJy
YXkgdHlwZV0gQW4gYXJyYXkKKyAgICBjYXNlICcoJzogLy8gKG5hbWU9dHlwZS4uLikgQSB1bmlv
bgorICAgIGNhc2UgJ2InOiAvLyBibnVtIEEgYml0IGZpZWxkIG9mIG51bSBiaXRzCisgICAgY2Fz
ZSAnXic6IC8vIF50eXBlIEEgcG9pbnRlciB0byB0eXBlCisgICAgY2FzZSAnPyc6IC8vIEFuIHVu
a25vd24gdHlwZSAoYW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNvZGUgaXMgdXNlZCBmb3IgZnVu
Y3Rpb24gcG9pbnRlcnMpCisgICAgLy8gTk9UIHN1cHBvcnRpbmcgT2JqZWN0aXZlLUMgQ2xhc3Ms
IFNFTAorICAgIGNhc2UgJyMnOiAvLyBBIGNsYXNzIG9iamVjdCAoQ2xhc3MpCisgICAgY2FzZSAn
Oic6IC8vIEEgbWV0aG9kIHNlbGVjdG9yIChTRUwpCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9Cit9CisKK2V4dGVybiAiQyIgeworICAgIGNvbnN0IGNoYXIgKl9wcm90
b2NvbF9nZXRNZXRob2RUeXBlRW5jb2RpbmcoUHJvdG9jb2wgKiwgU0VMLCBCT09MIGlzUmVxdWly
ZWRNZXRob2QsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCk7CisgICAgaWQgb2JqY19pbml0V2Vhayhp
ZCAqLCBpZCk7CisgICAgdm9pZCBvYmpjX2Rlc3Ryb3lXZWFrKGlkICopOworICAgIGJvb2wgX0Js
b2NrX2hhc19zaWduYXR1cmUodm9pZCAqKTsKKyAgICBjb25zdCBjaGFyICogX0Jsb2NrX3NpZ25h
dHVyZSh2b2lkICopOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMiBAQCBzdGF0aWMg
ZG91YmxlIG5hbihjb25zdCBjaGFyKikKIAogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCit2
b2lkIHRlc3RPYmplY3RpdmVDQVBJKHZvaWQpOworI2VuZGlmCisKIHN0YXRpYyBKU0dsb2JhbENv
bnRleHRSZWYgY29udGV4dDsKLXN0YXRpYyBpbnQgZmFpbGVkOworaW50IGZhaWxlZDsKIHN0YXRp
YyB2b2lkIGFzc2VydEVxdWFsc0FzQm9vbGVhbihKU1ZhbHVlUmVmIHZhbHVlLCBib29sIGV4cGVj
dGVkVmFsdWUpCiB7CiAgICAgaWYgKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpICE9
IGV4cGVjdGVkVmFsdWUpIHsKQEAgLTEwNDAsNiArMTA0NCwxMCBAQCBpbnQgbWFpbihpbnQgYXJn
YywgY2hhciogYXJndltdKQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdGVzdE9iamVjdGl2ZUNBUEkoKTsKKyNlbmRpZgorCiAgICAgY29u
c3QgY2hhciAqc2NyaXB0UGF0aCA9ICJ0ZXN0YXBpLmpzIjsKICAgICBpZiAoYXJnYyA+IDEpIHsK
ICAgICAgICAgc2NyaXB0UGF0aCA9IGFyZ3ZbMV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJK
YXZhU2NyaXB0Q29yZS5oIgorCitib29sIF9CbG9ja19oYXNfc2lnbmF0dXJlKHZvaWQgKik7Citj
b25zdCBjaGFyICogX0Jsb2NrX3NpZ25hdHVyZSh2b2lkICopOworCitleHRlcm4gaW50IGZhaWxl
ZDsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisKKyNpZiBKU19PQkpDX0FQSV9FTkFC
TEVECisKK0Bwcm90b2NvbCBQYXJlbnRPYmplY3QgPEpTRXhwb3J0PgorQGVuZAorCitAaW50ZXJm
YWNlIFBhcmVudE9iamVjdCA6IE5TT2JqZWN0PFBhcmVudE9iamVjdD4KKysgKE5TU3RyaW5nICop
cGFyZW50VGVzdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFBhcmVudE9iamVjdAorKyAoTlNT
dHJpbmcgKilwYXJlbnRUZXN0Cit7CisgICAgcmV0dXJuIFtzZWxmIGRlc2NyaXB0aW9uXTsKK30K
K0BlbmQKKworQHByb3RvY29sIFRlc3RPYmplY3QgPEpTRXhwb3J0PgorQHByb3BlcnR5IGludCB2
YXJpYWJsZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIGludCBzaXg7CitAcHJvcGVydHkgQ0dQb2lu
dCBwb2ludDsKKysgKE5TU3RyaW5nICopY2xhc3NUZXN0OworKyAoTlNTdHJpbmcgKilwYXJlbnRU
ZXN0OworLSAoTlNTdHJpbmcgKilnZXRTdHJpbmc7CitKU0V4cG9ydEFzKHRlc3RBcmd1bWVudFR5
cGVzLAorLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBlc1dpdGhJbnQ6KGludClpIGRvdWJs
ZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzooTlNTdHJpbmcqKXMgbnVtYmVyOihO
U051bWJlciopbiBhcnJheTooTlNBcnJheSopYSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkqKW8K
Kyk7CistICh2b2lkKWNhbGxiYWNrOih2b2lkKF4pKGludCkpYmxvY2s7CitAZW5kCisKK0BpbnRl
cmZhY2UgVGVzdE9iamVjdCA6IFBhcmVudE9iamVjdCA8VGVzdE9iamVjdD4KK0Bwcm9wZXJ0eSBp
bnQgc2l4OworKyAoaWQpdGVzdE9iamVjdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RP
YmplY3QKK0BzeW50aGVzaXplIHZhcmlhYmxlOworQHN5bnRoZXNpemUgc2l4OworQHN5bnRoZXNp
emUgcG9pbnQ7CisrIChpZCl0ZXN0T2JqZWN0Cit7CisgICAgcmV0dXJuIFtbW1Rlc3RPYmplY3Qg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKysgKE5TU3RyaW5nICopY2xhc3NUZXN0Cit7
CisgICAgcmV0dXJuIEAiY2xhc3NUZXN0IC0gb2theSI7Cit9CistIChOU1N0cmluZyAqKWdldFN0
cmluZworeworICAgIHJldHVybiBAIjQyIjsKK30KKy0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50
VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6KGRvdWJsZSlkIGJvb2xlYW46KEJPT0wpYiBzdHJp
bmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNOdW1iZXIqKW4gYXJyYXk6KE5TQXJyYXkqKWEgZGlj
dGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJWQsJWcsJWQsJUAsJWQsJUAsJUAiLCBpLCBkLCBiPT1ZRVM/dHJ1ZTpmYWxz
ZSxzLFtuIGludFZhbHVlXSxhWzFdLG9bQCJ4Il1dOworfQorLSAodm9pZCljYWxsYmFjazoodm9p
ZCheKShpbnQpKWJsb2NrCit7CisgICAgYmxvY2soNDIpOworfQorQGVuZAorCitib29sIHRlc3RY
WVpUZXN0ZWQgPSBmYWxzZTsKKworQHByb3RvY29sIFRleHRYWVogPEpTRXhwb3J0PgorQHByb3Bl
cnR5IGludCB4OworQHByb3BlcnR5IChyZWFkb25seSkgaW50IHk7CistICh2b2lkKXRlc3Q6KE5T
U3RyaW5nICopbWVzc2FnZTsKK0BlbmQKKworQGludGVyZmFjZSBUZXh0WFlaIDogTlNPYmplY3Qg
PFRleHRYWVo+CitAcHJvcGVydHkgaW50IHg7CitAcHJvcGVydHkgaW50IHk7CitAcHJvcGVydHkg
aW50IHo7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0WFlaCitAc3ludGhlc2l6ZSB4Owor
QHN5bnRoZXNpemUgeTsKK0BzeW50aGVzaXplIHo7CistICh2b2lkKXRlc3Q6KE5TU3RyaW5nICop
bWVzc2FnZQoreworICAgIHRlc3RYWVpUZXN0ZWQgPSBbbWVzc2FnZSBpc0VxdWFsOkAidGVzdCJd
ICYmIHggPT0gMTMgJiB5ID09IDQgJiYgeiA9PSA1OworfQorQGVuZAorCitzdGF0aWMgdm9pZCBj
aGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKQoreworICAgIE5T
TG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQgPyBAIlBBU1NFRCIg
OiBAIkZBSUxFRCIpOworICAgIGlmICghcGFzc2VkKQorICAgICAgICBmYWlsZWQgPSAxOworfQor
CitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKQoreworICAgIGVudW0g
Q2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jlc3VsdEZhbHNlLAorICAgICAgICBDaGVja1Jl
c3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0VW5rbm93bgorICAgIH07CisgICAgc3RhdGlj
IGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVja1Jlc3VsdFVua25vd247CisgICAgaWYgKGNo
ZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgeworICAgICAgICBpZCBibG9jayA9IF4oTlNTdHJp
bmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07CisgICAgICAgIGNoZWNrID0gX0Jsb2NrX2hh
c19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihfQmxvY2tfc2lnbmF0dXJlKGJsb2NrKSwgIk5T
U3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBDaGVja1Jlc3VsdEZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQorewor
ICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKworICAgIEBhdXRvcmVsZWFz
ZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCIyICsgMiJdOworICAgICAgICBjaGVja1Jlc3VsdChAIjIgKyAyIiwg
W3Jlc3VsdCB0b0ludDMyXSA9PSA0KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlR3byBwbHVzIHR3byBpcyAlQCIsIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiMiArIDIiXV07CisgICAgICAgIGNoZWNrUmVzdWx0KEAic3RyaW5nV2l0aEZvcm1hdCIsIFty
ZXN1bHQgaXNFcXVhbDpAIlR3byBwbHVzIHR3byBpcyA0Il0pOworICAgIH0KKworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAIm1lc3NhZ2UiXSA9
IEAiSGVsbG8iOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAIm1lc3NhZ2UgKyAnLCBXb3JsZCEnIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiSGVs
bG8sIFdvcmxkISIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiSGVsbG8sIFdvcmxkISJd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKHsgeDo0MiB9KSJd
OworICAgICAgICBpZCBvYmogPSBbcmVzdWx0IHRvT2JqZWN0XTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVyYWwiLCBbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGlj
dGlvbmFyeSBjbGFzc11dKTsKKyAgICAgICAgaWQgbnVtID0gKE5TRGljdGlvbmFyeSopb2JqW0Ai
eCJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkNoZWNrIG51bWVyaWMgbGl0ZXJhbCIsIFtudW0g
aXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBfX2Jsb2NrIGludCByZXN1bHQ7CisgICAg
ICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0gPSBeKGludCB2YWx1ZSl7CisgICAgICAgICAg
ICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAImJsb2Nr
Q2FsbGJhY2siLCByZXN1bHQgPT0gNDIpOworICAgIH0KKworICAgIGlmIChibG9ja1NpZ25hdHVy
ZUNvbnRhaW5zQ2xhc3MoKSkgeworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAgICAgX19ibG9jayBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAg
ICAgICAgY29udGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4oTlNTdHJpbmcgKnZhbHVlKXsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBbQCI0MiIgaXNFcXVhbFRvU3RyaW5nOnZhbHVlXSA9PSBZ
RVM7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJibG9ja0NhbGxiYWNrKDQyKSJdOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJibG9ja0Nh
bGxiYWNrKE5TU3RyaW5nICopIiwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICBOU0xvZyhAIlNraXBwaW5nICdibG9ja0NhbGxiYWNrKE5TU3RyaW5nICopJyB0ZXN0IGNh
c2UiKTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCIhY29udGV4dC5leGNlcHRpb24iLCAhY29udGV4dC5leGNlcHRpb24pOworICAg
ICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkgVEhJUyBJUyBOT1QgVkFM
SUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOworICAgICAgICBjaGVja1Jlc3VsdChA
ImNvbnRleHQuZXhjZXB0aW9uIiwgY29udGV4dC5leGNlcHRpb24pOworICAgIH0KKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX19ibG9jayBib29sIGNhdWdo
dCA9IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4
dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAodm9pZCljb250
ZXh0OworICAgICAgICAgICAgKHZvaWQpZXhjZXB0aW9uOworICAgICAgICAgICAgY2F1Z2h0ID0g
dHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMk
JV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCkiXTsK
KyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU0NvbnRleHQuZXhjZXB0aW9uSGFuZGxlciIsIGNhdWdo
dCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57CisgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAgICAgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlNvbWV0aGlu
ZyB3ZW50IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICB9OworICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQ7IHRy
eSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0NhdWdodCBleGNlcHRpb24n
OyB9Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sg
LSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpA
IkNhdWdodCBleGNlcHRpb24iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhy
b3cgaW4gY2FsbGJhY2sgLSBub3QgdGhyb3duIHRvIE9iamVjdGl2ZS1DIiwgIWNvbnRleHQuZXhj
ZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKKyAgICAgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgICAgICAgICAgW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCIhQCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJ
UFQgU1lOVEFYICFAIyQlXiYqKCkiXTsKKyAgICAgICAgfTsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0OyB0cnkgeyBjYWxsYmFj
aygpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhjZXB0aW9uJzsgfSJdOworICAg
ICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGluIGNhbGxiYWNrIC0gd2FzIGNhdWdo
dCBieSBKYXZhU2NyaXB0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJDYXVnaHQgZXhj
ZXB0aW9uIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIkltcGxpY2l0IHRocm93IGluIGNhbGxi
YWNrIC0gbm90IHRocm93biB0byBPYmplY3RpdmUtQyIsICFjb250ZXh0LmV4Y2VwdGlvbik7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAiZnVuY3Rpb24gc3VtKGFycmF5KSB7
IFwKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDsgXAorICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgaW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGFycmF5
W2ldOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAgfSJd
OworICAgICAgICBKU1ZhbHVlICphcnJheSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAW0Ax
MywgQDIsIEA3XSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpTVmFsdWUgKnN1bUZ1bmN0
aW9uID0gY29udGV4dFtAInN1bSJdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbc3VtRnVu
Y3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsgYXJyYXkgXV07CisgICAgICAgIGNoZWNrUmVzdWx0
KEAic3VtKFsxMywgMiwgN10pIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSAyMik7CisgICAgfQorCisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBKU1ZhbHVlICptdWxB
ZGRGdW5jdGlvbiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OgorICAgICAgICAgICAgQCIoZnVu
Y3Rpb24oYXJyYXksIG9iamVjdCkgeyBcCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtd
OyBcCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgXAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSAqIG9iamVjdC54ICsgb2JqZWN0LnkpOyBcCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgICAgICAgICAgfSkiXTsKKyAgICAg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW211bEFkZEZ1bmN0aW9uIGNhbGxXaXRoQXJndW1lbnRzOkBb
IEBbIEAyLCBANCwgQDggXSwgQHsgQCJ4IjpAMC41LCBAInkiOkA0MiB9IF1dOworICAgICAgICBj
aGVja1Jlc3VsdChAIm11bEFkZEZ1bmN0aW9uIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6
QCI0Myw0NCw0NiJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVj
dEluQ29udGV4dDpjb250ZXh0XTsKKworICAgICAgICBvYmplY3RbQCJwb2ludCJdID0gQHsgQCJ4
IjpAMSwgQCJ5IjpAMiB9OworICAgICAgICBvYmplY3RbQCJwb2ludCJdW0AieCJdID0gQDM7Cisg
ICAgICAgIENHUG9pbnQgcG9pbnQgPSBbb2JqZWN0W0AicG9pbnQiXSB0b1BvaW50XTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ0b1BvaW50IiwgcG9pbnQueCA9PSAzICYmIHBvaW50LnkgPT0gMik7
CisKKyAgICAgICAgb2JqZWN0W0B7IEAidG9TdHJpbmciOl57IHJldHVybiBAImZvbyI7IH0gfV0g
PSBAImJhciI7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidG9TdHJpbmcgaW4gb2JqZWN0IGxpdGVy
YWwgdXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3RyaW5nXSBpc0VxdWFs
OkAiYmFyIl0pOworCisgICAgICAgIG9iamVjdFtbQCJmb29iYXIiIHN1YnN0cmluZ1RvSW5kZXg6
M11dID0gQCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChAInN1YnN0cmluZyB1c2VkIGFzIHN1
YnNjcmlwdCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmddIGlzRXF1YWw6QCJiYXIiXSk7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXh0
WFlaICp0ZXN0WFlaID0gW1tUZXh0WFlaIGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtA
InRlc3RYWVoiXSA9IHRlc3RYWVo7CisgICAgICAgIHRlc3RYWVoueCA9IDM7CisgICAgICAgIHRl
c3RYWVoueSA9IDQ7CisgICAgICAgIHRlc3RYWVoueiA9IDU7CisgICAgICAgIFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ID0gMTM7IHRlc3RYWVoueSA9IDE0OyJdOworICAgICAg
ICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoudGVzdCgndGVzdCcpIl07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHRlc3RYWVpUZXN0ZWQiLCB0ZXN0WFlaVGVzdGVk
KTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0
ZXN0WFlaLnggKyAnLCcgKyB0ZXN0WFlaLnkgKyAnLCcgKyB0ZXN0WFlaLnoiXTsKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gcmVzdWx0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1
YWw6QCIxMyw0LHVuZGVmaW5lZCJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIFtjb250ZXh0W0AiT2JqZWN0Il1bQCJwcm90b3R5cGUiXSBk
ZWZpbmVQcm9wZXJ0eTpAImdldHRlclByb3BlcnR5IiBkZXNjcmlwdG9yOkB7CisgICAgICAgICAg
ICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTpeeworICAgICAgICAgICAgICAgIHJldHVybiBb
SlNDb250ZXh0IGN1cnJlbnRUaGlzXVtAIngiXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfV07
CisgICAgICAgIEpTVmFsdWUgKm9iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAeyBA
IngiOkAxMDEgfSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGludCByZXN1bHQgPSBbb2Jq
ZWN0IFtAImdldHRlclByb3BlcnR5Il0gdG9JbnQzMl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
Z2V0dGVyUHJvcGVydHkiLCByZXN1bHQgPT0gMTAxKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJjb25jYXRlbmF0ZSJdID0g
XnsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFyZ3VtZW50cyA9IFtKU0NvbnRleHQgY3VycmVudEFy
Z3VtZW50c107CisgICAgICAgICAgICBpZiAoIVthcmd1bWVudHMgY291bnRdKQorICAgICAgICAg
ICAgICAgIHJldHVybiBAIiI7CisgICAgICAgICAgICBOU1N0cmluZyAqbWVzc2FnZSA9IFthcmd1
bWVudHNbMF0gZGVzY3JpcHRpb25dOworICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4
ID0gMTsgaW5kZXggPCBbYXJndW1lbnRzIGNvdW50XTsgKytpbmRleCkKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlQCIsIG1lc3NhZ2Us
IGFyZ3VtZW50c1tpbmRleF1dOworICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgICAg
IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
Y29uY2F0ZW5hdGUoJ0hlbGxvLCcsICdXb3JsZCEnKSJdOworICAgICAgICBjaGVja1Jlc3VsdChA
ImNvbmNhdGVuYXRlIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJIZWxsbywgV29ybGQhIl0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
Y29udGV4dFtAImZvbyJdID0gQFlFUzsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
QFlFUyBpcyBib29sZWFuIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJib29sZWFuIl0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
VGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAg
ICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9iamVjdCkiXTsK
KyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdCkiLCBbW3Jlc3VsdCB0b1N0
cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdF0iXSk7CisgICAgfQorCisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2Jq
ZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2Jq
ZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJvdG9fXykiXTsKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdC5fX3Byb3RvX18pIiwgW1tyZXN1bHQgdG9T
dHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RQcm90b3R5cGVdIl0pOworICAgIH0K
KworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtA
IlRlc3RPYmplY3QiXSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcoVGVzdE9iamVjdCkiXTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVzdE9iamVjdCkiLCBbW3Jlc3VsdCB0b1N0cmlu
Z10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdENvbnN0cnVjdG9yXSJdKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUqIHZh
bHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OltUZXN0T2JqZWN0IGNsYXNzXSBpbkNvbnRl
eHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVlIHRvT2JqZWN0XSA9PSBb
VGVzdE9iamVjdCBjbGFzc10iLCBbdmFsdWUgdG9PYmplY3RdID09IFtUZXN0T2JqZWN0IGNsYXNz
XSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmplY3QgY2xhc3NdOworICAgICAgICBK
U1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlRlc3RPYmplY3QucGFy
ZW50VGVzdCgpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGVzdE9iamVjdC5wYXJlbnRUZXN0
KCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIlRlc3RPYmplY3QiXSk7CisgICAgfQorCisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0
ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0
ZXN0T2JqZWN0QSJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3RC
Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAInRlc3RPYmplY3RBID09IHRlc3RPYmplY3RCIl07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAidGVzdE9iamVjdEEgPT0gdGVzdE9iamVjdEIiLCBbcmVzdWx0IHRvQm9vbF0pOwor
ICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVz
dE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBj
b250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgdGVzdE9iamVjdC5w
b2ludCA9IChDR1BvaW50KXszLDR9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh0ZXN0T2JqZWN0
LnBvaW50KTsgdGVzdE9iamVjdC5wb2ludCA9IHt4OjEyLHk6MTR9OyByZXN1bHQiXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0gcmVzdWx0IiwgW1tyZXN1bHQgdG9T
dHJpbmddIGlzRXF1YWw6QCJ7XCJ4XCI6MyxcInlcIjo0fSJdKTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJ0ZXN0T2JqZWN0LnBvaW50IC0ge3g6MTIseToxNH0iLCB0ZXN0T2JqZWN0LnBvaW50Lngg
PT0gMTIgJiYgdGVzdE9iamVjdC5wb2ludC55ID09IDE0KTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3Qg
PSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgdGVzdE9iamVjdC5zaXggPSA2Owor
ICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgY29u
dGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkpeyByZXR1cm4geCAqIHk7IH07CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAibXVsKHRlc3RPYmpl
Y3Quc2l4LCA3KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIm11bCh0ZXN0T2JqZWN0LnNpeCwg
NykiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVz
dE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRl
c3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il1bQCJ2YXJpYWJsZSJdID0g
QDQ7CisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKyt0ZXN0T2JqZWN0LnZhcmlh
YmxlIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiKyt0ZXN0T2JqZWN0LnZhcmlhYmxlIiwgdGVz
dE9iamVjdC52YXJpYWJsZSA9PSA1KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5
IjpANyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAInBvaW50LnggKyAnLCcgKyBwb2ludC55Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicG9p
bnQueCArICcsJyArIHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9OworICAgICAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50LnggKyAnLCcgKyBw
b2ludC55Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicG9pbnQueCArICcsJyArIHBvaW50Lnki
LCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJdKTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmpl
Y3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmpl
Y3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSJdOworICAgICAgICBjaGVja1Jl
c3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRl
c3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAg
Y29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJl
c3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC50ZXN0QXJndW1lbnRU
eXBlcygxMDEsMC41LHRydWUsJ2ZvbycsNjY2LFtmYWxzZSwnYmFyJyxmYWxzZV0se3g6J2Jheid9
KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QudGVzdEFyZ3VtZW50VHlwZXMi
LCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIjEwMSwwLjUsMSxmb28sNjY2LGJhcixiYXoiXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBU
ZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAg
IGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNh
bGwodGVzdE9iamVjdCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0
cmluZy5jYWxsKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0
KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRb
QCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RP
YmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIHByZSIsICFjb250ZXh0LmV4Y2VwdGlvbik7CisgICAg
ICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh7
fSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHt9
KSBwb3N0IiwgY29udGV4dC5leGNlcHRpb24pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0
T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCJ2YXIgcmVzdWx0ID0gMDsgdGVzdE9iamVjdC5jYWxsYmFjayhmdW5jdGlvbih4KXsgcmVz
dWx0ID0geDsgfSk7IHJlc3VsdCJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3Qu
Y2FsbGJhY2siLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1YWxNYWNoaW5lXTsKKyAg
ICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6NDIgaW5Db250
ZXh0OmNvbnRleHQyXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZS5jb250ZXh0ID09IGNv
bnRleHQyIiwgdmFsdWUuY29udGV4dCA9PSBjb250ZXh0Mik7CisgICAgICAgIGNvbnRleHQxW0Ai
cGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRzIl0gPSB2YWx1ZTsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQxIGV2YWx1YXRlU2NyaXB0OkAicGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRz
Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0LmNvbnRleHQgPT0gY29udGV4dDEiLCBy
ZXN1bHQuY29udGV4dCA9PSBjb250ZXh0MSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVl
IGlzRXF1YWxUb09iamVjdDpyZXN1bHRdIiwgW3ZhbHVlIGlzRXF1YWxUb09iamVjdDpyZXN1bHRd
KTsKKyAgICAgICAgW2NvbnRleHQxIHJlbGVhc2VdOworICAgICAgICBbY29udGV4dDIgcmVsZWFz
ZV07CisgICAgfQorfQorCisjZWxzZQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKK3sKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM4
NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw2ICs1NDAsNyBAQAogCQk4NkND
ODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklU
Q2FsbC5jcHAgKi87IH07CiAJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovOyB9
OwogCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQ0VGREQwRjQxM0Y4OTAwRkQ3RjlF
IC8qIEpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4NkQyMjIxQTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEMjIyMTkxNjdFRjk0NDAwMjRD
ODA0IC8qIHRlc3RhcGkubSAqLzsgfTsKIAkJODZEM0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFS
TUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NkQzQjJCRjEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCAqLzsgfTsK
IAkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzAxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0
aENvbnN0YW50UG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01NDgsNiArNTQ5LDE4IEBACiAJCTg2RDNCM0M0MTAxNTlEN0YwMDI4NjVFNyAv
KiBSZXBhdGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2REI2NDY0MEY5
NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEQjY0NjMwRjk1QzZG
QzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi87IH07CiAJ
CTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTExNkIwMEZFNzVBQzgwMEI1MTJC
QyAvKiBDb2RlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyogQVBJSlNWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDYxNjdC
QUI4NzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTND
NjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBK
U0V4cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEg
LyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTND
NjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwODE2N0JBQjg3MDA2RDc2MEEgLyogSlND
b250ZXh0Lm1tICovOyB9OworCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovOyB9Owor
CQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEIxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLzsgfTsKKwkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oICovOyB9
OworCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBEMTY3QkFCODcwMDZENzYw
QSAvKiBKU1ZhbHVlLm1tICovOyB9OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
YWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi87IH07
CisJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTAxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi87IH07CisJCTg2RTNDNjFEMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgfTsKIAkJODZFODU1MzkxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVp
bGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQk4
NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGQTE1NjBGMDM2MDA4RTky
MjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC01NjksNiArNTgyLDExIEBACiAJCTg2
RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJC
MkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4
NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3
IC8qIERGR1Njb3JlQm9hcmQuaCAqLzsgfTsKKwkJODZGM0VFQkIxNjhDREU5MzAwNzdCOTJBIC8q
IEpTQmxvY2tBZGFwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IuaCAqLzsg
fTsKKwkJODZGM0VFQkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGM0VFQjgxNjhDQ0Y3
NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovOyB9OworCQk4NkYzRUVCRDE2OENERTkz
MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI5MTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpD
Q2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OworCQk4NkYzRUVCRTE2OENERTkzMDA3N0I5MkEgLyog
T2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24ubW0gKi87IH07CisJCTg2RjNFRUJGMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpjUnVudGlt
ZUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi87IH07CiAJ
CTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi87IH07CiAJCTg2RkE5RTkyMTQyQkJCMkUw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLzsgfTsKIAkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwICovOyB9OwpA
QCAtMTM3OCw2ICsxMzk2LDcgQEAKIAkJODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENh
bGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ2FsbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAv
KiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGkubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBuYW1lID0gdGVzdGFwaS5tOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkubTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQkYxMDE1NkJERTAwMjg2NUU3IC8q
IEFSTUFzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
Uk1Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjJDMDEw
MTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFSTUFzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlbWJsZXJCdWZmZXJXaXRo
Q29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg2LDYgKzE0
MDUsMTggQEAKIAkJODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUxvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBB
UElKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUpTVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDcxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDgxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEpTQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDkx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4cG9ydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNXcmFwcGVyTWFwLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQzE2N0JBQjg3MDA2RDc2MEEgLyog
SlNXcmFwcGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV3JhcHBl
ck1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwRDE2N0JBQjg3MDA2
RDc2MEEgLyogSlNWYWx1ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEpTVmFsdWUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBFMTY3
QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hpbmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVh
bE1hY2hpbmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1Zp
cnR1YWxNYWNoaW5lLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYxMTE2
N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJp
bmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVCRjJGOTE1NjBGMDM2MDA4
RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5hbWVDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2RUJGMkZBMTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNDA3LDYgKzE0MzgsMTEgQEAKIAkJODZFQzlEQzMxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklULmg7IHBhdGggPSBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRTkxMzJERUYxQzAwMkIy
QUQ3IC8qIERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9k
ZS5oOyBwYXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NvcmVCb2FyZC5oOyBwYXRoID0gZGZnL0RGR1Njb3Jl
Qm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VFQjYxNjg1NUE1QjAw
NzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9iamNSdW50aW1lRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jsb2NrQWRhcHRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NkYzRUVCODE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3Iu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0Jsb2NrQWRhcHRv
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VFQjkxNjhDQ0Y3NTAwNzdC
OTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9iakNDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE9iakNDYWxsYmFja0Z1bmN0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY3NUVGQjE1MUMwNjJGMDA3
QzlCQTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBDYWNoZWRSZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwQ2FjaGVkUmVzdWx0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAv
KiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4NzgsNiArMTkxNCw3IEBACiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1p
bmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFGNTlDIC8qIHRlc3RhcGkuYyAqLywK
IAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLywKKwkJCQk4NkQy
MjIxOTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tICovLAogCQkJCTY1MTEyMkU1MTQwNDY5
QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gdGVzdHM7
CkBAIC0yMDQ1LDYgKzIwODIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQkxNDgyQjc4QTBBNDMwNUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovLAorCQkJCTg2
RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi8sCiAJCQkJODY1RjQwODcx
MEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggKi8sCiAJCQkJMUNBQThCNEEwRDMyQzM5QTAw
NDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJCQkxQ0FBOEI0QjBEMzJDMzlBMDA0MUJDRkYg
LyogSmF2YVNjcmlwdENvcmUuaCAqLywKQEAgLTIwNTMsNiArMjA5MSw4IEBACiAJCQkJMTQyMTM1
OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJMTQyNzExMzgwQTQ2MEJC
QjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAogCQkJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggKi8sCisJCQkJODZGM0VFQjcxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpT
QmxvY2tBZGFwdG9yLmggKi8sCisJCQkJODZGM0VFQjgxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxv
Y2tBZGFwdG9yLm1tICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1RjA2MSAvKiBK
U0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKIAkJCQkxNDQwRjg5MDBBNTA4QjEwMDAwNUYwNjEg
LyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLywKQEAgLTIwNjIsOSArMjEwMiwxMyBAQAogCQkJ
CUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgg
Ki8sCiAJCQkJMTQ0MEZDRTIwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwICovLAog
CQkJCTE0NDBGQ0UxMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmggKi8sCisJCQkJODZF
M0M2MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovLAorCQkJCTg2RTNDNjA4MTY3
QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi8sCisJCQkJODZFM0M2MDkxNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi8sCiAJCQkJMTRCRDVBMjkwQTNFOTFGNjAw
QkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgKi8sCiAJCQkJMTRCRDVBMkEwQTNFOTFGNjAwQkFG
NTlDIC8qIEpTQ29udGV4dFJlZi5oICovLAogCQkJCTE0OENEMUQ3MTA4Q0Y5MDIwMDgxNjNDNiAv
KiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8sCisJCQkJODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTRXhwb3J0LmggKi8sCiAJCQkJMTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2Jq
ZWN0UmVmLmNwcCAqLywKIAkJCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RS
ZWYuaCAqLywKIAkJCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2
YXRlLmggKi8sCkBAIC0yMDc3LDExICsyMTIxLDIxIEBACiAJCQkJMTQ4MkI3NEIwQTQzMDMyODAw
NTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmggKi8sCiAJCQkJMTQ2QUFCMzcwQjY2QTk0NDAwRTU1RjE2
IC8qIEpTU3RyaW5nUmVmQ0YuY3BwICovLAogCQkJCTE0NkFBQjJBMEI2NkE4NDkwMEU1NUYxNiAv
KiBKU1N0cmluZ1JlZkNGLmggKi8sCisJCQkJODZFM0M2MEQxNjdCQUI4NzAwNkQ3NjBBIC8qIEpT
VmFsdWUubW0gKi8sCisJCQkJODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRl
cm5hbC5oICovLAogCQkJCTE0QkQ1QTJCMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNw
cCAqLywKIAkJCQkxNDgyQjZFQTBBNDMwMEIzMDA1MTdDRkMgLyogSlNWYWx1ZVJlZi5oICovLAor
CQkJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggKi8sCisJ
CQkJODZFM0M2MTAxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8sCisJ
CQkJODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
ICovLAogCQkJCUE3NDgyRTM3MTE2QTY5N0IwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJ
bnRlcm5hbC5oICovLAogCQkJCUE3NDgyQjdBMTE2NkNERUEwMDNCMDcxMiAvKiBKU1dlYWtPYmpl
Y3RNYXBSZWZQcml2YXRlLmNwcCAqLywKIAkJCQlBNzQ4MkI3OTExNjZDREVBMDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oICovLAorCQkJCTg2RTNDNjBCMTY3QkFCODcwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi8sCisJCQkJODZFM0M2MEMxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTV3JhcHBlck1hcC5oICovLAorCQkJCTg2RjNFRUI5MTY4Q0NGNzUwMDc3QjkyQSAvKiBP
YmpDQ2FsbGJhY2tGdW5jdGlvbi5oICovLAorCQkJCTg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAv
KiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSAqLywKKwkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5
MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcxNCAv
KiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKQEAgLTMyMDUsNiArMzI1OSwxNyBAQAogCQkJCTBG
MDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1bmtH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjEyMTY3QkFCRDcwMDZENzYwQSAv
KiBBUElKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2
RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjE1MTY3QkFCRDcw
MDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYx
NzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RjNFRUJCMTY4Q0RFOTMwMDc3
QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZGM0VFQkQxNjhD
REU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NkYzRUVCRjE2OENERTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMzUyOCw2ICszNTkzLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxNDQwRjYxMDBBNEY4NTY3MDAwNUYwNjEgLyogdGVz
dGFwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJODZEMjIyMUExNjdFRjk0NDAwMjRDODA0IC8qIHRl
c3RhcGkubSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzgyNSw2ICszODkxLDEyIEBACiAJCQkJQTdDMEM0
QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVu
a3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
Q29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAv
KiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2
RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjFDMTY3QkFCRUUw
MDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODZGM0VF
QkMxNjhDREU5MzAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJODZGM0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUs
NyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBtX3Rp
bWVvdXRDb3VudCg1MTIpCiAjZW5kaWYKICAgICAsIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hD
b25zdCgwKQorICAgICwgbV9hcGlEYXRhKDApCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAs
IG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihleGVjdXRhYmxlQWxsb2NhdG9yKSkK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNiArNDUzLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29k
ZSgpOwogCisgICAgICAgIHZvaWQgKm1fYXBpRGF0YTsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgSlNHbG9iYWxPYmpl
Y3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRAogICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6
OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdlYWtSYW5kb21TZWVkKCkg
OiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAgLCBtX2V2YWxFbmFibGVkKHRydWUp
CiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
ID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkK
KyAgICAsIG1fYXBpRGF0YSgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Niw2ICsxOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXNEZWJ1
Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KICAgICAgICAgYm9vbCBoYXNQcm9m
aWxlcigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRz
UHJvZmlsaW5nKHRoaXMpOyB9CiAKKyAgICAgICAgdm9pZCogbV9hcGlEYXRhOworCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVj
dChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSogPSAwKTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTItMzEgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIE9iamVjdGl2ZS1D
IEFQSSBmb3IgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNTg4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuY3BwOgorICAgICAgICAoV1RGOjpX
VEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0
YS5oOgorICAgICAgICAoV1RGVGhyZWFkRGF0YSk6CisgICAgICAgICAgICAtIEFkZGVkIG1fYXBp
RGF0YSAtIHByb3ZpZGUgY29udmVuaWVudCBzdG9yYWdlIGZvciB1c2UgYnkgdGhlIEFQSS4KKwog
MjAxMi0xMi0yOCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50YXRpb246IGluc3Ry
dW1lbnQgbm90IGluc3RydW1lbnRlZCBtZW1iZXJzLgpJbmRleDogU291cmNlL1dURi93dGYvV1RG
VGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0
YS5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogVGhy
ZWFkU3BlY2lmaWM8V1RGVGhyZWFkRGF0YT4qIFdURlRocmVhZERhdGE6OnN0YXRpY0RhdGE7CiAK
IFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQotICAgIDogbV9hdG9taWNTdHJpbmdUYWJs
ZSgwKQorICAgIDogbV9hcGlEYXRhKDApCisgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKDApCiAg
ICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcigwKQogI2lmIFVTRShKU0MpCiAgICAg
LCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpTQzo6SWRlbnRpZmllclRhYmxlKCkpCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvV1RG
L3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsOCBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNDKQogCisgICAgdm9pZCogbV9hcGlEYXRh
OworCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxl
OwogICAgIEF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciBtX2F0b21pY1N0cmluZ1RhYmxlRGVz
dHJ1Y3RvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181003</attachid>
            <date>2013-01-01 17:37:46 -0800</date>
            <delta_ts>2013-01-01 17:54:59 -0800</delta_ts>
            <desc>DFS, typo fixes</desc>
            <filename>105889.6.patch</filename>
            <type>text/plain</type>
            <size>225811</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU0NvbnRleHQ7CisKKy8vIEEgSlNWYWx1ZSBpcyBhIHJl
ZmVyZW5jZSB0byBhIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBvYmplY3Qgc3BhY2Ugb2Yg
YQorLy8gSlNWaXJ0dWFsTWFjaGluZS4gQWxsIGluc3RhbmNlcyBvZiBKU1ZhbHVlIG9yaWdpbmF0
ZSBmcm9tIGEgSlNDb250ZXh0LCBhbmQKKy8vIGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGlz
IEpTQ29udGV4dC4gV2hlcmUgYW4gaW5zdGFuY2UgbWV0aG9kIGlzIGludm9rZWQKKy8vIHVwb24g
YSBKU1ZhbHVlLCBhbmQgdGhpcyByZXR1cm5zIGFub3RoZXIgSlNWYWx1ZSwgdGhlIHJldHVybmVk
IEpTVmFsdWUgd2lsbAorLy8gb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgSlNDb250ZXh0IGFzIHRo
ZSBKU1ZhbHVlIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzCisvLyBpbnZva2VkLgorLy8KKy8vIFRo
ZSBKU0NvbnRleHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVy
ZWNlZCBKYXZhU2NyaXB0CisvLyB2YWx1ZSB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gU28g
bG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGJlaW5nIHJldGFpbmVkCisvLyB0aGUgSlNWYWx1ZSB3
aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZCB2YWx1ZSB3aXRoaW4gdGhlIEphdmFT
Y3JpcHQKKy8vIHZpcnR1YWwgbWFjaGluZSBhbGl2ZS4gV2hlbiB0aGUgSlNDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCBhIEpTVmFsdWUgaXMKKy8vIGRlYWxsb2NhdGVkIHRoZSB3ZWFrIGNvbnRleHQg
cHJvcGVydHkgb2YgdGhlIEpTVmFsdWUgd2lsbCBiZWNvbWUgbmlsLiBBZnRlcgorLy8gdGhpcyBv
Y2N1cnMgdGhlIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgaXMg
bm8gbG9uZ2VyCisvLyBiZWluZyBtYWludGFpbmVkIGJ5IHRoaXMgSlNWYWx1ZSwgYW5kIHRoZSBK
U1ZhbHVlIGluc3RhbmNlIG1heSBubyBsb25nZXIgYnkKKy8vIHVzZWQgYXMgYSByZWZlcmVuY2Ug
dG8gdGhpcyB2YWx1ZS4gRm9yIGFueSBtZXRob2QgaW52b2tlZCBvbiBpbnN0YW5jZSBvZgorLy8g
SlNWYWx1ZSB3aXRoIGEgbmlsIGNvbnRleHQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSBuaWwv
emVyby9mYWxzZSByZXN1bHQuCisvLworLy8gRm9yIGFsbCBtZXRob2RzIHRha2luZyBhcmd1bWVu
dHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkCisvLyBpbnRvIGEgSmF2
YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJlbG93
LgorLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIEpTVmlydHVhbE1hY2hpbmUKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5l
IGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRleHQKKy8vIHByb3BlcnR5KS4gQW4g
aW5zdGFuY2Ugb2YgSlNWYWx1ZSBtYXkgb25seSBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8K
Ky8vIG1ldGhvZHMgb24gaW5zdGFuY2VzIG9mIEpTVmFsdWUgYW5kIEpTQ29udGV4dCB0aGF0IGJl
bG9uZyB0byB0aGUgc2FtZQorLy8gSlNWaXJ0dWFsTWFjaGluZSAtIHBhc3NpbmcgYSBKU1ZhbHVl
IHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdCBvcmlnaW5hdGluZworLy8gZnJvbSBhIGRpZmZlcmVu
dCBKU1ZpcnR1YWxNYWNoaW5lIHdpbGwgcmVzdWx0IGluIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlv
bgorLy8gYmVpbmcgcmFpc2VkLgorLy8KKy8vIENvbnZlcnNpb24gYmV0d2VlbiBPYmplY3RpdmUt
QyBhbmQgSmF2YVNjcmlwdCB0eXBlcy4KKy8vCisvLyBXaGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBK
YXZhU2NyaXB0IHZhbHVlcyBhbmQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhIGNvcHkgaXMKKy8vIHBl
cmZvcm1lZC4gVmFsdWVzIG9mIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgY29waWVkIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisvLyB0eXBlcyBvbiBjb252ZXJzaW9uIGluIGVhY2ggZGlyZWN0aW9uLiBG
b3IgTlNEaWN0aW9uYXJpZXMsIGVudHJpZXMgaW4gdGhlCisvLyBkaWN0aW9uYXJ5IHRoYXQgYXJl
IGtleWVkIGJ5IHN0cmluZ3MgYXJlIGNvcGllZCBvbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCisv
LyBGb3IgZGljdGlvbmFyaWVzIGFuZCBhcnJheXMsIGNvbnZlcnNpb24gaXMgcmVjdXJzaXZlLCB3
aXRoIHRoZSBzYW1lIG9iamVjdAorLy8gY29udmVyc2lvbiBiZWluZyBhcHBsaWVkIHRvIGFsbCBl
bnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorLy8KKy8vICAgT2JqZWN0aXZlLUMgdHlwZSAgfCAg
IEphdmFTY3JpcHQgdHlwZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyAgICAgICAgIG5pbCAgICAgICAgIHwgICAgIHVuZGVmaW5lZAorLy8gICAgICAg
IE5TTnVsbCAgICAgICB8ICAgICAgICBudWxsCisvLyAgICAgICBOU1N0cmluZyAgICAgIHwgICAg
ICAgc3RyaW5nCisvLyAgICAgICBOU051bWJlciAgICAgIHwgICBudW1iZXIsIGJvb2xlYW4KKy8v
ICAgICBOU0RpY3Rpb25hcnkgICAgfCAgIE9iamVjdCBvYmplY3QKKy8vICAgICAgIE5TQXJyYXkg
ICAgICAgfCAgICBBcnJheSBvYmplY3QKKy8vICAgICAgICBOU0RhdGUgICAgICAgfCAgICAgRGF0
ZSBvYmplY3QKKy8vICAgICAgIE5TQmxvY2sgKiAgICAgfCAgIEZ1bmN0aW9uIG9iamVjdCAqCisv
LyAgICAgICAgICBpZCAqKiAgICAgIHwgICBXcmFwcGVyIG9iamVjdCAqKgorLy8gICAgICAgIENs
YXNzICoqKiAgICB8IENvbnN0cnVjdG9yIG9iamVjdCAqKioKKy8vCisvLyAqIEluc3RhbmNlcyBv
ZiBOU0Jsb2NrIHdpdGggc3VwcG9ydGVkIGFyZ3VtZW50cyB0eXBlcyB3aWxsIGJlIHByZXNlbnRl
ZCB0bworLy8gSmF2YVNjcmlwdCBhcyBhIGNhbGxhYmxlIEZ1bmN0aW9uIG9iamVjdC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkCisvLyBhcmd1bWVudCB0eXBlcyBzZWUgSlNFeHBv
cnQuaC4gSWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIG9yaWdpbmF0aW5nIGZyb20gYW4KKy8vIE9i
amVjdGl2ZS1DIGJsb2NrIGlzIGNvbnZlcnRlZCBiYWNrIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVj
dCB0aGUgYmxvY2sgd2lsbAorLy8gYmUgcmV0dXJuZWQuIEFsbCBvdGhlciBKYXZhU2NyaXB0IGZ1
bmN0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCBpbiB0aGUgc2FtZQorLy8gbWFubmVyIGFzIGEgSmF2
YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBPYmplY3QuCisvLworLy8gKiogRm9yIE9iamVjdGl2ZS1D
IGluc3RhbmNlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGxpc3Rl
ZAorLy8gYWJvdmUsIGEgd3JhcHBlciBvYmplY3QgdG8gcHJvdmlkZSBhIHJldGFpbmluZyBoYW5k
bGUgdG8gdGhlIE9iamVjdGl2ZS1DCisvLyBpbnN0YW5jZSBmcm9tIEphdmFTY3JpcHQuIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHdyYXBwZXIgb2JqZWN0cywgc2VlCisvLyBKU0V4cG9y
dC5oLiBXaGVuIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCBpcyBjb252ZXJ0ZWQgYmFjayB0
byBPYmplY3RpdmUtQworLy8gdGhlIE9iamVjdGl2ZS1DIGluc3RhbmNlIGJlaW5nIHJldGFpbmVk
IGJ5IHRoZSB3cmFwcGVyIGlzIHJldHVybmVkLgorLy8KKy8vICoqKiBGb3IgT2JqZWN0aXZlLUMg
Q2xhc3Mgb2JqZWN0cyBhIGNvbnN0cnVjdG9yIG9iamVjdCBjb250YWluaW5nIGV4cG9ydGVkCisv
LyBjbGFzcyBtZXRob2RzIHdpbGwgYmUgcmV0dXJuZWQuIFNlZSBKU0V4cG9ydC5oIHNvciBtb3Jl
IGluZm9ybWF0aW9uIG9uCisvLyBjb25zdHJ1Y3RvciBvYmplY3RzLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZhbHVlIDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNWYWx1ZSBieSBjb252ZXJ0aW5nIGFuIE9iamVjdGl2ZS1DIG9iamVjdC4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgZnJvbSBhbiBPYmplY3RpdmUtQyBw
cmltaXRpdmUgdHlwZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09MKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhEb3Vi
bGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNjcmlwdCB2
YWx1ZSBpbiB0aGlzIGNvbnRleHQuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Fy
cmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5nICopcGF0dGVybiBmbGFn
czooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChK
U1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCB0
aGlzIHZhbHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGFjY29yZGlu
ZyB0byB0aGUKKy8vIGNvbnZlcnNpb24gc3BlY2lmaWVkIGFib3ZlLgorLSAoaWQpdG9PYmplY3Q7
CisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCwgaWYgdGhlIHJlc3VsdCBpcworLy8gbm90IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgdGhl
biBuaWwgd2lsbCBiZSByZXR1cm5lZC4KKy0gKGlkKXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpY2xz
OworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhIGJvb2xlYW4gYWNjb3JkaW5nIHRvIHRoZSBj
b252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistIChC
T09MKXRvQm9vbDsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBudW1iZXIgYWNjb3JkaW5n
IHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3Vh
Z2UuCistIChkb3VibGUpdG9Eb3VibGU7CisvLyBUaGUgdmFsdWUgaXMgY29waWVkIHRvIGFuIGlu
dGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieQorLy8gdGhlIEph
dmFTY3JpcHQgbGFuZ3VhZ2UuCistIChpbnQzMl90KXRvSW50MzI7CisvLyBUaGUgdmFsdWUgaXMg
Y29waWVkIHRvIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll
ZCBieQorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistICh1aW50MzJfdCl0b1VJbnQzMjsK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4sIGEgTlNOdW1iZXIgdmFsdWUgb2YgQFlFUyBv
ciBATk8gd2lsbCBiZSByZXR1cm5lZC4KKy8vIEZvciBhbGwgb3RoZXIgdHlwZXMgdGhlIHZhbHVl
IHdpbGwgYmUgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUKKy8vIGNvbnZlcnNp
b24gc3BlY2lmaWVkIGJ5IHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNOdW1iZXIgKil0
b051bWJlcjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRv
IHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2Uu
CistIChOU1N0cmluZyAqKXRvU3RyaW5nOworLy8gVGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBh
IG51bWJlciByZXByZXNlbnRpbmcgYSB0aW1lIGludGVydmFsIHNpbmNlIDE5NzAsCisvLyBhbmQg
YSBuZXcgTlNEYXRlIGluc3RhbmNlIGlzIHJldHVybmVkLgorLSAoTlNEYXRlICopdG9EYXRlOwor
Ly8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVk
LgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlw
ZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gVGhlIHByb3BlcnR5ICJsZW5ndGgiIGlzIHJlYWQg
ZnJvbSB0aGUgb2JqZWN0LCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQKKy8vIGludGVnZXIsIGFu
ZCBhbiBOU0FycmF5IG9mIHRoaXMgc2l6ZSBpcyBhbGxvY2F0ZWQuIFByb3BlcnRpZXMgY29ycmVz
cG9uZGluZworLy8gdG8gaW5kaWNpZXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgd2lsbCBiZSBj
b3BpZWQgdG8gdGhlIGFycmF5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRl
ZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0Fy
cmF5OworLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJl
dHVybmVkLgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3Jp
cHQgVHlwZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGll
cyBvZiB0aGUgb2JqZWN0IGFyZSBjb3BpZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9i
amVjdGl2ZS1DIG9iamVjdHMgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3Bl
Y2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBw
cm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFT
Y3JpcHQgdmFsdWUKKy8vICd1bmRlZmluZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlz
dC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5Owor
Ly8gU2V0IGEgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFs
dWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0
eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJucyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4K
Ky0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5z
IFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9k
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgor
LSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9k
IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4g
b2JqZWN0OworLy8gdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWV0aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVh
Z2UuCistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8vIEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20g
dGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFs
dWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKKworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBw
cmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJP
T0wpaXNOdWxsOworLSAoQk9PTClpc0Jvb2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9P
TClpc1N0cmluZzsKKy0gKEJPT0wpaXNPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUg
c2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wp
aXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIu
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhlIHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3Vt
ZW50cy4KKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50
czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNp
ZmllZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50czsKKy8vIEFjY2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIg
ZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRoZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHBy
b3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0
aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUgc3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUg
KilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkg
Kilhcmd1bWVudHM7CisKKy8vIFRoZSBKU0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0
ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFkb25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0Owor
CitAZW5kCisKKy8vIE9iamVjdGl2ZS1DIG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBhcmd1bWVudCBhbmQvb3IgcmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVz
IGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVyc2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBp
cyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4gU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVz
IHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRhaW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0
aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5kIGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBl
PiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1h
dGNoLAorLy8gd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0
aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIu
CisvLyBTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNS
YW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUuCitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9y
dCkKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0
IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRo
IHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihD
R1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmlu
ZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAibG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1
ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5n
ZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJv
cGVydGllcworLy8gbmFtZWQgIngiLCAieSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVj
dClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgiIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0
aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUg
Q0dQb2ludCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8g
dGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQ
b2ludCl0b1BvaW50OworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nl
c3NpbmcgcHJvcGVydGllcyBuYW1lZCAibG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0
aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0
b1JhbmdlOworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJv
cGVydGllcyBuYW1lZCAieCIsICJ5IiwgIndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRo
aXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVj
dCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEgdmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2lu
ZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFs
dWUgY29udmVydGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOwor
CitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5n
IG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNj
ZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9i
amVjdEEsICpvYmplY3RCOworLy8gICAgSlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdl
dCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgiIGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2
MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3Qn
LgorLy8gICAgb2JqZWN0W0AiWSJdID0gdjE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHBy
b3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAg
ICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRleCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2Jq
ZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5n
IHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lLgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1
cHBvcnQpCisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Owor
LSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsK
Ky0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0Nv
cHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2Ny
aXB0OihOU1VJbnRlZ2VyKWluZGV4OworCitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5n
IGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0
eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8vIFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9u
ZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRl
c2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAi
d3JpdGFibGUiLAorLy8gICAgYW5kIG9wdGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBv
ZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRh
IGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJz
ZXQiIGtleS4KKy8vICAgIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBv
ciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNj
ZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBi
b3RoIG9mIHRoZSBrZXlzICJnZXQiIGFuZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNv
bnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAg
ImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vzc29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVp
dGhlciB0aGUgInZhbHVlIgorLy8gICAgb3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nl
c3NvciBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJp
YnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFj
aW5nIGFueSBleGlzdGluZyBkYXRhIHByb3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoK
Ky8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJl
bnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBtYXkgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBrZXlzCisvLyAgICAidmFsdWUiLCAiIHdyaXRh
YmxlIiwgImdldCIsIG9yICJzZXQiLgorLy8gICAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IGJl
IHVzZWQgdG8gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nCisvLyAgICBkYXRh
IG9yIGFjY2Vzc29yIHByb3BlcnR5LCBvciB0byBjcmVhdGUgYSBuZXcgZGF0YSBwcm9wZXJ0eS4K
K0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldy
aXRhYmxlS2V5OworSlNfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlE
ZXNjcmlwdG9yRW51bWVyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5OworSlNfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OworSlNf
RVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCiAKKyNpZmRlZiBf
X09CSkNfXworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKKwogLyog
SmF2YVNjcmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCiAKIC8qISBAdHlwZWRlZiBKU0NvbnRleHRH
cm91cFJlZiBBIGdyb3VwIHRoYXQgYXNzb2NpYXRlcyBKYXZhU2NyaXB0IGNvbnRleHRzIHdpdGgg
b25lIGFub3RoZXIuIENvbnRleHRzIGluIHRoZSBzYW1lIGdyb3VwIG1heSBzaGFyZSBhbmQgZXhj
aGFuZ2UgSmF2YVNjcmlwdCBvYmplY3RzLiAqLwpAQCAtMTM1LDQgKzEzOSw4IEBAIEpTX0VYUE9S
VCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXgKIH0KICNlbmRpZgogCisvKiBFbmFibGUg
dGhlIE9iamVjdGl2ZS1DIEFQSSBmb3IgcGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4g
Ki8KKyN1bmRlZiBKU19PQkpDX0FQSV9FTkFCTEVECisjZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJM
RUQgKGRlZmluZWQoX19PQkpDX18pICYmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgKF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkgJiYg
IWRlZmluZWQoX19pMzg2X18pKQorCiAjZW5kaWYgLyogSlNCYXNlX2ggKi8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFj
ZSBKU0Jsb2NrQWRhcHRvciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1
cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIgKilzaWduYXR1cmU7CistIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQg
d2l0aEV4Y2VwdGlvbjooSlNWYWx1ZVJlZiAqKWV4Y2VwdGlvbjsKKworQGVuZAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFT
Y3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNh
c3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAi
SlNCbG9ja0FkYXB0b3IuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0
ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgInd0Zi9P
d25QdHIuaCIKKworZXh0ZXJuICJDIiB7CitpZCBfX05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2Fw
dHVyZUJsb2NrKGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgdm9pZCAoXmhhbmRsZXIpKE5TSW52b2Nh
dGlvbiAqaW52KSk7Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5CbG9ja0FyZ3VtZW50KCk7CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0lu
dm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7CisKKyAg
ICBPd25QdHI8QmxvY2tBcmd1bWVudD4gbV9uZXh0OworfTsKKworQmxvY2tBcmd1bWVudDo6fkJs
b2NrQXJndW1lbnQoKQoreworfQorCitjbGFzcyBCbG9ja0FyZ3VtZW50Qm9vbGVhbiA6IHB1Ymxp
YyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRp
b24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIFtp
bnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEJsb2NrQXJndW1lbnROdW1lcmljIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgor
ICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAg
ICAgICAgVCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpOworICAgIH0KK307CisKK2Ns
YXNzIEJsb2NrQXJndW1lbnRJZCA6IHB1YmxpYyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAg
ICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAg
ICAgIGlkIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVybiBvYmplY3RUb1ZhbHVlKGNvbnRl
eHQsIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50U3RydWN0IDogcHVi
bGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEJsb2NrQXJndW1lbnRTdHJ1Y3QoTlNJ
bnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUp
CisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikK
KyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAg
IE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1l
bnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7
CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7
CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUo
bV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIFtpbnZvY2F0aW9uIGdl
dEFyZ3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKworICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDptX2FsbG9jYXRpb24gYXRJbmRl
eDoyXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6JmNvbnRl
eHQgYXRJbmRleDozXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0
aFRhcmdldDpbSlNWYWx1ZSBjbGFzc11dOworCisgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAg
ICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAg
ICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1f
YnVmZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK2NsYXNzIEJsb2NrQXJndW1l
bnRUeXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQmxvY2tBcmd1bWVudCogUmVz
dWx0VHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5
cGUgdHlwZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50
TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9j
a0FyZ3VtZW50TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
Qm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnRCb29sZWFuOwor
ICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFz
cyhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2so
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJlZ2lu
LCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2lu
LCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVUb1R5
cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3Vt
ZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0K
K307CisKK2NsYXNzIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9ja1Jl
c3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9u
KiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopID0gMDsKK307CisKK2NsYXNz
IEJsb2NrUmVzdWx0Vm9pZCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiop
CisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja1Jl
c3VsdEludGVnZXIgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9
IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgcmVzdWx0LCBleGNlcHRpb24pKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0UmV0
dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgQmxvY2tSZXN1bHREb3VibGUgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAg
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAg
VCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCByZXN1bHQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZh
bHVlOiZ2YWx1ZV07CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHRCb29sZWFuIDogcHVi
bGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVS
ZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0KTsKKyAgICAgICAgW2ludm9jYXRpb24g
c2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja1Jlc3VsdFN0
cnVjdCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgQmxvY2tSZXN1bHRTdHJ1
Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2Rl
ZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2Nh
dGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07Cisg
ICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRB
bGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGln
bm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdu
bWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdu
bWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrUmVzdWx0U3RydWN0KCkKKyAg
ICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBm
cmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlv
biogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZvY2F0
aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52
b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAg
ICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitAaW1wbGVtZW50YXRpb24gSlNCbG9ja0FkYXB0
b3IgeworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhPZmZzZXRz
OworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRz
OworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gbV9yZXN1bHQ7CisgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IG1fYXJndW1lbnRzOworICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnQ7Cit9CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byBhZGQgb2Zmc2V0IGluZm9ybWF0aW9uIGJhY2sgaW50byBhIGJs
b2NrIHNpZ25hdHVyZS4KK3N0YXRpYyBOU1N0cmluZyogYnVpbGRCbG9ja1NpZ25hdHVyZShOU1N0
cmluZyogcHJlZml4LCBjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kLCBOU1VJbnRl
Z2VyJiBvZmZzZXQsIE5TU3RyaW5nKiBwb3N0Zml4KQoreworICAgIFN0cmluZ1JhbmdlIGNvcHko
YmVnaW4sIGVuZCk7CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJUAlcyVsdSVAIiwgcHJlZml4LCBjb3B5LmdldCgpLCBvZmZzZXQsIHBvc3RmaXhd
OworICAgIE5TVUludGVnZXIgc2l6ZTsKKyAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoY29weSwg
JnNpemUsIDApOworICAgIGlmIChzaXplIDwgNCkKKyAgICAgICAgc2l6ZSA9IDQ7CisgICAgb2Zm
c2V0ICs9IHNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoaWQpaW5pdFdpdGhCbG9j
a1NpZ25hdHVyZUZyb21Qcm90b2NvbDooY29uc3QgY2hhciopZW5jb2RlZFR5cGUKK3sKKyAgICBb
c3VwZXIgaW5pdF07CisKKyAgICBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRzID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOmVuY29kZWRUeXBlXTsKKyAgICBtX2FyZ3VtZW50Q291bnQg
PSAwOworCisgICAgLy8gQ3VycmVudGx5IG9ubHkgYWRhcHRpbmcgSmF2YVNjcmlwdCBmdW5jdGlv
bnMgdG8gYmxvY2tzIHJldHVybmluZyB2b2lkLgorICAgIGNvbnN0IGNoYXIqIHJlc3VsdFR5cGVC
ZWdpbiA9IGVuY29kZWRUeXBlOworICAgIGlmICgqZW5jb2RlZFR5cGUrKyAhPSAndicpCisgICAg
ICAgIHJldHVybiBzZWxmOworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRQ
dHIobmV3IEJsb2NrUmVzdWx0Vm9pZCk7CisgICAgY29uc3QgY2hhciogcmVzdWx0VHlwZUVuZCA9
IGVuY29kZWRUeXBlOworCisgICAgaWYgKGVuY29kZWRUeXBlWzBdICE9ICdAJyB8fCBlbmNvZGVk
VHlwZVsxXSAhPSAnPycpIHsKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgfQorICAgIGVuY29k
ZWRUeXBlICs9IDI7CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gYSBibG9jayBpcyB0
aGUgYmxvY2sgaXRzZWxmLgorICAgIE5TU3RyaW5nKiBzaWduYXR1cmUgPSBAIkA/MCI7CisgICAg
TlNVSW50ZWdlciBvZmZzZXQgPSBzaXplb2Yodm9pZCopOworCisgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IGFyZ3VtZW50cyA9IDA7CisgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+KiBuZXh0QXJn
dW1lbnQgPSAmYXJndW1lbnRzOworICAgIHdoaWxlICgqZW5jb2RlZFR5cGUpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogYmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICAgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IGFyZ3VtZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxCbG9ja0FyZ3VtZW50VHlw
ZURlbGVnYXRlPihlbmNvZGVkVHlwZSkpOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGY7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGVuY29kZWRUeXBl
OworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgdHlwZSAmIHN0YWNrIG9mZnNldCBvZiB0aGlzIGFy
Z3VtZW50IHRvIHRoZSBzaWduYXR1cmUgc3RyaW5nLgorICAgICAgICBzaWduYXR1cmUgPSBidWls
ZEJsb2NrU2lnbmF0dXJlKHNpZ25hdHVyZSwgYmVnaW4sIGVuZCwgb2Zmc2V0LCBAIiIpOworCisg
ICAgICAgICpuZXh0QXJndW1lbnQgPSBhcmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRB
cmd1bWVudCA9ICYoKm5leHRBcmd1bWVudCktPm1fbmV4dDsKKyAgICAgICAgKyttX2FyZ3VtZW50
Q291bnQ7CisgICAgfQorCisgICAgLy8gUHJlZml4IHRoZSBzaWduYXR1cmUgd2l0aCB0aGUgcmV0
dXJuIHR5cGUgJiB0b3RhbCBzdGFja2ZyYW1lIHNpemUuCisgICAgLy8gKHRoaXMgY2FsbCB3aWxs
IGFsc28gYWRkIHRoZSByZXR1cm4gdHlwZSBzaXplIHRvIHRoZSBvZmZzZXQsCisgICAgLy8gd2hp
Y2ggaXMgYSBub25zZXNuZSwgYnV0IGhhcm1sZXNzIHNpbmNlIHRoaXMgaXMgdGhlIGxhc3QgdXNl
KS4KKyAgICBzaWduYXR1cmUgPSBidWlsZEJsb2NrU2lnbmF0dXJlKEAiIiwgcmVzdWx0VHlwZUJl
Z2luLCByZXN1bHRUeXBlRW5kLCBvZmZzZXQsIHNpZ25hdHVyZSk7CisKKyAgICBtX3NpZ25hdHVy
ZVdpdGhPZmZzZXRzID0gc2lnbmF0dXJlOworICAgIG1fcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2Uo
KTsKKyAgICBtX2FyZ3VtZW50cyA9IGFyZ3VtZW50cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLy8gVGhlIEpTQmxvY2tBZGFwdG9yIHN0b3JlcyB0aGUgdHlwZSBzdHJpbmcg
dGFrZW4gZnJvbSB0aGUgcHJvdG9jb2wuIFRoaXMgc3RyaW5nCisvLyBkb2VzIG5vdCBjb250YWlu
IGludm9jYXRpb24gbGF5b3V0IGluZm9ybWF0aW9uLiBUaGUgc2lnbmF0dXJlIGZyb20gdGhlIGJs
b2NrCisvLyBkb2VzIGNvbnRhaW4gdGhlIHN0YWNrZnJhbWUgb2Zmc2V0cy4gU2tpcCB0aGVzZSB3
aGVuIGNvbXBhcmluZyBzdHJpbmdzLgorLSAoYm9vbClibG9ja01hdGNoZXNTaWduYXR1cmU6KGlk
KWJsb2NrCit7CisgICAgaWYgKCFfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHdpdGhvdXRPZmZzZXRzPSBbbV9zaWdu
YXR1cmVXaXRob3V0T2Zmc2V0cyBVVEY4U3RyaW5nXTsKKyAgICBjb25zdCBjaGFyKiBzaWduYXR1
cmUgPSBfQmxvY2tfc2lnbmF0dXJlKGJsb2NrKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIHdoaWxlIChpc2RpZ2l0KCp3aXRob3V0T2Zmc2V0cykpCisgICAgICAgICAgICArK3dpdGhv
dXRPZmZzZXRzOworICAgICAgICB3aGlsZSAoaXNkaWdpdCgqc2lnbmF0dXJlKSkKKyAgICAgICAg
ICAgICsrc2lnbmF0dXJlOworICAgICAgICAKKyAgICAgICAgaWYgKCp3aXRob3V0T2Zmc2V0cyAh
PSAqc2lnbmF0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoISp3
aXRob3V0T2Zmc2V0cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICArK3dpdGhv
dXRPZmZzZXRzOworICAgICAgICArK3NpZ25hdHVyZTsKKyAgICB9Cit9CisKKy0gKGlkKWJsb2Nr
RnJvbVZhbHVlOihKU1ZhbHVlUmVmKWFyZ3VtZW50IGluQ29udGV4dDooSlNDb250ZXh0Kiljb250
ZXh0IHdpdGhFeGNlcHRpb246KEpTVmFsdWVSZWYqKWV4Y2VwdGlvbgoreworICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpOworCisgICAg
Ly8gQ2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkLgorICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQo
Y3R4LCBhcmd1bWVudCkgfHwgSlNWYWx1ZUlzTnVsbChjdHgsIGFyZ3VtZW50KSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gMDsKKyAgICBpZiAoaWQg
b2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KSkgeworICAgICAgICAv
LyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYW4gT2JqZWN0aXZlLUMgYmxvY2suCisgICAgICAg
IGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNzKCldKSB7CisgICAgICAg
ICAgICBpZiAoW3NlbGYgYmxvY2tNYXRjaGVzU2lnbmF0dXJlOm9iamVjdF0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9zaWduYXR1
cmVXaXRoT2Zmc2V0cyAmJiBKU1ZhbHVlSXNPYmplY3QoY3R4LCBhcmd1bWVudCkpIHsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbgorICAg
ICAgICAvLyAoYW5kIHRoYXQgd2VyZSBhYmxlIHRvIGNyZWF0ZSBhIGZvcndhcmRpbmcgYmxvY2sg
Zm9yIHRoaXMgc2lnbmF0dXJlKS4KKyAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGN0eCwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChKU09iamVj
dElzRnVuY3Rpb24oY3R4LCBvYmplY3QpKQorICAgICAgICAgICAgZnVuY3Rpb24gPSBvYmplY3Q7
CisgICAgfQorCisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBKU0M6OkFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0odG9KUyhjdHgpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6
Y3JlYXRlVHlwZUVycm9yKHRvSlMoY3R4KSwgIkludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgZm9y
IE9iamVjdGl2ZS1DIGJsb2NrIikpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IC8vIENhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICBKU0Jsb2NrQWRhcHRvciogYWRhcHRvciA9IHNl
bGY7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5jdGlv
biBpbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NQorICAgIC8vIEN1cnJlbnRseSBvbmx5IHN1cHBv
cnRpbmcgdm9pZCBmdW5jdGlvbnMuCisgICAgcmV0dXJuIF9fTlNNYWtlU3BlY2lhbEZvcndhcmRp
bmdDYXB0dXJlQmxvY2soW21fc2lnbmF0dXJlV2l0aE9mZnNldHMgVVRGOFN0cmluZ10sIF4oTlNJ
bnZvY2F0aW9uICppbnZvY2F0aW9uKXsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTQKKyAgICAgICAgLy8gUmF0aGVyIHRoYW4g
cmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRleHQgYmUgcmV0YWluZWQsIGl0IHdvdWxkIHByb2JhYmx5
IGJlIG1vcmUKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgdG8gdXNlIGEgbmV3IEpTQ29udGV4dCBp
bnN0YW5jZSAoY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeSkuCisgICAgICAgIC8vIEl0IHdvdWxk
IGJlIG5pY2UgaWYgd2UgY291bGQgdGhyb3cgYSBKUyBleGNlcHRpb24gaGVyZSwgYnV0IHdpdGhv
dXQgYSBjb250ZXh0IHdlIGhhdmUKKyAgICAgICAgLy8gbm90aGluZyB0byB3b3JrIHdpdGguCisg
ICAgICAgIEpTQ29udGV4dCogY29udGV4dCA9IHZhbHVlLmNvbnRleHQ7CisgICAgICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGN0eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAgSlNWYWx1
ZVJlZiBhcmdzW2FkYXB0b3ItPm1fYXJndW1lbnRDb3VudF07CisKKyAgICAgICAgc2l6ZV90IGFy
Z3VtZW50TnVtYmVyID0gMDsKKyAgICAgICAgQmxvY2tBcmd1bWVudCogYXJndW1lbnRzID0gYWRh
cHRvci0+bV9hcmd1bWVudHMuZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tBcmd1bWVudCogYXJn
dW1lbnQgPSBhcmd1bWVudHM7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQu
Z2V0KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAg
ICAgIGFyZ3NbYXJndW1lbnROdW1iZXJdID0gYXJndW1lbnQtPmdldChpbnZvY2F0aW9uLCBhcmd1
bWVudE51bWJlciArIDEsIGNvbnRleHQsICZleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50TnVtYmVyOworCisgICAgICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjdHgsIEpT
VmFsdWVUb09iamVjdChjdHgsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApLCAwLCBhcmd1
bWVudENvdW50LCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDEw
ICs1MDgsMTAgQEAgdm9pZCogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRQcml2YQogdGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbmhl
cml0cyhKU0NsYXNzUmVmIGMpIGNvbnN0CiB7Ci0gICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3Mg
PSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpCisg
ICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNz
ID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKGpzQ2xhc3MgPT0gYykKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisKKyNpZiBKU19P
QkpDX0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworCisv
LyBBbiBpbnN0YW5jZSBvZiBKU0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0
aW9uIGVudmlyb25tZW50LCBhbGwKKy8vIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNl
IHdpdGhpbiBhIGNvbnRleHQuCisvLyBKU0NvbnRleHQgaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0
aGUgbGlmZS1jeWNsZSBvZiBvYmplY3RzIHdpdGhpbiB0aGUKKy8vIEphdmFTY3JpcHQgdmlydHVh
bCBtYWNoaW5lLiBFdmVyeSBpbnN0YW5jZSBvZiBKU1ZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCBh
CisvLyBKU0NvbnRleHQgdmlhIGEgd2VhayByZWZlcmVuY2UuIFRoZSBKU1ZhbHVlIHdpbGwga2Vl
cCB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBpdAorLy8gcmVmZXJlbmNlcyBhbGl2ZSBzbyBsb25nIGFz
IHRoZSBKU0NvbnRleHQgaXMgYWxzbyByZXRhaW5lZC4gV2hlbiBhbiBpbnN0YW5jZQorLy8gb2Yg
SlNDb250ZXh0IGlzIGRlYWxsb2NhdGVkIGFuZCB0aGUgd2VhayByZWZlcmVuY2VzIHRvIGl0IGFy
ZSBjbGVhcmVkIHRoZQorLy8gSlNWYWx1ZXMgdGhhdCBoYWQgYmVlbiBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBjb250ZXh0IHdpbGwgYmUgaW52YWxpZGF0ZWQsIGFuZAorLy8gd2lsbCBjZWFzZSB0byBr
ZWVwIHRoZSB2YWx1ZXMgd2l0aGluIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBhbGl2ZS4KK05TX0NM
QVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QK
KworLy8gQ3JlYXRlIGEgSlNDb250ZXh0LgorLSAoaWQpaW5pdDsKKy8vIENyZWF0ZSBhIEpTQ29u
dGV4dCBpbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKy0gKGlkKWluaXRXaXRoVmly
dHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworLy8gRXZh
bHVhdGUgYSBzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlLgorLSAoSlNWYWx1ZSAqKWV2YWx1YXRl
U2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdDsKKworLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRo
ZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorLy8g
SW5zdGFuY2VzIG9mIEpTQ29udGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVy
biBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFdpbmRvd1Byb3h5IG9iamVjdC4KKy0gKEpTVmFsdWUg
KilnbG9iYWxPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRo
aW4gYW4gT2JqZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJh
Y2sgZnJvbSBKYXZhU2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIGNvbnRleHQuIE91
dHNpZGUgb2YKKy8vIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwg
cmV0dXJuIG5pbC4KKysgKEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0OworLy8gVGhpcyBtZXRo
b2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRo
b2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUg
dGhlIGNhbGxiYWNrJ3MgdGhpcyB2YWx1ZS4gT3V0c2lkZQorLy8gb2YgYSBjYWxsYmFjayBmcm9t
IEphdmFTY3JpcHQgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoSlNWYWx1ZSAqKWN1
cnJlbnRUaGlzOworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBP
YmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9t
IEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgYXJndW1lbnRzLCBvYmplY3Rz
CisvLyBpbiB0aGUgcmV0dXJuZWQgYXJyYXkgYXJlIGluc3RhbmNlcyBvZiBKU1ZhbHVlLiBPdXRz
aWRlIG9mIGEgY2FsbGJhY2sgZnJvbQorLy8gSmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiBuaWwuCisrIChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50czsKKworLy8gVGhlICJleGNl
cHRpb24iIHByb3BlcnR5IG1heSBiZSB1c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0byBKYXZh
U2NyaXB0LgorLy8gQmVmb3JlIGEgY2FsbGJhY2sgaXMgbWFkZSBmcm9tIEphdmFTY3JpcHQgdG8g
YW4gT2JqZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kLAorLy8gdGhlIHByaW9yIHZhbHVlIG9mIHRo
ZSBleGNlcHRpb24gcHJvcGVydHkgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIHRoZSBwcm9wZXJ0eQor
Ly8gd2lsbCBiZSBzZXQgdG8gbmlsLiBBZnRlciB0aGUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCB0
aGUgbmV3IHZhbHVlIG9mIHRoZQorLy8gZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcmVhZCwg
YW5kIHByaW9yIHZhbHVlIHJlc3RvcmVkLiBJZiB0aGUgbmV3IHZhbHVlCisvLyBvZiBleGNlcHRp
b24gaXMgbm90IG5pbCwgdGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIHRoYXQgdmFsdWUgYmVp
bmcgdGhyb3duLgorLy8gVGhpcyBwcm9wZXJ0eSBtYXkgYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZv
ciB1bmNhdWdodCBleGNlcHRpb25zIGFyaXNpbmcgZnJvbQorLy8gQVBJIGZ1bmN0aW9uIGNhbGxz
IChzaW5jZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgImV4Y2VwdGlvbkhhbmRsZXIiIGlzIHRv
CisvLyBhc3NpZ24gYW50IHVuY2F1Z2h0IGV4Y2VwdGlvbiB0byB0aGlzIHByb3BlcnR5KS4KKy8v
IElmIGEgSlNWYWx1ZSBvcmdpbmF0aW5nIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGlzIHRoaXMgY29udGV4dAorLy8gaXMgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSwgYW4g
T2JqZWN0aXZlLUMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorQHByb3BlcnR5KHJldGFpbikg
SlNWYWx1ZSAqZXhjZXB0aW9uOworCisvLyBJZiBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uIHJl
c3VsdHMgaW4gYW4gdW5jYXVnaHQgSmF2YVNjcmlwdCBleGNlcHRpb24sIHRoZQorLy8gImV4Y2Vw
dGlvbkhhbmRsZXIiIGJsb2NrIHdpbGwgYmUgaW52b2tlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gZm9yIHRoZQorLy8gZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzdG9yZSB0aGUgZXhjZXB0
aW9uIHRvIHRoZSBleGNlcHRpb24gcHJvcGVydHkgb24KKy8vIGNvbnRleHQuIEFzIGEgY29uc2Vx
dWVuY2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucwor
Ly8gb2NjdXJpbmcgd2l0aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhy
b3duIHVwb24gcmV0dXJuLgorLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3Vs
dCBpbiBhbGwgdW5jYXVnaHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQorLy8gdGhlIEFQSSBiZWlu
ZyBzaWxlbnRseSBjb25zdW1lZC4KK0Bwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5k
bGVyKShKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CisKKy8vIEFsbCBp
bnN0YW5jZXMgb2YgSlNDb250ZXh0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgSlNWaXJ0
dWFsTWFjaGluZS4gVGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUgcHJvdmlkZXMgYW4gIm9iamVjdCBz
cGFjZSIgb3Igc2V0IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuCitAcHJvcGVydHkocmVhZG9ubHks
IHJldGFpbikgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmU7CisKK0BlbmQKKworLy8g
SW5zdGFuY2VzIG9mIEpTQ29udGV4dCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGlu
IG9yZGVyIHRvIGVuYWJsZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkg
YW5kIGluZGV4LCBmb3IgZXhhbXBsZToKKy8vCisvLyAgICBKU0NvbnRleHQgKmNvbnRleHQ7Cisv
LyAgICBKU1ZhbHVlICp2ID0gY29udGV4dFtAIlgiXTsgLy8gR2V0IHZhbHVlIGZvciAiWCIgZnJv
bSB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vICAgIGNvbnRleHRbQCJZIl0gPSB2OyAgICAgICAgICAv
LyBBc3NpZ24gJ3YnIHRvICJZIiBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vCisvLyBBbiBvYmpl
Y3Qga2V5IHBhc3NlZCBhcyBhIHN1YnNjcmlwdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEphdmFT
Y2lwdCB2YWx1ZSwKKy8vIGFuZCB0aGVuIHRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcg
dXNlZCB0byByZXNvbHZlIGEgcHJvcGVydHkgb2YgdGhlCisvLyBnbG9iYWwgb2JqZWN0LgorQGlu
dGVyZmFjZSBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVj
dEZvcktleWVkU3Vic2NyaXB0OihpZClrZXk7CistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0
IGZvcktleWVkU3Vic2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CisKK0BlbmQKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0dsb2JhbE9iamVjdC5oIgorI2lt
cG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUu
aCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0IDx3dGYvSGFzaFNldC5o
PgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCit0eXBlZGVmIFdURjo6SGFzaE1hcDxKU1Zh
bHVlUmVmLCBzaXplX3Q+IFByb3RlY3RNYXA7CisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQg
eworICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNHbG9iYWxD
b250ZXh0UmVmIG1fY29udGV4dDsKKyAgICBKU1dyYXBwZXJNYXAgKm1fd3JhcHBlck1hcDsKKyAg
ICBQcm90ZWN0TWFwIG1fcHJvdGVjdGVkOworfQorCitAc3ludGhlc2l6ZSBleGNlcHRpb247CitA
c3ludGhlc2l6ZSBleGNlcHRpb25IYW5kbGVyOworCistIChpZClpbml0Cit7CisgICAgcmV0dXJu
IFtzZWxmIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdXTsKK30KKworLSAoaWQpaW5pdFdpdGhWaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lCit7CisgICAgW3N1cGVyIGluaXRdOwor
CisgICAgbV92aXJ0dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRhaW5dOworICAgIG1f
Y29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVh
bE1hY2hpbmUodmlydHVhbE1hY2hpbmUpLCAwKTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3Jh
cHBlck1hcCBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRp
b24gPSBuaWw7CisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQqIGNvbnRl
eHQsIEpTVmFsdWUgKmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9u
ID0gZXhjZXB0aW9uVmFsdWU7CisgICAgfTsKKworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQor
CistIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0Cit7CisgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IDA7CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0SlMg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpc2NyaXB0KTsKKyAgICBK
U1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUywg
MCwgMCwgMCwgJmV4Y2VwdGlvblZhbHVlKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0SlMp
OworCisgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVG
cm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworfQorCistIChKU1ZhbHVl
ICopZ2xvYmFsT2JqZWN0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpT
Q29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQpIGluQ29udGV4dDpzZWxmXTsKK30KKwor
KyAoSlNDb250ZXh0ICopY3VycmVudENvbnRleHQKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJl
YWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAoQ2Fs
bGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgcmV0dXJuIGVudHJ5ID8gZW50
cnktPmNvbnRleHQgOiBuaWw7Cit9CisKKysgKEpTVmFsdWUgKiljdXJyZW50VGhpcworeworICAg
IFdURlRocmVhZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJh
Y2tEYXRhICplbnRyeSA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKwor
ICAgIGlmICghZW50cnktPmN1cnJlbnRUaGlzKQorICAgICAgICBlbnRyeS0+Y3VycmVudFRoaXMg
PSBbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6ZW50cnktPnRoaXNWYWx1ZSBpbkNvbnRl
eHQ6W0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1dOworCisgICAgcmV0dXJuIGVudHJ5LT5jdXJy
ZW50VGhpczsKK30KKworKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1bWVudHMKK3sKKyAgICBXVEZU
aHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0
YSAqZW50cnkgPSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBp
ZiAoIWVudHJ5LT5jdXJyZW50QXJndW1lbnRzKSB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgICAgICBzaXplX3QgY291bnQgPSBl
bnRyeS0+YXJndW1lbnRDb3VudDsKKyAgICAgICAgSlNWYWx1ZSAqIGFyZ3NbY291bnRdOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0wOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3Nb
aV0gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTplbnRyeS0+YXJndW1lbnRzW2ldIGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICAgICAgZW50cnktPmN1cnJlbnRBcmd1bWVudHMgPSBbW05TQXJyYXkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0czphcmdzIGNvdW50OmNvdW50XTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZW50cnktPmN1cnJlbnRBcmd1bWVudHM7Cit9CisKKy0gKEpTVmlydHVhbE1hY2hpbmUq
KXZpcnR1YWxNYWNoaW5lCit7CisgICAgcmV0dXJuIG1fdmlydHVhbE1hY2hpbmU7Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQorCistIChK
U1ZhbHVlICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleQoreworICAgIHJldHVybiBb
c2VsZiBnbG9iYWxPYmplY3RdW2tleV07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmpl
Y3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIFtzZWxmIGds
b2JhbE9iamVjdF1ba2V5XSA9IG9iamVjdDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
SlNDb250ZXh0KEludGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFs
Q29udGV4dChKU0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fY29u
dGV4dDsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm1fYXBpRGF0YSA9IDA7CisKKyAgICBQcm90ZWN0TWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdGVkLmJlZ2luKCk7CisgICAgUHJvdGVjdE1hcDo6aXRl
cmF0b3IgZW5kID0gbV9wcm90ZWN0ZWQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVu
ZDsgKytpdGVyYXRvcikKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIGl0ZXJh
dG9yLT5rZXkpOworCisgICAgW21fd3JhcHBlck1hcCByZWxlYXNlXTsKKyAgICBKU0dsb2JhbENv
bnRleHRSZWxlYXNlKG1fY29udGV4dCk7CisgICAgW21fdmlydHVhbE1hY2hpbmUgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNW
YWx1ZVJlZilleGNlcHRpb25WYWx1ZQoreworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxm
LCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2VsZl0p
OworfQorCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVm
KWV4Y2VwdGlvblZhbHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZh
bHVlXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OnNl
bGZdOworfQorCistIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4
Y2VwdGlvblZhbHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVl
XTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihD
YWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1
ZSBhcmd1bWVudENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpT
VmFsdWVSZWYgKilhcmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0g
d3RmVGhyZWFkRGF0YSgpOworICAgIFtzZWxmIHJldGFpbl07CisgICAgQ2FsbGJhY2tEYXRhICpw
cmV2U3RhY2sgPSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgKmNh
bGxiYWNrRGF0YSA9IChDYWxsYmFja0RhdGEpeyBwcmV2U3RhY2ssIHNlbGYsIFtzZWxmLmV4Y2Vw
dGlvbiByZXRhaW5dLCB0aGlzVmFsdWUsIG5pbCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBu
aWwgfTsKKyAgICB0aHJlYWREYXRhLm1fYXBpRGF0YSA9IGNhbGxiYWNrRGF0YTsKKyAgICBzZWxm
LmV4Y2VwdGlvbiA9IG5pbDsKK30KKworLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxs
YmFja0RhdGEgKiljYWxsYmFja0RhdGEKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRh
ID0gd3RmVGhyZWFkRGF0YSgpOworICAgIHNlbGYuZXhjZXB0aW9uID0gY2FsbGJhY2tEYXRhLT5w
cmVzZXJ2ZWRFeGNlcHRpb247CisgICAgW2NhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0aW9u
IHJlbGVhc2VdOworICAgIFtjYWxsYmFja0RhdGEtPmN1cnJlbnRUaGlzIHJlbGVhc2VdOworICAg
IFtjYWxsYmFja0RhdGEtPmN1cnJlbnRBcmd1bWVudHMgcmVsZWFzZV07CisgICAgdGhyZWFkRGF0
YS5tX2FwaURhdGEgPSBjYWxsYmFja0RhdGEtPm5leHQ7CisgICAgW3NlbGYgcmVsZWFzZV07Cit9
CisKKy0gKHZvaWQpcHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIC8vIExvY2sgYWNj
ZXNzIHRvIG1fcHJvdGVjdGVkCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29u
dGV4dCkpOworCisgICAgUHJvdGVjdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcHJvdGVjdGVk
LmFkZCh2YWx1ZSwgMSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBKU1Zh
bHVlUHJvdGVjdChtX2NvbnRleHQsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgICsrcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworLSAodm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFs
dWUKK3sKKyAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RlZAorICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKKworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9wcm90ZWN0ZWQuZmluZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52
YWx1ZSA9PSAxKSB7CisgICAgICAgIG1fcHJvdGVjdGVkLnJlbW92ZSh2YWx1ZSk7CisgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAg
IC0taXRlcmF0b3ItPnZhbHVlOworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDoo
aWQpb2JqZWN0Cit7CisgICAgLy8gTG9jayBhY2Nlc3MgdG8gbV93cmFwcGVyTWFwCisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworICAgIHJldHVybiBbbV93cmFw
cGVyTWFwIHdyYXBwZXJGb3JPYmplY3Q6b2JqZWN0XTsKK30KKworQGVuZAorCitXZWFrQ29udGV4
dFJlZjo6V2Vha0NvbnRleHRSZWYoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfaW5p
dFdlYWsoJm1fd2Vha0NvbnRleHQsIGNvbnRleHQpOworfQorCitXZWFrQ29udGV4dFJlZjo6fldl
YWtDb250ZXh0UmVmKCkKK3sKKyAgICBvYmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsK
K30KKworSlNDb250ZXh0ICogV2Vha0NvbnRleHRSZWY6OmdldCgpCit7CisgICAgcmV0dXJuIG9i
amNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQpOworfQorCit2b2lkIFdlYWtDb250ZXh0UmVmOjpz
ZXQoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfc3RvcmVXZWFrKCZtX3dlYWtDb250
ZXh0LCBjb250ZXh0KTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQ
SV9FTkFCTEVECisKKyNpbXBvcnQgIkpTQ29udGV4dC5oIgorCitzdHJ1Y3QgQ2FsbGJhY2tEYXRh
IHsKKyAgICBDYWxsYmFja0RhdGEgKm5leHQ7CisgICAgSlNDb250ZXh0ICpjb250ZXh0OworICAg
IEpTVmFsdWUgKnByZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHRoaXNWYWx1ZTsK
KyAgICBKU1ZhbHVlICpjdXJyZW50VGhpczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudDsKKyAg
ICBjb25zdCBKU1ZhbHVlUmVmICphcmd1bWVudHM7CisgICAgTlNBcnJheSAqY3VycmVudEFyZ3Vt
ZW50czsKK307CisKK2NsYXNzIFdlYWtDb250ZXh0UmVmIHsKK3B1YmxpYzoKKyAgICBXZWFrQ29u
dGV4dFJlZihKU0NvbnRleHQqID0gbmlsKTsKKyAgICB+V2Vha0NvbnRleHRSZWYoKTsKKworICAg
IEpTQ29udGV4dCAqIGdldCgpOworICAgIHZvaWQgc2V0KEpTQ29udGV4dCopOworCitwcml2YXRl
OgorICAgIEpTQ29udGV4dCAqbV93ZWFrQ29udGV4dDsKK307CisKK0BpbnRlcmZhY2UgSlNDb250
ZXh0KEludGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4
dChKU0NvbnRleHQgKik7CisKKy0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4
Y2VwdGlvbjsKKy0gKEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVS
ZWYpZXhjZXB0aW9uOworLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJl
ZilleGNlcHRpb247CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0Rh
dGEgKiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVu
dENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYg
Kilhcmd1bWVudHM7CistICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAq
KWNhbGxiYWNrRGF0YTsKKworLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworLSAo
dm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWU7CisKKy0gKEpTVmFsdWUgKil3cmFwcGVy
Rm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTRXhwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisv
LyBXaGVuIGFuIEphdmFTY3JpcHQgdmFsdWUgaXMgY3JlYXRlZCBmcm9tIGFuIGluc3RhbmNlIG9m
IGFuIE9iamVjdGl2ZS1DIGNsYXNzCisvLyBmb3Igd2hpY2ggbm8gY29weWluZyBjb252ZXJzaW9u
IGlzIHNwZWNpZmllZCBhIEphdmFTY3JpcHQgd3JhcHBlciBvYmplY3Qgd2lsbAorLy8gYmUgY3Jl
YXRlZC4KKy8vCisvLyBJbiBKYXZhU2NyaXB0IGluaGVyaXRhbmNlIGlzIHN1cHBvcnRlZCB2aWEg
YSBjaGFpbiBvZiBwcm90b3R5cGUgb2JqZWN0cywgYW5kCisvLyBmb3IgZWFjaCBPYmplY3RpdmUt
QyBjbGFzcyAoYW5kIHBlciBKU0NvbnRleHQpIGFuIG9iamVjdCBhcHByb3ByaWF0ZSBmb3IgdXNl
CisvLyBhcyBhIHByb3RvdHlwZSB3aWxsIGJlIHByb3ZpZGVkLiBGb3IgdGhlIGNsYXNzIE5TT2Jq
ZWN0IHRoZSBwcm90b3R5cGUgb2JqZWN0CisvLyB3aWxsIGJlIHRoZSBKYXZhU2NyaXB0IGNvbnRl
eHQncyBPYmplY3QgUHJvdG90eXBlLiBGb3IgYWxsIG90aGVyIE9iamVjdGl2ZS1DCisvLyBjbGFz
c2VzIGEgUHJvdG90eXBlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuIFRoZSBQcm90b3R5cGUgb2Jq
ZWN0IGZvciBhIGdpdmVuCisvLyBPYmplY3RpdmUtQyBjbGFzcyB3aWxsIGhhdmUgaXRzIGludGVy
bmFsIFtQcm90b3R5cGVdIHByb3BlcnR5IHNldCB0byBwb2ludCB0bworLy8gdGhlIFByb3RvdHlw
ZSBvYmplY3Qgb2YgdGhlIE9iamVjdGl2ZS1DIGNsYXNzJ3Mgc3VwZXJjbGFzcy4gQXMgc3VjaCB0
aGUKKy8vIHByb3RvdHlwZSBjaGFpbiBmb3IgYSBKYXZhU2NyaXB0IHdyYXBwZXIgb2JqZWN0IHdp
bGwgcmVmbGVjdCB0aGUgd3JhcHBlZAorLy8gT2JqZWN0aXZlLUMgdHlwZSdzIGluaGVyaXRhbmNl
IGhpZXJhcmNoeS4KKy8vCisvLyBJbiBhZGRpdGlvbiB0byB0aGUgUHJvdG90eXBlIG9iamVjdCBh
IEphdmFTY3JpcHQgQ29uc3RydWN0b3Igb2JqZWN0IHdpbGwgYWxzbworLy8gYmUgcHJvZHVjZWQg
Zm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MuIFRoZSBDb25zdHJ1Y3RvciBvYmplY3QgaGFzIGEg
cHJvcGVydHkKKy8vIG5hbWVkICdwcm90b3R5cGUnIHRoYXQgcmVmZXJlbmNlcyB0aGUgUHJvdG90
eXBlIG9iamVjdCwgYW5kIHRoZSBQcm90b3R5cGUKKy8vIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBu
YW1lZCAnY29uc3RydWN0b3InIHRoYXQgcmVmZXJlbmNlcyB0aGUgQ29uc3RydWN0b3IuCisvLyBU
aGUgQ29uc3RydWN0b3Igb2JqZWN0IGlzIG5vdCBjYWxsYWJsZS4KKy8vCisvLyBCeSBkZWZhdWx0
IG5vIG1ldGhvZHMgb3IgcHJvcGVydGllcyBvZiB0aGUgT2JqZWN0aXZlLUMgY2xhc3Mgd2lsbCBi
ZSBleHBvc2VkCisvLyB0byBKYXZhU2NyaXB0LCBob3dldmVyIG1ldGhvZHMgYW5kIHByb3BlcnRp
ZXMgbWF5IGV4cGxpY2l0bHkgYmUgZXhwb3J0ZWQuCisvLyBGb3IgZWFjaCBwcm90b2NvbCB0aGF0
IGEgY2xhc3MgY29uZm9ybXMgdG8sIGlmIHRoZSBwcm90b2NvbCBpbmNvcnBvcmF0ZXMgdGhlCisv
LyBwcm90b2NvbCBKU0V4cG9ydCwgdGhlbiB0aGUgcHJvdG9jb2wgd2lsbCBiZSBpbnRlcnByZXRl
ZCBhcyBhIGxpc3Qgb2YgbWV0aG9kcworLy8gYW5kIHByb3BlcnRpZXMgdG8gYmUgZXhwb3J0ZWQg
dG8gSmF2YVNjcmlwdC4KKy8vCisvLyBGb3IgZWFjaCBpbnN0YW5jZSBtZXRob2QgYmVpbmcgZXhw
b3J0ZWQsIGEgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9uCisvLyB3aWxsIGJlIGFz
c2lnbmVkIGFzIGEgcHJvcGVydHkgb2YgdGhlIFByb3RvdHlwZSBvYmplY3QsIGZvciBlYWNoIE9i
amVjdGl2ZS1DCisvLyBwcm9wZXJ0eSBiZWluZyBleHBvcnRlZCBhIEphdmFTY3JpcHQgYWNjZXNz
b3IgcHJvcGVydHkgd2lsbCBiZSBjcmVhdGVkIG9uIHRoZQorLy8gUHJvdG90eXBlLCBhbmQgZm9y
IGVhY2ggY2xhc3MgbWV0aG9kIGV4cG9ydGVkIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiB3aWxsIGJl
CisvLyBjcmVhdGVkIG9uIHRoZSBDb25zdHJ1Y3RvciBvYmplY3QuIEZvciBleGFtcGxlOgorLy8K
Ky8vICAgIEBwcm90b2NvbCBNeUNsYXNzSmF2YVNjcmlwdE1ldGhvZHMgPEpTRXhwb3J0PgorLy8g
ICAgLSAodm9pZClmb287CisvLyAgICBAZW5kCisvLworLy8gICAgQGludGVyZmFjZSBNeUNsYXNz
IDogTlNPYmplY3QgPE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcz4KKy8vICAgIC0gKHZvaWQpZm9v
OworLy8gICAgLSAodm9pZCliYXI7CisvLyAgICBAZW5kCisvLworLy8gSWYgYW4gaW5zdGFuY2Ug
b2YgTXlDbGFzcyBpcyBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IHZhbHVlLCB0aGUgcmVzdWx0
aW5nCisvLyB3cmFwcGVyIG9iamVjdCB3aWxsICh2aWEgaXRzIHByb3RvdHlwZSkgZXhwb3J0IHRo
ZSBtZXRob2QgImZvbyIgdG8gSmF2YVNjcmlwdCwKKy8vIHNpbmNlIHRoZSBjbGFzcyBjb25mb3Jt
cyB0byB0aGUgTXlDbGFzc0phdmFTY3JpcHRFeHBvcnRzIHByb3RvY29sLCBhbmQgdGhpcworLy8g
cHJvdG9jb2wgaW5jb3Jwb3JhdGVzIEpTRXhwb3J0LiAiYmFyIiB3aWxsIG5vdCBiZSBleHBvcnRl
ZC4KKy8vCisvLyBQcm9wZXJ0aWVzLCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdmFsdWVzIG9mIHRo
ZSBmb2xsb3dpbmcgdHlwZXMgYXJlCisvLyBzdXBwb3J0ZWQ6CisvLworLy8gUHJpbWl0aXZlIG51
bWJlcnM6IHNpZ25lZCB2YWx1ZXMgb2YgdXAgdG8gMzItYml0cyBhcmUgY29udmVydGVkIGluIGEg
bWFubmVyCisvLyAgICBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoSW50MzIvdG9JbnQzMiwgdW5z
aWduZWQgdmFsdWVzIG9mIHVwIHRvIDMyLWJpdHMKKy8vICAgIGFyZSBjb252ZXJ0ZWQgaW4gYSBt
YW5uZXIgY29uc2lzdGVudCB3aXRoIHZhbHVlV2l0aFVJbnQzMi90b1VJbnQzMiwgYWxsCisvLyAg
ICBvdGhlciBudW1lcmljIHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRoIHZh
bHVlV2l0aERvdWJsZS8KKy8vICAgIHRvRG91YmxlLgorLy8gQk9PTDogdmFsdWVzIGFyZSBjb252
ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFsdWVXaXRoQm9vbC90b0Jvb2wuCisvLyBpZDogdmFs
dWVzIGFyZSBjb252ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFsdWVXaXRoT2JqZWN0L3RvT2Jq
ZWN0LgorLy8gPE9iamVjdGl2ZS1DIENsYXNzPjogLSB3aGVyZSB0aGUgdHlwZSBpcyBhIHBvaW50
ZXIgdG8gYSBzcGVjaWZpZWQgT2JqZWN0aXZlLUMKKy8vICAgIGNsYXNzLCBjb252ZXJzaW9uIGlz
IGNvbnNpc3RlbnQgd2l0aCB2YWx1ZVdpdGhPYmplY3RPZkNsYXNzL3RvT2JqZWN0LgorLy8gc3Ry
dWN0IHR5cGVzOiBDIHN0cnVjdCB0eXBlcyBhcmUgc3VwcG9ydGVkLCB3aGVyZSBKU1ZhbHVlIHBy
b3ZpZGVzIHN1cHBvcnQKKy8vICAgIGZvciB0aGUgZ2l2ZW4gdHlwZS4gU3VwcG9ydCBpcyBidWls
dCBpbiBmb3IgQ0dQb2ludCwgTlNSYW5nZSwgQ0dSZWN0LCBhbmQKKy8vICAgIENHU2l6ZTsgc2Vl
IEpTVmFsdWVTdHJ1Y3RTdXBwb3J0LmggZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhZGQgc3Vw
cG9ydAorLy8gICAgZm9yIGFkZGl0aW9uYWwgdHlwZXMuCisvLyBibG9jayB0eXBlczogSW4gYWRk
aXRpb24gdG8gc3VwcG9ydCBwcm92aWRlZCBieSB2YWx1ZVdpdGhPYmplY3QvdG9PYmplY3QgZm9y
CisvLyAgICBibG9jayB0eXBlcywgaWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIGlzIHBhc3NlZCBh
cyBhbiBhcmd1bWVudCwgd2hlcmUgdGhlCisvLyAgICB0eXBlIHJlcXVpcmVkIGlzIGEgYmxvY2sg
d2l0aCBhIHZvaWQgcmV0dXJuIHZhbHVlIChhbmQgd2hlcmUgdGhlIGJsb2NrJ3MKKy8vICAgIGFy
Z3VtZW50cyBhcmUgYWxsIG9mIHN1cHBvcnRlZCB0eXBlcyksIHRoZW4gYSBzcGVjaWFsIGFkYXB0
b3IgYmxvY2sKKy8vICAgIHdpbGwgYmUgY3JlYXRlZCwgYWxsb3dpbmcgdGhlIHRoZSBKYXZhU2Ny
aXB0IGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4gdGhlCisvLyAgICBwbGFjZSBvZiBhIGJsb2NrLgor
Ly8KKy8vIEZvciBhbnkgaW50ZXJmYWNlIHRoYXQgY29uZm9ybXMgdG8gSlNFeHBvcnQgdGhlIG5v
cm1hbCBjb3B5aW5nIGNvbnZlcnNpb24gZm9yCisvLyBidWlsdCBpbiB0eXBlcyB3aWxsIGJlIGlu
aGliaXRlZCAtIHNvLCBmb3IgZXhhbXBsZSwgaWYgYW4gaW5zdGFuY2UgdGhhdAorLy8gZGVyaXZl
cyBmcm9tIE5TU3RyaW5nIGJ5IGNvbmZvcm1zIHRvIEpTRXhwb3J0IGlzIHBhc3NlZCB0byB2YWx1
ZVdpdGhPYmplY3Q6LAorLy8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIE9iamVjdGl2ZS1DIG9i
amVjdCB3aWxsIGJlIHJldHVybmVkIHJhdGhlciB0aGFuIGEKKy8vIEphdmFTY3JpcHQgc3RyaW5n
IHByaW1pdGl2ZS4KK0Bwcm90b2NvbCBKU0V4cG9ydAorQGVuZAorCisvLyBXaGVuIGEgc2VsZWN0
b3IgdGhhdCB0YWtlcyBvbmUgb3IgbW9yZSBhcmd1bWVudHMgaXMgY29udmVydGVkIHRvIGEgSmF2
YVNjcmlwdAorLy8gcHJvcGVydHkgbmFtZSwgYnkgZGVmYXVsdCBhIHByb3BlcnR5IG5hbWUgd2ls
bCBiZSBnZW5lcmF0ZWQgYnkgcGVyZm9ybWluZyB0aGUKKy8vIGZvbGxvd2luZyBjb252ZXJzaW9u
OgorLy8gIC0gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc2VsZWN0b3IKKy8v
ICAtIEFueSBsb3dlcmNhc2UgbGV0dGVyIHRoYXQgaGFkIGZvbGxvd2VkIGEgc2VtaWNvbG9uIHdp
bGwgYmUgY2FwaXRhbGl6ZWQuCisvLyBVbmRlciB0aGUgZGVmYXVsdCBjb252ZXJzaW9uIGEgc2Vs
ZWN0b3IgImRvRm9vOndpdGhCYXI6IiB3aWxsIGJlIGV4cG9ydGVkIGFzCisvLyAiZG9Gb29XaXRo
QmFyIi4gVGhlIGRlZmF1bHQgY29udmVyc2lvbiBtYXkgYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBK
U0V4cG9ydEFzCisvLyBtYWNybywgZm9yIGV4YW1wbGUgdG8gZXhwb3J0IGEgbWV0aG9kICJkb0Zv
bzp3aXRoQmFyOiIgYXMgImRvRm9vIjoKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlDbGFzc0phdmFT
Y3JpcHRNZXRob2RzIDxKU0V4cG9ydD4KKy8vICAgIEpTRXhwb3J0QXMoZG9Gb28sCisvLyAgICAt
ICh2b2lkKWRvRm9vOihpZClmb28gd2l0aEJhcjooaWQpYmFyCisvLyAgICApOworLy8gICAgQGVu
ZAorLy8KKy8vIE5vdGUgdGhhdCB0aGUgSlNFeHBvcnQgbWFjcm8gbWF5IG9ubHkgYmUgYXBwbGll
ZCB0byBhIHNlbGVjdG9yIHRoYXQgdGFrZXMgb25lCisvLyBvciBtb3JlIGFyZ3VtZW50LgorI2Rl
ZmluZSBKU0V4cG9ydEFzKFByb3BlcnR5TmFtZSwgU2VsZWN0b3IpIFwKKyAgICBAb3B0aW9uYWwg
U2VsZWN0b3IgX19KU19FWFBPUlRfQVNfXyMjUHJvcGVydHlOYW1lOihpZClhcmd1bWVudDsgQHJl
cXVpcmVkIFNlbGVjdG9yCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
YWx1ZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQg
IkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJEYXRlSW5zdGFuY2Uu
aCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAu
aCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisj
aW1wb3J0ICJ3dGYvSGFzaE1hcC5oIgorI2ltcG9ydCAid3RmL0hhc2hTZXQuaCIKKyNpbXBvcnQg
Ind0Zi9WZWN0b3IuaCIKKyNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisjaW1wb3J0ICJ3dGYv
dGV4dC9XVEZTdHJpbmcuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3Jp
cHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVy
dHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CitOU1N0cmluZyAqIGNv
bnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5ID0gQCJjb25maWd1cmFibGUi
OworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5ID0gQCJ2YWx1
ZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5ID0gQCJnZXQi
OworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleSA9IEAic2V0IjsK
KworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUgeworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsKKyAg
ICBKU0NvbnRleHQgKm1fd2Vha0NvbnRleHQ7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhP
YmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVl
KSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9P
TCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVl
ICopdmFsdWVXaXRoRG91YmxlOihkb3VibGUpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVX
aXRoVUludDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQK
K3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0
XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmpl
Y3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApIGluQ29udGV4dDpj
b250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpK
U09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxM
LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVn
dWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0
cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIEpTU3Ry
aW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJp
bmdSZWYpcGF0dGVybik7CisgICAgSlNTdHJpbmdSZWYgZmxhZ3NTdHJpbmcgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpZmxhZ3MpOworICAgIEpTVmFsdWVSZWYgYXJn
dW1lbnRzWzJdID0geyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBwYXR0ZXJuU3RyaW5nKSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgZmxhZ3NTdHJpbmcpIH07CisgICAgSlNTdHJpbmdSZWxlYXNlKHBh
dHRlcm5TdHJpbmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShmbGFnc1N0cmluZyk7CisKKyAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlUmVnRXhwKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIDIsIGFyZ3VtZW50cywgMCkgaW5Db250ZXh0OmNvbnRl
eHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICBKU1N0
cmluZ1JlZiBzdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYp
bWVzc2FnZSk7CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAgSlNTdHJpbmdSZWxl
YXNlKHN0cmluZyk7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmpl
Y3RNYWtlRXJyb3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3VtZW50
LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTnVsbElu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bGwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVuZGVmaW5l
ZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKGlkKXRvT2JqZWN0Cit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KGNvbnRleHQs
IG1fdmFsdWUpOworfQorLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHMKK3sKKyAgICBp
ZCByZXN1bHQgPSBbc2VsZiB0b09iamVjdF07CisgICAgcmV0dXJuIFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpjbHNdID8gcmVzdWx0IDogbmlsOworfQorCistIChCT09MKXRvQm9vbAoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4dCAm
JiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFs
dWUpKSA/IFlFUyA6IE5POworfQorLSAoZG91YmxlKXRvRG91YmxlCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChpbnQzMl90
KXRvSW50MzIKK3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKFtzZWxmIHRvRG91YmxlXSk7Cit9
CistICh1aW50MzJfdCl0b1VJbnQzMgoreworICAgIHJldHVybiBKU0M6OnRvVUludDMyKFtzZWxm
IHRvRG91YmxlXSk7Cit9CistIChOU051bWJlciAqKXRvTnVtYmVyCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3Vs
dCA9IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TU3Ry
aW5nICopdG9TdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0
XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
ZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNEYXRlICopdG9EYXRlCit7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJl
c3VsdCA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFs
dWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0IG5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChOU0Fy
cmF5ICopdG9BcnJheQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRd
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvQXJyYXkoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TRGljdGlvbmFyeSAqKXRvRGljdGlvbmFyeQorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
KyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAg
ICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCistIChKU1ZhbHVlICopdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9w
ZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVl
UmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
bmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVl
RnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistICh2b2lkKXNldFZh
bHVlOihpZCl2YWx1ZSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgb2JqZWN0
VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVs
ZWFzZShuYW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0IG5vdGlm
eUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorfQorLSAoQk9P
TClkZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
cmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAg
ICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5n
UmVmKXByb3BlcnR5TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdERlbGV0ZVByb3Bl
cnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4Y2Vw
dGlvbikgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9PTCloYXNQcm9wZXJ0
eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsKKwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0
IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBu
YW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFt
ZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSkgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmlu
Z1JlbGVhc2UobmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKHZvaWQpZGVmaW5lUHJv
cGVydHk6KE5TU3RyaW5nICopcHJvcGVydHkgZGVzY3JpcHRvcjooaWQpZGVzY3JpcHRvcgorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFtbY29udGV4dCBnbG9iYWxPYmplY3RdW0AiT2JqZWN0
Il0gaW52b2tlTWV0aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVudHM6QFsgc2VsZiwg
cHJvcGVydHksIGRlc2NyaXB0b3IgXV07Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUF0SW5kZXg6
KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAo
aW5kZXggIT0gKHVuc2lnbmVkKWluZGV4KQorICAgICAgICBbc2VsZiB2YWx1ZUZvclByb3BlcnR5
OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3Ry
aW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCks
IG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVy
biBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAodm9pZClzZXRWYWx1ZToo
aWQpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHNldFZhbHVlOnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6
aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsICh1bnNpZ25l
ZClpbmRleCwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNVbmRlZmluZWQK
K3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4g
KGNvbnRleHQgJiYgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051bGwKK3sKKyAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQg
JiYgSlNWYWx1ZUlzTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVl
KSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNCb29sZWFuCit7CisgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJ
c0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVT
IDogTk87Cit9CistIChCT09MKWlzTnVtYmVyCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc051bWJlcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30K
Ky0gKEJPT0wpaXNTdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClp
c09iamVjdAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CisKKy0gKEJPT0wpaXNFcXVhbFRv
T2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJu
IEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAo
Qk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEJP
T0wgcmVzdWx0ID0gSlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pID8g
WUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJv
b2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZhbHVlCit7CisgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
Tk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgY29u
c3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworCisgICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29u
c3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgY29uc3Ry
dWN0b3IsICZleGNlcHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChKU1ZhbHVlICopY2FsbFdpdGhBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50
ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFsdWVSZWYgYXJndW1l
bnRzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVu
dENvdW50OyArK2kpCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoY29udGV4
dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9
IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNl
cHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIDAsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwor
CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29u
dGV4dF07Cit9CistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBcnJheSAq
KWFyZ3MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJbnRlZ2VyIGFyZ3Vt
ZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbYXJndW1l
bnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCBbYXJncyBv
YmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9
CistIChKU1ZhbHVlICopaW52b2tlTWV0aG9kOihOU1N0cmluZyAqKW1ldGhvZCB3aXRoQXJndW1l
bnRzOihOU0FycmF5ICopYXJndW1lbnRzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3Nl
bGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50cyBjb3VudF07CisgICAgSlNW
YWx1ZVJlZiBhcmdzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBvYmplY3RUb1ZhbHVlKGNv
bnRleHQsIFthcmd1bWVudHMgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgdGhpc09iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsK
KyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7CisgICAgSlNWYWx1ZVJl
ZiBmdW5jID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
bmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVl
RnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNPYmplY3RSZWYgb2JqZWN0
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZ1bmMs
ICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4
dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU0NvbnRleHQg
Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQpOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN0cnVjdFN1cHBvcnQpCisKKy0g
KENHUG9pbnQpdG9Qb2ludAoreworICAgIHJldHVybiAoQ0dQb2ludCl7CisgICAgICAgIFtzZWxm
W0AieCJdIHRvRG91YmxlXSwKKyAgICAgICAgW3NlbGZbQCJ5Il0gdG9Eb3VibGVdCisgICAgfTsK
K30KKworLSAoTlNSYW5nZSl0b1JhbmdlCit7CisgICAgcmV0dXJuIChOU1JhbmdlKXsKKyAgICAg
ICAgKE5TVUludGVnZXIpW3NlbGZbQCJsb2NhdGlvbiJdIHRvRG91YmxlXSwKKyAgICAgICAgKE5T
VUludGVnZXIpW3NlbGZbQCJsZW5ndGgiXSB0b0RvdWJsZV0KKyAgICB9OworfQorCistIChDR1Jl
Y3QpdG9SZWN0Cit7CisgICAgcmV0dXJuIChDR1JlY3QpeworICAgICAgICBbc2VsZiB0b1BvaW50
XSwKKyAgICAgICAgW3NlbGYgdG9TaXplXQorICAgIH07Cit9CisKKy0gKENHU2l6ZSl0b1NpemUK
K3sKKyAgICByZXR1cm4gKENHU2l6ZSl7CisgICAgICAgIFtzZWxmW0Aid2lkdGgiXSB0b0RvdWJs
ZV0sCisgICAgICAgIFtzZWxmW0AiaGVpZ2h0Il0gdG9Eb3VibGVdCisgICAgfTsKK30KKworKyAo
SlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsK
KyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBvaW50LnhdLAorICAgICAg
ICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueV0KKyAgICB9IGluQ29udGV4
dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJhbmdlOihOU1JhbmdlKXJh
bmdlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJsb2NhdGlvbiI6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpyYW5nZS5sb2NhdGlvbl0sCisgICAgICAgIEAibGVuZ3RoIjpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnJhbmdlLmxlbmd0aF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsK
K30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0IGluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmpl
Y3Q6QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJlY3Qub3JpZ2lu
LnhdLAorICAgICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmlnaW4u
eV0sCisgICAgICAgIEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5zaXpl
LndpZHRoXSwKKyAgICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVj
dC5zaXplLmhlaWdodF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1
ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAg
QCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLndpZHRoXSwKKyAgICAgICAg
QCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWlnaHRdCisgICAgfSBp
bkNvbnRleHQ6Y29udGV4dF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUo
U3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2NyaXB0
OihpZClrZXkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVsoTlNPYmpl
Y3QqKWtleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgIGtleSA9
IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmlu
Z107CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVl
V2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKyAgICB9CisKKyAgICByZXR1cm4gW3Nl
bGYgdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCistIChKU1ZhbHVlICop
b2JqZWN0QXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgcmV0dXJu
IFtzZWxmIHZhbHVlQXRJbmRleDppbmRleF07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClv
YmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0
OmtleSBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBpZiAoIWtleSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBzZXRWYWx1ZTpvYmplY3QgZm9y
UHJvcGVydHk6KE5TU3RyaW5nICopa2V5XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9i
amVjdCBhdEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBbc2VsZiBz
ZXRWYWx1ZTpvYmplY3QgYXRJbmRleDppbmRleF07Cit9CisKK0BlbmQKKworaW5saW5lIGJvb2wg
aXNEYXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpCit7
CisgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4dCkpOworICAgIHJl
dHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6OkRhdGVJbnN0YW5jZTo6c19pbmZvKTsK
K30KKworaW5saW5lIGJvb2wgaXNBcnJheShKU09iamVjdFJlZiBvYmplY3QsIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0b0pT
KGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpKU0Fy
cmF5OjpzX2luZm8pOworfQorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShJbnRlcm5hbCkKKwor
ZW51bSBDb252ZXJzaW9uVHlwZSB7CisgICAgQ29udGFpbmVyTm9uZSwKKyAgICBDb250YWluZXJB
cnJheSwKKyAgICBDb250YWluZXJEaWN0aW9uYXJ5Cit9OworCitjbGFzcyBKU0NvbnRhaW5lckNv
bnZlcnRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBKU1ZhbHVlUmVm
IGpzOworICAgICAgICBpZCBvYmpjOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAg
IH07CisKKyAgICBKU0NvbnRhaW5lckNvbnZlcnRvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgaWQg
Y29udmVydChKU1ZhbHVlUmVmIHByb3BlcnR5KTsKKyAgICB2b2lkIGFkZChUYXNrIHRhc2spOwor
ICAgIFRhc2sgdGFrZSgpOworICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4gIW1f
d29ya2xpc3Quc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1f
Y29udGV4dDsKKyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1fb2JqZWN0TWFwOwor
ICAgIFdURjo6VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitpbmxpbmUgaWQgSlNDb250
YWluZXJDb252ZXJ0b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBXVEY6Okhh
c2hNYXA8SlNWYWx1ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmplY3RNYXAuZmluZCh2
YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9vYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKworICAgIFRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRD
b3B5KG1fY29udGV4dCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuanMpCisgICAgICAgIGFkZChy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQub2JqYzsKK30KKwordm9pZCBKU0NvbnRhaW5lckNv
bnZlcnRvcjo6YWRkKFRhc2sgdGFzaykKK3sKKyAgICBtX29iamVjdE1hcC5hZGQodGFzay5qcywg
dGFzay5vYmpjKTsKKyAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5vbmUpCisgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKHRhc2spOworfQorCitKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFz
ayBKU0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJUKCFpc1dvcmtMaXN0
RW1wdHkoKSk7CisgICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgbV93b3Jr
bGlzdC5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBKU0NvbnRh
aW5lckNvbnZlcnRvcjo6VGFzayB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHkoSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlkIHByaW1pdGl2ZTsKKyAgICAgICAg
aWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgcHJpbWl0
aXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVTIDogQE5POworICAg
ICAgICBlbHNlIGlmIChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAg
ICAgICAvLyBOb3JtYWxpemUgdGhlIG51bWJlciwgc28gaXQgd2lsbCB1bmlxdWUgY29ycmVjdGx5
IGluIHRoZSBoYXNoIG1hcCAtCisgICAgICAgICAgICAvLyBpdCdzIG5pY2VyIG5vdCB0byBsZWFr
IHRoaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIQorICAgICAgICAgICAgdmFsdWUg
PSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFs
dWUsIDApKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCldOworICAgICAgICB9IGVsc2Ug
aWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIFdv
dWxkIGJlIG5pY2UgdG8gdW5pcXVlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgICAgIEpTU3RyaW5n
UmVmIGpzc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Cisg
ICAgICAgICAgICBOU1N0cmluZyAqIHN0cmluZ05TID0gKE5TU3RyaW5nICopSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNzdHJpbmcpOworICAgICAgICAgICAgSlNT
dHJpbmdSZWxlYXNlKGpzc3RyaW5nKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtzdHJpbmdO
UyBhdXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCB2YWx1ZSkpCisgICAgICAgICAgICBwcmltaXRpdmUgPSBbTlNOdWxsIG51bGxdOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwg
dmFsdWUpKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IG5pbDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUsIHByaW1pdGl2ZSwg
Q29udGFpbmVyTm9uZSB9OworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CisKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRy
eVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIChKU0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgd3JhcHBlZCwgQ29udGFpbmVyTm9uZSB9
OworCisgICAgaWYgKGlzRGF0ZShvYmplY3QsIGNvbnRleHQpKQorICAgICAgICByZXR1cm4gKEpT
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2UxOTcwOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvYmplY3QsIDApXSwgQ29u
dGFpbmVyTm9uZSB9OworCisgICAgaWYgKGlzQXJyYXkob2JqZWN0LCBjb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgW05TTXV0YWJs
ZUFycmF5IGFycmF5XSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgIHJldHVybiAoSlNDb250YWlu
ZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25h
cnldLCBDb250YWluZXJEaWN0aW9uYXJ5IH07Cit9CisKK3N0YXRpYyBpZCBjb250YWluZXJWYWx1
ZVRvT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayB0YXNrKQoreworICAgIEFTU0VSVCh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9uZSk7
CisgICAgSlNDb250YWluZXJDb252ZXJ0b3IgY29udmVydG9yKGNvbnRleHQpOworICAgIGNvbnZl
cnRvci5hZGQodGFzayk7CisgICAgQVNTRVJUKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkp
OworICAgIAorICAgIGRvIHsKKyAgICAgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3Vy
cmVudCA9IHRhc2sgPSBjb252ZXJ0b3IudGFrZSgpOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmplY3RSZWYganMgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY3VycmVudC5qcywgMCk7CisKKyAgICAgICAgaWYgKGN1
cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAgICAgQVNTRVJUKFtjdXJy
ZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNNdXRhYmxlQXJyYXkgY2xhc3NdXSk7CisgICAgICAg
ICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSAoTlNNdXRhYmxlQXJyYXkgKiljdXJyZW50Lm9i
amM7CisgICAgICAgIAorICAgICAgICAgICAgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyaW5nID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gSlNDOjp0b1VJbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqcywgbGVuZ3RoU3RyaW5nLCAwKSwgMCkpOworICAgICAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKGxlbmd0aFN0cmluZyk7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlkIG9i
amMgPSBjb252ZXJ0b3IuY29udmVydChKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBqcywgaSwgMCkpOworICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6b2JqYyA/IG9i
amMgOiBbTlNOdWxsIG51bGxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TTXV0YWJsZURp
Y3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0
aW9uYXJ5ID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKiljdXJyZW50Lm9iamM7CisKKyAgICAgICAg
ICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lQXJyYXkgPSBKU09iamVjdENv
cHlQcm9wZXJ0eU5hbWVzKGNvbnRleHQsIGpzKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocHJvcGVydHlOYW1lQXJyYXkpOworCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5h
bWVBdEluZGV4KHByb3BlcnR5TmFtZUFycmF5LCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQg
b2JqYyA9IGNvbnZlcnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganMs
IHByb3BlcnR5TmFtZSwgMCkpKQorICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W1soTlNT
dHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwcm9wZXJ0
eU5hbWUpIGF1dG9yZWxlYXNlXV0gPSBvYmpjOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZShwcm9wZXJ0eU5hbWVBcnJheSk7CisgICAgICAg
IH0KKworICAgIH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAg
cmV0dXJuIHRhc2sub2JqYzsKK30KKworaWQgdmFsdWVUb09iamVjdChKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sg
cmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29udGFpbmVyTm9uZSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5vYmpjOworICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRv
T2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3VsdCk7Cit9CisKK2lk
IHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
ICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkp
IHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0p
CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1ZUlz
Qm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIHZhbHVlKSA/IEBZRVMgOiBATk87CisKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZToqZXhjZXB0aW9uID8gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjpxdWlldF9OYU4oKSA6IHJlc3VsdF07Cit9CitpZCB2YWx1ZVRvU3RyaW5nKEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9
IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3Jh
cHBlZCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
IHdyYXBwZWQ7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWYganNzdHJpbmcgPSBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0aW9u
KSB7CisgICAgICAgIEFTU0VSVCghanNzdHJpbmcpOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH0KKworICAgIE5TU3RyaW5nKiBzdHJpbmdOUyA9IFsoTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZykgYXV0b3JlbGVhc2VdOworICAg
IEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJuIHN0cmluZ05TOworfQoraWQg
dmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAg
IGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsK
KyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKQorICAg
ICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgZG91YmxlIHJlc3VsdCA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gKmV4
Y2VwdGlvbiA/IG5pbCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6cmVz
dWx0XTsKK30KK2lkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRl
eHQsIHZhbHVlKSkgeworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNBcnJh
eSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgaWYg
KEpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBjb250YWlu
ZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IHZh
bHVlLCBbTlNNdXRhYmxlQXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheX0pOworCisgICAgaWYg
KCEoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNv
bnRleHQsIHZhbHVlKSkpCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5
cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0aXZlIHRvIE5TQXJy
YXkiKSk7CisgICAgcmV0dXJuIG5pbDsKK30KK2lkIHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRy
eVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBl
ZCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFs
dWUpKQorICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0LCAoSlND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZURpY3Rpb25hcnkgZGlj
dGlvbmFyeV0sIENvbnRhaW5lckRpY3Rpb25hcnl9KTsKKworICAgIGlmICghKEpTVmFsdWVJc051
bGwoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkp
KQorICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhj
b250ZXh0KSwgIkNhbm5vdCBjb252ZXJ0IHByaW1pdGl2ZSB0byBOU0RpY3Rpb25hcnkiKSk7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworY2xhc3MgT2JqY0NvbnRhaW5lckNvbnZlcnRvciB7CitwdWJs
aWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBpZCBvYmpjOworICAgICAgICBKU1ZhbHVl
UmVmIGpzOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07CisKKyAgICBPYmpj
Q29udGFpbmVyQ29udmVydG9yKEpTQ29udGV4dCAqY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjb252ZXJ0KGlkIG9i
amVjdCk7CisgICAgdm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRha2UoKTsKKyAgICBi
b29sIGlzV29ya0xpc3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQorCitw
cml2YXRlOgorICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIFdURjo6SGFzaE1hcDxpZCwg
SlNWYWx1ZVJlZj4gbV9vYmplY3RNYXA7CisgICAgV1RGOjpWZWN0b3I8VGFzaz4gbV93b3JrbGlz
dDsKK307CisKK0pTVmFsdWVSZWYgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6Y29udmVydChpZCBv
YmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBhdXRvIGl0ID0gbV9vYmplY3RN
YXAuZmluZChvYmplY3QpOworICAgIGlmIChpdCAhPSBtX29iamVjdE1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKKworICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sg
dGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShtX2NvbnRleHQsIG9iamVjdCk7CisgICAg
YWRkKHRhc2spOworICAgIHJldHVybiB0YXNrLmpzOworfQorCit2b2lkIE9iamNDb250YWluZXJD
b252ZXJ0b3I6OmFkZChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2spCit7CisgICAg
bV9vYmplY3RNYXAuYWRkKHRhc2sub2JqYywgdGFzay5qcyk7CisgICAgaWYgKHRhc2sudHlwZSAh
PSBDb250YWluZXJOb25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKK30KKwor
T2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBPYmpjQ29udGFpbmVyQ29udmVydG9yOjp0YWtl
KCkKK3sKKyAgICBBU1NFUlQoIWlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICBUYXNrIGxhc3QgPSBt
X3dvcmtsaXN0Lmxhc3QoKTsKKyAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1
cm4gbGFzdDsKK30KKworc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgb2JqZWN0
VG9WYWx1ZVdpdGhvdXRDb3B5KEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQoreworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2speyBvYmplY3QsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCkpLCBDb250YWluZXJOb25lIH07CisKKyAgICBpZiAoIWNsYXNzX2NvbmZvcm1zVG9Q
cm90b2NvbChvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSwgZ2V0SlNFeHBvcnRQcm90b2NvbCgpKSkg
eworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCisg
ICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3Qs
IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIE5V
TEwsIDApLCBDb250YWluZXJBcnJheSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2UoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKKworICAg
ICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSkKKyAgICAgICAg
ICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpLCBDb250YWluZXJOb25l
IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNWYWx1ZSBjbGFzc11d
KQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2Jq
ZWN0LCAoKEpTVmFsdWUgKilvYmplY3QpLT5tX3ZhbHVlLCBDb250YWluZXJOb25lIH07CisKKyAg
ICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAg
ICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAw
KSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNz
OltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIDAsIDApLCBDb250YWluZXJEaWN0aW9uYXJ5IH07CisKKyAgICAgICAg
aWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICAg
ICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKW9iamVjdCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGpzID0gSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsKKyAgICAgICAg
ICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBqcywgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xh
c3NdXSkgeworICAgICAgICAgICAgaWQgbGl0ZXJhbFRydWUgPSBAWUVTOworICAgICAgICAgICAg
aWYgKG9iamVjdCA9PSBsaXRlcmFsVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE9iamND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlQm9vbGVhbihjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB0cnVlKSwgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICAgICAgaWQgbGl0ZXJhbEZhbHNlID0gQE5POworICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBsaXRlcmFsRmFsc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29u
dmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgZmFsc2UpLCBDb250YWluZXJOb25lIH07CisgICAgICAgICAgICBy
ZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIFsoTlNOdW1iZXIqKW9iamVj
dCBkb3VibGVWYWx1ZV0pLCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RhdGUgY2xhc3NdXSkgeworICAgICAgICAgICAg
SlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIFsoTlNEYXRlICopb2JqZWN0IHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0p
OworICAgICAgICAgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlRGF0ZShjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAxLCAmYXJndW1lbnQsIDApOworICAgICAgICAg
ICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCByZXN1bHQs
IENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgdmFsdWVJbnRlcm5hbFZhbHVlKFtjb250
ZXh0IHdyYXBwZXJGb3JPYmplY3Q6b2JqZWN0XSksIENvbnRhaW5lck5vbmUgfTsKK30KKworSlNW
YWx1ZVJlZiBvYmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQorewor
ICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weShjb250ZXh0LCBvYmplY3QpOworICAgIGlmICh0YXNrLnR5cGUgPT0gQ29udGFpbmVy
Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRhc2suanM7CisKKyAgICBPYmpjQ29udGFpbmVyQ29udmVy
dG9yIGNvbnZlcnRvcihjb250ZXh0KTsKKyAgICBjb252ZXJ0b3IuYWRkKHRhc2spOworICAgIEFT
U0VSVCghY29udmVydG9yLmlzV29ya0xpc3RFbXB0eSgpKTsKKworICAgIGRvIHsKKyAgICAgICAg
T2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBjdXJyZW50ID0gY29udmVydG9yLnRha2UoKTsK
KyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBjdXJyZW50LmpzKSk7CisgICAgICAgIEpTT2JqZWN0UmVmIGpzID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGN1cnJlbnQuanMsIDApOwor
CisgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyQXJyYXkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSk7
CisgICAgICAgICAgICBOU0FycmF5ICogYXJyYXkgPSAoTlNBcnJheSAqKWN1cnJlbnQub2JqYzsK
KyAgICAgICAgICAgIE5TVUludGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOworICAgICAgICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKKyAg
ICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBqcywgaW5kZXgsIGNvbnZlcnRvci5jb252ZXJ0KFthcnJheSBvYmpl
Y3RBdEluZGV4OmluZGV4XSksIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJEaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIEFT
U0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsK
KyAgICAgICAgICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IChOU0RpY3Rpb25hcnkqKWN1
cnJlbnQub2JqYzsKKyAgICAgICAgICAgIE5TRW51bWVyYXRvciogZW51bWVyYXRvciA9IFtkaWN0
aW9uYXJ5IGtleUVudW1lcmF0b3JdOworICAgICAgICAgICAgd2hpbGUgKGlkIGtleSA9IFtlbnVt
ZXJhdG9yIG5leHRPYmplY3RdKSB7CisgICAgICAgICAgICAgICAgaWYgKFtrZXkgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYp
a2V5KTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBqcywgcHJvcGVydHlOYW1lLCBjb252ZXJ0b3IuY29udmVy
dChbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XSksIDAsIDApOworICAgICAgICAgICAgICAg
ICAgICBKU1N0cmluZ1JlbGVhc2UocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfSB3aGlsZSAoIWNvbnZlcnRv
ci5pc1dvcmtMaXN0RW1wdHkoKSk7CisKKyAgICByZXR1cm4gdGFzay5qczsKK30KKworSlNWYWx1
ZVJlZiB2YWx1ZUludGVybmFsVmFsdWUoSlNWYWx1ZSAqIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZS0+bV92YWx1ZTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVl
UmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtb
W0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgaW5Db250ZXh0OmNvbnRleHRdIGF1
dG9yZWxlYXNlXTsKK30KKworLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYp
dmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICBBU1NFUlQodmFsdWUp
OworCisgICAgb2JqY19pbml0V2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7CisKKyAgICBb
c3VwZXIgaW5pdF07CisgICAgW2NvbnRleHQgcHJvdGVjdDp2YWx1ZV07CisgICAgbV92YWx1ZSA9
IHZhbHVlOworICAgIHJldHVybiBzZWxmOworfQorCitzdHJ1Y3QgU3RydWN0VGFnSGFuZGxlciB7
CisgICAgU0VMIHR5cGVUb1ZhbHVlU0VMOworICAgIFNFTCB2YWx1ZVRvVHlwZVNFTDsKK307CisK
K3N0YXRpYyBTdHJ1Y3RUYWdIYW5kbGVyKiBnZXRTdHJ1Y3RUYWdIYW5kbGVyKGNvbnN0IGNoYXIq
IGVuY29kZWRUeXBlKQoreworICAgIHN0YXRpYyBTcGluTG9jayBnZXRTdHJ1Y3RUYWdIYW5kbGVy
TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xk
ZXIoJmdldFN0cnVjdFRhZ0hhbmRsZXJMb2NrKTsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFw
PFJlZlB0cjxTdHJpbmdJbXBsPiwgU3RydWN0VGFnSGFuZGxlcj4gU3RydWN0SGFuZGxlcnM7Cisg
ICAgc3RhdGljIFN0cnVjdEhhbmRsZXJzICptX3N0cnVjdEhhbmRsZXJzID0gMDsKKworICAgIGlm
ICghbV9zdHJ1Y3RIYW5kbGVycykgeworICAgICAgICBtX3N0cnVjdEhhbmRsZXJzID0gbmV3IFN0
cnVjdEhhbmRsZXJzKCk7CisKKyAgICAgICAgLy8gU3RlcCAxOiBmaW5kIGFsbCB2YWx1ZVdpdGg8
Rm9vPjppbkNvbnRleHQ6IGNsYXNzIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90
IHZhbHVlV2l0aE1pbkxlbiA9IHN0cmxlbigidmFsdWVXaXRoWDppbkNvbnRleHQ6Iik7CisgICAg
ICAgIGZvckVhY2hNZXRob2RJbkNsYXNzKG9iamVjdF9nZXRDbGFzcyhbSlNWYWx1ZSBjbGFzc10p
LCBeKE1ldGhvZCBtZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9IG1ldGhvZF9nZXROYW1l
KG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2VsX2dldE5hbWUoc2Vs
KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgdmFsdWVXaXRoPEZvbz46Y29udGV4dDoKKyAgICAgICAgICAgIGlmIChsZW4g
PCB2YWx1ZVdpdGhNaW5MZW4gfHwgc3RybmNtcChuYW1lLCAidmFsdWVXaXRoIiwgOSkgfHwgc3Ry
bmNtcChuYW1lICsgbGVuIC0gMTEsICI6aW5Db250ZXh0OiIsIDExKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgWyBpZCwgU0VMLCA8dHlwZT4sIDxj
b250ZXh0VHlwZT4gXQorICAgICAgICAgICAgaWYgKG1ldGhvZF9nZXROdW1iZXJPZkFyZ3VtZW50
cyhtZXRob2QpICE9IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hh
ciBpZFR5cGVbM107CisgICAgICAgICAgICAvLyBDaGVjayAybmQgYXJndW1lbnQgdHlwZSBpcyAi
QCIKKyAgICAgICAgICAgIGNoYXIqIHNlY29uZFR5cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlw
ZShtZXRob2QsIDMpOworICAgICAgICAgICAgaWYgKHN0cmNtcChzZWNvbmRUeXBlLCAiQCIpKSB7
CisgICAgICAgICAgICAgICAgZnJlZShzZWNvbmRUeXBlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKHNlY29uZFR5cGUpOworICAgICAg
ICAgICAgLy8gQ2hlY2sgcmVzdWx0IHR5cGUgaXMgYWxzbyAiQCIKKyAgICAgICAgICAgIG1ldGhv
ZF9nZXRSZXR1cm5UeXBlKG1ldGhvZCwgaWRUeXBlLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJj
bXAoaWRUeXBlLCAiQCIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNo
YXIqIHR5cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlwZShtZXRob2QsIDIpOworICAgICAgICAg
ICAgbV9zdHJ1Y3RIYW5kbGVycy0+YWRkKFdURjo6U3RyaW5nKHR5cGUpLmltcGwoKSwgKFN0cnVj
dFRhZ0hhbmRsZXIpeyBzZWwsIDAgfSk7CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAg
ICB9KTsKKworICAgICAgICAvLyBTdGVwIDI6IGZpbmQgYWxsIHRvPEZvbz4gaW5zdGFuY2UgbWV0
aG9kcyBpbiBKU1ZhbHVlLgorICAgICAgICBzaXplX3QgbWluTGVuVmFsdWUgPSBzdHJsZW4oInRv
WCIpOworICAgICAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhbSlNWYWx1ZSBjbGFzc10sIF4oTWV0
aG9kIG1ldGhvZCl7CisgICAgICAgICAgICBTRUwgc2VsID0gbWV0aG9kX2dldE5hbWUobWV0aG9k
KTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFtZShzZWwpOworICAg
ICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciB0bzxGb28+CisgICAgICAgICAgICBpZiAobGVuIDwgbWluTGVuVmFsdWUgfHwgc3RybmNt
cChuYW1lLCAidG8iLCAyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgWyBpZCwgU0VMIF0KKyAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0TnVtYmVy
T2ZBcmd1bWVudHMobWV0aG9kKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIC8vIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdmFsdWVXaXRoPEZvbz46Y29udGV4dDog
bWV0aG9kLgorICAgICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5UmV0dXJuVHlwZSht
ZXRob2QpOworCisgICAgICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1f
c3RydWN0SGFuZGxlcnMtPmZpbmQoV1RGOjpTdHJpbmcodHlwZSkuaW1wbCgpKTsKKyAgICAgICAg
ICAgIGZyZWUodHlwZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdEhhbmRsZXJz
LT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBTdHJ1Y3RUYWdI
YW5kbGVyJiBoYW5kbGVyID0gaXRlci0+dmFsdWU7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRo
YXQgc3RybGVuKDxmb28+KSA9PSBzdHJsZW4oPEZvbz4pCisgICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZVdpdGhOYW1lID0gc2VsX2dldE5hbWUoaGFuZGxlci50eXBlVG9WYWx1ZVNFTCk7Cisg
ICAgICAgICAgICBzaXplX3QgdmFsdWVXaXRoTGVuID0gc3RybGVuKHZhbHVlV2l0aE5hbWUpOwor
ICAgICAgICAgICAgaWYgKHZhbHVlV2l0aExlbiAtIHZhbHVlV2l0aE1pbkxlbiAhPSBsZW4gLSBt
aW5MZW5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVj
ayB0aGF0IDxGb28+ID09IDxGb28+CisgICAgICAgICAgICBpZiAoc3RybmNtcCh2YWx1ZVdpdGhO
YW1lICsgOSwgbmFtZSArIDIsIGxlbiAtIG1pbkxlblZhbHVlIC0gMSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaGFuZGxlci52YWx1ZVRvVHlwZVNFTCA9IHNlbDsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gU3RlcCAzOiBjbGVhbiB1cCAtIHJlbW92ZSBlbnRyaWVz
IHdoZXJlIHdlIGZvdW5kIHByb3NwZWN0aXZlIHZhbHVlV2l0aDxGb28+OmluQ29udGV4dDogY29u
dmVyc2lvbnMsIGJ1dCBubyBtYXRjaGluZyB0bzxGb28+IG1ldGhvZHMuCisgICAgICAgIHR5cGVk
ZWYgV1RGOjpIYXNoU2V0PFJlZlB0cjxXVEY6OlN0cmluZ0ltcGw+ID4gUmVtb3ZlU2V0OworICAg
ICAgICBSZW1vdmVTZXQgcmVtb3ZlU2V0OworICAgICAgICBmb3IgKFN0cnVjdEhhbmRsZXJzOjpp
dGVyYXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5kbGVycy0+YmVnaW4oKTsgaXRlciAhPSBtX3N0cnVj
dEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBTdHJ1Y3RUYWdIYW5kbGVy
JiBoYW5kbGVyID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXIudmFsdWVU
b1R5cGVTRUwpCisgICAgICAgICAgICAgICAgcmVtb3ZlU2V0LmFkZChpdGVyLT5rZXkpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChSZW1vdmVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSByZW1vdmVT
ZXQuYmVnaW4oKTsgaXRlciAhPSByZW1vdmVTZXQuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAg
IG1fc3RydWN0SGFuZGxlcnMtPnJlbW92ZSgqaXRlcik7CisgICAgfQorCisgICAgU3RydWN0SGFu
ZGxlcnM6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5n
KGVuY29kZWRUeXBlKS5pbXBsKCkpOworICAgIGlmIChpdGVyID09IG1fc3RydWN0SGFuZGxlcnMt
PmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJml0ZXItPnZhbHVlOworfQor
CisrIChTRUwpc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFn
Cit7CisgICAgU3RydWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVjdFRhZ0hhbmRsZXIo
c3RydWN0VGFnKTsKKyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnR5cGVUb1ZhbHVlU0VM
IDogbmlsOworfQorCisrIChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Oihjb25zdCBjaGFy
ICopc3RydWN0VGFnCit7CisgICAgU3RydWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVj
dFRhZ0hhbmRsZXIoc3RydWN0VGFnKTsKKyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnZh
bHVlVG9UeXBlU0VMIDogbmlsOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
W2NvbnRleHQgdW5wcm90ZWN0Om1fdmFsdWVdOworICAgIG9iamNfZGVzdHJveVdlYWsoJm1fd2Vh
a0NvbnRleHQpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNj
cmlwdGlvbgoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChpZCB3cmFwcGVk
ID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBt
X3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFt3cmFwcGVkIGRlc2NyaXB0aW9uXTsKKyAgICByZXR1
cm4gW3NlbGYgdG9TdHJpbmddOworfQorCitOU0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2Nh
dGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBTRUwgc2VsZWN0b3IgPSBb
SlNWYWx1ZSBzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6ZW5jb2RlZFR5cGVdOworICAgIGlmICgh
c2VsZWN0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hhciogbWV0aG9kVHlw
ZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldENsYXNzTWV0aG9kKFtKU1ZhbHVl
IGNsYXNzXSwgc2VsZWN0b3IpKTsKKyAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJ
bnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07CisgICAgW2ludm9jYXRpb24g
c2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAgIHJldHVybiBpbnZvY2F0aW9uOworfQorCitOU0lu
dm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlw
ZSkKK3sKKyAgICBTRUwgc2VsZWN0b3IgPSBbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1
Y3Q6ZW5jb2RlZFR5cGVdOworICAgIGlmICghc2VsZWN0b3IpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgY29uc3QgY2hhciogbWV0aG9kVHlwZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNs
YXNzX2dldEluc3RhbmNlTWV0aG9kKFtKU1ZhbHVlIGNsYXNzXSwgc2VsZWN0b3IpKTsKKyAgICBO
U0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0
aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1l
dGhvZFR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAg
IHJldHVybiBpbnZvY2F0aW9uOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9ydCAi
QVBJSlNWYWx1ZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpT
VmFsdWUoSW50ZXJuYWwpCisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUq
KTsKKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihK
U1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworSlNWYWx1
ZVJlZiBvYmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqLCBpZCk7CitpZCB2YWx1ZVRvT2JqZWN0KEpT
Q29udGV4dCAqLCBKU1ZhbHVlUmVmKTsKK2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb1N0cmlu
ZyhKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CitpZCB2YWx1ZVRvRGF0ZShKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRvQXJyYXkoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1Zh
bHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0RpY3Rpb25hcnkoSlNH
bG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisr
IChTRUwpc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFnOwor
KyAoU0VMKXNlbGVjdG9yRm9yVmFsdWVUb1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZzsK
KworQGVuZAorCitOU0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25zdCBj
aGFyKiBlbmNvZGVkVHlwZSk7CitOU0ludm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZv
cihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNf
T0JKQ19BUElfRU5BQkxFRAorCisvLyBBbiBpbnN0YW5jZSBvZiBKU1ZpcnR1YWxNYWNoaW5lIHJl
cHJlc2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCAib2JqZWN0IHNwYWNlIgorLy8gb3Igc2V0IG9m
IGV4ZWN1dGlvbiByZXNvdXJjZXMuIFRocmVhZCBzYWZldHkgaXMgc3VwcG9ydGVkIGJ5IGxvY2tp
bmcgdGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUsIHdpdGggY29uY3VycmVudCBKYXZhU2NyaXB0IGV4
ZWN1dGlvbiBzdXBwb3J0ZWQgYnkgYWxsb2NhdGluZworLy8gc2VwYXJhdGUgaW5zdGFuY2VzIG9m
IEpTVmlydHVhbE1hY2hpbmUuCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCitAaW50ZXJm
YWNlIEpTVmlydHVhbE1hY2hpbmUgOiBOU09iamVjdAorCistIChpZClpbml0OworCitAZW5kCisK
KyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisK
KyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
IgorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZSB7CisgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKK30KKworLSAoaWQpaW5pdAoreworICAgIFtzdXBlciBpbml0XTsKKyAg
ICBtX2dyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICB0b0pTKG1fZ3JvdXApLT5t
X2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICB0b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSAwOworICAgIEpTQ29udGV4dEdyb3VwUmVs
ZWFzZShtX2dyb3VwKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0pTQ29udGV4dEdyb3Vw
UmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxN
YWNoaW5lKQoreworICAgIHJldHVybiB2aXJ0dWFsTWFjaGluZS0+bV9ncm91cDsKK30KKworQGVu
ZAorCisjZW5kaWYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJm
YWNlIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCisKK0pTQ29udGV4dEdyb3VwUmVmIGdldEdy
b3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUqKTsKKworQGVuZAorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
KyNpbXBvcnQgPEpTVmFsdWVJbnRlcm5hbC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUu
aD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBKU1dyYXBwZXJNYXAg
OiBOU09iamVjdAorCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7
CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKwor
aWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwor
CitQcm90b2NvbCogZ2V0SlNFeHBvcnRQcm90b2NvbCgpOworQ2xhc3MgZ2V0TlNCbG9ja0NsYXNz
KCk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBl
ck1hcC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9y
dCAiSmF2YVNjcmlwdENvcmUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9y
dCAiT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgi
CisjaW1wb3J0IDx3dGYvVENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL1ZlY3Rvci5oIgorCitz
dGF0aWMgdm9pZCB3cmFwcGVyRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFso
aWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkgcmVsZWFzZV07Cit9CisKKy8vIEFsbCB3cmFw
cGVyIG9iamVjdHMgYW5kIGNvbnN0cnVjdG9yIG9iamVjdHMgZGVyaXZlIGZyb20gdGhpcyB0eXBl
LCBzbyB3ZSBjYW4gZGV0ZWN0ICYgdW53cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlcy9DbGFzc2Vz
Lgorc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgU3Bpbkxv
Y2sgaW5pdExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBTcGluTG9ja0hvbGRlciBs
b2NrSG9sZGVyKCZpbml0TG9jayk7CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9
IDA7CisKKyAgICBpZiAoIWNsYXNzUmVmKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRl
ZmluaXRpb247CisgICAgICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsK
KyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAib2JqY19jbGFzcyI7CisgICAgICAgIGRl
ZmluaXRpb24uZmluYWxpemUgPSB3cmFwcGVyRmluYWxpemU7CisgICAgICAgIGNsYXNzUmVmID0g
SlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGNsYXNzUmVm
OworfQorCisvLyBEZWZhdWx0IGNvbnZlcnNpb24gb2Ygc2VsZWN0b3JzIHRvIHByb3BlcnR5IG5h
bWVzLgorLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZv
bGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRhbGl6ZWQuCitzdGF0aWMgTlNTdHJpbmcqIHNl
bGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciogc3RhcnQpCit7CisgICAgLy8gVXNlICdp
bmRleCcgdG8gY2hlY2sgZm9yIGNvbG9ucywgaWYgdGhlcmUgYXJlIG5vbiwgdGhpcyBpcyBlYXN5
IQorICAgIGNvbnN0IGNoYXIqIGZpcnN0Q29sb24gPSBpbmRleChzdGFydCwgJzonKTsKKyAgICBp
ZiAoIWZpcnN0Q29sb24pCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6c3RhcnRdOworCisgICAgLy8gJ2hlYWRlcicgaXMgdGhlIGxlbmd0aCBvZiBzdHJpbmcg
dXAgdG8gdGhlIGZpcnN0IGNvbG9uLgorICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENvbG9uIC0g
c3RhcnQ7CisgICAgLy8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91Z2ggdG8g
aG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4Y2x1ZGlu
ZworICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAoVGhpcyBp
cyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KKyAgICBjaGFy
KiBidWZmZXIgPSAoY2hhciopbWFsbG9jKGhlYWRlciArIHN0cmxlbihmaXJzdENvbG9uICsgMSkg
KyAxKTsKKyAgICAvLyBDb3B5ICdoZWFkZXInIGNoYXJhY3RlcnMsIHNldCBvdXRwdXQgdG8gcG9p
bnQgdG8gdGhlIGVuZCBvZiB0aGlzICYgaW5wdXQgdG8gcG9pbnQgcGFzdCB0aGUgZmlyc3QgJzon
LgorICAgIG1lbWNweShidWZmZXIsIHN0YXJ0LCBoZWFkZXIpOworICAgIGNoYXIqIG91dHB1dCA9
IGJ1ZmZlciArIGhlYWRlcjsKKyAgICBjb25zdCBjaGFyKiBpbnB1dCA9IHN0YXJ0ICsgaGVhZGVy
ICsgMTsKKworICAgIC8vIE9uIGVudHJ5IHRvIHRoZSBsb29wLCB3ZSBoYXZlIGFscmVhZHkgc2tp
cHBlZCBvdmVyIGEgJzonIGZyb20gdGhlIGlucHV0LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIGNoYXIgYzsKKyAgICAgICAgLy8gU2tpcCBvdmVyIGFueSBhZGRpdGlvbmFsICc6J3MuIFdl
J2xsIGxlYXZlIGMgaG9sZGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICAg
IC8vIGxhc3QgJzonLCBhbmQgaW5wdXQgcG9pbnRpbmcgcGFzdCBjLgorICAgICAgICB3aGlsZSAo
KGMgPSAqKGlucHV0KyspKSA9PSAnOicpOworICAgICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIs
IGNvbnZlcnRpbmcgdG8gdXBwZXIgY2FzZSBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIElmIHRo
ZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAnXDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgIGlm
ICghKCoob3V0cHV0KyspID0gdG91cHBlcihjKSkpCisgICAgICAgICAgICBnb3RvIGRvbmU7Cisg
ICAgICAgIC8vIExvb3Agb3ZlciBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gJzonLgorICAgICAgICB3
aGlsZSAoKGMgPSAqKGlucHV0KyspKSAhPSAnOicpIHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhl
IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAn
XDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgICAgICBpZiAoISgqKG91dHB1dCsrKSA9IGMp
KQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQgYSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0Lgor
ICAgIH0KK2RvbmU6CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpidWZmZXJdOworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBNYWtlIGFuIG9iamVjdCB0aGF0IGlzIGluIGFsbCB3YXlzIGFyZSBjb21wbGV0
ZWx5IHZhbmlsbGEgSmF2YVNjcmlwdCBvYmplY3QsCisvLyBvdGhlciB0aGFuIHRoYXQgaXQgaGFz
IGEgbmF0aXZlIGJyYW5kIHNldCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGJ5IHRoZSBkZWZhdWx0
CisvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGNvbXZlcnNpb24uCitzdGF0aWMgSlNWYWx1
ZSogY3JlYXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5kKEpTQ29udGV4dCogY29udGV4dCwgTlNTdHJp
bmcqIGJyYW5kLCBKU0NsYXNzUmVmIHBhcmVudENsYXNzID0gMCwgdm9pZCogcHJpdmF0ZURhdGEg
PSAwKQoreworICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlv
biA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0g
W2JyYW5kIFVURjhTdHJpbmddOworICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBwYXJlbnRD
bGFzczsKKyAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlv
bik7CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIGNsYXNzUmVmLCBwcml2YXRlRGF0YSk7CisgICAgSlNDbGFzc1Jl
bGVhc2UoY2xhc3NSZWYpOworICAgIHJldHVybiBbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFs
dWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworLy8gTG9vayBmb3IgQG9wdGlvbmFs
IHByb3BlcnRpZXMgaW4gdGhlIHByb3RvdHlwZSBjb250YWluaW5nIGEgc2VsZWN0b3IgdG8gcHJv
cGVydHkKKy8vIG5hbWUgbWFwcGluZywgc2VwYXJhdGVkIGJ5IGEgX19KU19FWFBPUlRfQVNfXyBk
ZWxpbWl0ZXIuCitzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSogY3JlYXRlUmVuYW1lTWFwKFBy
b3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kKQoreworICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkqIHJlbmFtZU1hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF07CisKKyAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgTk8sIGlzSW5zdGFu
Y2VNZXRob2QsIF4oU0VMIHNlbCwgY29uc3QgY2hhciopeworICAgICAgICBOU1N0cmluZyogcmVu
YW1lID0gQChzZWxfZ2V0TmFtZShzZWwpKTsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtyZW5h
bWUgcmFuZ2VPZlN0cmluZzpAIl9fSlNfRVhQT1JUX0FTX18iXTsKKyAgICAgICAgaWYgKHJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5T
U3RyaW5nKiBzZWxlY3RvciA9IFtyZW5hbWUgc3Vic3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlv
bl07CisgICAgICAgIE5TVUludGVnZXIgYmVnaW4gPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxl
bmd0aDsKKyAgICAgICAgTlNVSW50ZWdlciBsZW5ndGggPSBbcmVuYW1lIGxlbmd0aF0gLSBiZWdp
biAtIDE7CisgICAgICAgIE5TU3RyaW5nKiBuYW1lID0gW3JlbmFtZSBzdWJzdHJpbmdXaXRoUmFu
Z2U6KE5TUmFuZ2UpeyBiZWdpbiwgbGVuZ3RoIH1dOworICAgICAgICByZW5hbWVNYXBbc2VsZWN0
b3JdID0gbmFtZTsKKyAgICB9KTsKKworICAgIHJldHVybiByZW5hbWVNYXA7Cit9CisKK2lubGlu
ZSB2b2lkIHB1dE5vbkVudW1lcmFibGUoSlNWYWx1ZSogYmFzZSwgTlNTdHJpbmcqIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgW2Jhc2UgZGVmaW5lUHJvcGVydHk6cHJvcGVy
dHlOYW1lIGRlc2NyaXB0b3I6QHsKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JWYWx1ZUtl
eTogdmFsdWUsCisgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yV3JpdGFibGVLZXk6IEBZRVMs
CisgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAg
ICBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTogQFlFUworICAgIH1dOworfQor
CisvLyBUaGlzIG1ldGhvZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlcXVpcmVkIG1l
dGhvZHMgaW4gdGhlIHByb3RvY29sLCBhbmQ6CisvLyAgKiBEZXRlcm1pbmUgYSBwcm9wZXJ0eSBu
YW1lIChlaXRoZXIgdmlhIGEgcmVuYW1lTWFwIG9yIGRlZmF1bHQgY29udmVyc2lvbikuCisvLyAg
KiBJZiBhbiBhY2Nlc3Nvck1hcCBpcyBwcm92aWRlZCwgYW5kIGNvbmF0aW5zIGEgdGhpcyBuYW1l
LCBzdG9yZSB0aGUgbWV0aG9kIGluIHRoZSBtYXAuCisvLyAgKiBPdGhlcndpc2UsIGlmIHRoZSBv
YmplY3QgZG9lc24ndCBhbHJlYWR5IGNvbmF0aW4gYSBwcm9wZXJ0eSB3aXRoIG5hbWUsIGNyZWF0
ZSBpdC4KK3N0YXRpYyB2b2lkIGNvcHlNZXRob2RzVG9PYmplY3QoSlNDb250ZXh0KiBjb250ZXh0
LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0
aG9kLCBKU1ZhbHVlKiBvYmplY3QsIE5TTXV0YWJsZURpY3Rpb25hcnkqIGFjY2Vzc29yTWV0aG9k
cyA9IG5pbCkKK3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZW5hbWVNYXAgPSBjcmVhdGVS
ZW5hbWVNYXAocHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QpOworCisgICAgZm9yRWFjaE1ldGhv
ZEluUHJvdG9jb2wocHJvdG9jb2wsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCwgXihTRUwgc2VsLCBj
b25zdCBjaGFyKiB0eXBlcyl7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWVDU3RyID0gc2VsX2dl
dE5hbWUoc2VsKTsKKyAgICAgICAgTlNTdHJpbmcqIG5hbWUgPSBAKG5hbWVDU3RyKTsKKyAgICAg
ICAgaWYgKGFjY2Vzc29yTWV0aG9kcyAmJiBhY2Nlc3Nvck1ldGhvZHNbbmFtZV0pIHsKKyAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9k
KGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlw
ZXMpOworICAgICAgICAgICAgaWYgKCFtZXRob2QpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgYWNjZXNzb3JNZXRob2RzW25hbWVdID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFs
dWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG5hbWUgPSByZW5hbWVNYXBbbmFtZV07CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAg
ICAgICAgICAgICAgbmFtZSA9IHNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUobmFtZUNTdHIpOworICAg
ICAgICAgICAgaWYgKFtvYmplY3QgaGFzUHJvcGVydHk6bmFtZV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JNZXRob2QoY29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1l
dGhvZCwgc2VsLCB0eXBlcyk7CisgICAgICAgICAgICBpZiAobWV0aG9kKQorICAgICAgICAgICAg
ICAgIHB1dE5vbkVudW1lcmFibGUob2JqZWN0LCBuYW1lLCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAg
W3JlbmFtZU1hcCByZWxlYXNlXTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VQcm9wZXJ0eUF0dHJp
YnV0ZXMob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5LCBjaGFyKiYgZ2V0dGVyTmFtZSwgY2hhciom
IHNldHRlck5hbWUpCit7CisgICAgYm9vbCByZWFkb25seSA9IGZhbHNlOworICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZUNvdW50OworICAgIG9iamNfcHJvcGVydHlfYXR0cmlidXRlX3QqIGF0dHJpYnV0
ZXMgPSBwcm9wZXJ0eV9jb3B5QXR0cmlidXRlTGlzdChwcm9wZXJ0eSwgJmF0dHJpYnV0ZUNvdW50
KTsKKyAgICBpZiAoYXR0cmlidXRlQ291bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKihhdHRy
aWJ1dGVzW2ldLm5hbWUpKSB7CisgICAgICAgICAgICBjYXNlICdHJzoKKyAgICAgICAgICAgICAg
ICBnZXR0ZXJOYW1lID0gc3RyZHVwKGF0dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgc2V0dGVy
TmFtZSA9IHN0cmR1cChhdHRyaWJ1dGVzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgICAgIHJlYWRvbmx5ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJlZShh
dHRyaWJ1dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlYWRvbmx5OworfQorCitzdGF0aWMgY2hh
ciogbWFrZVNldHRlck5hbWUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzaXplX3QgbmFtZUxl
bmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBjaGFyKiBzZXR0ZXJOYW1lID0gKGNoYXIqKW1hbGxv
YyhuYW1lTGVuZ3RoICsgNSk7IC8vICJzZXQiIE5hbWUgIjpcMCIKKyAgICBzZXR0ZXJOYW1lWzBd
ID0gJ3MnOworICAgIHNldHRlck5hbWVbMV0gPSAnZSc7CisgICAgc2V0dGVyTmFtZVsyXSA9ICd0
JzsKKyAgICBzZXR0ZXJOYW1lWzNdID0gdG91cHBlcigqbmFtZSk7CisgICAgbWVtY3B5KHNldHRl
ck5hbWUgKyA0LCBuYW1lICsgMSwgbmFtZUxlbmd0aCAtIDEpOworICAgIHNldHRlck5hbWVbbmFt
ZUxlbmd0aCArIDNdID0gJzonOworICAgIHNldHRlck5hbWVbbmFtZUxlbmd0aCArIDRdID0gJ1ww
JzsKKyAgICByZXR1cm4gc2V0dGVyTmFtZTsKK30KKworc3RhdGljIHZvaWQgY29weVByb3RvdHlw
ZVByb3BlcnRpZXMoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29s
KiBwcm90b2NvbCwgSlNWYWx1ZSogcHJvdG90eXBlVmFsdWUpCit7CisgICAgLy8gRmlyc3QgZ2F0
aGVyIHByb3ByZXRpZXMgaW50byB0aGlzIGxpc3QsIHRoZW4gaGFuZGxlIHRoZSBtZXRob2RzIChj
YXB0dXJpbmcgdGhlIGFjY2Vzc29yIG1ldGhvZHMpLgorICAgIHN0cnVjdCBQcm9wZXJ0eSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIGNoYXIqIGdldHRlck5hbWU7CisgICAg
ICAgIGNoYXIqIHNldHRlck5hbWU7CisgICAgfTsKKyAgICBfX2Jsb2NrIFdURjo6VmVjdG9yPFBy
b3BlcnR5PiBwcm9wZXJ0eUxpc3Q7CisKKyAgICAvLyBNYXAgcmVjb3JkaW5nIHRoZSBtZXRob2Rz
IHVzZWQgYXMgZ2V0dGVycy9zZXR0ZXJzLgorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmFjY2Vz
c29yTWV0aG9kcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworCisgICAgLy8g
VXNlZnVsIHZhbHVlLgorICAgIEpTVmFsdWUqIHVuZGVmaW5lZCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKworICAgIGZvckVhY2hQcm9wZXJ0eUluUHJv
dG9jb2wocHJvdG9jb2wsIF4ob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5KXsKKyAgICAgICAgY2hh
ciogZ2V0dGVyTmFtZSA9IDA7CisgICAgICAgIGNoYXIqIHNldHRlck5hbWUgPSAwOworICAgICAg
ICBib29sIHJlYWRvbmx5ID0gcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZXMocHJvcGVydHksIGdldHRl
ck5hbWUsIHNldHRlck5hbWUpOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gcHJvcGVydHlf
Z2V0TmFtZShwcm9wZXJ0eSk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2V0
dGVyICYgc2V0dGVyIG1ldGhvZHMgdG8gCisgICAgICAgIGlmICghZ2V0dGVyTmFtZSkKKyAgICAg
ICAgICAgIGdldHRlck5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgICAgIGFjY2Vzc29yTWV0aG9k
c1tAKGdldHRlck5hbWUpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKCFyZWFkb25seSkgewor
ICAgICAgICAgICAgaWYgKCFzZXR0ZXJOYW1lKQorICAgICAgICAgICAgICAgIHNldHRlck5hbWUg
PSBtYWtlU2V0dGVyTmFtZShuYW1lKTsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKHNl
dHRlck5hbWUpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUg
cHJvcGVydGllcyB0byBhIGxpc3QuCisgICAgICAgIHByb3BlcnR5TGlzdC5hcHBlbmQoKFByb3Bl
cnR5KXsgbmFtZSwgZ2V0dGVyTmFtZSwgc2V0dGVyTmFtZSB9KTsKKyAgICB9KTsKKworICAgIC8v
IENvcHkgbWV0aG9kcyB0byB0aGUgcHJvdG90eXBlLCBjYXB0dXJpbmcgYWNjZXNzb3JzIGluIHRo
ZSBhY2Nlc3Nvck1ldGhvZHMgbWFwLgorICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwg
b2JqY0NsYXNzLCBwcm90b2NvbCwgWUVTLCBwcm90b3R5cGVWYWx1ZSwgYWNjZXNzb3JNZXRob2Rz
KTsKKworICAgIC8vIEl0ZXJhdGUgdGhlIHByb3BlcnR5TGlzdCAmIGdlbmVyYXRlIGFjY2Vzc29y
IHByb3BlcnRpZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eUxpc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgUHJvcGVydHkmIHByb3BlcnR5ID0gcHJvcGVydHlMaXN0W2ld
OworCisgICAgICAgIEpTVmFsdWUqIGdldHRlciA9IGFjY2Vzc29yTWV0aG9kc1tAKHByb3BlcnR5
LmdldHRlck5hbWUpXTsKKyAgICAgICAgZnJlZShwcm9wZXJ0eS5nZXR0ZXJOYW1lKTsKKyAgICAg
ICAgQVNTRVJUKCFbZ2V0dGVyIGlzVW5kZWZpbmVkXSk7CisKKyAgICAgICAgSlNWYWx1ZSogc2V0
dGVyID0gdW5kZWZpbmVkOworICAgICAgICBpZiAocHJvcGVydHkuc2V0dGVyTmFtZSkgeworICAg
ICAgICAgICAgc2V0dGVyID0gYWNjZXNzb3JNZXRob2RzW0AocHJvcGVydHkuc2V0dGVyTmFtZSld
OworICAgICAgICAgICAgZnJlZShwcm9wZXJ0eS5zZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIEFT
U0VSVCghW3NldHRlciBpc1VuZGVmaW5lZF0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBbcHJvdG90eXBlVmFsdWUgZGVmaW5lUHJvcGVydHk6QChwcm9wZXJ0eS5uYW1lKSBkZXNjcmlw
dG9yOkB7CisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTogZ2V0dGVyLAor
ICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JTZXRLZXk6IHNldHRlciwKKyAgICAgICAg
ICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAgICAgICAg
SlNQcm9wZXJ0eURlc2NyaXB0b3JDb25maWd1cmFibGVLZXk6IEBZRVMKKyAgICAgICAgfV07Cisg
ICAgfQorfQorCitAaW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6IE5TT2JqZWN0IHsKKyAgICBK
U0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBDbGFzcyBtX2NsYXNzOworICAgIGJvb2wgbV9ibG9j
azsKKyAgICBKU0NsYXNzUmVmIG1fY2xhc3NSZWY7CisgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7
CisgICAgSlNWYWx1ZSogbV9jb25zdHJ1Y3RvcjsKK30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0
OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xhc3M6KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzoo
SlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5mbzsKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9y
T2JqZWN0OihpZClvYmplY3Q7CistIChKU1ZhbHVlICopY29uc3RydWN0b3I7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIEpTT2JqQ0NsYXNzSW5mbworCistIChpZClpbml0V2l0aENvbnRleHQ6
KEpTQ29udGV4dCopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihK
U09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZvCit7CisgICAgW3N1cGVyIGluaXRdOworCisg
ICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFtZShjbHMpOworICAgIG1fY29u
dGV4dCA9IGNvbnRleHQ7CisgICAgbV9jbGFzcyA9IGNsczsKKyAgICBtX2Jsb2NrID0gW2NscyBp
c1N1YmNsYXNzT2ZDbGFzczpnZXROU0Jsb2NrQ2xhc3MoKV07CisgICAgSlNDbGFzc0RlZmluaXRp
b24gZGVmaW5pdGlvbjsKKyAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7
CisgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgZGVmaW5pdGlvbi5w
YXJlbnRDbGFzcyA9IHdyYXBwZXJDbGFzcygpOworICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3Jl
YXRlKCZkZWZpbml0aW9uKTsKKworICAgIEFTU0VSVCgoY2xzID09IFtOU09iamVjdCBjbGFzc10p
ID09ICFzdXBlckNsYXNzSW5mbyk7CisgICAgaWYgKCFzdXBlckNsYXNzSW5mbykgeworICAgICAg
ICBtX2NvbnN0cnVjdG9yID0gW2NvbnRleHRbQCJPYmplY3QiXSByZXRhaW5dOworICAgICAgICBt
X3Byb3RvdHlwZSA9IFttX2NvbnN0cnVjdG9yW0AicHJvdG90eXBlIl0gcmV0YWluXTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHByb3RvdHlwZS9jb25zdHJ1Y3RvciBwYWly
LgorICAgICAgICBtX3Byb3RvdHlwZSA9IGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChjb250
ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzUHJvdG90eXBlIiwgY2xhc3NOYW1l
XSk7CisgICAgICAgIG1fY29uc3RydWN0b3IgPSBjcmVhdGVPYmplY3RXaXRoQ3VzdG9tQnJhbmQo
Y29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlc0NvbnN0cnVjdG9yIiwgY2xh
c3NOYW1lXSwgd3JhcHBlckNsYXNzKCksIFtjbHMgcmV0YWluXSk7CisgICAgICAgIHB1dE5vbkVu
dW1lcmFibGUobV9wcm90b3R5cGUsIEAiY29uc3RydWN0b3IiLCBtX2NvbnN0cnVjdG9yKTsKKyAg
ICAgICAgcHV0Tm9uRW51bWVyYWJsZShtX2NvbnN0cnVjdG9yLCBAInByb3RvdHlwZSIsIG1fcHJv
dG90eXBlKTsKKworICAgICAgICBQcm90b2NvbCogZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9y
dFByb3RvY29sKCk7CisgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29s
KGNscywgZXhwb3J0UHJvdG9jb2wsIF4oUHJvdG9jb2wqIHByb3RvY29sKXsKKyAgICAgICAgICAg
IGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKGNvbnRleHQsIGNscywgcHJvdG9jb2wsIG1fcHJvdG90
eXBlKTsKKyAgICAgICAgICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwgY2xzLCBwcm90
b2NvbCwgTk8sIG1fY29uc3RydWN0b3IpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBTZXQg
W1Byb3RvdHlwZV0uCisgICAgICAgIG1fcHJvdG90eXBlW0AiX19wcm90b19fIl0gPSBzdXBlckNs
YXNzSW5mby0+bV9wcm90b3R5cGU7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYpOworICAgIFtt
X3Byb3RvdHlwZSByZWxlYXNlXTsKKyAgICBbbV9jb25zdHJ1Y3RvciByZWxlYXNlXTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClv
YmplY3QKK3sKKyAgICBBU1NFUlQoW29iamVjdCBpc0tpbmRPZkNsYXNzOm1fY2xhc3NdKTsKKyAg
ICBBU1NFUlQobV9ibG9jayA9PSBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNz
KCldKTsKKyAgICBpZiAobV9ibG9jaykgeworICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9k
ID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhtX2NvbnRleHQsIG9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpt
X2NvbnRleHRdOworICAgIH0KKworICAgIEpTVmFsdWVSZWYgcHJvdG90eXBlVmFsdWUgPSB2YWx1
ZUludGVybmFsVmFsdWUobV9wcm90b3R5cGUpOworICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBwcm90b3R5cGVWYWx1ZSkpOworICAg
IEpTT2JqZWN0UmVmIHByb3RvdHlwZSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KG1fY29udGV4dCksIHByb3RvdHlwZVZhbHVlLCAwKTsKKworICAgIEpTT2JqZWN0UmVm
IHdyYXBwZXIgPSBKU09iamVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQp
LCBtX2NsYXNzUmVmLCBbb2JqZWN0IHJldGFpbl0pOworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBl
KGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9jb250ZXh0KSwgd3JhcHBlciwgcHJvdG90eXBlKTsK
KyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6d3JhcHBlciBpbkNvbnRleHQ6bV9j
b250ZXh0XTsKK30KKworLSAoSlNWYWx1ZSAqKWNvbnN0cnVjdG9yCit7CisgICAgcmV0dXJuIG1f
Y29uc3RydWN0b3I7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7
CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogbV9j
bGFzc01hcDsKK30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQK
K3sKKyAgICBbc3VwZXIgaW5pdF07CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2Ns
YXNzTWFwID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW21fY2xhc3NNYXAgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5m
b0ZvckNsYXNzOihDbGFzcyljbHMKK3sKKyAgICBpZiAoIWNscykKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIC8vIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBhIEpTT2JqQ0NsYXNz
SW5mbyBmb3IgdGhpcyBDbGFzcy4KKyAgICBpZiAoSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8g
PSAoSlNPYmpDQ2xhc3NJbmZvKiltX2NsYXNzTWFwW2Nsc10pCisgICAgICAgIHJldHVybiBjbGFz
c0luZm87CisKKyAgICAvLyBTa2lwIGludGVybmFsIGNsYXNzZXMgYmVnaW5pbmcgd2l0aCAnXycg
LSBqdXN0IGNvcHkgbGluayB0byB0aGUgcGFyZW50IGNsYXNzJ3MgaW5mby4KKyAgICBpZiAoJ18n
ID09ICpjbGFzc19nZXROYW1lKGNscykpCisgICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10g
PSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldOworCisg
ICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5p
dFdpdGhDb250ZXh0Om1fY29udGV4dCBmb3JDbGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYg
Y2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2Vd
OworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7CisgICAg
SlNWYWx1ZSogd3JhcHBlciA9IG9iamNfZ2V0QXNzb2NpYXRlZE9iamVjdChvYmplY3QsIG1fY29u
dGV4dCk7CisgICAgaWYgKHdyYXBwZXIgJiYgd3JhcHBlci5jb250ZXh0KQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKworICAgIGlmIChjbGFzc19pc01ldGFDbGFzcyhvYmplY3RfZ2V0Q2xhc3Mo
b2JqZWN0KSkpCisgICAgICAgIHdyYXBwZXIgPSBbW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENs
YXNzKW9iamVjdF0gY29uc3RydWN0b3JdOworICAgIGVsc2UgeworICAgICAgICBKU09iakNDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOltvYmplY3QgY2xhc3Nd
XTsKKyAgICAgICAgd3JhcHBlciA9IFtjbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpvYmplY3Rd
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA1ODkxCisgICAgLy8gVGhpcyBnZW5lcmFsIGFwcHJvYWNoIHRvIHdyYXBwZXIg
Y2FjaGluZyBpcyBwcmV0dHkgZWZmZWN0aXZlLCBidXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHBy
b2JsZW1zOgorICAgIC8vICgxKSBGb3IgaW1tb3J0YWwgb2JqZWN0cyBKU1ZhbHVlcyB3aWxsIGVm
ZmVjdGl2ZWx5IGxlYWogYW5kIHRoaXMgcmVzdWx0cyBpbiBlcnJvciBvdXRwdXQgYmVpbmcgbG9n
Z2VkIC0gd2Ugc2hvdWxkIGF2b2lkIGFkZGluZyBhc3NvY2lhdGVkIG9iamVjdHMgdG8gaW1tb3J0
YWwgb2JqZWN0cy4KKyAgICAvLyAoMikgQSBsb25nIGxpdmVkIG9iamVjdCBtYXkgcmFjayB1cCBt
YW55IEpTVmFsdWVzLiBXaGVuIHRoZSBjb250ZXh0cyBhcmUgcmVsZWFzZWQgdGhlc2Ugd2lsbCB1
bnByb2N0ZWN0IHRoZSBhc3NvY2lhdGVkIEphdmFTY3JpcHQgb2JqZWN0cywKKyAgICAvLyAgICAg
YnV0IHN0aWxsLCB3b3VsZCBwcm9iYWJseSBuaWNlciBpZiB3ZSBtYWRlIGl0IHNvIHRoYXQgb25s
eSBvbmUgYXNzb2NpYXRlZCBvYmplY3Qgd2FzIHJlcXVpcmVkLCBicm9hZGNhc3Rpbmcgb2JqZWN0
IGRlYWxsb2MuCisgICAgb2JqY19zZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0
LCB3cmFwcGVyLCBPQkpDX0FTU09DSUFUSU9OX1JFVEFJTik7CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK0BlbmQKKworaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChj
b250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgLy9BU1NFUlQoIWV4Y2VwdGlvbik7CisgICAg
aWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3Mo
KSkpCisgICAgICAgIHJldHVybiAoaWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCk7CisgICAg
aWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVjdCkpCisgICAgICAg
IHJldHVybiB0YXJnZXQ7CisgICAgcmV0dXJuIG5pbDsKK30KKworUHJvdG9jb2wqIGdldEpTRXhw
b3J0UHJvdG9jb2woKQoreworICAgIHN0YXRpYyBQcm90b2NvbCogcHJvdG9jb2wgPSAwOworICAg
IGlmICghcHJvdG9jb2wpCisgICAgICAgIHByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNF
eHBvcnQiKTsKKyAgICByZXR1cm4gcHJvdG9jb2w7Cit9CisKK0NsYXNzIGdldE5TQmxvY2tDbGFz
cygpCit7CisgICAgc3RhdGljIENsYXNzIGNscyA9IDA7CisgICAgaWYgKCFjbHMpCisgICAgICAg
IGNscyA9IG9iamNfZ2V0Q2xhc3MoIk5TQmxvY2siKTsKKyAgICByZXR1cm4gY2xzOworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlwdENvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgJ
KHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlw
dENvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNCArMjksMTMgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmdSZWZDRi5oPgogCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU0NvbnRl
eHQuaCIKKyNpbXBvcnQgIkFQSUpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUu
aCIKKyNpbXBvcnQgIkpTRXhwb3J0LmgiCisKKyNlbmRpZgorCiAjZW5kaWYgLyogSmF2YVNjcmlw
dENvcmVfaCAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxF
RAorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQq
LCBDbGFzcywgUHJvdG9jb2wqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwgY29uc3QgY2hh
ciogdHlwZXMpOworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhKU0Nv
bnRleHQqLCBpZCk7CisKK2lkIHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNp
ZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQ
SVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiSlNCbG9ja0FkYXB0b3IuaCIK
KyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIK
KyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJvYmpjL3J1bnRp
bWUuaCIKKyNpbXBvcnQgInd0Zi9SZXRhaW5QdHIuaCIKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FsbGJhY2tBcmd1bWVudCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiwgTlNJbnRlZ2VyLCBKU0NvbnRleHQqLCBKU1ZhbHVl
UmVmLCBKU1ZhbHVlUmVmKikgPSAwOworCisgICAgT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+IG1f
bmV4dDsKK307CisKK0NhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KCkKK3sKK30K
KworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1
bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0gSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCk7CisgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudEludGVnZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIs
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2Vw
dGlvbikpOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDph
cmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IENhbGxiYWNrQXJndW1lbnREb3VibGUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVU
b051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0
aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJn
dW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRKU1ZhbHVl
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAg
ICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNv
bnRleHQ6Y29udGV4dF07CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBh
dEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3Vt
ZW50SWQgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgewor
ICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnQpOworICAg
ICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MgOiBwdWJsaWMg
Q2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3Mo
Q2xhc3MgY2xzKQorICAgICAgICA6IENhbGxiYWNrQXJndW1lbnQoKQorICAgICAgICAsIG1fY2xh
c3MoY2xzKQorICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmV0YWluXTsKKyAgICB9CisKKyAgICB+
Q2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoKQorICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmVsZWFz
ZV07CisgICAgfQorCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1
bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAg
aWQgb2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KTsKKyAgICAgICAg
aWYgKG9iamVjdCAmJiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pIHsKKyAgICAgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoSlNWYWx1
ZUlzTnVsbChjdHgsIGFyZ3VtZW50KSB8fCBKU1ZhbHVlSXNVbmRlZmluZWQoY3R4LCBhcmd1bWVu
dCkpIHsKKyAgICAgICAgICAgIG9iamVjdCA9IG5pbDsKKyAgICAgICAgICAgIFtpbnZvY2F0aW9u
IHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAiQXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggT2JqZWN0
aXZlLUMgQ2xhc3MiKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsYXNzIG1fY2xhc3M7Cit9
OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1
bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUg
PSB2YWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50
LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dE5TU3RyaW5nIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb1N0cmluZyhjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2lu
dm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAg
IH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU0RhdGUgOiBwdWJsaWMgQ2FsbGJhY2tB
cmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9u
LCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJl
ZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFs
dWUgPSB2YWx1ZVRvRGF0ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVu
dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1l
bnROU0FycmF5IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0FycmF5KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
fQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeSA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBp
ZCB2YWx1ZSA9IHZhbHVlVG9EaWN0aW9uYXJ5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tBcmd1bWVudFN0cnVjdCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoK
KyAgICBDYWxsYmFja0FyZ3VtZW50U3RydWN0KE5TSW52b2NhdGlvbiogY29udmVyc2lvbkludm9j
YXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgICAgICA6IG1fY29udmVyc2lvbklu
dm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAgeworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJbnRlZ2VyIHNpemUsIGFsaWdubWVu
dDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29kZWRUeXBlLCAmc2l6ZSwgJmFs
aWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAgICAgICBtX2FsbG9jYXRpb24gPSAo
Y2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAgICAgICBtX2J1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2FsbG9jYXRp
b24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFs
IH5DYWxsYmFja0FyZ3VtZW50U3RydWN0KCkKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25J
bnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpT
VmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZl
cnNpb25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252
ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZv
Y2F0aW9uIHNldEFyZ3VtZW50Om1fYnVmZmVyIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247
CisgICAgY2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xh
c3MgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soSlNCbG9ja0Fk
YXB0b3IqIGFkYXB0b3IpCisgICAgICAgIDogbV9hZGFwdG9yKGFkYXB0b3IpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjaygpCisg
ICAgeworICAgICAgICBbbV9hZGFwdG9yIHJlbGVhc2VdOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCisgICAgeworICAgICAgICBpZCBibG9jayA9IFttX2FkYXB0b3IgYmxvY2tGcm9tVmFs
dWU6YXJndW1lbnQgaW5Db250ZXh0OmNvbnRleHQgd2l0aEV4Y2VwdGlvbjpleGNlcHRpb25dOwor
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomYmxvY2sgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CisgICAgfQorCitwcml2YXRlOgorICAgIEpTQmxvY2tBZGFwdG9yKiBtX2FkYXB0b3I7
Cit9OworCitjbGFzcyBBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBDYWxsYmFja0FyZ3VtZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyPFQ+OworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnREb3VibGU8VD47CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0
VHlwZSB0eXBlVm9pZCgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SWQ7CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29uc3QgY2hhciogYmVnaW4sIGNv
bnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVu
ZCk7CisgICAgICAgIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoY29weSk7CisgICAgICAgIGlm
ICghY2xzKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICBpZiAoY2xzID09IFtK
U1ZhbHVlIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEpT
VmFsdWU7CisgICAgICAgIGlmIChjbHMgPT0gW05TU3RyaW5nIGNsYXNzXSkKKyAgICAgICAgICAg
IHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOworICAgICAgICBpZiAoY2xzID09
IFtOU051bWJlciBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1l
bnROU051bWJlcjsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNEYXRlIGNsYXNzXSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZTsKKyAgICAgICAgaWYgKGNscyA9
PSBbTlNBcnJheSBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1l
bnROU0FycmF5OworICAgICAgICBpZiAoY2xzID09IFtOU0RpY3Rpb25hcnkgY2xhc3NdKQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5OworCisgICAg
ICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoY2xzKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2soY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNo
YXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7Cisg
ICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soW1tKU0Jsb2Nr
QWRhcHRvciBhbGxvY10gaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZyb21Qcm90b2NvbDpjb3B5XSk7
CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBi
ZWdpbiwgY29uc3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShi
ZWdpbiwgZW5kKTsKKyAgICAgICAgaWYgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHZhbHVl
VG9UeXBlSW52b2NhdGlvbkZvcihjb3B5KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tBcmd1bWVudFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q2FsbGJhY2tSZXN1bHQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7Cit9Owor
CitjbGFzcyBDYWxsYmFja1Jlc3VsdFZvaWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBDYWxsYmFja1Jlc3VsdElkIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGlkIHZhbHVl
OworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgICAgICBy
ZXR1cm4gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIENhbGxiYWNrUmVzdWx0TnVtZXJpYyA6IHB1YmxpYyBDYWxs
YmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9j
YXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisgICAg
eworICAgICAgICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTom
dmFsdWVdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgKGRvdWJsZSl2YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tSZXN1bHRCb29sZWFuIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7Cisg
ICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFs
dWUpOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0U3RydWN0IDogcHVibGljIENh
bGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0ludm9j
YXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKKyAg
ICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWluXTsKKyAgICAgICAgTlNV
SW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChl
bmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAtLWFsaWdubWVudDsKKyAg
ICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsgYWxpZ25tZW50KTsKKyAg
ICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50KTsKKyAg
ICB9CisgICAgCisgICAgdmlydHVhbCB+Q2FsbGJhY2tSZXN1bHRTdHJ1Y3QoKQorICAgIHsKKyAg
ICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9h
bGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisg
ICAgeworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2FsbG9jYXRpb25dOwor
CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYWxsb2NhdGlv
biBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomY29udGV4dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBp
bnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAgICAgSlNWYWx1ZSogdmFs
dWU7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1
ZV07CisgICAgICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAg
Y2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3MgUmVz
dWx0VHlwZURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENhbGxiYWNrUmVzdWx0KiBS
ZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0
VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVz
dWx0TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBD
YWxsYmFja1Jlc3VsdE51bWVyaWM8VD47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUg
dHlwZUJvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdEJvb2xl
YW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFZvaWQ7CisgICAgfQorCisgICAgc3RhdGlj
IFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tS
ZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVPZkNsYXNzKGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tSZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxi
YWNrUmVzdWx0SWQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0
KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJp
bmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uID0gdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0
dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICB9Cit9OworCitlbnVtIENhbGxiYWNrVHlwZSB7CisgICAgQ2FsbGJh
Y2tJbnN0YW5jZU1ldGhvZCwKKyAgICBDYWxsYmFja0NsYXNzTWV0aG9kLAorICAgIENhbGxiYWNr
QmxvY2sKK307CisKK2NsYXNzIE9iakNDYWxsYmFja0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBP
YmpDQ2FsbGJhY2tGdW5jdGlvbihKU0NvbnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiogaW52
b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NPd25Q
dHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVzdWx0
PiByZXN1bHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICwgbV9pbnN0YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFpbl0p
CisgICAgICAgICwgbV9pbnZvY2F0aW9uKGludm9jYXRpb24pCisgICAgICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCh0eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2QgfHwgaW5zdGFuY2VDbGFzcyk7
CisgICAgfQorCisgICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFtt
X2luc3RhbmNlQ2xhc3MgcmVsZWFzZV07CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjYWxsKEpT
Q29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisKKyAgICBKU0NvbnRleHQqIGNvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZCB3cmFwcGVkQmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA9PSBDYWxsYmFja0Jsb2NrID8gW21faW52b2NhdGlvbiB0YXJn
ZXRdIDogbmlsOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWFrQ29udGV4dFJlZiBtX2NvbnRl
eHQ7CisgICAgQ2FsbGJhY2tUeXBlIG1fdHlwZTsKKyAgICBDbGFzcyBtX2luc3RhbmNlQ2xhc3M7
CisgICAgV1RGOjpSZXRhaW5QdHI8TlNJbnZvY2F0aW9uPiBtX2ludm9jYXRpb247CisgICAgT3du
UHRyPENhbGxiYWNrQXJndW1lbnQ+IG1fYXJndW1lbnRzOworICAgIE93blB0cjxDYWxsYmFja1Jl
c3VsdD4gbV9yZXN1bHQ7Cit9OworCitzdGF0aWMgdm9pZCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZp
bmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBkZWxldGUgKE9iakNDYWxsYmFja0Z1
bmN0aW9uKilKU09iamVjdEdldFByaXZhdGUob2JqZWN0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY2FsbGVy
Q29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gUmV0YWtlIHRoZSBBUEkgbG9jayAtIHdlIG5lZWQg
dGhpcyBmb3IgYSBmZXcgcmVhc29uczoKKyAgICAvLyAoMSkgV2UgZG9uJ3Qgd2FudCB0byBzdXBw
b3J0IHRoZSBDLUFQSSdzIGNvbmZ1c2luZyBkcm9wcy1sb2Nrcy1vbmNlIHBvbGljeSAtIHNob3Vs
ZCBvbmx5IGRyb3AgbG9ja3MgaWYgd2UgY2FuIGRvIHNvIHJlY3Vyc2l2ZXkuCisgICAgLy8gKDIp
IFdlJ3JlIGNhbGluZyBzb21lIEpTQyBpbnRlcm5hbHMgdGhhdCByZXF1aXJlIHVzIHRvIGJlIG9u
IHRoZSAnaW5zaWRlJyAtIGUuZy4gY3JlYXRlVHlwZUVycm9yLgorICAgIC8vICgzKSBXZSBuZWVk
IHRvIGJlIGxvY2tlZCAocGVyIGNvbnRleHQgd291bGQgYmUgZmluZSkgYWdhaW5zdCBjb25mbGlj
dGluZyB1c2dhZSBvZiB0aGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb24ncyBOU0ludm9jYXRpb24uCisg
ICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY2FsbGVyQ29udGV4dCkpOworCisg
ICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gKE9iakNDYWxsYmFja0Z1bmN0aW9u
KilKU09iamVjdEdldFByaXZhdGUoZnVuY3Rpb24pOworICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IGNhbGxiYWNrLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk0CisgICAg
ICAgIC8vIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0aGF0IHRoZSBjb250ZXh0IGJlIHJldGFpbmVk
LCBpdCB3b3VsZCBwcm9iYWJseSBiZSBtb3JlCisgICAgICAgIC8vIGFwcHJvcHJpYXRlIHRvIHVz
ZSBhIG5ldyBKU0NvbnRleHQgaW5zdGFuY2UgKGNyZWF0aW5nIG9uZSBpZiBuZWNlc3NhcnkpLgor
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjYWxs
ZXJDb250ZXh0KSwgIk9iamVjdGl2ZS1DIGNhbGxiYWNrIGZ1bmN0aW9uIGNvbnRleHQgcmVsZWFz
ZWQiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjYWxsZXJDb250ZXh0
KTsKKyAgICB9CisKKyAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOworICAgIEpTVmFsdWVS
ZWYgcmVzdWx0OworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbY29udGV4dCBiZWdp
bkNhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6dGhpc09iamVjdCBhcmd1
bWVudENvdW50OmFyZ3VtZW50Q291bnQgYXJndW1lbnRzOmFyZ3VtZW50c107CisgICAgICAgIHJl
c3VsdCA9IGNhbGxiYWNrLT5jYWxsKGNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKQor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0LmV4Y2Vw
dGlvbik7CisgICAgICAgIFtjb250ZXh0IGVuZENhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0
YV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBKU0NsYXNzUmVmIG9i
akNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQoreworICAgIHN0YXRpYyBTcGluTG9jayBpbml0TG9j
ayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIo
JmluaXRMb2NrKTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gMDsKKworICAg
IGlmICghY2xhc3NSZWYpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsK
KyAgICAgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7CisgICAgICAgIGRlZmluaXRpb24uZmlu
YWxpemUgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplOworICAgICAgICBkZWZpbml0aW9u
LmNhbGxBc0Z1bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbjsKKyAg
ICAgICAgY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gY2xhc3NSZWY7Cit9CisKK0pTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpOworCisgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7CisgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6IHsKKyAgICAg
ICAgaWQgdGFyZ2V0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIHRoaXNPYmplY3QpOworICAg
ICAgICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFz
c10pIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJv
cih0b0pTKGN0eCksICJzZWxmIHR5cGUgY2hlY2sgZmFpbGVkIGZvciBPYmplY3RpdmUtQyBpbnN0
YW5jZSBtZXRob2QiKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKKyAgICAgICAgfQorICAgICAgICBbbV9pbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRd
OworICAgIH0KKyAgICBjYXNlIENhbGxiYWNrQ2xhc3NNZXRob2Q6CisgICAgICAgIGZpcnN0QXJn
dW1lbnQgPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxiYWNrQmxvY2s6CisgICAg
ICAgIGZpcnN0QXJndW1lbnQgPSAxOworICAgIH0KKworICAgIHNpemVfdCBhcmd1bWVudE51bWJl
ciA9IDA7CisgICAgZm9yIChDYWxsYmFja0FyZ3VtZW50KiBhcmd1bWVudCA9IG1fYXJndW1lbnRz
LmdldCgpOyBhcmd1bWVudDsgYXJndW1lbnQgPSBhcmd1bWVudC0+bV9uZXh0LmdldCgpKSB7Cisg
ICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBhcmd1bWVudE51bWJlciA8IGFyZ3VtZW50Q291bnQg
PyBhcmd1bWVudHNbYXJndW1lbnROdW1iZXJdIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
KyAgICAgICAgYXJndW1lbnQtPnNldChtX2ludm9jYXRpb24uZ2V0KCksIGFyZ3VtZW50TnVtYmVy
ICsgZmlyc3RBcmd1bWVudCwgY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIGlm
ICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CisgICAgICAgICsrYXJndW1lbnROdW1iZXI7CisgICAgfQorCisgICAgW21faW52b2NhdGlv
biBpbnZva2VdOworCisgICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9pbnZvY2F0aW9uLmdldCgp
LCBjb250ZXh0LCBleGNlcHRpb24pOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNv
bnRhaW5zQ2xhc3MoKQoreworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jl
c3VsdEZhbHNlLAorICAgICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0
VW5rbm93bgorICAgIH07CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVj
a1Jlc3VsdFVua25vd247CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgewor
ICAgICAgICBpZCBibG9jayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07
CisgICAgICAgIGNoZWNrID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihf
QmxvY2tfc2lnbmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBD
aGVja1Jlc3VsdEZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK2lu
bGluZSBib29sIHNraXBOdW1iZXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIGlmICgh
aXNkaWdpdCgqcG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUoaXNk
aWdpdCgqKytwb3NpdGlvbikpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgSlNPYmpl
Y3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9uKEpTQ29udGV4dCogY29udGV4
dCwgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5z
dGFuY2VDbGFzcywgY29uc3QgY2hhciogc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzKQoreworICAg
IGNvbnN0IGNoYXIqIHBvc2l0aW9uID0gc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzOworCisgICAg
T3duUHRyPENhbGxiYWNrUmVzdWx0PiByZXN1bHQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPFJl
c3VsdFR5cGVEZWxlZ2F0ZT4ocG9zaXRpb24pKTsKKyAgICBpZiAoIXJlc3VsdCB8fCAhc2tpcE51
bWJlcihwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6CisgICAgY2FzZSBDYWxsYmFja0Ns
YXNzTWV0aG9kOgorICAgICAgICBpZiAoJ0AnICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBOdW1i
ZXIocG9zaXRpb24pIHx8ICc6JyAhPSAqKHBvc2l0aW9uKyspIHx8ICFza2lwTnVtYmVyKHBvc2l0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FsbGJhY2tCbG9jazoKKyAgICAgICAgaWYgKCgnQCcgIT0gKihwb3NpdGlvbisrKSkgfHwgKCc/
JyAhPSAqKHBvc2l0aW9uKyspKSB8fCAhc2tpcE51bWJlcihwb3NpdGlvbikgfHwgKCFibG9ja1Np
Z25hdHVyZUNvbnRhaW5zQ2xhc3MoKSAmJiBzdHJjaHIocG9zaXRpb24sICdAJykpKQorICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgT3duUHRyPENh
bGxiYWNrQXJndW1lbnQ+IGFyZ3VtZW50cyA9IDA7CisgICAgT3duUHRyPENhbGxiYWNrQXJndW1l
bnQ+KiBuZXh0QXJndW1lbnQgPSAmYXJndW1lbnRzOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnQgPSAwOworICAgIHdoaWxlICgqcG9zaXRpb24pIHsKKyAgICAgICAgT3duUHRyPENhbGxiYWNr
QXJndW1lbnQ+IGFyZ3VtZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxBcmd1bWVudFR5cGVE
ZWxlZ2F0ZT4ocG9zaXRpb24pKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCB8fCAhc2tpcE51bWJl
cihwb3NpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICpuZXh0QXJn
dW1lbnQgPSBhcmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRBcmd1bWVudCA9ICYoKm5l
eHRBcmd1bWVudCktPm1fbmV4dDsKKyAgICAgICAgKythcmd1bWVudENvdW50OworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgYSByZWd1bGFyIGhvc3QgZnVuY3Rpb24s
IHJhdGhlciB0aGFuIGEgY2FsbGFibGUgQyBBUEkgb2JqZWN0LgorICAgIC8vIFBhdGNoIGluIHRo
ZSByaWdodCBsZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5vdywgYnV0IHNob3VsZCBm
aXggdGhpcy4KKyAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY3VycmVudGx5IGZh
aWxzLCBzaW5jZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBmdW5jdG9uLCBidXQgY2Fs
bCAmIGFwcGx5IGRvIHdvcmsuCisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU09i
amVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25DbGFzcygpLCBuZXcgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgaW52b2NhdGlv
biwgdHlwZSwgaW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVzdWx0LnJlbGVh
c2UoKSkpOworICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVu
Y3Rpb25PYmplY3QgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHZhbHVlW0AibGVuZ3RoIl0gPSBA
KGFyZ3VtZW50Q291bnQpOworICAgIHZhbHVlW0AiX19wcm90b19fIl0gPSBjb250ZXh0W0AiRnVu
Y3Rpb24iXVtAInByb3RvdHlwZSJdOworICAgIHZhbHVlW0AidG9TdHJpbmciXSA9IFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0aW9uKCl7IHJldHVybiAnIgorICAgICAgICAiZnVuY3Rp
b24gPE9iamVjdGl2ZS1DPigpIHsiICJcXG4iCisgICAgICAgICIgICAgW25hdGl2ZSBjb2RlXSIg
ICAgICAgICAgIlxcbiIKKyAgICAgICAgIn0iICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxu
IgorICAgICInfSkiXTsKKyAgICByZXR1cm4gZnVuY3Rpb25PYmplY3Q7Cit9CisKK0pTT2JqZWN0
UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCogY29udGV4dCwgQ2xh
c3MgY2xzLCBQcm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMIHNl
bCwgY29uc3QgY2hhciogdHlwZXMpCit7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0g
W05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWdu
YXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczp0eXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNl
dFNlbGVjdG9yOnNlbF07CisgICAgaWYgKCFpc0luc3RhbmNlTWV0aG9kKQorICAgICAgICBbaW52
b2NhdGlvbiBzZXRUYXJnZXQ6Y2xzXTsKKyAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25G
b3JJbnZvY2F0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIGlzSW5zdGFuY2VNZXRob2QgPyBDYWxs
YmFja0luc3RhbmNlTWV0aG9kIDogQ2FsbGJhY2tDbGFzc01ldGhvZCwgaXNJbnN0YW5jZU1ldGhv
ZCA/IGNscyA6IG5pbCwgX3Byb3RvY29sX2dldE1ldGhvZFR5cGVFbmNvZGluZyhwcm90b2NvbCwg
c2VsLCBZRVMsIGlzSW5zdGFuY2VNZXRob2QpKTsKK30KKworSlNPYmplY3RSZWYgb2JqQ0NhbGxi
YWNrRnVuY3Rpb25Gb3JCbG9jayhKU0NvbnRleHQqIGNvbnRleHQsIGlkIHRhcmdldCkKK3sKKyAg
ICBpZiAoIV9CbG9ja19oYXNfc2lnbmF0dXJlKHRhcmdldCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSA9IF9CbG9ja19zaWduYXR1cmUodGFyZ2V0KTsKKyAg
ICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRo
TWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVz
OnNpZ25hdHVyZV1dOworICAgIFtpbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRdOworICAgIHJl
dHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlv
biwgQ2FsbGJhY2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOworfQorCitpZCB0cnlVbndyYXBCbG9j
ayhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCBvYmplY3QsIG9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuICgoT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKS0+d3JhcHBlZEJs
b2NrKCk7Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpj
UnVudGltZUV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqY1J1bnRpbWVFeHRyYXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqY1J1bnRpbWVFeHRyYXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL1Zl
Y3Rvci5oPgorCitpbmxpbmUgYm9vbCBwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChQcm90b2Nv
bCogY2FuZGlkYXRlLCBQcm90b2NvbCogdGFyZ2V0KQoreworICAgIHVuc2lnbmVkIHByb3RvY29s
UHJvdG9jb2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbFByb3RvY29scyA9IHByb3Rv
Y29sX2NvcHlQcm90b2NvbExpc3QoY2FuZGlkYXRlLCAmcHJvdG9jb2xQcm90b2NvbHNDb3VudCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sUHJvdG9jb2xzQ291bnQ7ICsr
aSkgeworICAgICAgICBpZiAocHJvdG9jb2xfaXNFcXVhbChwcm90b2NvbFByb3RvY29sc1tpXSwg
dGFyZ2V0KSkgeworICAgICAgICAgICAgZnJlZShwcm90b2NvbFByb3RvY29scyk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlKHByb3RvY29sUHJv
dG9jb2xzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90
b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKFByb3RvY29sKiBiYXNlLCBQcm90b2NvbCogcHJvdG9j
b2wsIHZvaWQgKF5jYWxsYmFjaykoUHJvdG9jb2wqKSkKK3sKKyAgICBBU1NFUlQoYmFzZSk7Cisg
ICAgQVNTRVJUKHByb3RvY29sKTsKKworICAgIHVuc2lnbmVkIHByb3RvY29sc0NvdW50OworICAg
IFByb3RvY29sKiogcHJvdG9jb2xzID0gcHJvdG9jb2xfY29weVByb3RvY29sTGlzdChiYXNlLCAm
cHJvdG9jb2xzQ291bnQpOworICAgIGlmIChwcm90b2NvbHNDb3VudCkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvdG9jb2xzQ291bnQ7ICsraSkgeworICAgICAgICAgICAg
aWYgKHByb3RvY29sSW1wbGVtZW50c1Byb3RvY29sKHByb3RvY29sc1tpXSwgcHJvdG9jb2wpKQor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3RvY29sc1tpXSk7CisgICAgICAgICAgICBmb3JF
YWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChwcm90b2NvbHNbaV0sIHByb3RvY29sLCBj
YWxsYmFjayk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShwcm90b2NvbHMpOworICAgIH0KK30K
KworaW5saW5lIHZvaWQgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2woQ2xhc3Mg
Y2xzLCBQcm90b2NvbCogdGFyZ2V0LCB2b2lkICheY2FsbGJhY2spKFByb3RvY29sKikpCit7Cisg
ICAgQVNTRVJUKGNscyk7CisgICAgQVNTRVJUKHRhcmdldCk7CisKKyAgICBXVEY6OlZlY3RvcjxQ
cm90b2NvbCo+IHdvcmtsaXN0OworICAgIFdURjo6SGFzaFNldDx2b2lkKj4gdmlzaXRlZDsKKwor
ICAgIC8vIEluaXRpYWxseSBmaWxsIHRoZSB3b3JrbGlzdCB3aXRoIHRoZSBDbGFzcydzIHByb3Rv
Y29scy4KKyAgICB1bnNpZ25lZCBwcm90b2NvbHNDb3VudDsKKyAgICBQcm90b2NvbCoqIHByb3Rv
Y29scyA9IGNsYXNzX2NvcHlQcm90b2NvbExpc3QoY2xzLCAmcHJvdG9jb2xzQ291bnQpOworICAg
IGlmIChwcm90b2NvbHNDb3VudCkgeworICAgICAgICB3b3JrbGlzdC5hcHBlbmQocHJvdG9jb2xz
LCBwcm90b2NvbHNDb3VudCk7CisgICAgICAgIGZyZWUocHJvdG9jb2xzKTsKKyAgICB9CisKKyAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBQcm90b2NvbCogcHJvdG9j
b2wgPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKwor
ICAgICAgICAvLyBBcmUgd2UgZW5jb3VudGVyaW5nIHRoaXMgUHJvdG9jb2wgZm9yIHRoZSBmaXJz
dCB0aW1lPworICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gSWYgaXQgaW1wbGVtZW50cyB0aGUg
cHJvdG9jb2wsIG1ha2UgdGhlIGNhbGxiYWNrLgorICAgICAgICBpZiAocHJvdG9jb2xJbXBsZW1l
bnRzUHJvdG9jb2wocHJvdG9jb2wsIHRhcmdldCkpCisgICAgICAgICAgICBjYWxsYmFjayhwcm90
b2NvbCk7CisKKyAgICAgICAgLy8gQWRkIGluY29ycG9yYXRlZCBwcm90b2NvbHMgdG8gdGhlIHdv
cmtsaXN0LgorICAgICAgICBwcm90b2NvbHMgPSBwcm90b2NvbF9jb3B5UHJvdG9jb2xMaXN0KHBy
b3RvY29sLCAmcHJvdG9jb2xzQ291bnQpOworICAgICAgICBpZiAocHJvdG9jb2xzQ291bnQpIHsK
KyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChwcm90b2NvbHMsIHByb3RvY29sc0NvdW50KTsK
KyAgICAgICAgICAgIGZyZWUocHJvdG9jb2xzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5s
aW5lIHZvaWQgZm9yRWFjaE1ldGhvZEluQ2xhc3MoQ2xhc3MgY2xzLCB2b2lkICheY2FsbGJhY2sp
KE1ldGhvZCBtZXRob2QpKQoreworICAgIHVuc2lnbmVkIGNvdW50OworICAgIE1ldGhvZCogbWV0
aG9kcyA9IGNsYXNzX2NvcHlNZXRob2RMaXN0KGNscywgJmNvdW50KTsKKyAgICBpZiAoY291bnQp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
ICAgICBjYWxsYmFjayhtZXRob2RzW2ldKTsKKyAgICAgICAgZnJlZShtZXRob2RzKTsKKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hNZXRob2RJblByb3RvY29sKFByb3RvY29sKiBwcm90
b2NvbCwgQk9PTCBpc1JlcXVpcmVkTWV0aG9kLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIHZvaWQg
KF5jYWxsYmFjaykoU0VMLCBjb25zdCBjaGFyKikpCit7CisgICAgdW5zaWduZWQgY291bnQ7Cisg
ICAgc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uKiBtZXRob2RzID0gcHJvdG9jb2xfY29w
eU1ldGhvZERlc2NyaXB0aW9uTGlzdChwcm90b2NvbCwgaXNSZXF1aXJlZE1ldGhvZCwgaXNJbnN0
YW5jZU1ldGhvZCwgJmNvdW50KTsKKyAgICBpZiAoY291bnQpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBjYWxsYmFjayhtZXRob2Rz
W2ldLm5hbWUsIG1ldGhvZHNbaV0udHlwZXMpOworICAgICAgICBmcmVlKG1ldGhvZHMpOworICAg
IH0KK30KKworaW5saW5lIHZvaWQgZm9yRWFjaFByb3BlcnR5SW5Qcm90b2NvbChQcm90b2NvbCog
cHJvdG9jb2wsIHZvaWQgKF5jYWxsYmFjaykob2JqY19wcm9wZXJ0eV90KSkKK3sKKyAgICB1bnNp
Z25lZCBjb3VudDsKKyAgICBvYmpjX3Byb3BlcnR5X3QqIHByb3BlcnRpZXMgPSBwcm90b2NvbF9j
b3B5UHJvcGVydHlMaXN0KHByb3RvY29sLCAmY291bnQpOworICAgIGlmIChjb3VudCkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGNh
bGxiYWNrKHByb3BlcnRpZXNbaV0pOworICAgICAgICBmcmVlKHByb3BlcnRpZXMpOworICAgIH0K
K30KKwordGVtcGxhdGU8Y2hhciBvcGVuLCBjaGFyIGNsb3NlPgordm9pZCBza2lwUGFpcihjb25z
dCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IDE7CisgICAgZG8g
eworICAgICAgICBjaGFyIGMgPSAqKHBvc2l0aW9uKyspOworICAgICAgICBpZiAoIWMpCisgICAg
ICAgICAgICBAdGhyb3cgW05TRXhjZXB0aW9uIGV4Y2VwdGlvbldpdGhOYW1lOk5TSW50ZXJuYWxJ
bmNvbnNpc3RlbmN5RXhjZXB0aW9uIHJlYXNvbjpAIk1hbGZvcm1lZCB0eXBlIGVuY29kaW5nIiB1
c2VySW5mbzpuaWxdOworICAgICAgICBpZiAoYyA9PSBvcGVuKQorICAgICAgICAgICAgKytjb3Vu
dDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSBjbG9zZSkKKyAgICAgICAgICAgIC0tY291bnQ7Cisg
ICAgfSB3aGlsZSAoY291bnQpOworfQorCitjbGFzcyBTdHJpbmdSYW5nZSB7CitwdWJsaWM6Cisg
ICAgU3RyaW5nUmFuZ2UoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkgOiBtX3B0
cihzdHJuZHVwKGJlZ2luLCBlbmQgLSBiZWdpbikpIHsgfQorICAgIH5TdHJpbmdSYW5nZSgpIHsg
ZnJlZShtX3B0cik7IH0KKyAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIHsgcmV0dXJuIG1fcHRy
OyB9CisgICAgY29uc3QgY2hhciogZ2V0KCkgeyByZXR1cm4gbV9wdHI7IH0KKworcHJpdmF0ZToK
KyAgICBjaGFyKiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlbGVnYXRlVHlwZT4K
K3R5cGVuYW1lIERlbGVnYXRlVHlwZTo6UmVzdWx0VHlwZSBwYXJzZU9iakNUeXBlKGNvbnN0IGNo
YXIqJiBwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoKnBvc2l0aW9uKTsKKworICAgIHN3aXRjaCAo
Kihwb3NpdGlvbisrKSkgeworICAgIGNhc2UgJ2MnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVU
eXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjxjaGFyPigpOworICAgIGNhc2UgJ2knOgorICAgICAg
ICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjxpbnQ+KCk7CisgICAg
Y2FzZSAncyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRl
Z2VyPHNob3J0PigpOworICAgIGNhc2UgJ2wnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBl
Ojp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjxsb25nPigpOworICAgIGNhc2UgJ3EnOgorICAgICAgICBy
ZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlRG91YmxlPHVuc2lnbmVkIGxvbmcgbG9u
Zz4oKTsKKyAgICBjYXNlICdDJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxh
dGUgdHlwZUludGVnZXI8dW5zaWduZWQgY2hhcj4oKTsKKyAgICBjYXNlICdJJzoKKyAgICAgICAg
cmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8dW5zaWduZWQ+KCk7Cisg
ICAgY2FzZSAnUyc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJ
bnRlZ2VyPHVuc2lnbmVkIHNob3J0PigpOworICAgIGNhc2UgJ0wnOgorICAgICAgICByZXR1cm4g
RGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBsb25nPigpOworICAg
IGNhc2UgJ1EnOgorICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlRG91
YmxlPHVuc2lnbmVkIGxvbmcgbG9uZz4oKTsKKyAgICBjYXNlICdmJzoKKyAgICAgICAgcmV0dXJu
IERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZURvdWJsZTxmbG9hdD4oKTsKKyAgICBjYXNlICdk
JzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZURvdWJsZTxkb3Vi
bGU+KCk7CisgICAgY2FzZSAnQic6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVC
b29sKCk7CisgICAgY2FzZSAndic6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVW
b2lkKCk7CisgICAgCisgICAgY2FzZSAnQCc6IHsgLy8gQW4gb2JqZWN0ICh3aGV0aGVyIHN0YXRp
Y2FsbHkgdHlwZWQgb3IgdHlwZWQgaWQpCisgICAgICAgIGlmIChwb3NpdGlvblswXSA9PSAnPycg
JiYgcG9zaXRpb25bMV0gPT0gJzwnKSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSAyOworICAg
ICAgICAgICAgY29uc3QgY2hhciogYmVnaW4gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIHNraXBQ
YWlyPCc8JywnPic+KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6
OnR5cGVCbG9jayhiZWdpbiwgcG9zaXRpb24gLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICgqcG9zaXRpb24gPT0gJyInKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBiZWdpbiA9ICsr
cG9zaXRpb247CisgICAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4KHBvc2l0aW9uLCAnIicpOwor
ICAgICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZU9mQ2xhc3MoYmVnaW4sIHBvc2l0
aW9uKyspOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dHlwZUlk
KCk7CisgICAgfQorCisgICAgY2FzZSAneyc6IHsgLy8ge25hbWU9dHlwZS4uLn0gQSBzdHJ1Y3R1
cmUKKyAgICAgICAgY29uc3QgY2hhciogYmVnaW4gPSBwb3NpdGlvbiAtIDE7CisgICAgICAgIHNr
aXBQYWlyPCd7JywnfSc+KHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6
dHlwZVN0cnVjdChiZWdpbiwgcG9zaXRpb24pOworICAgIH0KKworICAgIC8vIE5PVCBzdXBwb3J0
aW5nIEMgc3RyaW5ncywgYXJyYXlzLCBwb2ludGVycywgdW5pb25zLCBiaXRmaWVsZHMsIGZ1bmN0
aW9uIHBvaW50ZXJzLgorICAgIGNhc2UgJyonOiAvLyBBIGNoYXJhY3RlciBzdHJpbmcgKGNoYXIg
KikKKyAgICBjYXNlICdbJzogLy8gW2FycmF5IHR5cGVdIEFuIGFycmF5CisgICAgY2FzZSAnKCc6
IC8vIChuYW1lPXR5cGUuLi4pIEEgdW5pb24KKyAgICBjYXNlICdiJzogLy8gYm51bSBBIGJpdCBm
aWVsZCBvZiBudW0gYml0cworICAgIGNhc2UgJ14nOiAvLyBedHlwZSBBIHBvaW50ZXIgdG8gdHlw
ZQorICAgIGNhc2UgJz8nOiAvLyBBbiB1bmtub3duIHR5cGUgKGFtb25nIG90aGVyIHRoaW5ncywg
dGhpcyBjb2RlIGlzIHVzZWQgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzKQorICAgIC8vIE5PVCBzdXBw
b3J0aW5nIE9iamVjdGl2ZS1DIENsYXNzLCBTRUwKKyAgICBjYXNlICcjJzogLy8gQSBjbGFzcyBv
YmplY3QgKENsYXNzKQorICAgIGNhc2UgJzonOiAvLyBBIG1ldGhvZCBzZWxlY3RvciAoU0VMKQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorfQorCitleHRlcm4gIkMi
IHsKKyAgICBjb25zdCBjaGFyICpfcHJvdG9jb2xfZ2V0TWV0aG9kVHlwZUVuY29kaW5nKFByb3Rv
Y29sICosIFNFTCwgQk9PTCBpc1JlcXVpcmVkTWV0aG9kLCBCT09MIGlzSW5zdGFuY2VNZXRob2Qp
OworICAgIGlkIG9iamNfaW5pdFdlYWsoaWQgKiwgaWQpOworICAgIHZvaWQgb2JqY19kZXN0cm95
V2VhayhpZCAqKTsKKyAgICBib29sIF9CbG9ja19oYXNfc2lnbmF0dXJlKHZvaWQgKik7CisgICAg
Y29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUodm9pZCAqKTsKK30KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAxMzg2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsMTIgQEAgc3RhdGljIGRvdWJsZSBuYW4oY29uc3QgY2hhciopCiAKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKKyNl
bmRpZgorCiBzdGF0aWMgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQ7Ci1zdGF0aWMgaW50IGZh
aWxlZDsKK2ludCBmYWlsZWQ7CiBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHNBc0Jvb2xlYW4oSlNW
YWx1ZVJlZiB2YWx1ZSwgYm9vbCBleHBlY3RlZFZhbHVlKQogewogICAgIGlmIChKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIHZhbHVlKSAhPSBleHBlY3RlZFZhbHVlKSB7CkBAIC0xMDQwLDYgKzEw
NDQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICA6OlNldEVycm9y
TW9kZSgwKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHRlc3RPYmplY3RpdmVD
QVBJKCk7CisjZW5kaWYKKwogICAgIGNvbnN0IGNoYXIgKnNjcmlwdFBhdGggPSAidGVzdGFwaS5q
cyI7CiAgICAgaWYgKGFyZ2MgPiAxKSB7CiAgICAgICAgIHNjcmlwdFBhdGggPSBhcmd2WzFdOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKworYm9vbCBfQmxvY2tf
aGFzX3NpZ25hdHVyZSh2b2lkICopOworY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUodm9p
ZCAqKTsKKworZXh0ZXJuIGludCBmYWlsZWQ7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKHZvaWQp
OworCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAcHJvdG9jb2wgUGFyZW50T2JqZWN0IDxK
U0V4cG9ydD4KK0BlbmQKKworQGludGVyZmFjZSBQYXJlbnRPYmplY3QgOiBOU09iamVjdDxQYXJl
bnRPYmplY3Q+CisrIChOU1N0cmluZyAqKXBhcmVudFRlc3Q7CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBQYXJlbnRPYmplY3QKKysgKE5TU3RyaW5nICopcGFyZW50VGVzdAoreworICAgIHJldHVy
biBbc2VsZiBkZXNjcmlwdGlvbl07Cit9CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0T2JqZWN0IDxK
U0V4cG9ydD4KK0Bwcm9wZXJ0eSBpbnQgdmFyaWFibGU7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBp
bnQgc2l4OworQHByb3BlcnR5IENHUG9pbnQgcG9pbnQ7CisrIChOU1N0cmluZyAqKWNsYXNzVGVz
dDsKKysgKE5TU3RyaW5nICopcGFyZW50VGVzdDsKKy0gKE5TU3RyaW5nICopZ2V0U3RyaW5nOwor
SlNFeHBvcnRBcyh0ZXN0QXJndW1lbnRUeXBlcywKKy0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50
VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6KGRvdWJsZSlkIGJvb2xlYW46KEJPT0wpYiBzdHJp
bmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNOdW1iZXIqKW4gYXJyYXk6KE5TQXJyYXkqKWEgZGlj
dGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCispOworLSAodm9pZCljYWxsYmFjazoodm9pZCheKShp
bnQpKWJsb2NrOworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RPYmplY3QgOiBQYXJlbnRPYmplY3Qg
PFRlc3RPYmplY3Q+CitAcHJvcGVydHkgaW50IHNpeDsKKysgKGlkKXRlc3RPYmplY3Q7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0T2JqZWN0CitAc3ludGhlc2l6ZSB2YXJpYWJsZTsKK0Bz
eW50aGVzaXplIHNpeDsKK0BzeW50aGVzaXplIHBvaW50OworKyAoaWQpdGVzdE9iamVjdAorewor
ICAgIHJldHVybiBbW1tUZXN0T2JqZWN0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cit9Cisr
IChOU1N0cmluZyAqKWNsYXNzVGVzdAoreworICAgIHJldHVybiBAImNsYXNzVGVzdCAtIG9rYXki
OworfQorLSAoTlNTdHJpbmcgKilnZXRTdHJpbmcKK3sKKyAgICByZXR1cm4gQCI0MiI7Cit9Cist
IChOU1N0cmluZyAqKXRlc3RBcmd1bWVudFR5cGVzV2l0aEludDooaW50KWkgZG91YmxlOihkb3Vi
bGUpZCBib29sZWFuOihCT09MKWIgc3RyaW5nOihOU1N0cmluZyopcyBudW1iZXI6KE5TTnVtYmVy
KiluIGFycmF5OihOU0FycmF5KilhIGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSopbworeworICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkLCVnLCVkLCVALCVkLCVALCVA
IiwgaSwgZCwgYj09WUVTP3RydWU6ZmFsc2UscyxbbiBpbnRWYWx1ZV0sYVsxXSxvW0AieCJdXTsK
K30KKy0gKHZvaWQpY2FsbGJhY2s6KHZvaWQoXikoaW50KSlibG9jaworeworICAgIGJsb2NrKDQy
KTsKK30KK0BlbmQKKworYm9vbCB0ZXN0WFlaVGVzdGVkID0gZmFsc2U7CisKK0Bwcm90b2NvbCBU
ZXh0WFlaIDxKU0V4cG9ydD4KK0Bwcm9wZXJ0eSBpbnQgeDsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkp
IGludCB5OworLSAodm9pZCl0ZXN0OihOU1N0cmluZyAqKW1lc3NhZ2U7CitAZW5kCisKK0BpbnRl
cmZhY2UgVGV4dFhZWiA6IE5TT2JqZWN0IDxUZXh0WFlaPgorQHByb3BlcnR5IGludCB4OworQHBy
b3BlcnR5IGludCB5OworQHByb3BlcnR5IGludCB6OworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGV4dFhZWgorQHN5bnRoZXNpemUgeDsKK0BzeW50aGVzaXplIHk7CitAc3ludGhlc2l6ZSB6Owor
LSAodm9pZCl0ZXN0OihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICB0ZXN0WFlaVGVzdGVkID0g
W21lc3NhZ2UgaXNFcXVhbDpAInRlc3QiXSAmJiB4ID09IDEzICYgeSA9PSA0ICYmIHogPT0gNTsK
K30KK0BlbmQKKworc3RhdGljIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9u
LCBib29sIHBhc3NlZCkKK3sKKyAgICBOU0xvZyhAIlRFU1Q6IFwiJUBcIjogJUAiLCBkZXNjcmlw
dGlvbiwgcGFzc2VkID8gQCJQQVNTRUQiIDogQCJGQUlMRUQiKTsKKyAgICBpZiAoIXBhc3NlZCkK
KyAgICAgICAgZmFpbGVkID0gMTsKK30KKworc3RhdGljIGJvb2wgYmxvY2tTaWduYXR1cmVDb250
YWluc0NsYXNzKCkKK3sKKyAgICBlbnVtIENoZWNrUmVzdWx0IHsKKyAgICAgICAgQ2hlY2tSZXN1
bHRGYWxzZSwKKyAgICAgICAgQ2hlY2tSZXN1bHRUcnVlLAorICAgICAgICBDaGVja1Jlc3VsdFVu
a25vd24KKyAgICB9OworICAgIHN0YXRpYyBlbnVtIENoZWNrUmVzdWx0IGNoZWNrID0gQ2hlY2tS
ZXN1bHRVbmtub3duOworICAgIGlmIChjaGVjayA9PSBDaGVja1Jlc3VsdFVua25vd24pIHsKKyAg
ICAgICAgaWQgYmxvY2sgPSBeKE5TU3RyaW5nICpzdHJpbmcpeyByZXR1cm4gc3RyaW5nOyB9Owor
ICAgICAgICBjaGVjayA9IF9CbG9ja19oYXNfc2lnbmF0dXJlKGJsb2NrKSAmJiBzdHJzdHIoX0Js
b2NrX3NpZ25hdHVyZShibG9jayksICJOU1N0cmluZyIpID8gQ2hlY2tSZXN1bHRUcnVlIDogQ2hl
Y2tSZXN1bHRGYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIChib29sKWNoZWNrOworfQorCit2b2lk
IHRlc3RPYmplY3RpdmVDQVBJKCkKK3sKKyAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMg
QVBJIik7CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiMiArIDIiXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCIyICsgMiIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gNCk7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBOU1N0cmluZyAq
cmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJUd28gcGx1cyB0d28gaXMgJUAi
LCBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIjIgKyAyIl1dOworICAgICAgICBjaGVja1Jlc3Vs
dChAInN0cmluZ1dpdGhGb3JtYXQiLCBbcmVzdWx0IGlzRXF1YWw6QCJUd28gcGx1cyB0d28gaXMg
NCJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIGNvbnRleHRbQCJtZXNzYWdlIl0gPSBAIkhlbGxvIjsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJtZXNzYWdlICsgJywgV29ybGQhJyJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAIkhlbGxvLCBXb3JsZCEiLCBbW3Jlc3VsdCB0b1N0cmluZ10g
aXNFcXVhbDpAIkhlbGxvLCBXb3JsZCEiXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAIih7IHg6NDIgfSkiXTsKKyAgICAgICAgaWQgb2JqID0gW3Jlc3VsdCB0b09i
amVjdF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiQ2hlY2sgZGljdGlvbmFyeSBsaXRlcmFsIiwg
W29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgIGlkIG51
bSA9IChOU0RpY3Rpb25hcnkqKW9ialtAIngiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJDaGVj
ayBudW1lcmljIGxpdGVyYWwiLCBbbnVtIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
X19ibG9jayBpbnQgcmVzdWx0OworICAgICAgICBjb250ZXh0W0AiYmxvY2tDYWxsYmFjayJdID0g
XihpbnQgdmFsdWUpeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAgIH07Cisg
ICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiYmxvY2tDYWxsYmFjayg0MikiXTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJibG9ja0NhbGxiYWNrIiwgcmVzdWx0ID09IDQyKTsKKyAgICB9
CisKKyAgICBpZiAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKCkpIHsKKyAgICAgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0Nv
bnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIF9fYmxvY2sgYm9v
bCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRleHRbQCJibG9ja0NhbGxiYWNrIl0g
PSBeKE5TU3RyaW5nICp2YWx1ZSl7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gW0AiNDIiIGlz
RXF1YWxUb1N0cmluZzp2YWx1ZV0gPT0gWUVTOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiYmxvY2tDYWxsYmFjayg0MikiXTsKKyAgICAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiYmxvY2tDYWxsYmFjayhOU1N0cmluZyAqKSIsIHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTlNMb2coQCJTa2lwcGluZyAnYmxvY2tDYWxs
YmFjayhOU1N0cmluZyAqKScgdGVzdCBjYXNlIik7CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiIWNvbnRleHQuZXhjZXB0aW9uIiwg
IWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIh
QCMkJV4mKigpIFRISVMgSVMgTk9UIFZBTElEIEpBVkFTQ1JJUFQgU1lOVEFYICFAIyQlXiYqKCki
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJjb250ZXh0LmV4Y2VwdGlvbiIsIGNvbnRleHQuZXhj
ZXB0aW9uKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIF9fYmxvY2sgYm9vbCBjYXVnaHQgPSBmYWxzZTsKKyAgICAgICAgY29udGV4dC5leGNl
cHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbikg
eworICAgICAgICAgICAgKHZvaWQpY29udGV4dDsKKyAgICAgICAgICAgICh2b2lkKWV4Y2VwdGlv
bjsKKyAgICAgICAgICAgIGNhdWdodCA9IHRydWU7CisgICAgICAgIH07CisgICAgICAgIFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZBU0NS
SVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiSlNDb250ZXh0
LmV4Y2VwdGlvbkhhbmRsZXIiLCBjYXVnaHQpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAImNhbGxiYWNrIl0gPSBeeworICAg
ICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF07
CisgICAgICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbiA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6QCJTb21ldGhpbmcgd2VudCB3cm9uZy4iIGluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgfTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJ2YXIgcmVzdWx0OyB0cnkgeyBjYWxsYmFjaygpOyB9IGNhdGNoIChlKSB7IHJl
c3VsdCA9ICdDYXVnaHQgZXhjZXB0aW9uJzsgfSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIkV4
cGxpY2l0IHRocm93IGluIGNhbGxiYWNrIC0gd2FzIGNhdWdodCBieSBKYXZhU2NyaXB0IiwgW1ty
ZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJDYXVnaHQgZXhjZXB0aW9uIl0pOworICAgICAgICBj
aGVja1Jlc3VsdChAIkV4cGxpY2l0IHRocm93IGluIGNhbGxiYWNrIC0gbm90IHRocm93biB0byBP
YmplY3RpdmUtQyIsICFjb250ZXh0LmV4Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AiY2FsbGJhY2siXSA9IF57
CisgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGN1cnJlbnRDb250
ZXh0XTsKKyAgICAgICAgICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBU
SElTIElTIE5PVCBWQUxJRCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CisgICAgICAg
IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
dmFyIHJlc3VsdDsgdHJ5IHsgY2FsbGJhY2soKTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1
Z2h0IGV4Y2VwdGlvbic7IH0iXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJv
dyBpbiBjYWxsYmFjayAtIHdhcyBjYXVnaHQgYnkgSmF2YVNjcmlwdCIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAiQ2F1Z2h0IGV4Y2VwdGlvbiJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJJbXBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAtIG5vdCB0aHJvd24gdG8gT2JqZWN0aXZlLUMi
LCAhY29udGV4dC5leGNlcHRpb24pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6CisgICAgICAgICAg
ICBAImZ1bmN0aW9uIHN1bShhcnJheSkgeyBcCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IDA7IFwKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGFycmF5KSBcCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBhcnJheVtpXTsgXAorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7IFwKKyAgICAgICAgICAgIH0iXTsKKyAgICAgICAgSlNWYWx1ZSAqYXJyYXkgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QFtAMTMsIEAyLCBAN10gaW5Db250ZXh0OmNvbnRleHRdOwor
ICAgICAgICBKU1ZhbHVlICpzdW1GdW5jdGlvbiA9IGNvbnRleHRbQCJzdW0iXTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW3N1bUZ1bmN0aW9uIGNhbGxXaXRoQXJndW1lbnRzOkBbIGFycmF5
IF1dOworICAgICAgICBjaGVja1Jlc3VsdChAInN1bShbMTMsIDIsIDddKSIsIFtyZXN1bHQgdG9J
bnQzMl0gPT0gMjIpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgSlNWYWx1ZSAqbXVsQWRkRnVuY3Rpb24gPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDoKKyAgICAgICAgICAgIEAiKGZ1bmN0aW9uKGFycmF5LCBvYmplY3QpIHsgXAorICAgICAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsgXAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
aW4gYXJyYXkpIFwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0gKiBv
YmplY3QueCArIG9iamVjdC55KTsgXAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IFwK
KyAgICAgICAgICAgIH0pIl07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFttdWxBZGRGdW5j
dGlvbiBjYWxsV2l0aEFyZ3VtZW50czpAWyBAWyBAMiwgQDQsIEA4IF0sIEB7IEAieCI6QDAuNSwg
QCJ5IjpANDIgfSBdXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtdWxBZGRGdW5jdGlvbiIsIFtb
cmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiNDMsNDQsNDYiXSk7CisgICAgfQorCisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICAgICAg
b2JqZWN0W0AicG9pbnQiXSA9IEB7IEAieCI6QDEsIEAieSI6QDIgfTsKKyAgICAgICAgb2JqZWN0
W0AicG9pbnQiXVtAIngiXSA9IEAzOworICAgICAgICBDR1BvaW50IHBvaW50ID0gW29iamVjdFtA
InBvaW50Il0gdG9Qb2ludF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidG9Qb2ludCIsIHBvaW50
LnggPT0gMyAmJiBwb2ludC55ID09IDIpOworCisgICAgICAgIG9iamVjdFtAeyBAInRvU3RyaW5n
IjpeeyByZXR1cm4gQCJmb28iOyB9IH1dID0gQCJiYXIiOworICAgICAgICBjaGVja1Jlc3VsdChA
InRvU3RyaW5nIGluIG9iamVjdCBsaXRlcmFsIHVzZWQgYXMgc3Vic2NyaXB0IiwgW1tvYmplY3Rb
QCJmb28iXSB0b1N0cmluZ10gaXNFcXVhbDpAImJhciJdKTsKKworICAgICAgICBvYmplY3RbW0Ai
Zm9vYmFyIiBzdWJzdHJpbmdUb0luZGV4OjNdXSA9IEAiYmFyIjsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJzdWJzdHJpbmcgdXNlZCBhcyBzdWJzY3JpcHQiLCBbW29iamVjdFtAImZvbyJdIHRvU3Ry
aW5nXSBpc0VxdWFsOkAiYmFyIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgVGV4dFhZWiAqdGVzdFhZWiA9IFtbVGV4dFhZWiBhbGxvY10g
aW5pdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0WFlaIl0gPSB0ZXN0WFlaOworICAgICAgICB0
ZXN0WFlaLnggPSAzOworICAgICAgICB0ZXN0WFlaLnkgPSA0OworICAgICAgICB0ZXN0WFlaLnog
PSA1OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoueCA9IDEzOyB0
ZXN0WFlaLnkgPSAxNDsiXTsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0
WFlaLnRlc3QoJ3Rlc3QnKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIlRleHRYWVogLSB0ZXN0
WFlaVGVzdGVkIiwgdGVzdFhZWlRlc3RlZCk7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi54ICsgJywnICsgdGVzdFhZWi55ICsgJywn
ICsgdGVzdFhZWi56Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiVGV4dFhZWiAtIHJlc3VsdCIs
IFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiMTMsNCx1bmRlZmluZWQiXSk7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBbY29udGV4dFtA
Ik9iamVjdCJdW0AicHJvdG90eXBlIl0gZGVmaW5lUHJvcGVydHk6QCJnZXR0ZXJQcm9wZXJ0eSIg
ZGVzY3JpcHRvcjpAeworICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JHZXRLZXk6XnsK
KyAgICAgICAgICAgICAgICByZXR1cm4gW0pTQ29udGV4dCBjdXJyZW50VGhpc11bQCJ4Il07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH1dOworICAgICAgICBKU1ZhbHVlICpvYmplY3QgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsgQCJ4IjpAMTAxIH0gaW5Db250ZXh0OmNvbnRleHRdOwor
ICAgICAgICBpbnQgcmVzdWx0ID0gW29iamVjdCBbQCJnZXR0ZXJQcm9wZXJ0eSJdIHRvSW50MzJd
OworICAgICAgICBjaGVja1Jlc3VsdChAImdldHRlclByb3BlcnR5IiwgcmVzdWx0ID09IDEwMSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBj
b250ZXh0W0AiY29uY2F0ZW5hdGUiXSA9IF57CisgICAgICAgICAgICBOU0FycmF5ICphcmd1bWVu
dHMgPSBbSlNDb250ZXh0IGN1cnJlbnRBcmd1bWVudHNdOworICAgICAgICAgICAgaWYgKCFbYXJn
dW1lbnRzIGNvdW50XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQCIiOworICAgICAgICAgICAg
TlNTdHJpbmcgKm1lc3NhZ2UgPSBbYXJndW1lbnRzWzBdIGRlc2NyaXB0aW9uXTsKKyAgICAgICAg
ICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDE7IGluZGV4IDwgW2FyZ3VtZW50cyBjb3VudF07
ICsraW5kZXgpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJUAgJUAiLCBtZXNzYWdlLCBhcmd1bWVudHNbaW5kZXhdXTsKKyAgICAgICAgICAg
IHJldHVybiBtZXNzYWdlOworICAgICAgICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImNvbmNhdGVuYXRlKCdIZWxsbywnLCAnV29ybGQhJyki
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJjb25jYXRlbmF0ZSIsIFtyZXN1bHQgaXNFcXVhbFRv
T2JqZWN0OkAiSGVsbG8sIFdvcmxkISJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJmb28iXSA9IEBZRVM7CisgICAgICAg
IEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidHlwZW9mIGZvbyJd
OworICAgICAgICBjaGVja1Jlc3VsdChAIkBZRVMgaXMgYm9vbGVhbiIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAiYm9vbGVhbiJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9i
amVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RP
YmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiU3RyaW5nKHRlc3RPYmplY3QpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRl
c3RPYmplY3QpIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmpl
Y3RdIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwor
ICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9iamVj
dC5fX3Byb3RvX18pIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3Qu
X19wcm90b19fKSIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiW29iamVjdCBUZXN0T2Jq
ZWN0UHJvdG90eXBlXSJdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIGNvbnRleHRbQCJUZXN0T2JqZWN0Il0gPSBbVGVzdE9iamVjdCBjbGFz
c107CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
U3RyaW5nKFRlc3RPYmplY3QpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKFRlc3RP
YmplY3QpIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RD
b25zdHJ1Y3Rvcl0iXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpb
VGVzdE9iamVjdCBjbGFzc10gaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja1Jlc3Vs
dChAIlt2YWx1ZSB0b09iamVjdF0gPT0gW1Rlc3RPYmplY3QgY2xhc3NdIiwgW3ZhbHVlIHRvT2Jq
ZWN0XSA9PSBbVGVzdE9iamVjdCBjbGFzc10pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0
T2JqZWN0IGNsYXNzXTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJUZXN0T2JqZWN0LnBhcmVudFRlc3QoKSJdOworICAgICAgICBjaGVja1Jlc3Vs
dChAIlRlc3RPYmplY3QucGFyZW50VGVzdCgpIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJU
ZXN0T2JqZWN0Il0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmpl
Y3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdEEiXSA9IHRlc3RPYmplY3Q7CisgICAg
ICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QiJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0QSA9PSB0ZXN0
T2JqZWN0QiJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3RBID09IHRlc3RPYmpl
Y3RCIiwgW3Jlc3VsdCB0b0Jvb2xdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVj
dCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmpl
Y3Q7CisgICAgICAgIHRlc3RPYmplY3QucG9pbnQgPSAoQ0dQb2ludCl7Myw0fTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ2YXIgcmVzdWx0ID0g
SlNPTi5zdHJpbmdpZnkodGVzdE9iamVjdC5wb2ludCk7IHRlc3RPYmplY3QucG9pbnQgPSB7eDox
Mix5OjE0fTsgcmVzdWx0Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5wb2lu
dCAtIHJlc3VsdCIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAie1wieFwiOjMsXCJ5XCI6
NH0iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5wb2ludCAtIHt4OjEyLHk6
MTR9IiwgdGVzdE9iamVjdC5wb2ludC54ID09IDEyICYmIHRlc3RPYmplY3QucG9pbnQueSA9PSAx
NCk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAg
ICAgIHRlc3RPYmplY3Quc2l4ID0gNjsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9
IHRlc3RPYmplY3Q7CisgICAgICAgIGNvbnRleHRbQCJtdWwiXSA9IF4oaW50IHgsIGludCB5KXsg
cmV0dXJuIHggKiB5OyB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAIm11bCh0ZXN0T2JqZWN0LnNpeCwgNykiXTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJtdWwodGVzdE9iamVjdC5zaXgsIDcpIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0
T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNv
bnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjb250ZXh0W0AidGVz
dE9iamVjdCJdW0AidmFyaWFibGUiXSA9IEA0OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAIisrdGVzdE9iamVjdC52YXJpYWJsZSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIisr
dGVzdE9iamVjdC52YXJpYWJsZSIsIHRlc3RPYmplY3QudmFyaWFibGUgPT0gNSk7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0Ai
cG9pbnQiXSA9IEB7IEAieCI6QDYsIEAieSI6QDcgfTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJwb2ludC54ICsgJywnICsgcG9pbnQueSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAInBvaW50LnggKyAnLCcgKyBwb2ludC55IiwgW1tyZXN1bHQg
dG9TdHJpbmddIGlzRXF1YWw6QCI2LDciXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AicG9pbnQiXSA9IEB7IEAieCI6QDYs
IEAieSI6QDcgfTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJwb2ludC54ICsgJywnICsgcG9pbnQueSJdOworICAgICAgICBjaGVja1Jlc3VsdChA
InBvaW50LnggKyAnLCcgKyBwb2ludC55IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCI2
LDciXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07Cisg
ICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRlc3RPYmplY3QuZ2V0U3Ry
aW5nKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZygpIiwg
W3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmpl
Y3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2Jq
ZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
InRlc3RPYmplY3QudGVzdEFyZ3VtZW50VHlwZXMoMTAxLDAuNSx0cnVlLCdmb28nLDY2NixbZmFs
c2UsJ2JhcicsZmFsc2VdLHt4OidiYXonfSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0
T2JqZWN0LnRlc3RBcmd1bWVudFR5cGVzIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6QCIxMDEs
MC41LDEsZm9vLDY2NixiYXIsYmF6Il0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2Jq
ZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9i
amVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHRlc3RPYmplY3QpIl07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh0ZXN0T2JqZWN0KSIsIFtyZXN1bHQg
dG9JbnQzMl0gPT0gNDIpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RP
YmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHt9KSBwcmUiLCAh
Y29udGV4dC5leGNlcHRpb24pOworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRl
c3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30pIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVz
dE9iamVjdC5nZXRTdHJpbmcuY2FsbCh7fSkgcG9zdCIsIGNvbnRleHQuZXhjZXB0aW9uKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RP
YmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdCA9IDA7IHRlc3RPYmplY3Qu
Y2FsbGJhY2soZnVuY3Rpb24oeCl7IHJlc3VsdCA9IHg7IH0pOyByZXN1bHQiXTsKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmNhbGxiYWNrIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0
Mik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dDEgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dDIgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpjb250
ZXh0MS52aXJ0dWFsTWFjaGluZV07CisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0gW0pTVmFsdWUg
dmFsdWVXaXRoRG91YmxlOjQyIGluQ29udGV4dDpjb250ZXh0Ml07CisgICAgICAgIGNoZWNrUmVz
dWx0KEAidmFsdWUuY29udGV4dCA9PSBjb250ZXh0MiIsIHZhbHVlLmNvbnRleHQgPT0gY29udGV4
dDIpOworICAgICAgICBjb250ZXh0MVtAInBhc3NWYWx1ZUJldHdlZW5Db250ZXh0cyJdID0gdmFs
dWU7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0MSBldmFsdWF0ZVNjcmlwdDpA
InBhc3NWYWx1ZUJldHdlZW5Db250ZXh0cyJdOworICAgICAgICBjaGVja1Jlc3VsdChAInJlc3Vs
dC5jb250ZXh0ID09IGNvbnRleHQxIiwgcmVzdWx0LmNvbnRleHQgPT0gY29udGV4dDEpOworICAg
ICAgICBjaGVja1Jlc3VsdChAIlt2YWx1ZSBpc0VxdWFsVG9PYmplY3Q6cmVzdWx0XSIsIFt2YWx1
ZSBpc0VxdWFsVG9PYmplY3Q6cmVzdWx0XSk7CisgICAgICAgIFtjb250ZXh0MSByZWxlYXNlXTsK
KyAgICAgICAgW2NvbnRleHQyIHJlbGVhc2VdOworICAgIH0KK30KKworI2Vsc2UKKwordm9pZCB0
ZXN0T2JqZWN0aXZlQ0FQSSgpCit7Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01NDAsNiArNTQwLDcgQEAKIAkJODZDQzg1QTMwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1
QTIwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3BwICovOyB9OwogCQk4NkNDODVDNDBFRTdB
ODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJ
VFByb3BlcnR5QWNjZXNzLmNwcCAqLzsgfTsKIAkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8q
IEpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODZEMjIyMUExNjdFRjk0NDAwMjRDODA0
IC8qIHRlc3RhcGkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm0gKi87IH07CiAJCTg2RDNC
MkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQkYxMDE1NkJERTAwMjg2NUU3IC8q
IEFSTUFzc2VtYmxlci5jcHAgKi87IH07CiAJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBB
Uk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RDNCMkMwMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkQzQjJDNTEwMTU2QkRF
MDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzExMDE1NkJERTAwMjg2
NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQ4LDYgKzU0OSwxOCBAQAogCQk4
NkQzQjNDNDEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3
IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwICovOyB9OwogCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29k
ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODZFM0M2MTIxNjdCQUJENzAw
NkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RTNDNjA2MTY3QkFCODcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxMzE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwNzE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk4NkUz
QzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4
cG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJ
ODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBGMTY3QkFCODcwMDZE
NzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OworCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2
MDgxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSAqLzsgfTsKKwkJODZFM0M2MTcxNjdC
QUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwOTE2N0JBQjg3MDA2RDc2MEEgLyogSlND
b250ZXh0SW50ZXJuYWwuaCAqLzsgfTsKKwkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
V3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RTNDNjBCMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi87IH07CisJ
CTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBDMTY3QkFCODcwMDZENzYw
QSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsgfTsKKwkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTVmFsdWUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkUzQzYwRDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSAqLzsgfTsKKwkJODZFM0M2
MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8q
IEpTVmFsdWVJbnRlcm5hbC5oICovOyB9OworCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyog
SlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RTNDNjEwMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1t
ICovOyB9OworCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggKi87
IH07CiAJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTg1NTM4MTExQjk5
NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCAqLzsgfTsKIAkJODZFQkYyRkYxNTYwRjA2
QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGOTE1NjBGMDM2MDA4RTkyMjIgLyogTmFtZUNv
bnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJODZFQkYzMDAxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZFQkYyRkExNTYwRjAzNjAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oICovOyB9OwpA
QCAtNTY5LDYgKzU4MiwxMSBAQAogCQk4NkVDOUREMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICovOyB9
OwogCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3
IC8qIERGR05vZGUuaCAqLzsgfTsKIAkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Nj
b3JlQm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi87IH07CisJCTg2
RjNFRUJCMTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGM0VFQjcxNjhDQ0Y3NTAwNzdCOTJB
IC8qIEpTQmxvY2tBZGFwdG9yLmggKi87IH07CisJCTg2RjNFRUJDMTY4Q0RFOTMwMDc3QjkyQSAv
KiBKU0Jsb2NrQWRhcHRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RjNFRUI4MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5tbSAq
LzsgfTsKKwkJODZGM0VFQkQxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVC
OTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJODZG
M0VFQkUxNjhDREU5MzAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGM0VFQkExNjhDQ0Y3NTAw
NzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tICovOyB9OworCQk4NkYzRUVCRjE2OENE
RTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RjNFRUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpj
UnVudGltZUV4dHJhcy5oICovOyB9OwogCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICov
OyB9OwogCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkZBOUU5MDE0MkJC
QjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi87IH07CiAJCTkwMjEzRTNEMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMjEzRTNCMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1v
cnlTdGF0aXN0aWNzLmNwcCAqLzsgfTsKQEAgLTEzNzgsNiArMTM5Niw3IEBACiAJCTg2Q0M4NUEy
MEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVENhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklU
Q29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0
YXBpLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IHRlc3RhcGkubTsgcGF0
aCA9IEFQSS90ZXN0cy90ZXN0YXBpLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RDNCMkJGMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVJNQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODZEM0IyQzAxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk1Bc3NlbWJsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2Vt
YmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTM4Niw2ICsxNDA1LDE4IEBACiAJCTg2RDNCM0MyMTAxNTlEN0YwMDI4
NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlcGF0Y2hCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NjMw
Rjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkUxMTZCMDBGRTc1
QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUz
QzYwNjE2N0JBQjg3MDA2RDc2MEEgLyogQVBJSlNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBUElKU1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0NvbnRleHQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NvbnRleHRJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwQTE2N0JBQjg3MDA2RDc2
MEEgLyogSlNFeHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFeHBv
cnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MEIxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEpTV3JhcHBlck1hcC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZF
M0M2MEMxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dyYXBwZXJNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODZFM0M2MEQxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1ZhbHVlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyog
SlNWaXJ0dWFsTWFjaGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Zp
cnR1YWxNYWNoaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjEwMTY3
QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gSlNWaXJ0dWFsTWFjaGluZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFODU1Mzgx
MTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1N0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZFQkYyRjkxNTYwRjAzNjAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lQ29uc3RydWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVCRjJGQTE1NjBGMDM2MDA4RTkyMjIgLyog
TmFtZUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNyw2ICsxNDM4
LDExIEBACiAJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTcGVjdWxhdGl2ZUpJVC5oOyBw
YXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGUuaDsgcGF0aCA9IGRmZy9ERkdOb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdT
Y29yZUJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Njb3JlQm9h
cmQuaDsgcGF0aCA9IGRmZy9ERkdTY29yZUJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg2RjNFRUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpjUnVudGltZUV4dHJhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNC
bG9ja0FkYXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCbG9ja0Fk
YXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGM0VFQjgxNjhDQ0Y3NTAw
NzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gSlNCbG9ja0FkYXB0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2RjNFRUI5MTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyog
T2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZGNzVFRkIxNTFDMDYyRjAwN0M5QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWdFeHBDYWNoZWRSZXN1bHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkY3NUVGQzE1MUMwNjJGMDA3QzlC
QTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlZ0V4cENhY2hlZFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkY3NUVGRDE1MUMwNjJGMDA3QzlCQTMgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZ0V4cE1hdGNoZXNBcnJheS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODc4LDYgKzE5MTQsNyBAQAogCQkJCTE0NDAw
NTE3MEE1MzFDQjUwMDA1RjA2MSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1QTJEMEEzRTkxRjYw
MEJBRjU5QyAvKiB0ZXN0YXBpLmMgKi8sCiAJCQkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8q
IHRlc3RhcGkuanMgKi8sCisJCQkJODZEMjIyMTkxNjdFRjk0NDAwMjRDODA0IC8qIHRlc3RhcGku
bSAqLywKIAkJCQk2NTExMjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8s
CiAJCQkpOwogCQkJbmFtZSA9IHRlc3RzOwpAQCAtMjA0NSw2ICsyMDgyLDcgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMTQ4MkI3OEEwQTQzMDVBQjAwNTE3Q0ZD
IC8qIEFQSUNhc3QuaCAqLywKKwkJCQk4NkUzQzYwNjE2N0JBQjg3MDA2RDc2MEEgLyogQVBJSlNW
YWx1ZS5oICovLAogCQkJCTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICov
LAogCQkJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJ
MUNBQThCNEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCkBAIC0yMDUz
LDYgKzIwOTEsOCBAQAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3Bw
ICovLAogCQkJCTE0MjcxMTM4MEE0NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLywKIAkJCQkx
NDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovLAorCQkJCTg2RjNF
RUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oICovLAorCQkJCTg2RjNFRUI4
MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5tbSAqLywKIAkJCQkxNDQwRjhBRDBB
NTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQkxNDQw
RjhBQzBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJ
MTQ0MEY4OTAwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgKi8sCkBA
IC0yMDYyLDkgKzIxMDIsMTMgQEAKIAkJCQlBOEU4OTQzMTBDRDA2MDI0MDAzNjcxNzkgLyogSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICovLAogCQkJCTE0NDBGQ0UyMEE1MUU0NkIwMDA1RjA2
MSAvKiBKU0NsYXNzUmVmLmNwcCAqLywKIAkJCQkxNDQwRkNFMTBBNTFFNDZCMDAwNUYwNjEgLyog
SlNDbGFzc1JlZi5oICovLAorCQkJCTg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRl
eHQuaCAqLywKKwkJCQk4NkUzQzYwODE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tICov
LAorCQkJCTg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICov
LAogCQkJCTE0QkQ1QTI5MEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwICovLAog
CQkJCTE0QkQ1QTJBMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuaCAqLywKIAkJCQkx
NDhDRDFENzEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oICovLAorCQkJ
CTg2RTNDNjBBMTY3QkFCODcwMDZENzYwQSAvKiBKU0V4cG9ydC5oICovLAogCQkJCTE0ODJCN0Uy
MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgKi8sCiAJCQkJMTQ4MkI3RTEwQTQz
MDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmggKi8sCiAJCQkJQTc5RURCMDgxMTUzMUNENjAw
MTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovLApAQCAtMjA3NywxMSArMjEyMSwyMSBA
QAogCQkJCTE0ODJCNzRCMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5oICovLAogCQkJ
CTE0NkFBQjM3MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmNwcCAqLywKIAkJCQkx
NDZBQUIyQTBCNjZBODQ5MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5oICovLAorCQkJCTg2RTND
NjBEMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlLm1tICovLAorCQkJCTg2RTNDNjBFMTY3QkFC
ODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLywKIAkJCQkxNEJENUEyQjBBM0U5MUY2
MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgKi8sCiAJCQkJMTQ4MkI2RUEwQTQzMDBCMzAwNTE3
Q0ZDIC8qIEpTVmFsdWVSZWYuaCAqLywKKwkJCQk4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyog
SlNWaXJ0dWFsTWFjaGluZS5oICovLAorCQkJCTg2RTNDNjEwMTY3QkFCODcwMDZENzYwQSAvKiBK
U1ZpcnR1YWxNYWNoaW5lLm1tICovLAorCQkJCTg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAvKiBK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLywKIAkJCQlBNzQ4MkUzNzExNkE2OTdCMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCAqLywKIAkJCQlBNzQ4MkI3QTExNjZD
REVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQTc0
ODJCNzkxMTY2Q0RFQTAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCAqLywK
KwkJCQk4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tICovLAorCQkJ
CTg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLywKKwkJCQk4NkYz
RUVCOTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCAqLywKKwkJCQk4
NkYzRUVCQTE2OENDRjc1MDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gKi8sCisJ
CQkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8sCiAJ
CQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLywKIAkJ
CQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLywKIAkJCQk1
REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCkBAIC0z
MjA1LDYgKzMyNTksMTcgQEAKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3
OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYx
Njg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyogQVBJSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk4NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyog
SlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2
MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxRDE2N0JB
QkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NkYzRUVCQjE2OENERTkzMDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTg2RjNFRUJEMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZGM0VFQkYxNjhDREU5MzAwNzdCOTJBIC8qIE9i
amNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM1MjgsNiArMzU5Myw3IEBACiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMTQ0MEY2
MTAwQTRGODU2NzAwMDVGMDYxIC8qIHRlc3RhcGkuYyBpbiBTb3VyY2VzICovLAorCQkJCTg2RDIy
MjFBMTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM4MjUs
NiArMzg5MSwxMiBAQAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJl
Zi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVFRjkxRTE2
ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2RTND
NjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKKwkJCQk4
NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAq
LywKKwkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTg2RjNFRUJDMTY4Q0RFOTMwMDc3QjkyQSAvKiBKU0Jsb2NrQWRh
cHRvci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBP
YmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMzg2MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEo
R2xvYmFsRGF0YVR5cAogICAgICwgbV90aW1lb3V0Q291bnQoNTEyKQogI2VuZGlmCiAgICAgLCBt
X25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29uc3QoMCkKKyAgICAsIG1fYXBpRGF0YSgwKQogI2lm
IEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJs
ZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUzLDYgKzQ1Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAorICAgICAgICB2b2lkICptX2FwaURhdGE7
CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCw3IEBAIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbEQKICAg
ICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkKCkgPyBPcHRpb25z
Ojpmb3JjZWRXZWFrUmFuZG9tU2VlZCgpIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51
bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQog
ICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNf
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgLCBtX2FwaURhdGEoMCkKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaGFzRGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
OyB9CiAgICAgICAgIGJvb2wgaGFzUHJvZmlsZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyh0aGlzKTsgfQogCisgICAgICAgIHZv
aWQqIG1fYXBpRGF0YTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzg2
MDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTEyLTMxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KKworICAgICAgICBPYmplY3RpdmUtQyBBUEkgZm9yIEphdmFTY3JpcHRDb3JlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4ODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9XVEZUaHJlYWRE
YXRhLmNwcDoKKyAgICAgICAgKFdURjo6V1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSk6Cisg
ICAgICAgICogd3RmL1dURlRocmVhZERhdGEuaDoKKyAgICAgICAgKFdURlRocmVhZERhdGEpOgor
ICAgICAgICAgICAgLSBBZGRlZCBtX2FwaURhdGEgLSBwcm92aWRlIGNvbnZlbmllbnQgc3RvcmFn
ZSBmb3IgdXNlIGJ5IHRoZSBBUEkuCisKIDIwMTItMTItMjggIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5hdGl2ZSBNZW1v
cnkgSW5zdHJ1bWVudGF0aW9uOiBpbnN0cnVtZW50IG5vdCBpbnN0cnVtZW50ZWQgbWVtYmVycy4K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
OCBAQCBuYW1lc3BhY2UgV1RGIHsKIFRocmVhZFNwZWNpZmljPFdURlRocmVhZERhdGE+KiBXVEZU
aHJlYWREYXRhOjpzdGF0aWNEYXRhOwogCiBXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKCkK
LSAgICA6IG1fYXRvbWljU3RyaW5nVGFibGUoMCkKKyAgICA6IG1fYXBpRGF0YSgwKQorICAgICwg
bV9hdG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0
b3IoMCkKICNpZiBVU0UoSlNDKQogICAgICwgbV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKG5ldyBK
U0M6OklkZW50aWZpZXJUYWJsZSgpKQpJbmRleDogU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAkocmV2aXNp
b24gMTM4NjAwKQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsNiArMTIzLDggQEAgcHVibGljOgogI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpT
QykKIAorICAgIHZvaWQqIG1fYXBpRGF0YTsKKwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmdU
YWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0
b3IgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181004</attachid>
            <date>2013-01-01 17:54:59 -0800</date>
            <delta_ts>2013-01-11 03:50:19 -0800</delta_ts>
            <desc>Removed redundant forEachProtocolImplementingProtocol</desc>
            <filename>105889.7.patch</filename>
            <type>text/plain</type>
            <size>225215</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyNCBA
QAorMjAxMi0xMi0zMSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIEFQSSBpbXBsZW1lbnRlZCBoZXJlLCBzZWU6CisgICAgICAgICAgICBK
U0NvbnRleHQuaAorICAgICAgICAgICAgQVBJSlNWYWx1ZS5oCisgICAgICAgICAgICBKU1ZpcnR1
YWxNYWNoaW5lLmgKKyAgICAgICAgICAgIEpTRXhwb3J0LmgKKyAgICAgICAgU3RpbGwgdG8gZG8g
LQorICAgICAgICAgICAgKDEpIFNob3VkIHJlbmFtZSBBUElKU1ZhbHVlLmggLT4gSlNWYWx1ZS5o
IChidXQgd2UnbGwgaGF2ZSB0byByZW5hbWUgSlNWYWx1ZS5oIGZpcnN0KS4KKyAgICAgICAgICAg
ICgyKSBOdW1lcm91cyBGSVhNRXMsIGFsbCB3aXRoIHNlcGFyYXRlIGJ1Z3MgZmlsZWQuCisKKyAg
ICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhpcyBPYmpl
Y3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgSlNfT0JKQ19BUElf
RU5BQkxFRCBtYWNybyB0byBjb250cm9sIE9iakMgQVBJIHN1cHBvcnQuCisgICAgICAgICogQVBJ
L0pTQmxvY2tBZGFwdG9yLmg6IEFkZGVkLgorICAgICAgICAgICAgLSB0aGlzIE9iamVjdGl2ZS1D
IGNsYXNzIGlzIHVzZWQgaW4gY3JlYXRpbmcgYSBzcGVjaWFsIE5TQmxvY2sgcHJveHlpbmcgYSBK
YXZhU2NyaXB0IGZ1bmN0aW9uLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbTogQWRk
ZWQuCisgICAgICAgIChCbG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnQ6On5C
bG9ja0FyZ3VtZW50KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAg
KEJsb2NrQXJndW1lbnRCb29sZWFuOjpnZXQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVy
aWMpOgorICAgICAgICAoQmxvY2tBcmd1bWVudE51bWVyaWM6OmdldCk6CisgICAgICAgIChCbG9j
a0FyZ3VtZW50SWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudElkOjpnZXQpOgorICAgICAgICAo
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9j
a0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6On5CbG9ja0Fy
Z3VtZW50U3RydWN0KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3Q6OmdldCk6CisgICAg
ICAgICAgICAtIGRlY29kZWQgYXJndWVudCB0eXBlIGluZm9ybWF0aW9uIG9mIGEgSlNCbG9ja0Fk
YXB0b3IuCisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlKToKKyAgICAgICAgKEJs
b2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRlZ2VyKToKKyAgICAgICAgKEJsb2NrQXJn
dW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVEb3VibGUpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZUJvb2wpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0
ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUlk
KToKKyAgICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVPZkNsYXNzKToKKyAg
ICAgICAgKEJsb2NrQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChC
bG9ja0FyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgICAgIC0gZGVs
ZWdhdGUgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHBhcnNlT2JqQ1R5cGUuCisgICAgICAg
IChCbG9ja1Jlc3VsdCk6CisgICAgICAgIChCbG9ja1Jlc3VsdDo6fkJsb2NrUmVzdWx0KToKKyAg
ICAgICAgKEJsb2NrUmVzdWx0Vm9pZCk6CisgICAgICAgIChCbG9ja1Jlc3VsdFZvaWQ6OnNldCk6
CisgICAgICAgIChCbG9ja1Jlc3VsdEludGVnZXIpOgorICAgICAgICAoQmxvY2tSZXN1bHRJbnRl
Z2VyOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHREb3VibGUpOgorICAgICAgICAoQmxvY2tS
ZXN1bHREb3VibGU6OnNldCk6CisgICAgICAgIChCbG9ja1Jlc3VsdEJvb2xlYW4pOgorICAgICAg
ICAoQmxvY2tSZXN1bHRCb29sZWFuOjpzZXQpOgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3Q6OkJsb2NrUmVzdWx0U3RydWN0KToKKyAgICAg
ICAgKEJsb2NrUmVzdWx0U3RydWN0Ojp+QmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQmxv
Y2tSZXN1bHRTdHJ1Y3Q6OnNldCk6CisgICAgICAgICAgICAtIGRlY29kZWQgcmVzdWx0IHR5cGUg
aW5mb3JtYXRpb24gb2YgYSBKU0Jsb2NrQWRhcHRvci4KKyAgICAgICAgKGJ1aWxkQmxvY2tTaWdu
YXR1cmUpOgorICAgICAgICAgICAgLSBwYXJ0aWFsIHN0ZXAgaW4gY29uc3RydWN0aW5nIGEgc2ln
bmF0dXJlIHdpdGggc3RhY2sgb2Zmc2V0IGluZm9ybWF0aW9uIGZyb20gb25lIHdpdGhvdXQuCisg
ICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9j
b2w6XSk6CisgICAgICAgICAgICAtIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtKU0Jsb2NrQWRh
cHRvciBibG9ja01hdGNoZXNTaWduYXR1cmU6XSk6CisgICAgICAgICAgICAtIGNoZWNrIHdoZXRo
ZXIgc2lnbmF0dXJlIHN0cmluZ3MgbWF0Y2gsIHdoZXJlIG9ubHkgb25lIGNvbnRhaW5zIHN0YWNr
IGZyYW1lIG9mZnNldHMuCisgICAgICAgICgtW0pTQmxvY2tBZGFwdG9yIGJsb2NrRnJvbVZhbHVl
OmluQ29udGV4dDp3aXRoRXhjZXB0aW9uOl0pOgorICAgICAgICAgICAgLSB1c2UgdGhlIGFkYXB0
b3IgdG8gY3JlYXRlIGEgc3BlY2lhbCBmb3J3YXJkaW5nIGJsb2NrLgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aW5oZXJpdHMpOgor
ICAgICAgICAgICAgLSBhZGQgbWlzc2luZyBicmFjZXMgdG8gbXVsdGlsaW5lIGZvciBzdGF0ZW1l
bnQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gdGhp
cyBPYmplY3RpdmUtQyBjbGFzcyBpcyB1c2VkIHRvIHJlZmVyZW5jZSBhIEphdmFTY3JpcHQgY29u
dGV4dC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bSlND
b250ZXh0IGluaXRdKToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IuCisgICAgICAgICgtW0pT
Q29udGV4dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBjb25zdHJ1
Y3QgaW4gYSBnaXZlbiBWTSAoSlNHbG9iYWxEYXRhKS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGV2
YWx1YXRlU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZ2xvYmFsT2JqZWN0XSk6Cisg
ICAgICAgICAgICAtIGV2YWx1YXRlIGEgc2NyaXB0LCBnbG9iYWwgb2JqZWN0IGFjY2Vzc29yLgor
ICAgICAgICAoK1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdKToKKyAgICAgICAgKCtbSlNDb250
ZXh0IGN1cnJlbnRUaGlzXSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRz
XSk6CisgICAgICAgICAgICAtIFRoZXNlIG1ldGhvZHMgb2J0YWluIGNvbnRleHQsIHRoaXMsIGFy
Z3VtZW50cyBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrLgorICAgICAgICAoLVtKU0NvbnRleHQgdmly
dHVhbE1hY2hpbmVdKToKKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gZm9yIC52aXJ0dWFs
TWFjaGluZSBwcm9wZXJ0eS4KKyAgICAgICAgKC1bSlNDb250ZXh0IG9iamVjdEZvcktleWVkU3Vi
c2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2JqZWN0OmZvcktleWVkU3Vic2Ny
aXB0Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNj
ZXNzLgorICAgICAgICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGlu
dGVybmFsIGFjY2Vzc29yIHRvIG1fY29udGV4dC4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxs
b2NdKToKKyAgICAgICAgICAgIC0gZGVzY3RydWN0b3IuCisgICAgICAgICgtW0pTQ29udGV4dCBu
b3RpZnlFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpdKToKKyAgICAgICAgICAgIC0gaW50ZXJuYWwgbWV0aG9kIHRvIHJlY29yZCBhbiBleGNlcHRp
b24gd2FzIHRocm93bi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTp0aGlzVmFsdWU6YXJndW1lbnRDb3VudDphcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBlbmRDYWxsYmFja1dpdGhEYXRhOl0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBtZXRo
b2RzIHRvIHB1c2gvcG9wIGEgY2FsbGJhY2sgcmVjb3JkLgorICAgICAgICAoLVtKU0NvbnRleHQg
cHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVucHJvdGVjdDpdKToKKyAgICAgICAg
ICAgIC0gaW50ZXJuYWwgbWV0aG9kcyB0byBhZGQgYSB2YWx1ZSB0byBhIHByb3RlY3Qgc2V0ICh1
c2VkIHRvIHByb3RlY3QgdGhlIGludGVybmFsIHByb3BlcnR5IG9mIEpTVmFsdWUpLgorICAgICAg
ICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAgICAgIC0gaW50ZXJu
YWwgbWV0aG9kIHRvIGNyZWF0ZSBhIHdyYXBwZXIgb2JqZWN0LgorICAgICAgICAoV2Vha0NvbnRl
eHRSZWY6OldlYWtDb250ZXh0UmVmKToKKyAgICAgICAgKFdlYWtDb250ZXh0UmVmOjp+V2Vha0Nv
bnRleHRSZWYpOgorICAgICAgICAoV2Vha0NvbnRleHRSZWY6OmdldCk6CisgICAgICAgIChXZWFr
Q29udGV4dFJlZjo6c2V0KToKKyAgICAgICAgICAgIC0gSGVscGVyIGNsYXNzIHRvIGltcGxlbWVu
dCBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgSlNDb250ZXh0LgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKENhbGxiYWNrRGF0YSk6CisgICAgICAgIChX
ZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIHNlZSBBUEkvSlNDb250ZXh0Lm1tIGZvciBk
ZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCBtZXRob2RzLgorICAgICAgICAqIEFQSS9KU0V4cG9ydC5o
OiBBZGRlZC4KKyAgICAgICAgICAgIC0gUHJvdmlkZXMgSlNFeHBvcnQgcHJvdG9jb2wgJiBKU0V4
cG9ydEFzIG1hY3JvLgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1Zh
bHVlIHZhbHVlV2l0aEJvb2w6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aERvdWJsZTppbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFVJbnQzMjppbkNv
bnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0Ol0pOgor
ICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRl
cm46ZmxhZ3M6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVk
SW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBDb25zdHJ1Y3RvcnMuCisgICAgICAgICgtW0pT
VmFsdWUgdG9PYmplY3RdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b09iamVjdE9mQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTVmFsdWUgdG9Cb29sXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9Eb3Vi
bGVdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0ludDMyXSk6CisgICAgICAgICgtW0pTVmFsdWUg
dG9VSW50MzJdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b051bWJlcl0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvU3RyaW5nXSk6CisgICAgICAgICgtW0pTVmFsdWUgdG9EYXRlXSk6CisgICAgICAg
ICgtW0pTVmFsdWUgdG9BcnJheV0pOgorICAgICAgICAoLVtKU1ZhbHVlIHRvRGljdGlvbmFyeV0p
OgorICAgICAgICAgICAgLSBDb252ZXJzaW9uIHRvIE9iamVjdGl2ZS1DIHR5cGVzLgorICAgICAg
ICAoLVtKU1ZhbHVlIHZhbHVlRm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0
VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgZGVsZXRlUHJvcGVydHk6
XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFs
dWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAgICAgIC0gUHJvcGVydHkg
YWNjZXNzIGJ5IHByb3BlcnR5IG5hbWUuCisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVBdEluZGV4
Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldFZhbHVlOmF0SW5kZXg6XSk6CisgICAgICAgICAg
ICAtIFByb3BlcnR5IGFjY2VzcyBieSBpbmRleC4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVm
aW5lZF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzQm9vbGVhbl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgt
W0pTVmFsdWUgaXNTdHJpbmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAg
ICAgICAgICAgLSBUZXN0IEphdmFTY3JpcHQgdHlwZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBpc0Vx
dWFsVG9PYmplY3Q6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNFcXVhbFdpdGhUeXBlQ29lcmNp
b25Ub09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0luc3RhbmNlT2Y6XSk6CisgICAg
ICAgICAgICAtID09PSwgPT0sIGluc3RhbmNlb2Ygb3BlcmF0b3JzLgorICAgICAgICAoLVtKU1Zh
bHVlIGNhbGxXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnN0cnVjdFdp
dGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaW52b2tlTWV0aG9kOndpdGhBcmd1
bWVudHM6XSk6CisgICAgICAgICAgICAtIENhbGwgJiBjb25zdHJ1Y3QuCisgICAgICAgICgtW0pT
VmFsdWUgY29udGV4dF0pOgorICAgICAgICAgICAgLSBpbXBsZW1lbnRhdGlvbiBmb3IgLmNvbnRl
eHQgcHJvcGVydHkuCisgICAgICAgICgtW0pTVmFsdWUgdG9Qb2ludF0pOgorICAgICAgICAoLVtK
U1ZhbHVlIHRvUmFuZ2VdKToKKyAgICAgICAgKC1bSlNWYWx1ZSB0b1JlY3RdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB0b1NpemVdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpp
bkNvbnRleHQ6XSk6CisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW5Db250ZXh0
Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6aW5Db250ZXh0Ol0pOgorICAg
ICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFNpemU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAg
LSBTdXBwb3J0IGZvciBOUyBzdHJ1Y3QgdHlwZXMuCisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0
Rm9yS2V5ZWRTdWJzY3JpcHQ6XSk6CisgICAgICAgICgtW0pTVmFsdWUgb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBzZXRPYmplY3Q6YXRJbmRleGVkU3Vic2NyaXB0
Ol0pOgorICAgICAgICAgICAgLSBzdXBwb3J0IGZvciBzdWJzY3JpcHQgcHJvcGVydHkgYWNjZXNz
LgorICAgICAgICAoaXNEYXRlKToKKyAgICAgICAgKGlzQXJyYXkpOgorICAgICAgICAgICAgLSBp
bnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIGZvciBpbnN0YW5jZXMgb2YgSlMgRGF0
ZSwgQXJyYXkgdHlwZXMuCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChUYXNrKToKKyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpKU0NvbnRhaW5lckNvbnZl
cnRvcik6CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgKEpTQ29udGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAoSlNDb250YWluZXJDb252ZXJ0b3I6OnRh
a2UpOgorICAgICAgICAgICAgLSBoZWxwZXIgY2xhc3MgZm9yIHRyYWNraW5nIHN0YXRlIHdoaWxl
IGNvbnZlcnRpbmcgdG8gQXJyYXkvRGljdGlvbmFyeSBvYmplY3RzLgorICAgICAgICAodmFsdWVU
b09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKGNvbnRhaW5lclZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAodmFsdWVUb09iamVjdCk6CisgICAgICAgICh2YWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKHZhbHVlVG9TdHJpbmcpOgorICAgICAgICAodmFsdWVUb0RhdGUpOgorICAgICAgICAodmFs
dWVUb0FycmF5KToKKyAgICAgICAgKHZhbHVlVG9EaWN0aW9uYXJ5KToKKyAgICAgICAgICAgIC0g
ZnVuY3Rpb24gZm9yIGNvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gT2JqZWN0aXZlLUMg
b2JqZWN0cy4KKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0b3IpOgorICAgICAgICAoT2Jq
Y0NvbnRhaW5lckNvbnZlcnRvcjo6T2JqY0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAgIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjppc1dvcmtMaXN0RW1wdHkpOgorICAgICAgICAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6Y29udmVydCk6CisgICAgICAgIChPYmpjQ29udGFpbmVyQ29udmVy
dG9yOjphZGQpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSk6CisgICAg
ICAgICAgICAtIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgc3RhdGUgd2hpbGUgY29udmVydGlu
ZyB0byBBcnJheS9EaWN0aW9uYXJ5IHZhbHVlcy4KKyAgICAgICAgKG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weSk6CisgICAgICAgIChvYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKHZhbHVlSW50ZXJu
YWxWYWx1ZSk6CisgICAgICAgICAgICAtIGZ1bmN0aW9uIGZvciBjb252ZXJ0aW5nIE9iamVjdGl2
ZS1DIG9iamVjdHMgdG8gSmF2YVNjcmlwdCB2YWx1ZXMuCisgICAgICAgICgrW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFs
dWU6aW5Db250ZXh0Ol0pOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgKGdldFN0cnVjdFRhZ0hhbmRsZXIp
OgorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0VG9WYWx1ZTpdKToKKyAgICAg
ICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6XSk6CisgICAgICAgICAgICAt
IG1ldGhvZHMgdG8gdHJhY2tpbmcgc3RydWN0IHR5cGVzIHRoYXQgc3VwcG9ydCBjb252ZXJzaW9u
IHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKC1bSlNWYWx1ZSBkZWFsbG9jXSk6CisgICAgICAg
ICAgICAtIGRlc3RydWN0b3IuCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKToKKyAg
ICAgICAgICAgIC0gT2JqZWN0aXZlLUMgdG8tTlNTdHJpbmcgY29udmVyc2lvbi4KKyAgICAgICAg
KHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcik6CisgICAgICAgICh2YWx1ZVRvVHlwZUludm9jYXRp
b25Gb3IpOgorICAgICAgICAgICAgLSBjcmVhdGUgaW52b2NhdGlvbiBvYmplY3RzIGZvciBjb252
ZXJzaW9uIHRvL2Zyb20gSlNWYWx1ZS4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZUludGVybmFsLmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmFsdWUubW0gZm9yIGRlc2NyaXB0aW9u
IG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDog
QWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgT2JqZWN0aXZlLUMgY2xhc3MgaXMgdXNlZCB0byBy
ZWZlcmVuY2UgYSBKYXZhU2NyaXB0IHZpcnR1YWwgbWFjaGluZSAoSlNHbG9iYWxEYXRhKS4KKyAg
ICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbTogQWRkZWQuCisgICAgICAgICgtW0pTVmly
dHVhbE1hY2hpbmUgaW5pdF0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXN0cnVjdG9yLgorICAgICAgICAoZ2V0
R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUpOgorICAgICAgICAgICAgLSBpbnRlcm5hbCBhY2Nlc3Nv
ciBmb3IgbV9ncm91cCBwcm9wZXJ0eS4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmg6IEFkZGVkLgorICAgICAgICAgICAgLSBzZWUgQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0gZm9yIGRlc2NyaXB0aW9uIG9mIGludGVybmFsIG1ldGhvZHMuCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHdyYXBwZXJDbGFzcyk6CisgICAgICAgICAgICAtIHNpbmdsZXRvbiByb290
IGZvciBkZXRjdGlvbiAoJiB1bndyYXBwaW5nKSBvZiB3cmFwcGVyIG9iamVjdHMuCisgICAgICAg
IChzZWxlY3RvclRvUHJvcGVydHlOYW1lKToKKyAgICAgICAgICAgIC0gZGVmYXVsdCBzZWxlY3Rv
ciB0byBwcm9wZXJ0eSBuYW1lIGNvbnZlcnNpb24uCisgICAgICAgIChjcmVhdGVPYmplY3RXaXRo
Q3VzdG9tQnJhbmQpOgorICAgICAgICAgICAgLSBjcmVhdGVzIGEgSlNPYmplY3Qgd2l0aCBhIGN1
c3RvbSBOYXRpdmVCcmFuZCAoY2xhc3MgbmFtZSkuCisgICAgICAgIChjcmVhdGVSZW5hbWVNYXAp
OgorICAgICAgICAgICAgLSBwYXJzZSBAb3B0aW9uYWwgcHJvcGVydGllcyBvZiBhIEpTRXhwb3J0
IHByb3RvY29sLgorICAgICAgICAocHV0Tm9uRW51bWVyYWJsZSk6CisgICAgICAgICAgICAtIHBy
b3BlcnR5IHB1dCB3aXRoIGVudW1lcmFibGU9ZmFsc2UuCisgICAgICAgIChjb3B5TWV0aG9kc1Rv
T2JqZWN0KToKKyAgICAgICAgICAgIC0gaXRlcmF0ZSBtZXRob2RzIGluIGEgcHJvdG9jb2w7IGFk
ZCBmdW5jdGlvbnMgdG8gYSBKU09iamVjdC4KKyAgICAgICAgKHBhcnNlUHJvcGVydHlBdHRyaWJ1
dGVzKToKKyAgICAgICAgICAgIC0gZXhhbWluZSBwcm90b2NvbCBwcm9wZXJ0eSBtZXRhZGF0YS4K
KyAgICAgICAgKG1ha2VTZXR0ZXJOYW1lKToKKyAgICAgICAgICAgIC0gImZvbyIgLT4gInNldEZv
byIKKyAgICAgICAgKGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gY3Jl
YXRlIHByb3BlcnRpZXMgb24gYSBQcm90b2NvbCBvYmplY3QgcmVmbGVjdGluZyB0aGUgaW5zdGFu
Y2UgbWV0aG9kcyAmIHByb3BlcnRpZXMgb2YgYSBwcm90b2NvbC4KKyAgICAgICAgKC1bSlNPYmpD
Q2xhc3NJbmZvIGluaXRXaXRoQ29udGV4dDpmb3JDbGFzczpzdXBlckNsYXNzSW5mbzpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xh
c3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBj
b25zdHJ1Y3Rvcl0pOgorICAgICAgICAgICAgLSBjYWNoZSB0aGUgUHJvdG9jb2wvQ29uc3RydWN0
b3Igb2JqZWN0cyBmb3IgYW4gT2JqZWN0aXZlLUMgdHlwZS4KKyAgICAgICAgKC1bSlNXcmFwcGVy
TWFwIGluaXRXaXRoQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2Nd
KToKKyAgICAgICAgICAgIC0gY29uc3RydWN0b3IgJiBkZXNjdHJ1Y3Rvci4KKyAgICAgICAgKC1b
SlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAgICAgICAgICAgLSBtYXBzIENs
YXNzIC0+IEpTT2JqQ0NsYXNzSW5mby4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBwZXJG
b3JPYmplY3Q6XSk6CisgICAgICAgICAgICAtIGNyZXRhZSBvciByZXRyaWV2ZSBhIGNhY2hlZCB3
cmFwcGVyIHZhbHVlIGZvciBhbiBvYmplY3QuCisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0
KToKKyAgICAgICAgICAgIC0gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzIGEgd3JhcHBlciBvYmpl
Y3Q7IHVud3JhcCBpZiBzby4KKyAgICAgICAgKiBBUEkvSmF2YVNjcmlwdENvcmUuaDoKKyAgICAg
ICAgICAgIC0gQWRkZWQgaW5jbHVkZXMgZm9yIG5ldyBBUEkgaGVhZGVycy4KKyAgICAgICAgKiBB
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICAgICAtIHRoaXMgY2xh
c3MgaXMgdXNlZCB0byB3cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1ldGhvZHMsIGNsYXNzIG1l
dGhvZHMgJiBibG9ja3MgYXMgSlNGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAqIEFQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbTogQWRkZWQuCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50KToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCb29sZWFuKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCb29s
ZWFuOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEludGVnZXIpOgorICAgICAgICAo
Q2FsbGJhY2tBcmd1bWVudEludGVnZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
RG91YmxlKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnREb3VibGU6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50SlNW
YWx1ZTo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRJZCk6CisgICAgICAgIChDYWxs
YmFja0FyZ3VtZW50SWQ6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6
CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5DYWxsYmFja0FyZ3VtZW50
T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50T2ZDbGFzczo6c2V0KToKKyAgICAg
ICAgKENhbGxiYWNrQXJndW1lbnROU051bWJlcik6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50
TlNOdW1iZXI6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcpOgorICAg
ICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOjpzZXQpOgorICAgICAgICAoQ2FsbGJhY2tB
cmd1bWVudE5TRGF0ZSk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEYXRlOjpzZXQpOgor
ICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE5TQXJyYXkpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXk6OnNldCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5
KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnROU0RpY3Rpb25hcnk6OnNldCk6CisgICAgICAg
IChDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3Q6OkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdDo6fkNhbGxiYWNrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVu
dFN0cnVjdDo6c2V0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50
QmxvY2tDYWxsYmFjayk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6
fkNhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAgKENhbGxiYWNrQXJndW1l
bnRCbG9ja0NhbGxiYWNrOjpzZXQpOgorICAgICAgICAgICAgLSBkZWNvZGVkIGFyZ3VlbnQgdHlw
ZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxsYmFja0Z1bmN0aW9uLgorICAgICAgICAoQXJndW1l
bnRUeXBlRGVsZWdhdGUpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVJbnRl
Z2VyKToKKyAgICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlRG91YmxlKToKKyAgICAg
ICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlQm9vbCk6CisgICAgICAgIChBcmd1bWVudFR5
cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5
cGVJZCk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZU9mQ2xhc3MpOgorICAg
ICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVCbG9jayk6CisgICAgICAgIChBcmd1bWVu
dFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRlbGVnYXRlIGZvciB1
c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAgICAoQ2FsbGJhY2tS
ZXN1bHQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHQ6On5DYWxsYmFja1Jlc3VsdCk6CisgICAg
ICAgIChDYWxsYmFja1Jlc3VsdFZvaWQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRWb2lkOjpn
ZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRJZCk6CisgICAgICAgIChDYWxsYmFja1Jlc3Vs
dElkOjpnZXQpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHROdW1lcmljKToKKyAgICAgICAgKENh
bGxiYWNrUmVzdWx0TnVtZXJpYzo6Z2V0KToKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0Qm9vbGVh
bik6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdEJvb2xlYW46OmdldCk6CisgICAgICAgIChDYWxs
YmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJh
Y2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAoQ2FsbGJhY2tSZXN1bHRTdHJ1Y3Q6On5DYWxsYmFj
a1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Z2V0KToKKyAg
ICAgICAgICAgIC0gZGVjb2RlZCByZXN1bHQgdHlwZSBpbmZvcm1hdGlvbiBvZiBhIE9iakNDYWxs
YmFja0Z1bmN0aW9uLgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlKToKKyAgICAgICAgKFJl
c3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUludGVnZXIpOgorICAgICAgICAoUmVzdWx0VHlwZURlbGVn
YXRlOjp0eXBlRG91YmxlKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJvb2wp
OgorICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlVm9pZCk6CisgICAgICAgIChSZXN1
bHRUeXBlRGVsZWdhdGU6OnR5cGVJZCk6CisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5
cGVPZkNsYXNzKToKKyAgICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAg
ICAgICAgKFJlc3VsdFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIGRl
bGVnYXRlIGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBwYXJzZU9iakNUeXBlLgorICAgICAg
ICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjp+
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3RvciAmIGRlc3Ry
dWN0b3IuCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAg
ICAgICAtIGFjY2Vzc29yLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OndyYXBwZWRC
bG9jayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4K
KyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRmluYWxpemUpOgorICAgICAgICAob2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5j
dGlvbkNsYXNzKToKKyAgICAgICAgICAgIC0gSlNDbGFzc1JlZiB1c2VkIHRvIHJlcHJlc2VudCBP
YmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3RzLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmNhbGwpOgorICAgICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAg
ICAgICAgIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIG9u
IGEgcmVjZW50IENsYW5nLgorICAgICAgICAoc2tpcE51bWJlcik6CisgICAgICAgICAgICAtIGhl
bHBlciB1c2VkIGluIHBhcnNpbmcgc2lnbmF0dXJlIHN0cmluZ3MuCisgICAgICAgIChvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rp
b25Gb3JNZXRob2QpOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6Cisg
ICAgICAgICAgICAtIGZ1bmN0aW9ucyB0byB0cnkgdG8gY3JlYXRlIE9iakNDYWxsYmFja0Z1bmN0
aW9uIGluc3RhbmNlcyBmb3IgbWV0aG9kcy9ibG9ja3MuCisgICAgICAgICh0cnlVbndyYXBCbG9j
ayk6CisgICAgICAgICAgICAtIGF0dGVtbXB0IHRvIHVud3JhcCBhIGJsb2NrIG9iamVjdC4KKyAg
ICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDogQWRkZWQuCisgICAgICAgIChwcm90b2Nv
bEltcGxlbWVudHNQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRp
bmdQcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoTWV0aG9kSW5DbGFzcyk6CisgICAgICAgIChm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbCk6CisgICAgICAgIChmb3JFYWNoUHJvcGVydHlJblByb3Rv
Y29sKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb25zIHVzZWQgaW4gcmVmbGVjdGluZyBvbiBPYmpl
Y3RpdmUtQyB0eXBlcy4KKyAgICAgICAgKHNraXBQYWlyKToKKyAgICAgICAgICAgIC0gcGFyc2lu
ZyBoZWxwZXIgdXNlZCBieSBwYXJzZU9iakNUeXBlLCBzY2FucyBmb3IgbWF0Y2hpbmcgcGFyZW50
aGVzZXMuCisgICAgICAgIChTdHJpbmdSYW5nZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6U3Ry
aW5nUmFuZ2UpOgorICAgICAgICAoU3RyaW5nUmFuZ2U6On5TdHJpbmdSYW5nZSk6CisgICAgICAg
IChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAgICAoU3RyaW5nUmFu
Z2U6OmdldCk6CisgICAgICAgICAgICAtIEhlbHBlciBjbGFzcyAtIGNyZWF0ZSBhIGMgc3RyaW5n
IGNvcHkgb2YgYSByYW5nZSBvZiBhbiBleGlzdGluZyBzdHJpbmcuCisgICAgICAgIChwYXJzZU9i
akNUeXBlKToKKyAgICAgICAgICAgIC0gZnVuY3Rpb24gdG8gcGFyc2UgT2JqZWN0aXZlLUMgdHlw
ZSBzdHJpbmdzLCBtYWtlcyBjYWxsYmFja3MgdG8gYSBkZWxlYWd0ZS4KKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAgICAgICAtIGFkZGVkIGNh
bGwgdG8gdGVzdE9iamVjdGl2ZUNBUEkgKGluIHRlc3RhcGkubSkuCisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubTogQWRkZWQuCisgICAgICAgICgrW1BhcmVudE9iamVjdCBwYXJlbnRUZXN0
XSk6CisgICAgICAgICgrW1Rlc3RPYmplY3QgdGVzdE9iamVjdF0pOgorICAgICAgICAoK1tUZXN0
T2JqZWN0IGNsYXNzVGVzdF0pOgorICAgICAgICAoLVtUZXN0T2JqZWN0IGdldFN0cmluZ10pOgor
ICAgICAgICAoLVtUZXN0T2JqZWN0IHRlc3RBcmd1bWVudFR5cGVzV2l0aEludDpkb3VibGU6Ym9v
bGVhbjpzdHJpbmc6bnVtYmVyOmFycmF5OmRpY3Rpb25hcnk6XSk6CisgICAgICAgICgtW1Rlc3RP
YmplY3QgY2FsbGJhY2s6XSk6CisgICAgICAgICgtW1RleHRYWVogdGVzdDpdKToKKyAgICAgICAg
ICAgIC0gdGVzdCBvYmplY3QsIHVzZWQgaW4gdmFyaW91cyB0ZXN0IHZhc2VzLgorICAgICAgICAo
Y2hlY2tSZXN1bHQpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChi
bG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MpOgorICAgICAgICAgICAgLSBoZWxwZXIgZnVuY3Rp
b24gdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYSByZWNlbnQgQ2xhbmcuCisgICAg
ICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICAgICAtIG5ldyB0ZXN0IGNhc2VzLgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIGFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAg
ICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2Ug
Zm9yIHVzZSBieSB0aGUgQVBJLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgICAgIC0gYWRkZWQgbV9hcGlEYXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3Jh
Z2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAyMDEyLTEyLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMg
IDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25lIG1vcmUgdW5yZXZpd2VkIGhvbGlkYXkg
TUlQUyBhbmQgU0g0IGJ1aWxkZml4ZXMgYWZ0ZXIgcjEzODUxNi4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJSlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU0NvbnRleHQ7CisKKy8vIEEgSlNWYWx1ZSBpcyBhIHJl
ZmVyZW5jZSB0byBhIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBvYmplY3Qgc3BhY2Ugb2Yg
YQorLy8gSlNWaXJ0dWFsTWFjaGluZS4gQWxsIGluc3RhbmNlcyBvZiBKU1ZhbHVlIG9yaWdpbmF0
ZSBmcm9tIGEgSlNDb250ZXh0LCBhbmQKKy8vIGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGlz
IEpTQ29udGV4dC4gV2hlcmUgYW4gaW5zdGFuY2UgbWV0aG9kIGlzIGludm9rZWQKKy8vIHVwb24g
YSBKU1ZhbHVlLCBhbmQgdGhpcyByZXR1cm5zIGFub3RoZXIgSlNWYWx1ZSwgdGhlIHJldHVybmVk
IEpTVmFsdWUgd2lsbAorLy8gb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgSlNDb250ZXh0IGFzIHRo
ZSBKU1ZhbHVlIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzCisvLyBpbnZva2VkLgorLy8KKy8vIFRo
ZSBKU0NvbnRleHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVy
ZWNlZCBKYXZhU2NyaXB0CisvLyB2YWx1ZSB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gU28g
bG9uZyBhcyB0aGUgSlNDb250ZXh0IGlzIGJlaW5nIHJldGFpbmVkCisvLyB0aGUgSlNWYWx1ZSB3
aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZCB2YWx1ZSB3aXRoaW4gdGhlIEphdmFT
Y3JpcHQKKy8vIHZpcnR1YWwgbWFjaGluZSBhbGl2ZS4gV2hlbiB0aGUgSlNDb250ZXh0IGFzc29j
aWF0ZWQgd2l0aCBhIEpTVmFsdWUgaXMKKy8vIGRlYWxsb2NhdGVkIHRoZSB3ZWFrIGNvbnRleHQg
cHJvcGVydHkgb2YgdGhlIEpTVmFsdWUgd2lsbCBiZWNvbWUgbmlsLiBBZnRlcgorLy8gdGhpcyBv
Y2N1cnMgdGhlIHZhbHVlIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCB2aXJ0dWFsIG1hY2hpbmUgaXMg
bm8gbG9uZ2VyCisvLyBiZWluZyBtYWludGFpbmVkIGJ5IHRoaXMgSlNWYWx1ZSwgYW5kIHRoZSBK
U1ZhbHVlIGluc3RhbmNlIG1heSBubyBsb25nZXIgYnkKKy8vIHVzZWQgYXMgYSByZWZlcmVuY2Ug
dG8gdGhpcyB2YWx1ZS4gRm9yIGFueSBtZXRob2QgaW52b2tlZCBvbiBpbnN0YW5jZSBvZgorLy8g
SlNWYWx1ZSB3aXRoIGEgbmlsIGNvbnRleHQsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSBuaWwv
emVyby9mYWxzZSByZXN1bHQuCisvLworLy8gRm9yIGFsbCBtZXRob2RzIHRha2luZyBhcmd1bWVu
dHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkCisvLyBpbnRvIGEgSmF2
YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJlbG93
LgorLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1
bGFyIEpTVmlydHVhbE1hY2hpbmUKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5l
IGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRleHQKKy8vIHByb3BlcnR5KS4gQW4g
aW5zdGFuY2Ugb2YgSlNWYWx1ZSBtYXkgb25seSBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8K
Ky8vIG1ldGhvZHMgb24gaW5zdGFuY2VzIG9mIEpTVmFsdWUgYW5kIEpTQ29udGV4dCB0aGF0IGJl
bG9uZyB0byB0aGUgc2FtZQorLy8gSlNWaXJ0dWFsTWFjaGluZSAtIHBhc3NpbmcgYSBKU1ZhbHVl
IHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdCBvcmlnaW5hdGluZworLy8gZnJvbSBhIGRpZmZlcmVu
dCBKU1ZpcnR1YWxNYWNoaW5lIHdpbGwgcmVzdWx0IGluIGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlv
bgorLy8gYmVpbmcgcmFpc2VkLgorLy8KKy8vIENvbnZlcnNpb24gYmV0d2VlbiBPYmplY3RpdmUt
QyBhbmQgSmF2YVNjcmlwdCB0eXBlcy4KKy8vCisvLyBXaGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBK
YXZhU2NyaXB0IHZhbHVlcyBhbmQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhIGNvcHkgaXMKKy8vIHBl
cmZvcm1lZC4gVmFsdWVzIG9mIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgY29waWVkIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisvLyB0eXBlcyBvbiBjb252ZXJzaW9uIGluIGVhY2ggZGlyZWN0aW9uLiBG
b3IgTlNEaWN0aW9uYXJpZXMsIGVudHJpZXMgaW4gdGhlCisvLyBkaWN0aW9uYXJ5IHRoYXQgYXJl
IGtleWVkIGJ5IHN0cmluZ3MgYXJlIGNvcGllZCBvbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCisv
LyBGb3IgZGljdGlvbmFyaWVzIGFuZCBhcnJheXMsIGNvbnZlcnNpb24gaXMgcmVjdXJzaXZlLCB3
aXRoIHRoZSBzYW1lIG9iamVjdAorLy8gY29udmVyc2lvbiBiZWluZyBhcHBsaWVkIHRvIGFsbCBl
bnRyaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorLy8KKy8vICAgT2JqZWN0aXZlLUMgdHlwZSAgfCAg
IEphdmFTY3JpcHQgdHlwZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyAgICAgICAgIG5pbCAgICAgICAgIHwgICAgIHVuZGVmaW5lZAorLy8gICAgICAg
IE5TTnVsbCAgICAgICB8ICAgICAgICBudWxsCisvLyAgICAgICBOU1N0cmluZyAgICAgIHwgICAg
ICAgc3RyaW5nCisvLyAgICAgICBOU051bWJlciAgICAgIHwgICBudW1iZXIsIGJvb2xlYW4KKy8v
ICAgICBOU0RpY3Rpb25hcnkgICAgfCAgIE9iamVjdCBvYmplY3QKKy8vICAgICAgIE5TQXJyYXkg
ICAgICAgfCAgICBBcnJheSBvYmplY3QKKy8vICAgICAgICBOU0RhdGUgICAgICAgfCAgICAgRGF0
ZSBvYmplY3QKKy8vICAgICAgIE5TQmxvY2sgKiAgICAgfCAgIEZ1bmN0aW9uIG9iamVjdCAqCisv
LyAgICAgICAgICBpZCAqKiAgICAgIHwgICBXcmFwcGVyIG9iamVjdCAqKgorLy8gICAgICAgIENs
YXNzICoqKiAgICB8IENvbnN0cnVjdG9yIG9iamVjdCAqKioKKy8vCisvLyAqIEluc3RhbmNlcyBv
ZiBOU0Jsb2NrIHdpdGggc3VwcG9ydGVkIGFyZ3VtZW50cyB0eXBlcyB3aWxsIGJlIHByZXNlbnRl
ZCB0bworLy8gSmF2YVNjcmlwdCBhcyBhIGNhbGxhYmxlIEZ1bmN0aW9uIG9iamVjdC4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkCisvLyBhcmd1bWVudCB0eXBlcyBzZWUgSlNFeHBv
cnQuaC4gSWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIG9yaWdpbmF0aW5nIGZyb20gYW4KKy8vIE9i
amVjdGl2ZS1DIGJsb2NrIGlzIGNvbnZlcnRlZCBiYWNrIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVj
dCB0aGUgYmxvY2sgd2lsbAorLy8gYmUgcmV0dXJuZWQuIEFsbCBvdGhlciBKYXZhU2NyaXB0IGZ1
bmN0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCBpbiB0aGUgc2FtZQorLy8gbWFubmVyIGFzIGEgSmF2
YVNjcmlwdCBvYmplY3Qgb2YgdHlwZSBPYmplY3QuCisvLworLy8gKiogRm9yIE9iamVjdGl2ZS1D
IGluc3RhbmNlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGxpc3Rl
ZAorLy8gYWJvdmUsIGEgd3JhcHBlciBvYmplY3QgdG8gcHJvdmlkZSBhIHJldGFpbmluZyBoYW5k
bGUgdG8gdGhlIE9iamVjdGl2ZS1DCisvLyBpbnN0YW5jZSBmcm9tIEphdmFTY3JpcHQuIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHdyYXBwZXIgb2JqZWN0cywgc2VlCisvLyBKU0V4cG9y
dC5oLiBXaGVuIGEgSmF2YVNjcmlwdCB3cmFwcGVyIG9iamVjdCBpcyBjb252ZXJ0ZWQgYmFjayB0
byBPYmplY3RpdmUtQworLy8gdGhlIE9iamVjdGl2ZS1DIGluc3RhbmNlIGJlaW5nIHJldGFpbmVk
IGJ5IHRoZSB3cmFwcGVyIGlzIHJldHVybmVkLgorLy8KKy8vICoqKiBGb3IgT2JqZWN0aXZlLUMg
Q2xhc3Mgb2JqZWN0cyBhIGNvbnN0cnVjdG9yIG9iamVjdCBjb250YWluaW5nIGV4cG9ydGVkCisv
LyBjbGFzcyBtZXRob2RzIHdpbGwgYmUgcmV0dXJuZWQuIFNlZSBKU0V4cG9ydC5oIHNvciBtb3Jl
IGluZm9ybWF0aW9uIG9uCisvLyBjb25zdHJ1Y3RvciBvYmplY3RzLgorTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIE5BKQorQGludGVyZmFjZSBKU1ZhbHVlIDogTlNPYmplY3QKKworLy8gQ3JlYXRl
IGEgSlNWYWx1ZSBieSBjb252ZXJ0aW5nIGFuIE9iamVjdGl2ZS1DIG9iamVjdC4KKysgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dDsKKy8vIENyZWF0ZSBhIEphdmFTY3JpcHQgdmFsdWUgZnJvbSBhbiBPYmplY3RpdmUtQyBw
cmltaXRpdmUgdHlwZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhCb29sOihCT09MKXZhbHVlIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhEb3Vi
bGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChKU1Zh
bHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVJbnQzMjoodWludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLy8gQ3JlYXRlIGEgSmF2YVNjcmlwdCB2
YWx1ZSBpbiB0aGlzIGNvbnRleHQuCisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Fy
cmF5SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aE5ld1JlZ3VsYXJFeHByZXNzaW9uRnJvbVBhdHRlcm46KE5TU3RyaW5nICopcGF0dGVybiBmbGFn
czooTlNTdHJpbmcgKilmbGFncyBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisrIChK
U1ZhbHVlICopdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCB0
aGlzIHZhbHVlIHRvIGEgY29ycmVzcG9uZGluZyBPYmplY3RpdmUtQyBvYmplY3QsIGFjY29yZGlu
ZyB0byB0aGUKKy8vIGNvbnZlcnNpb24gc3BlY2lmaWVkIGFib3ZlLgorLSAoaWQpdG9PYmplY3Q7
CisvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCwgaWYgdGhlIHJlc3VsdCBpcworLy8gbm90IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgdGhl
biBuaWwgd2lsbCBiZSByZXR1cm5lZC4KKy0gKGlkKXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpY2xz
OworLy8gVGhlIHZhbHVlIGlzIGNvcGllZCB0byBhIGJvb2xlYW4gYWNjb3JkaW5nIHRvIHRoZSBj
b252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistIChC
T09MKXRvQm9vbDsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBudW1iZXIgYWNjb3JkaW5n
IHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3Vh
Z2UuCistIChkb3VibGUpdG9Eb3VibGU7CisvLyBUaGUgdmFsdWUgaXMgY29waWVkIHRvIGFuIGlu
dGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieQorLy8gdGhlIEph
dmFTY3JpcHQgbGFuZ3VhZ2UuCistIChpbnQzMl90KXRvSW50MzI7CisvLyBUaGUgdmFsdWUgaXMg
Y29waWVkIHRvIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll
ZCBieQorLy8gdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2UuCistICh1aW50MzJfdCl0b1VJbnQzMjsK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4sIGEgTlNOdW1iZXIgdmFsdWUgb2YgQFlFUyBv
ciBATk8gd2lsbCBiZSByZXR1cm5lZC4KKy8vIEZvciBhbGwgb3RoZXIgdHlwZXMgdGhlIHZhbHVl
IHdpbGwgYmUgY29waWVkIHRvIGEgbnVtYmVyIGFjY29yZGluZyB0byB0aGUKKy8vIGNvbnZlcnNp
b24gc3BlY2lmaWVkIGJ5IHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorLSAoTlNOdW1iZXIgKil0
b051bWJlcjsKKy8vIFRoZSB2YWx1ZSBpcyBjb3BpZWQgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRv
IHRoZSBjb252ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKy8vIEphdmFTY3JpcHQgbGFuZ3VhZ2Uu
CistIChOU1N0cmluZyAqKXRvU3RyaW5nOworLy8gVGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBh
IG51bWJlciByZXByZXNlbnRpbmcgYSB0aW1lIGludGVydmFsIHNpbmNlIDE5NzAsCisvLyBhbmQg
YSBuZXcgTlNEYXRlIGluc3RhbmNlIGlzIHJldHVybmVkLgorLSAoTlNEYXRlICopdG9EYXRlOwor
Ly8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJldHVybmVk
LgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3JpcHQgVHlw
ZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gVGhlIHByb3BlcnR5ICJsZW5ndGgiIGlzIHJlYWQg
ZnJvbSB0aGUgb2JqZWN0LCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQKKy8vIGludGVnZXIsIGFu
ZCBhbiBOU0FycmF5IG9mIHRoaXMgc2l6ZSBpcyBhbGxvY2F0ZWQuIFByb3BlcnRpZXMgY29ycmVz
cG9uZGluZworLy8gdG8gaW5kaWNpZXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgd2lsbCBiZSBj
b3BpZWQgdG8gdGhlIGFycmF5LCB3aXRoCisvLyBPYmplY3RpdmUtQyBvYmplY3RzIGNvbnZlcnRl
ZCB0byBlcXVpdmFsZW50IEpTVmFsdWVzIGFzIHNwZWNpZmllZC4KKy0gKE5TQXJyYXkgKil0b0Fy
cmF5OworLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW4gbmlsIGlzIHJl
dHVybmVkLgorLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QgdGhlbiBhIEphdmFTY3Jp
cHQgVHlwZUVycm9yIHdpbGwgYmUgdGhyb3duLgorLy8gQWxsIGVudW1lcmFibGUgcHJvcGVydGll
cyBvZiB0aGUgb2JqZWN0IGFyZSBjb3BpZWQgdG8gdGhlIGRpY3Rpb25hcnksIHdpdGgKKy8vIE9i
amVjdGl2ZS1DIG9iamVjdHMgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgSlNWYWx1ZXMgYXMgc3Bl
Y2lmaWVkLgorLSAoTlNEaWN0aW9uYXJ5ICopdG9EaWN0aW9uYXJ5OworCisvLyBBY2Nlc3MgYSBw
cm9wZXJ0eSBmcm9tIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIEphdmFT
Y3JpcHQgdmFsdWUKKy8vICd1bmRlZmluZWQnIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlz
dC4KKy0gKEpTVmFsdWUgKil2YWx1ZUZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5Owor
Ly8gU2V0IGEgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFs
dWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBEZWxldGUgYSBwcm9wZXJ0
eSBmcm9tIHRoZSB2YWx1ZSwgcmV0dXJucyBZRVMgaWYgZGVsZXRpb24gaXMgc3VjY2Vzc2Z1bC4K
Ky0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHk7CisvLyBSZXR1cm5z
IFlFUyBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIHRoZSB2YWx1ZS4KKy8vIFRoaXMgbWV0aG9k
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW4iLgor
LSAoQk9PTCloYXNQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eTsKKy8vIFRoaXMgbWV0aG9k
IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkgb24gYW4g
b2JqZWN0OworLy8gdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWV0aG9kIGluCisvLyB0aGUgSmF2YVNjcmlwdCBsYW5nYXVh
Z2UuCistICh2b2lkKWRlZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0
b3I6KGlkKWRlc2NyaXB0b3I7CisKKy8vIEFjY2VzcyBhbiBpbmRleGVkIHByb3BlcnR5IGZyb20g
dGhlIHZhbHVlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKy8vIEphdmFTY3JpcHQgdmFs
dWUgJ3VuZGVmaW5lZCcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoYXQgaW5kZXguCistIChK
U1ZhbHVlICopdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OworLy8gU2V0IGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gdGhlIHZhbHVlLgorLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgYXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKKworLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBw
cmVjaXNlbHkgb25lIG9mIHRoZXNlIHR5cGVzLgorLSAoQk9PTClpc1VuZGVmaW5lZDsKKy0gKEJP
T0wpaXNOdWxsOworLSAoQk9PTClpc0Jvb2xlYW47CistIChCT09MKWlzTnVtYmVyOworLSAoQk9P
TClpc1N0cmluZzsKKy0gKEJPT0wpaXNPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUg
c2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT09Ii4KKy0gKEJPT0wp
aXNFcXVhbFRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiPT0iLgorLSAoQk9PTClpc0VxdWFs
V2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZTsKKy8vIFRoaXMgbWV0aG9kIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbiBhcyB0aGUgSmF2YVNjcmlwdCBvcGVyYXRvciAiaW5zdGFuY2VvZiIu
CistIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWU7CisKKy8vIENhbGwgdGhpcyB2YWx1ZSBh
cyBhIGZ1bmN0aW9uIHBhc3NpbmcgdGhlIHNwZWNpZmllZCAidGhpcyIgdmFsdWUgYW5kIGFyZ3Vt
ZW50cy4KKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50
czsKKy8vIENhbGwgdGhpcyB2YWx1ZSBhcyBhIGNvbnN0cnVjdG9yIHBhc3NpbmcgdGhlIHNwZWNp
ZmllZCBhcmd1bWVudHMuCistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50czsKKy8vIEFjY2VzcyB0aGUgcHJvcGVydHkgbmFtZWQgIm1ldGhvZCIg
ZnJvbSB0aGlzIHZhbHVlOyBjYWxsIHRoZSB2YWx1ZSByZXN1bHRpbmcKKy8vIGZyb20gdGhlIHBy
b3BlcnR5IGFjY2VzcyBhcyBhIGZ1bmN0aW9uLCBwYXNzaW5nIHRoaXMgdmFsdWUgYXMgdGhlICJ0
aGlzIgorLy8gdmFsdWUsIGFuZCB0aGUgc3BlY2lmaWVkIGFncnVtZW50cy4KKy0gKEpTVmFsdWUg
KilpbnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkg
Kilhcmd1bWVudHM7CisKKy8vIFRoZSBKU0NvbnRleHQgdGhhdCB0aGlzIHZhbHVlIG9yaWdpbmF0
ZXMgZnJvbS4KK0Bwcm9wZXJ0eShyZWFkb25seSwgd2VhaykgSlNDb250ZXh0ICpjb250ZXh0Owor
CitAZW5kCisKKy8vIE9iamVjdGl2ZS1DIG1ldGhvZHMgZXhwb3J0ZWQgdG8gSmF2YVNjcmlwdCBt
YXkgaGF2ZSBhcmd1bWVudCBhbmQvb3IgcmV0dXJuCisvLyB2YWx1ZXMgb2Ygc3RydWN0IHR5cGVz
IGlmIHRoZSBzdHJ1Y3QgaWYgY29udmVyc2lvbiB0byBhbmQgZnJvbSB0aGUgc3RydWN0CisvLyBp
cyBzdXBwb3J0ZWQgYnkgSlNWYWx1ZS4gU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW55IHR5cGVz
IHdoZXJlIEpTVmFsdWUKKy8vIGNvbnRhaW5zIGJvdGggYSBjbGFzcyBtZXRob2QgInZhbHVlV2l0
aDxUeXBlPjppbkNvbnRleHQ6IiwgYW5kIGFuZCBpbnN0YW5jZQorLy8gbWV0aG9kICJ0bzxUeXBl
PiIgLSB3aGVyZSB0aGUgc3RyaW5nICI8VHlwZT4iIGluIHRoZXNlIHNlbGVjdG9yIG5hbWVzIG1h
dGNoLAorLy8gd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZvcm1lciBiZWluZyBvZiB0
aGUgc2FtZSBzdHJ1Y3QgdHlwZSBhcyB0aGUKKy8vIHJldHVybiB0eXBlIG9mIHRoZSBsYXR0ZXIu
CisvLyBTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBzdHJ1Y3RzIG9mIHR5cGUgQ0dQb2ludCwgTlNS
YW5nZSwgQ0dSZWN0IGFuZCBDR1NpemUuCitAaW50ZXJmYWNlIEpTVmFsdWUoU3RydWN0U3VwcG9y
dCkKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBKYXZhU2NyaXB0
IG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMKKy8vIG5hbWVkICJ4IiBhbmQgInkiLCB3aXRo
IHZhbHVlcyBmcm9tIHRoZSBDR1BvaW50LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihD
R1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmlu
ZyBwcm9wZXJ0aWVzCisvLyBuYW1lZCAibG9jYXRpb24iIGFuZCAibGVuZ3RoIiwgd2l0aCB2YWx1
ZXMgZnJvbSB0aGUgTlNSYW5nZS4KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhSYW5nZTooTlNSYW5n
ZSlyYW5nZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CisvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIEphdmFTY3JpcHQgb2JqZWN0IGNvbnRhaW5pbmcgcHJv
cGVydGllcworLy8gbmFtZWQgIngiLCAieSIsICJ3aWR0aCIsIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgQ0dSZWN0LgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVj
dClyZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBuZXdseSBhbGxvY2F0ZWQgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzCisvLyBuYW1lZCAid2lkdGgiIGFuZCAiaGVpZ2h0Iiwgd2l0aCB2YWx1ZXMgZnJvbSB0
aGUgQ0dTaXplLgorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUg
Q0dQb2ludCBieSByZWFkaW5nIHByb3BlcnRpZXMgbmFtZWQgIngiIGFuZCAieSIgZnJvbQorLy8g
dGhpcyB2YWx1ZSwgYW5kIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoQ0dQ
b2ludCl0b1BvaW50OworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgTlNSYW5nZSBieSBhY2Nl
c3NpbmcgcHJvcGVydGllcyBuYW1lZCAibG9jYXRpb24iIGFuZAorLy8gImxlbmd0aCIgZnJvbSB0
aGlzIHZhbHVlIGNvbnZlcnRpbmcgdGhlIHJlc3VsdHMgdG8gZG91YmxlLgorLSAoTlNSYW5nZSl0
b1JhbmdlOworLy8gQ29udmVydCBhIHZhbHVlIHRvIHR5cGUgQ0dSZWN0IGJ5IHJlYWRpbmcgcHJv
cGVydGllcyBuYW1lZCAieCIsICJ5IiwgIndpZHRoIiwKKy8vIGFuZCAiaGVpZ2h0IiBmcm9tIHRo
aXMgdmFsdWUsIGFuZCBjb252ZXJ0aW5nIHRoZSByZXN1bHRzIHRvIGRvdWJsZS4KKy0gKENHUmVj
dCl0b1JlY3Q7CisvLyBDb252ZXJ0IGEgdmFsdWUgdG8gdHlwZSBDR1JhbmdlIGJ5IGFjY2Vzc2lu
ZyBwcm9wZXJ0aWVzIG5hbWVkICJ3aWR0aCIgYW5kCisvLyAiaGVpZ2h0IiBmcm9tIHRoaXMgdmFs
dWUgY29udmVydGluZyB0aGUgcmVzdWx0cyB0byBkb3VibGUuCistIChDR1NpemUpdG9TaXplOwor
CitAZW5kCisKKy8vIEluc3RhbmNlcyBvZiBKU1ZhbHVlIGltcGxlbWVudCB0aGUgZm9sbG93aW5n
IG1ldGhvZHMgaW4gb3JkZXIgdG8gZW5hYmxlCisvLyBzdXBwb3J0IGZvciBzdWJzY3JpcHQgYWNj
ZXNzIGJ5IGtleSBhbmQgaW5kZXgsIGZvciBleGFtcGxlOgorLy8KKy8vICAgIEpTVmFsdWUgKm9i
amVjdEEsICpvYmplY3RCOworLy8gICAgSlNWYWx1ZSAqdjEgPSBvYmplY3RbQCJYIl07IC8vIEdl
dCB2YWx1ZSBmb3IgcHJvcGVydHkgIlgiIGZyb20gJ29iamVjdCcuCisvLyAgICBKU1ZhbHVlICp2
MiA9IG9iamVjdFs0Ml07ICAgLy8gR2V0IHZhbHVlIGZvciBpbmRleCA0MiBmcm9tICdvYmplY3Qn
LgorLy8gICAgb2JqZWN0W0AiWSJdID0gdjE7ICAgICAgICAgIC8vIEFzc2lnbiAndjEnIHRvIHBy
b3BlcnR5ICJZIiBvZiAnb2JqZWN0Jy4KKy8vICAgIG9iamVjdFsxMDFdID0gdjI7ICAgICAgICAg
ICAvLyBBc3NpZ24gJ3YyJyB0byBpbmRleCAxMDEgb2YgJ29iamVjdCcuCisvLworLy8gQW4gb2Jq
ZWN0IGtleSBwYXNzZWQgYXMgYSBzdWJzY3JpcHQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBKYXZh
U2NpcHQgdmFsdWUsCisvLyBhbmQgdGhlbiB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgc3RyaW5n
IHVzZWQgYXMgYSBwcm9wZXJ0eSBuYW1lLgorQGludGVyZmFjZSBKU1ZhbHVlKFN1YnNjcmlwdFN1
cHBvcnQpCisKKy0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5Owor
LSAoSlNWYWx1ZSAqKW9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDooTlNVSW50ZWdlcilpbmRleDsK
Ky0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0Nv
cHlpbmc+KWtleTsKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgYXRJbmRleGVkU3Vic2Ny
aXB0OihOU1VJbnRlZ2VyKWluZGV4OworCitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhlc2Uga2V5cyBtYXkgYXNzaXN0IGluIGNyZWF0aW5n
IGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggdGhlCisvLyBkZWZpbmVQcm9wZXJ0
eSBtZXRob2Qgb24gSlNWYWx1ZS4KKy8vIFByb3BlcnR5IGRlc2NyaXB0b3JzIG11c3QgZml0IG9u
ZSBvZiB0aHJlZSBkZXNjcmlwdGlvbnM6CisvLyBEYXRhIERlc2NyaXB0b3I6CisvLyAgLSBBIGRl
c2NyaXB0b3IgY29udGFpbmluZyBvbmUgb3IgYm90aCBvZiB0aGUga2V5cyAidmFsdWUiIGFuZCAi
d3JpdGFibGUiLAorLy8gICAgYW5kIG9wdGlvbmFsbHkgY29udGFpbmluZyBvbmUgb3IgYm90aCBv
ZiB0aGUga2V5cyAiZW51bWVyYWJsZSIgYW5kCisvLyAgICAiY29uZmlndXJhYmxlIi4gQSBkYXRh
IGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVpdGhlciB0aGUgImdldCIgb3IKKy8vICAgICJz
ZXQiIGtleS4KKy8vICAgIEEgZGF0YSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBv
ciBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgYQorLy8gICAgZGF0YSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QgKHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkpLgorLy8gQWNj
ZXNzb3IgRGVzY3JpcHRvcjoKKy8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBi
b3RoIG9mIHRoZSBrZXlzICJnZXQiIGFuZCAic2V0IiwgYW5kCisvLyAgICBvcHRpb25hbGx5IGNv
bnRhaW5pbmcgb25lIG9yIGJvdGggb2YgdGhlIGtleXMgImVudW1lcmFibGUiIGFuZAorLy8gICAg
ImNvbmZpZ3VyYWJsZSIuIEFuIGFjY2Vzc29yIGRlc2NyaXB0b3IgbWF5IG5vdCBjb250YWluIGVp
dGhlciB0aGUgInZhbHVlIgorLy8gICAgb3IgIndyaXRhYmxlIiBrZXkuCisvLyAgICBBbiBhY2Nl
c3NvciBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBvciBtb2RpZnkgdGhlIGF0dHJp
YnV0ZXMgb2YKKy8vICAgIGFuIGFjY2Vzc29yIHByb3BlcnR5IG9uIGFuIG9iamVjdCAocmVwbGFj
aW5nIGFueSBleGlzdGluZyBkYXRhIHByb3BlcnR5KS4KKy8vIEdlbmVyaWMgRGVzY3JpcHRvcjoK
Ky8vICAtIEEgZGVzY3JpcHRvciBjb250YWluaW5nIG9uZSBvciBib3RoIG9mIHRoZSBrZXlzICJl
bnVtZXJhYmxlIiBhbmQKKy8vICAgICJjb25maWd1cmFibGUiLiBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBtYXkgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBrZXlzCisvLyAgICAidmFsdWUiLCAiIHdyaXRh
YmxlIiwgImdldCIsIG9yICJzZXQiLgorLy8gICAgQSBnZW5lcmljIGRlc2NyaXB0b3IgbWF5IGJl
IHVzZWQgdG8gbW9kaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nCisvLyAgICBkYXRh
IG9yIGFjY2Vzc29yIHByb3BlcnR5LCBvciB0byBjcmVhdGUgYSBuZXcgZGF0YSBwcm9wZXJ0eS4K
K0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvcldy
aXRhYmxlS2V5OworSlNfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlE
ZXNjcmlwdG9yRW51bWVyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTsKK0pTX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5OworSlNfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5OworSlNf
RVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0S2V5
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDEzODYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCiAKKyNpZmRlZiBf
X09CSkNfXworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjZW5kaWYKKwogLyog
SmF2YVNjcmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCiAKIC8qISBAdHlwZWRlZiBKU0NvbnRleHRH
cm91cFJlZiBBIGdyb3VwIHRoYXQgYXNzb2NpYXRlcyBKYXZhU2NyaXB0IGNvbnRleHRzIHdpdGgg
b25lIGFub3RoZXIuIENvbnRleHRzIGluIHRoZSBzYW1lIGdyb3VwIG1heSBzaGFyZSBhbmQgZXhj
aGFuZ2UgSmF2YVNjcmlwdCBvYmplY3RzLiAqLwpAQCAtMTM1LDQgKzEzOSw4IEBAIEpTX0VYUE9S
VCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXgKIH0KICNlbmRpZgogCisvKiBFbmFibGUg
dGhlIE9iamVjdGl2ZS1DIEFQSSBmb3IgcGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4g
Ki8KKyN1bmRlZiBKU19PQkpDX0FQSV9FTkFCTEVECisjZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJM
RUQgKGRlZmluZWQoX19PQkpDX18pICYmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9f
QVBQTEVfXykgJiYgKF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkgJiYg
IWRlZmluZWQoX19pMzg2X18pKQorCiAjZW5kaWYgLyogSlNCYXNlX2ggKi8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFj
ZSBKU0Jsb2NrQWRhcHRvciA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1
cmVGcm9tUHJvdG9jb2w6KGNvbnN0IGNoYXIgKilzaWduYXR1cmU7CistIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQg
d2l0aEV4Y2VwdGlvbjooSlNWYWx1ZVJlZiAqKWV4Y2VwdGlvbjsKKworQGVuZAorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFT
Y3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNh
c3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAi
SlNCbG9ja0FkYXB0b3IuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0
ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNpbXBvcnQgInd0Zi9P
d25QdHIuaCIKKworZXh0ZXJuICJDIiB7CitpZCBfX05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2Fw
dHVyZUJsb2NrKGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgdm9pZCAoXmhhbmRsZXIpKE5TSW52b2Nh
dGlvbiAqaW52KSk7Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5CbG9ja0FyZ3VtZW50KCk7CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0lu
dm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7CisKKyAg
ICBPd25QdHI8QmxvY2tBcmd1bWVudD4gbV9uZXh0OworfTsKKworQmxvY2tBcmd1bWVudDo6fkJs
b2NrQXJndW1lbnQoKQoreworfQorCitjbGFzcyBCbG9ja0FyZ3VtZW50Qm9vbGVhbiA6IHB1Ymxp
YyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRp
b24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIFtp
bnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEJsb2NrQXJndW1lbnROdW1lcmljIDogcHVibGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgor
ICAgIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAg
ICAgICAgVCB2YWx1ZTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpOworICAgIH0KK307CisKK2Ns
YXNzIEJsb2NrQXJndW1lbnRJZCA6IHB1YmxpYyBCbG9ja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAg
ICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAg
ICAgIGlkIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgIHJldHVybiBvYmplY3RUb1ZhbHVlKGNvbnRl
eHQsIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja0FyZ3VtZW50U3RydWN0IDogcHVi
bGljIEJsb2NrQXJndW1lbnQgeworcHVibGljOgorICAgIEJsb2NrQXJndW1lbnRTdHJ1Y3QoTlNJ
bnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUp
CisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikK
KyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07CisgICAgICAg
IE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1l
bnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGlnbm1lbnQ7
CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7
CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnRTdHJ1Y3QoKQorICAgIHsK
KyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUo
bV9hbGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIFtpbnZvY2F0aW9uIGdl
dEFyZ3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKworICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDptX2FsbG9jYXRpb24gYXRJbmRl
eDoyXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gc2V0QXJndW1lbnQ6JmNvbnRl
eHQgYXRJbmRleDozXTsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0
aFRhcmdldDpbSlNWYWx1ZSBjbGFzc11dOworCisgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAg
ICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAg
ICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTlNJbnZvY2F0aW9uKiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOworICAgIGNoYXIqIG1f
YnVmZmVyOworICAgIGNoYXIqIG1fYWxsb2NhdGlvbjsKK307CisKK2NsYXNzIEJsb2NrQXJndW1l
bnRUeXBlRGVsZWdhdGUgeworcHVibGljOgorICAgIHR5cGVkZWYgQmxvY2tBcmd1bWVudCogUmVz
dWx0VHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5
cGUgdHlwZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50
TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9j
a0FyZ3VtZW50TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBl
Qm9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnRCb29sZWFuOwor
ICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlT2ZDbGFz
cyhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEJs
b2NrQXJndW1lbnRJZDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2so
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJlZ2lu
LCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2lu
LCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVUb1R5
cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3Vt
ZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0K
K307CisKK2NsYXNzIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9ja1Jl
c3VsdCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9u
KiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopID0gMDsKK307CisKK2NsYXNz
IEJsb2NrUmVzdWx0Vm9pZCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiop
CisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja1Jl
c3VsdEludGVnZXIgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAgIHZvaWQgc2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9
IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgcmVzdWx0LCBleGNlcHRpb24pKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0UmV0
dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgQmxvY2tSZXN1bHREb3VibGUgOiBwdWJsaWMgQmxvY2tSZXN1bHQgeworcHVibGljOgorICAg
IHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAg
VCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCByZXN1bHQsIGV4Y2VwdGlvbik7CisgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZh
bHVlOiZ2YWx1ZV07CisgICAgfQorfTsKKworY2xhc3MgQmxvY2tSZXN1bHRCb29sZWFuIDogcHVi
bGljIEJsb2NrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVS
ZWYqKQorICAgIHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0KTsKKyAgICAgICAgW2ludm9jYXRpb24g
c2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKKyAgICB9Cit9OworCitjbGFzcyBCbG9ja1Jlc3VsdFN0
cnVjdCA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgQmxvY2tSZXN1bHRTdHJ1
Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2Rl
ZFR5cGUpCisgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2Nh
dGlvbikKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07Cisg
ICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OworICAgICAgICBOU0dldFNpemVBbmRB
bGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKKyAgICAgICAgLS1hbGln
bm1lbnQ7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdu
bWVudCk7CisgICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdu
bWVudCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkJsb2NrUmVzdWx0U3RydWN0KCkKKyAg
ICB7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBm
cmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlv
biogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNW
YWx1ZVJlZiopCisgICAgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVl
V2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZvY2F0
aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgfQorCitwcml2YXRlOgorICAgIE5TSW52
b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAg
ICBjaGFyKiBtX2FsbG9jYXRpb247Cit9OworCitAaW1wbGVtZW50YXRpb24gSlNCbG9ja0FkYXB0
b3IgeworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhPZmZzZXRz
OworICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5nPiBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRz
OworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gbV9yZXN1bHQ7CisgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IG1fYXJndW1lbnRzOworICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnQ7Cit9CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byBhZGQgb2Zmc2V0IGluZm9ybWF0aW9uIGJhY2sgaW50byBhIGJs
b2NrIHNpZ25hdHVyZS4KK3N0YXRpYyBOU1N0cmluZyogYnVpbGRCbG9ja1NpZ25hdHVyZShOU1N0
cmluZyogcHJlZml4LCBjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kLCBOU1VJbnRl
Z2VyJiBvZmZzZXQsIE5TU3RyaW5nKiBwb3N0Zml4KQoreworICAgIFN0cmluZ1JhbmdlIGNvcHko
YmVnaW4sIGVuZCk7CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJUAlcyVsdSVAIiwgcHJlZml4LCBjb3B5LmdldCgpLCBvZmZzZXQsIHBvc3RmaXhd
OworICAgIE5TVUludGVnZXIgc2l6ZTsKKyAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoY29weSwg
JnNpemUsIDApOworICAgIGlmIChzaXplIDwgNCkKKyAgICAgICAgc2l6ZSA9IDQ7CisgICAgb2Zm
c2V0ICs9IHNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoaWQpaW5pdFdpdGhCbG9j
a1NpZ25hdHVyZUZyb21Qcm90b2NvbDooY29uc3QgY2hhciopZW5jb2RlZFR5cGUKK3sKKyAgICBb
c3VwZXIgaW5pdF07CisKKyAgICBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRzID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOmVuY29kZWRUeXBlXTsKKyAgICBtX2FyZ3VtZW50Q291bnQg
PSAwOworCisgICAgLy8gQ3VycmVudGx5IG9ubHkgYWRhcHRpbmcgSmF2YVNjcmlwdCBmdW5jdGlv
bnMgdG8gYmxvY2tzIHJldHVybmluZyB2b2lkLgorICAgIGNvbnN0IGNoYXIqIHJlc3VsdFR5cGVC
ZWdpbiA9IGVuY29kZWRUeXBlOworICAgIGlmICgqZW5jb2RlZFR5cGUrKyAhPSAndicpCisgICAg
ICAgIHJldHVybiBzZWxmOworICAgIE93blB0cjxCbG9ja1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRQ
dHIobmV3IEJsb2NrUmVzdWx0Vm9pZCk7CisgICAgY29uc3QgY2hhciogcmVzdWx0VHlwZUVuZCA9
IGVuY29kZWRUeXBlOworCisgICAgaWYgKGVuY29kZWRUeXBlWzBdICE9ICdAJyB8fCBlbmNvZGVk
VHlwZVsxXSAhPSAnPycpIHsKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgfQorICAgIGVuY29k
ZWRUeXBlICs9IDI7CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gYSBibG9jayBpcyB0
aGUgYmxvY2sgaXRzZWxmLgorICAgIE5TU3RyaW5nKiBzaWduYXR1cmUgPSBAIkA/MCI7CisgICAg
TlNVSW50ZWdlciBvZmZzZXQgPSBzaXplb2Yodm9pZCopOworCisgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IGFyZ3VtZW50cyA9IDA7CisgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+KiBuZXh0QXJn
dW1lbnQgPSAmYXJndW1lbnRzOworICAgIHdoaWxlICgqZW5jb2RlZFR5cGUpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogYmVnaW4gPSBlbmNvZGVkVHlwZTsKKyAgICAgICAgT3duUHRyPEJsb2NrQXJn
dW1lbnQ+IGFyZ3VtZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxCbG9ja0FyZ3VtZW50VHlw
ZURlbGVnYXRlPihlbmNvZGVkVHlwZSkpOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGY7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGVuY29kZWRUeXBl
OworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgdHlwZSAmIHN0YWNrIG9mZnNldCBvZiB0aGlzIGFy
Z3VtZW50IHRvIHRoZSBzaWduYXR1cmUgc3RyaW5nLgorICAgICAgICBzaWduYXR1cmUgPSBidWls
ZEJsb2NrU2lnbmF0dXJlKHNpZ25hdHVyZSwgYmVnaW4sIGVuZCwgb2Zmc2V0LCBAIiIpOworCisg
ICAgICAgICpuZXh0QXJndW1lbnQgPSBhcmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRB
cmd1bWVudCA9ICYoKm5leHRBcmd1bWVudCktPm1fbmV4dDsKKyAgICAgICAgKyttX2FyZ3VtZW50
Q291bnQ7CisgICAgfQorCisgICAgLy8gUHJlZml4IHRoZSBzaWduYXR1cmUgd2l0aCB0aGUgcmV0
dXJuIHR5cGUgJiB0b3RhbCBzdGFja2ZyYW1lIHNpemUuCisgICAgLy8gKHRoaXMgY2FsbCB3aWxs
IGFsc28gYWRkIHRoZSByZXR1cm4gdHlwZSBzaXplIHRvIHRoZSBvZmZzZXQsCisgICAgLy8gd2hp
Y2ggaXMgYSBub25zZXNuZSwgYnV0IGhhcm1sZXNzIHNpbmNlIHRoaXMgaXMgdGhlIGxhc3QgdXNl
KS4KKyAgICBzaWduYXR1cmUgPSBidWlsZEJsb2NrU2lnbmF0dXJlKEAiIiwgcmVzdWx0VHlwZUJl
Z2luLCByZXN1bHRUeXBlRW5kLCBvZmZzZXQsIHNpZ25hdHVyZSk7CisKKyAgICBtX3NpZ25hdHVy
ZVdpdGhPZmZzZXRzID0gc2lnbmF0dXJlOworICAgIG1fcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2Uo
KTsKKyAgICBtX2FyZ3VtZW50cyA9IGFyZ3VtZW50cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLy8gVGhlIEpTQmxvY2tBZGFwdG9yIHN0b3JlcyB0aGUgdHlwZSBzdHJpbmcg
dGFrZW4gZnJvbSB0aGUgcHJvdG9jb2wuIFRoaXMgc3RyaW5nCisvLyBkb2VzIG5vdCBjb250YWlu
IGludm9jYXRpb24gbGF5b3V0IGluZm9ybWF0aW9uLiBUaGUgc2lnbmF0dXJlIGZyb20gdGhlIGJs
b2NrCisvLyBkb2VzIGNvbnRhaW4gdGhlIHN0YWNrZnJhbWUgb2Zmc2V0cy4gU2tpcCB0aGVzZSB3
aGVuIGNvbXBhcmluZyBzdHJpbmdzLgorLSAoYm9vbClibG9ja01hdGNoZXNTaWduYXR1cmU6KGlk
KWJsb2NrCit7CisgICAgaWYgKCFfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHdpdGhvdXRPZmZzZXRzPSBbbV9zaWdu
YXR1cmVXaXRob3V0T2Zmc2V0cyBVVEY4U3RyaW5nXTsKKyAgICBjb25zdCBjaGFyKiBzaWduYXR1
cmUgPSBfQmxvY2tfc2lnbmF0dXJlKGJsb2NrKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIHdoaWxlIChpc2RpZ2l0KCp3aXRob3V0T2Zmc2V0cykpCisgICAgICAgICAgICArK3dpdGhv
dXRPZmZzZXRzOworICAgICAgICB3aGlsZSAoaXNkaWdpdCgqc2lnbmF0dXJlKSkKKyAgICAgICAg
ICAgICsrc2lnbmF0dXJlOworICAgICAgICAKKyAgICAgICAgaWYgKCp3aXRob3V0T2Zmc2V0cyAh
PSAqc2lnbmF0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoISp3
aXRob3V0T2Zmc2V0cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICArK3dpdGhv
dXRPZmZzZXRzOworICAgICAgICArK3NpZ25hdHVyZTsKKyAgICB9Cit9CisKKy0gKGlkKWJsb2Nr
RnJvbVZhbHVlOihKU1ZhbHVlUmVmKWFyZ3VtZW50IGluQ29udGV4dDooSlNDb250ZXh0Kiljb250
ZXh0IHdpdGhFeGNlcHRpb246KEpTVmFsdWVSZWYqKWV4Y2VwdGlvbgoreworICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpOworCisgICAg
Ly8gQ2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkLgorICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQo
Y3R4LCBhcmd1bWVudCkgfHwgSlNWYWx1ZUlzTnVsbChjdHgsIGFyZ3VtZW50KSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gMDsKKyAgICBpZiAoaWQg
b2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KSkgeworICAgICAgICAv
LyBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgYW4gT2JqZWN0aXZlLUMgYmxvY2suCisgICAgICAg
IGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNzKCldKSB7CisgICAgICAg
ICAgICBpZiAoW3NlbGYgYmxvY2tNYXRjaGVzU2lnbmF0dXJlOm9iamVjdF0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9zaWduYXR1
cmVXaXRoT2Zmc2V0cyAmJiBKU1ZhbHVlSXNPYmplY3QoY3R4LCBhcmd1bWVudCkpIHsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbgorICAg
ICAgICAvLyAoYW5kIHRoYXQgd2VyZSBhYmxlIHRvIGNyZWF0ZSBhIGZvcndhcmRpbmcgYmxvY2sg
Zm9yIHRoaXMgc2lnbmF0dXJlKS4KKyAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGN0eCwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChKU09iamVj
dElzRnVuY3Rpb24oY3R4LCBvYmplY3QpKQorICAgICAgICAgICAgZnVuY3Rpb24gPSBvYmplY3Q7
CisgICAgfQorCisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBKU0M6OkFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0odG9KUyhjdHgpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6
Y3JlYXRlVHlwZUVycm9yKHRvSlMoY3R4KSwgIkludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgZm9y
IE9iamVjdGl2ZS1DIGJsb2NrIikpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IC8vIENhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICBKU0Jsb2NrQWRhcHRvciogYWRhcHRvciA9IHNl
bGY7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5jdGlv
biBpbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NQorICAgIC8vIEN1cnJlbnRseSBvbmx5IHN1cHBv
cnRpbmcgdm9pZCBmdW5jdGlvbnMuCisgICAgcmV0dXJuIF9fTlNNYWtlU3BlY2lhbEZvcndhcmRp
bmdDYXB0dXJlQmxvY2soW21fc2lnbmF0dXJlV2l0aE9mZnNldHMgVVRGOFN0cmluZ10sIF4oTlNJ
bnZvY2F0aW9uICppbnZvY2F0aW9uKXsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTQKKyAgICAgICAgLy8gUmF0aGVyIHRoYW4g
cmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRleHQgYmUgcmV0YWluZWQsIGl0IHdvdWxkIHByb2JhYmx5
IGJlIG1vcmUKKyAgICAgICAgLy8gYXBwcm9wcmlhdGUgdG8gdXNlIGEgbmV3IEpTQ29udGV4dCBp
bnN0YW5jZSAoY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeSkuCisgICAgICAgIC8vIEl0IHdvdWxk
IGJlIG5pY2UgaWYgd2UgY291bGQgdGhyb3cgYSBKUyBleGNlcHRpb24gaGVyZSwgYnV0IHdpdGhv
dXQgYSBjb250ZXh0IHdlIGhhdmUKKyAgICAgICAgLy8gbm90aGluZyB0byB3b3JrIHdpdGguCisg
ICAgICAgIEpTQ29udGV4dCogY29udGV4dCA9IHZhbHVlLmNvbnRleHQ7CisgICAgICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGN0eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAgSlNWYWx1
ZVJlZiBhcmdzW2FkYXB0b3ItPm1fYXJndW1lbnRDb3VudF07CisKKyAgICAgICAgc2l6ZV90IGFy
Z3VtZW50TnVtYmVyID0gMDsKKyAgICAgICAgQmxvY2tBcmd1bWVudCogYXJndW1lbnRzID0gYWRh
cHRvci0+bV9hcmd1bWVudHMuZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tBcmd1bWVudCogYXJn
dW1lbnQgPSBhcmd1bWVudHM7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50LT5tX25leHQu
Z2V0KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAg
ICAgIGFyZ3NbYXJndW1lbnROdW1iZXJdID0gYXJndW1lbnQtPmdldChpbnZvY2F0aW9uLCBhcmd1
bWVudE51bWJlciArIDEsIGNvbnRleHQsICZleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgKythcmd1bWVudE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50TnVtYmVyOworCisgICAgICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjdHgsIEpT
VmFsdWVUb09iamVjdChjdHgsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApLCAwLCBhcmd1
bWVudENvdW50LCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDEw
ICs1MDgsMTAgQEAgdm9pZCogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRQcml2YQogdGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbmhl
cml0cyhKU0NsYXNzUmVmIGMpIGNvbnN0CiB7Ci0gICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3Mg
PSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpCisg
ICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNz
ID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKGpzQ2xhc3MgPT0gYykKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisKKyNpZiBKU19P
QkpDX0FQSV9FTkFCTEVECisKK0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworCisv
LyBBbiBpbnN0YW5jZSBvZiBKU0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0
aW9uIGVudmlyb25tZW50LCBhbGwKKy8vIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNl
IHdpdGhpbiBhIGNvbnRleHQuCisvLyBKU0NvbnRleHQgaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0
aGUgbGlmZS1jeWNsZSBvZiBvYmplY3RzIHdpdGhpbiB0aGUKKy8vIEphdmFTY3JpcHQgdmlydHVh
bCBtYWNoaW5lLiBFdmVyeSBpbnN0YW5jZSBvZiBKU1ZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCBh
CisvLyBKU0NvbnRleHQgdmlhIGEgd2VhayByZWZlcmVuY2UuIFRoZSBKU1ZhbHVlIHdpbGwga2Vl
cCB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBpdAorLy8gcmVmZXJlbmNlcyBhbGl2ZSBzbyBsb25nIGFz
IHRoZSBKU0NvbnRleHQgaXMgYWxzbyByZXRhaW5lZC4gV2hlbiBhbiBpbnN0YW5jZQorLy8gb2Yg
SlNDb250ZXh0IGlzIGRlYWxsb2NhdGVkIGFuZCB0aGUgd2VhayByZWZlcmVuY2VzIHRvIGl0IGFy
ZSBjbGVhcmVkIHRoZQorLy8gSlNWYWx1ZXMgdGhhdCBoYWQgYmVlbiBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBjb250ZXh0IHdpbGwgYmUgaW52YWxpZGF0ZWQsIGFuZAorLy8gd2lsbCBjZWFzZSB0byBr
ZWVwIHRoZSB2YWx1ZXMgd2l0aGluIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBhbGl2ZS4KK05TX0NM
QVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QK
KworLy8gQ3JlYXRlIGEgSlNDb250ZXh0LgorLSAoaWQpaW5pdDsKKy8vIENyZWF0ZSBhIEpTQ29u
dGV4dCBpbiB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKy0gKGlkKWluaXRXaXRoVmly
dHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworLy8gRXZh
bHVhdGUgYSBzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlLgorLSAoSlNWYWx1ZSAqKWV2YWx1YXRl
U2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdDsKKworLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRo
ZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorLy8g
SW5zdGFuY2VzIG9mIEpTQ29udGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVy
biBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFdpbmRvd1Byb3h5IG9iamVjdC4KKy0gKEpTVmFsdWUg
KilnbG9iYWxPYmplY3Q7CisKKy8vIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRo
aW4gYW4gT2JqZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kIGludm9rZWQKKy8vIGFzIGEgY2FsbGJh
Y2sgZnJvbSBKYXZhU2NyaXB0IHRvIHJldHJpZXZlIHRoZSBjYWxsYmFjaydzIGNvbnRleHQuIE91
dHNpZGUgb2YKKy8vIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRoaXMgbWV0aG9kIHdpbGwg
cmV0dXJuIG5pbC4KKysgKEpTQ29udGV4dCAqKWN1cnJlbnRDb250ZXh0OworLy8gVGhpcyBtZXRo
b2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBPYmplY3RpdmUtQyBibG9jayBvciBtZXRo
b2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9tIEphdmFTY3JpcHQgdG8gcmV0cmlldmUg
dGhlIGNhbGxiYWNrJ3MgdGhpcyB2YWx1ZS4gT3V0c2lkZQorLy8gb2YgYSBjYWxsYmFjayBmcm9t
IEphdmFTY3JpcHQgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgorKyAoSlNWYWx1ZSAqKWN1
cnJlbnRUaGlzOworLy8gVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBP
YmplY3RpdmUtQyBibG9jayBvciBtZXRob2QgaW52b2tlZAorLy8gYXMgYSBjYWxsYmFjayBmcm9t
IEphdmFTY3JpcHQgdG8gcmV0cmlldmUgdGhlIGNhbGxiYWNrJ3MgYXJndW1lbnRzLCBvYmplY3Rz
CisvLyBpbiB0aGUgcmV0dXJuZWQgYXJyYXkgYXJlIGluc3RhbmNlcyBvZiBKU1ZhbHVlLiBPdXRz
aWRlIG9mIGEgY2FsbGJhY2sgZnJvbQorLy8gSmF2YVNjcmlwdCB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiBuaWwuCisrIChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50czsKKworLy8gVGhlICJleGNl
cHRpb24iIHByb3BlcnR5IG1heSBiZSB1c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0byBKYXZh
U2NyaXB0LgorLy8gQmVmb3JlIGEgY2FsbGJhY2sgaXMgbWFkZSBmcm9tIEphdmFTY3JpcHQgdG8g
YW4gT2JqZWN0aXZlLUMgYmxvY2sgb3IgbWV0aG9kLAorLy8gdGhlIHByaW9yIHZhbHVlIG9mIHRo
ZSBleGNlcHRpb24gcHJvcGVydHkgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIHRoZSBwcm9wZXJ0eQor
Ly8gd2lsbCBiZSBzZXQgdG8gbmlsLiBBZnRlciB0aGUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCB0
aGUgbmV3IHZhbHVlIG9mIHRoZQorLy8gZXhjZXB0aW9uIHByb3BlcnR5IHdpbGwgYmUgcmVhZCwg
YW5kIHByaW9yIHZhbHVlIHJlc3RvcmVkLiBJZiB0aGUgbmV3IHZhbHVlCisvLyBvZiBleGNlcHRp
b24gaXMgbm90IG5pbCwgdGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIHRoYXQgdmFsdWUgYmVp
bmcgdGhyb3duLgorLy8gVGhpcyBwcm9wZXJ0eSBtYXkgYWxzbyBiZSB1c2VkIHRvIGNoZWNrIGZv
ciB1bmNhdWdodCBleGNlcHRpb25zIGFyaXNpbmcgZnJvbQorLy8gQVBJIGZ1bmN0aW9uIGNhbGxz
IChzaW5jZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgImV4Y2VwdGlvbkhhbmRsZXIiIGlzIHRv
CisvLyBhc3NpZ24gYW50IHVuY2F1Z2h0IGV4Y2VwdGlvbiB0byB0aGlzIHByb3BlcnR5KS4KKy8v
IElmIGEgSlNWYWx1ZSBvcmdpbmF0aW5nIGZyb20gYSBkaWZmZXJlbnQgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGlzIHRoaXMgY29udGV4dAorLy8gaXMgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSwgYW4g
T2JqZWN0aXZlLUMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorQHByb3BlcnR5KHJldGFpbikg
SlNWYWx1ZSAqZXhjZXB0aW9uOworCisvLyBJZiBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uIHJl
c3VsdHMgaW4gYW4gdW5jYXVnaHQgSmF2YVNjcmlwdCBleGNlcHRpb24sIHRoZQorLy8gImV4Y2Vw
dGlvbkhhbmRsZXIiIGJsb2NrIHdpbGwgYmUgaW52b2tlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gZm9yIHRoZQorLy8gZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzdG9yZSB0aGUgZXhjZXB0
aW9uIHRvIHRoZSBleGNlcHRpb24gcHJvcGVydHkgb24KKy8vIGNvbnRleHQuIEFzIGEgY29uc2Vx
dWVuY2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucwor
Ly8gb2NjdXJpbmcgd2l0aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhy
b3duIHVwb24gcmV0dXJuLgorLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3Vs
dCBpbiBhbGwgdW5jYXVnaHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQorLy8gdGhlIEFQSSBiZWlu
ZyBzaWxlbnRseSBjb25zdW1lZC4KK0Bwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5k
bGVyKShKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CisKKy8vIEFsbCBp
bnN0YW5jZXMgb2YgSlNDb250ZXh0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgSlNWaXJ0
dWFsTWFjaGluZS4gVGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUgcHJvdmlkZXMgYW4gIm9iamVjdCBz
cGFjZSIgb3Igc2V0IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuCitAcHJvcGVydHkocmVhZG9ubHks
IHJldGFpbikgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmU7CisKK0BlbmQKKworLy8g
SW5zdGFuY2VzIG9mIEpTQ29udGV4dCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGlu
IG9yZGVyIHRvIGVuYWJsZQorLy8gc3VwcG9ydCBmb3Igc3Vic2NyaXB0IGFjY2VzcyBieSBrZXkg
YW5kIGluZGV4LCBmb3IgZXhhbXBsZToKKy8vCisvLyAgICBKU0NvbnRleHQgKmNvbnRleHQ7Cisv
LyAgICBKU1ZhbHVlICp2ID0gY29udGV4dFtAIlgiXTsgLy8gR2V0IHZhbHVlIGZvciAiWCIgZnJv
bSB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vICAgIGNvbnRleHRbQCJZIl0gPSB2OyAgICAgICAgICAv
LyBBc3NpZ24gJ3YnIHRvICJZIiBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKy8vCisvLyBBbiBvYmpl
Y3Qga2V5IHBhc3NlZCBhcyBhIHN1YnNjcmlwdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEphdmFT
Y2lwdCB2YWx1ZSwKKy8vIGFuZCB0aGVuIHRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcg
dXNlZCB0byByZXNvbHZlIGEgcHJvcGVydHkgb2YgdGhlCisvLyBnbG9iYWwgb2JqZWN0LgorQGlu
dGVyZmFjZSBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVj
dEZvcktleWVkU3Vic2NyaXB0OihpZClrZXk7CistICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0
IGZvcktleWVkU3Vic2NyaXB0OihpZCA8TlNDb3B5aW5nPilrZXk7CisKK0BlbmQKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0dsb2JhbE9iamVjdC5oIgorI2lt
cG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUu
aCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0IDx3dGYvSGFzaFNldC5o
PgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCit0eXBlZGVmIFdURjo6SGFzaE1hcDxKU1Zh
bHVlUmVmLCBzaXplX3Q+IFByb3RlY3RNYXA7CisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQg
eworICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNHbG9iYWxD
b250ZXh0UmVmIG1fY29udGV4dDsKKyAgICBKU1dyYXBwZXJNYXAgKm1fd3JhcHBlck1hcDsKKyAg
ICBQcm90ZWN0TWFwIG1fcHJvdGVjdGVkOworfQorCitAc3ludGhlc2l6ZSBleGNlcHRpb247CitA
c3ludGhlc2l6ZSBleGNlcHRpb25IYW5kbGVyOworCistIChpZClpbml0Cit7CisgICAgcmV0dXJu
IFtzZWxmIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdXTsKK30KKworLSAoaWQpaW5pdFdpdGhWaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lCit7CisgICAgW3N1cGVyIGluaXRdOwor
CisgICAgbV92aXJ0dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRhaW5dOworICAgIG1f
Y29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3JvdXBGcm9tVmlydHVh
bE1hY2hpbmUodmlydHVhbE1hY2hpbmUpLCAwKTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3Jh
cHBlck1hcCBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRp
b24gPSBuaWw7CisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQqIGNvbnRl
eHQsIEpTVmFsdWUgKmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9u
ID0gZXhjZXB0aW9uVmFsdWU7CisgICAgfTsKKworICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5tX2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQor
CistIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0Cit7CisgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IDA7CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0SlMg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpc2NyaXB0KTsKKyAgICBK
U1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUywg
MCwgMCwgMCwgJmV4Y2VwdGlvblZhbHVlKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0SlMp
OworCisgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVG
cm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworfQorCistIChKU1ZhbHVl
ICopZ2xvYmFsT2JqZWN0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpT
Q29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQpIGluQ29udGV4dDpzZWxmXTsKK30KKwor
KyAoSlNDb250ZXh0ICopY3VycmVudENvbnRleHQKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJl
YWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0YSAqZW50cnkgPSAoQ2Fs
bGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgcmV0dXJuIGVudHJ5ID8gZW50
cnktPmNvbnRleHQgOiBuaWw7Cit9CisKKysgKEpTVmFsdWUgKiljdXJyZW50VGhpcworeworICAg
IFdURlRocmVhZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CisgICAgQ2FsbGJh
Y2tEYXRhICplbnRyeSA9IChDYWxsYmFja0RhdGEgKil0aHJlYWREYXRhLm1fYXBpRGF0YTsKKwor
ICAgIGlmICghZW50cnktPmN1cnJlbnRUaGlzKQorICAgICAgICBlbnRyeS0+Y3VycmVudFRoaXMg
PSBbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6ZW50cnktPnRoaXNWYWx1ZSBpbkNvbnRl
eHQ6W0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1dOworCisgICAgcmV0dXJuIGVudHJ5LT5jdXJy
ZW50VGhpczsKK30KKworKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1bWVudHMKK3sKKyAgICBXVEZU
aHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOworICAgIENhbGxiYWNrRGF0
YSAqZW50cnkgPSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisKKyAgICBp
ZiAoIWVudHJ5LT5jdXJyZW50QXJndW1lbnRzKSB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgICAgICBzaXplX3QgY291bnQgPSBl
bnRyeS0+YXJndW1lbnRDb3VudDsKKyAgICAgICAgSlNWYWx1ZSAqIGFyZ3NbY291bnRdOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0wOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3Nb
aV0gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTplbnRyeS0+YXJndW1lbnRzW2ldIGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICAgICAgZW50cnktPmN1cnJlbnRBcmd1bWVudHMgPSBbW05TQXJyYXkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0czphcmdzIGNvdW50OmNvdW50XTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZW50cnktPmN1cnJlbnRBcmd1bWVudHM7Cit9CisKKy0gKEpTVmlydHVhbE1hY2hpbmUq
KXZpcnR1YWxNYWNoaW5lCit7CisgICAgcmV0dXJuIG1fdmlydHVhbE1hY2hpbmU7Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQorCistIChK
U1ZhbHVlICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkKWtleQoreworICAgIHJldHVybiBb
c2VsZiBnbG9iYWxPYmplY3RdW2tleV07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmpl
Y3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIFtzZWxmIGds
b2JhbE9iamVjdF1ba2V5XSA9IG9iamVjdDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
SlNDb250ZXh0KEludGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFs
Q29udGV4dChKU0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fY29u
dGV4dDsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm1fYXBpRGF0YSA9IDA7CisKKyAgICBQcm90ZWN0TWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdGVkLmJlZ2luKCk7CisgICAgUHJvdGVjdE1hcDo6aXRl
cmF0b3IgZW5kID0gbV9wcm90ZWN0ZWQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVu
ZDsgKytpdGVyYXRvcikKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIGl0ZXJh
dG9yLT5rZXkpOworCisgICAgW21fd3JhcHBlck1hcCByZWxlYXNlXTsKKyAgICBKU0dsb2JhbENv
bnRleHRSZWxlYXNlKG1fY29udGV4dCk7CisgICAgW21fdmlydHVhbE1hY2hpbmUgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNW
YWx1ZVJlZilleGNlcHRpb25WYWx1ZQoreworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxm
LCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2VsZl0p
OworfQorCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVm
KWV4Y2VwdGlvblZhbHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZh
bHVlXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OnNl
bGZdOworfQorCistIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4
Y2VwdGlvblZhbHVlCit7CisgICAgW3NlbGYgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVl
XTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihD
YWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1
ZSBhcmd1bWVudENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpT
VmFsdWVSZWYgKilhcmd1bWVudHMKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0g
d3RmVGhyZWFkRGF0YSgpOworICAgIFtzZWxmIHJldGFpbl07CisgICAgQ2FsbGJhY2tEYXRhICpw
cmV2U3RhY2sgPSAoQ2FsbGJhY2tEYXRhICopdGhyZWFkRGF0YS5tX2FwaURhdGE7CisgICAgKmNh
bGxiYWNrRGF0YSA9IChDYWxsYmFja0RhdGEpeyBwcmV2U3RhY2ssIHNlbGYsIFtzZWxmLmV4Y2Vw
dGlvbiByZXRhaW5dLCB0aGlzVmFsdWUsIG5pbCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBu
aWwgfTsKKyAgICB0aHJlYWREYXRhLm1fYXBpRGF0YSA9IGNhbGxiYWNrRGF0YTsKKyAgICBzZWxm
LmV4Y2VwdGlvbiA9IG5pbDsKK30KKworLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxs
YmFja0RhdGEgKiljYWxsYmFja0RhdGEKK3sKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRh
ID0gd3RmVGhyZWFkRGF0YSgpOworICAgIHNlbGYuZXhjZXB0aW9uID0gY2FsbGJhY2tEYXRhLT5w
cmVzZXJ2ZWRFeGNlcHRpb247CisgICAgW2NhbGxiYWNrRGF0YS0+cHJlc2VydmVkRXhjZXB0aW9u
IHJlbGVhc2VdOworICAgIFtjYWxsYmFja0RhdGEtPmN1cnJlbnRUaGlzIHJlbGVhc2VdOworICAg
IFtjYWxsYmFja0RhdGEtPmN1cnJlbnRBcmd1bWVudHMgcmVsZWFzZV07CisgICAgdGhyZWFkRGF0
YS5tX2FwaURhdGEgPSBjYWxsYmFja0RhdGEtPm5leHQ7CisgICAgW3NlbGYgcmVsZWFzZV07Cit9
CisKKy0gKHZvaWQpcHJvdGVjdDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIC8vIExvY2sgYWNj
ZXNzIHRvIG1fcHJvdGVjdGVkCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29u
dGV4dCkpOworCisgICAgUHJvdGVjdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcHJvdGVjdGVk
LmFkZCh2YWx1ZSwgMSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBKU1Zh
bHVlUHJvdGVjdChtX2NvbnRleHQsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgICsrcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworLSAodm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFs
dWUKK3sKKyAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RlZAorICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKKworICAgIFByb3RlY3RNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9wcm90ZWN0ZWQuZmluZCh2YWx1ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52
YWx1ZSA9PSAxKSB7CisgICAgICAgIG1fcHJvdGVjdGVkLnJlbW92ZSh2YWx1ZSk7CisgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAg
IC0taXRlcmF0b3ItPnZhbHVlOworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDoo
aWQpb2JqZWN0Cit7CisgICAgLy8gTG9jayBhY2Nlc3MgdG8gbV93cmFwcGVyTWFwCisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh0b0pTKG1fY29udGV4dCkpOworICAgIHJldHVybiBbbV93cmFw
cGVyTWFwIHdyYXBwZXJGb3JPYmplY3Q6b2JqZWN0XTsKK30KKworQGVuZAorCitXZWFrQ29udGV4
dFJlZjo6V2Vha0NvbnRleHRSZWYoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfaW5p
dFdlYWsoJm1fd2Vha0NvbnRleHQsIGNvbnRleHQpOworfQorCitXZWFrQ29udGV4dFJlZjo6fldl
YWtDb250ZXh0UmVmKCkKK3sKKyAgICBvYmpjX2Rlc3Ryb3lXZWFrKCZtX3dlYWtDb250ZXh0KTsK
K30KKworSlNDb250ZXh0ICogV2Vha0NvbnRleHRSZWY6OmdldCgpCit7CisgICAgcmV0dXJuIG9i
amNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQpOworfQorCit2b2lkIFdlYWtDb250ZXh0UmVmOjpz
ZXQoSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIG9iamNfc3RvcmVXZWFrKCZtX3dlYWtDb250
ZXh0LCBjb250ZXh0KTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU19PQkpDX0FQ
SV9FTkFCTEVECisKKyNpbXBvcnQgIkpTQ29udGV4dC5oIgorCitzdHJ1Y3QgQ2FsbGJhY2tEYXRh
IHsKKyAgICBDYWxsYmFja0RhdGEgKm5leHQ7CisgICAgSlNDb250ZXh0ICpjb250ZXh0OworICAg
IEpTVmFsdWUgKnByZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHRoaXNWYWx1ZTsK
KyAgICBKU1ZhbHVlICpjdXJyZW50VGhpczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudDsKKyAg
ICBjb25zdCBKU1ZhbHVlUmVmICphcmd1bWVudHM7CisgICAgTlNBcnJheSAqY3VycmVudEFyZ3Vt
ZW50czsKK307CisKK2NsYXNzIFdlYWtDb250ZXh0UmVmIHsKK3B1YmxpYzoKKyAgICBXZWFrQ29u
dGV4dFJlZihKU0NvbnRleHQqID0gbmlsKTsKKyAgICB+V2Vha0NvbnRleHRSZWYoKTsKKworICAg
IEpTQ29udGV4dCAqIGdldCgpOworICAgIHZvaWQgc2V0KEpTQ29udGV4dCopOworCitwcml2YXRl
OgorICAgIEpTQ29udGV4dCAqbV93ZWFrQ29udGV4dDsKK307CisKK0BpbnRlcmZhY2UgSlNDb250
ZXh0KEludGVybmFsKQorCitKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4
dChKU0NvbnRleHQgKik7CisKKy0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4
Y2VwdGlvbjsKKy0gKEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVS
ZWYpZXhjZXB0aW9uOworLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZVJl
ZilleGNlcHRpb247CisKKy0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0Rh
dGEgKiljYWxsYmFja0RhdGEgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVu
dENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYg
Kilhcmd1bWVudHM7CistICh2b2lkKWVuZENhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAq
KWNhbGxiYWNrRGF0YTsKKworLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworLSAo
dm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWU7CisKKy0gKEpTVmFsdWUgKil3cmFwcGVy
Rm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTRXhwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0V4cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisv
LyBXaGVuIGFuIEphdmFTY3JpcHQgdmFsdWUgaXMgY3JlYXRlZCBmcm9tIGFuIGluc3RhbmNlIG9m
IGFuIE9iamVjdGl2ZS1DIGNsYXNzCisvLyBmb3Igd2hpY2ggbm8gY29weWluZyBjb252ZXJzaW9u
IGlzIHNwZWNpZmllZCBhIEphdmFTY3JpcHQgd3JhcHBlciBvYmplY3Qgd2lsbAorLy8gYmUgY3Jl
YXRlZC4KKy8vCisvLyBJbiBKYXZhU2NyaXB0IGluaGVyaXRhbmNlIGlzIHN1cHBvcnRlZCB2aWEg
YSBjaGFpbiBvZiBwcm90b3R5cGUgb2JqZWN0cywgYW5kCisvLyBmb3IgZWFjaCBPYmplY3RpdmUt
QyBjbGFzcyAoYW5kIHBlciBKU0NvbnRleHQpIGFuIG9iamVjdCBhcHByb3ByaWF0ZSBmb3IgdXNl
CisvLyBhcyBhIHByb3RvdHlwZSB3aWxsIGJlIHByb3ZpZGVkLiBGb3IgdGhlIGNsYXNzIE5TT2Jq
ZWN0IHRoZSBwcm90b3R5cGUgb2JqZWN0CisvLyB3aWxsIGJlIHRoZSBKYXZhU2NyaXB0IGNvbnRl
eHQncyBPYmplY3QgUHJvdG90eXBlLiBGb3IgYWxsIG90aGVyIE9iamVjdGl2ZS1DCisvLyBjbGFz
c2VzIGEgUHJvdG90eXBlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQuIFRoZSBQcm90b3R5cGUgb2Jq
ZWN0IGZvciBhIGdpdmVuCisvLyBPYmplY3RpdmUtQyBjbGFzcyB3aWxsIGhhdmUgaXRzIGludGVy
bmFsIFtQcm90b3R5cGVdIHByb3BlcnR5IHNldCB0byBwb2ludCB0bworLy8gdGhlIFByb3RvdHlw
ZSBvYmplY3Qgb2YgdGhlIE9iamVjdGl2ZS1DIGNsYXNzJ3Mgc3VwZXJjbGFzcy4gQXMgc3VjaCB0
aGUKKy8vIHByb3RvdHlwZSBjaGFpbiBmb3IgYSBKYXZhU2NyaXB0IHdyYXBwZXIgb2JqZWN0IHdp
bGwgcmVmbGVjdCB0aGUgd3JhcHBlZAorLy8gT2JqZWN0aXZlLUMgdHlwZSdzIGluaGVyaXRhbmNl
IGhpZXJhcmNoeS4KKy8vCisvLyBJbiBhZGRpdGlvbiB0byB0aGUgUHJvdG90eXBlIG9iamVjdCBh
IEphdmFTY3JpcHQgQ29uc3RydWN0b3Igb2JqZWN0IHdpbGwgYWxzbworLy8gYmUgcHJvZHVjZWQg
Zm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MuIFRoZSBDb25zdHJ1Y3RvciBvYmplY3QgaGFzIGEg
cHJvcGVydHkKKy8vIG5hbWVkICdwcm90b3R5cGUnIHRoYXQgcmVmZXJlbmNlcyB0aGUgUHJvdG90
eXBlIG9iamVjdCwgYW5kIHRoZSBQcm90b3R5cGUKKy8vIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBu
YW1lZCAnY29uc3RydWN0b3InIHRoYXQgcmVmZXJlbmNlcyB0aGUgQ29uc3RydWN0b3IuCisvLyBU
aGUgQ29uc3RydWN0b3Igb2JqZWN0IGlzIG5vdCBjYWxsYWJsZS4KKy8vCisvLyBCeSBkZWZhdWx0
IG5vIG1ldGhvZHMgb3IgcHJvcGVydGllcyBvZiB0aGUgT2JqZWN0aXZlLUMgY2xhc3Mgd2lsbCBi
ZSBleHBvc2VkCisvLyB0byBKYXZhU2NyaXB0LCBob3dldmVyIG1ldGhvZHMgYW5kIHByb3BlcnRp
ZXMgbWF5IGV4cGxpY2l0bHkgYmUgZXhwb3J0ZWQuCisvLyBGb3IgZWFjaCBwcm90b2NvbCB0aGF0
IGEgY2xhc3MgY29uZm9ybXMgdG8sIGlmIHRoZSBwcm90b2NvbCBpbmNvcnBvcmF0ZXMgdGhlCisv
LyBwcm90b2NvbCBKU0V4cG9ydCwgdGhlbiB0aGUgcHJvdG9jb2wgd2lsbCBiZSBpbnRlcnByZXRl
ZCBhcyBhIGxpc3Qgb2YgbWV0aG9kcworLy8gYW5kIHByb3BlcnRpZXMgdG8gYmUgZXhwb3J0ZWQg
dG8gSmF2YVNjcmlwdC4KKy8vCisvLyBGb3IgZWFjaCBpbnN0YW5jZSBtZXRob2QgYmVpbmcgZXhw
b3J0ZWQsIGEgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9uCisvLyB3aWxsIGJlIGFz
c2lnbmVkIGFzIGEgcHJvcGVydHkgb2YgdGhlIFByb3RvdHlwZSBvYmplY3QsIGZvciBlYWNoIE9i
amVjdGl2ZS1DCisvLyBwcm9wZXJ0eSBiZWluZyBleHBvcnRlZCBhIEphdmFTY3JpcHQgYWNjZXNz
b3IgcHJvcGVydHkgd2lsbCBiZSBjcmVhdGVkIG9uIHRoZQorLy8gUHJvdG90eXBlLCBhbmQgZm9y
IGVhY2ggY2xhc3MgbWV0aG9kIGV4cG9ydGVkIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiB3aWxsIGJl
CisvLyBjcmVhdGVkIG9uIHRoZSBDb25zdHJ1Y3RvciBvYmplY3QuIEZvciBleGFtcGxlOgorLy8K
Ky8vICAgIEBwcm90b2NvbCBNeUNsYXNzSmF2YVNjcmlwdE1ldGhvZHMgPEpTRXhwb3J0PgorLy8g
ICAgLSAodm9pZClmb287CisvLyAgICBAZW5kCisvLworLy8gICAgQGludGVyZmFjZSBNeUNsYXNz
IDogTlNPYmplY3QgPE15Q2xhc3NKYXZhU2NyaXB0TWV0aG9kcz4KKy8vICAgIC0gKHZvaWQpZm9v
OworLy8gICAgLSAodm9pZCliYXI7CisvLyAgICBAZW5kCisvLworLy8gSWYgYW4gaW5zdGFuY2Ug
b2YgTXlDbGFzcyBpcyBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IHZhbHVlLCB0aGUgcmVzdWx0
aW5nCisvLyB3cmFwcGVyIG9iamVjdCB3aWxsICh2aWEgaXRzIHByb3RvdHlwZSkgZXhwb3J0IHRo
ZSBtZXRob2QgImZvbyIgdG8gSmF2YVNjcmlwdCwKKy8vIHNpbmNlIHRoZSBjbGFzcyBjb25mb3Jt
cyB0byB0aGUgTXlDbGFzc0phdmFTY3JpcHRFeHBvcnRzIHByb3RvY29sLCBhbmQgdGhpcworLy8g
cHJvdG9jb2wgaW5jb3Jwb3JhdGVzIEpTRXhwb3J0LiAiYmFyIiB3aWxsIG5vdCBiZSBleHBvcnRl
ZC4KKy8vCisvLyBQcm9wZXJ0aWVzLCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdmFsdWVzIG9mIHRo
ZSBmb2xsb3dpbmcgdHlwZXMgYXJlCisvLyBzdXBwb3J0ZWQ6CisvLworLy8gUHJpbWl0aXZlIG51
bWJlcnM6IHNpZ25lZCB2YWx1ZXMgb2YgdXAgdG8gMzItYml0cyBhcmUgY29udmVydGVkIGluIGEg
bWFubmVyCisvLyAgICBjb25zaXN0ZW50IHdpdGggdmFsdWVXaXRoSW50MzIvdG9JbnQzMiwgdW5z
aWduZWQgdmFsdWVzIG9mIHVwIHRvIDMyLWJpdHMKKy8vICAgIGFyZSBjb252ZXJ0ZWQgaW4gYSBt
YW5uZXIgY29uc2lzdGVudCB3aXRoIHZhbHVlV2l0aFVJbnQzMi90b1VJbnQzMiwgYWxsCisvLyAg
ICBvdGhlciBudW1lcmljIHZhbHVlcyBhcmUgY29udmVydGVkIGNvbnNpc3RlbnRseSB3aXRoIHZh
bHVlV2l0aERvdWJsZS8KKy8vICAgIHRvRG91YmxlLgorLy8gQk9PTDogdmFsdWVzIGFyZSBjb252
ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFsdWVXaXRoQm9vbC90b0Jvb2wuCisvLyBpZDogdmFs
dWVzIGFyZSBjb252ZXJ0ZWQgY29uc2lzdGVudGx5IHdpdGggdmFsdWVXaXRoT2JqZWN0L3RvT2Jq
ZWN0LgorLy8gPE9iamVjdGl2ZS1DIENsYXNzPjogLSB3aGVyZSB0aGUgdHlwZSBpcyBhIHBvaW50
ZXIgdG8gYSBzcGVjaWZpZWQgT2JqZWN0aXZlLUMKKy8vICAgIGNsYXNzLCBjb252ZXJzaW9uIGlz
IGNvbnNpc3RlbnQgd2l0aCB2YWx1ZVdpdGhPYmplY3RPZkNsYXNzL3RvT2JqZWN0LgorLy8gc3Ry
dWN0IHR5cGVzOiBDIHN0cnVjdCB0eXBlcyBhcmUgc3VwcG9ydGVkLCB3aGVyZSBKU1ZhbHVlIHBy
b3ZpZGVzIHN1cHBvcnQKKy8vICAgIGZvciB0aGUgZ2l2ZW4gdHlwZS4gU3VwcG9ydCBpcyBidWls
dCBpbiBmb3IgQ0dQb2ludCwgTlNSYW5nZSwgQ0dSZWN0LCBhbmQKKy8vICAgIENHU2l6ZTsgc2Vl
IEpTVmFsdWVTdHJ1Y3RTdXBwb3J0LmggZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhZGQgc3Vw
cG9ydAorLy8gICAgZm9yIGFkZGl0aW9uYWwgdHlwZXMuCisvLyBibG9jayB0eXBlczogSW4gYWRk
aXRpb24gdG8gc3VwcG9ydCBwcm92aWRlZCBieSB2YWx1ZVdpdGhPYmplY3QvdG9PYmplY3QgZm9y
CisvLyAgICBibG9jayB0eXBlcywgaWYgYSBKYXZhU2NyaXB0IEZ1bmN0aW9uIGlzIHBhc3NlZCBh
cyBhbiBhcmd1bWVudCwgd2hlcmUgdGhlCisvLyAgICB0eXBlIHJlcXVpcmVkIGlzIGEgYmxvY2sg
d2l0aCBhIHZvaWQgcmV0dXJuIHZhbHVlIChhbmQgd2hlcmUgdGhlIGJsb2NrJ3MKKy8vICAgIGFy
Z3VtZW50cyBhcmUgYWxsIG9mIHN1cHBvcnRlZCB0eXBlcyksIHRoZW4gYSBzcGVjaWFsIGFkYXB0
b3IgYmxvY2sKKy8vICAgIHdpbGwgYmUgY3JlYXRlZCwgYWxsb3dpbmcgdGhlIHRoZSBKYXZhU2Ny
aXB0IGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4gdGhlCisvLyAgICBwbGFjZSBvZiBhIGJsb2NrLgor
Ly8KKy8vIEZvciBhbnkgaW50ZXJmYWNlIHRoYXQgY29uZm9ybXMgdG8gSlNFeHBvcnQgdGhlIG5v
cm1hbCBjb3B5aW5nIGNvbnZlcnNpb24gZm9yCisvLyBidWlsdCBpbiB0eXBlcyB3aWxsIGJlIGlu
aGliaXRlZCAtIHNvLCBmb3IgZXhhbXBsZSwgaWYgYW4gaW5zdGFuY2UgdGhhdAorLy8gZGVyaXZl
cyBmcm9tIE5TU3RyaW5nIGJ5IGNvbmZvcm1zIHRvIEpTRXhwb3J0IGlzIHBhc3NlZCB0byB2YWx1
ZVdpdGhPYmplY3Q6LAorLy8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIE9iamVjdGl2ZS1DIG9i
amVjdCB3aWxsIGJlIHJldHVybmVkIHJhdGhlciB0aGFuIGEKKy8vIEphdmFTY3JpcHQgc3RyaW5n
IHByaW1pdGl2ZS4KK0Bwcm90b2NvbCBKU0V4cG9ydAorQGVuZAorCisvLyBXaGVuIGEgc2VsZWN0
b3IgdGhhdCB0YWtlcyBvbmUgb3IgbW9yZSBhcmd1bWVudHMgaXMgY29udmVydGVkIHRvIGEgSmF2
YVNjcmlwdAorLy8gcHJvcGVydHkgbmFtZSwgYnkgZGVmYXVsdCBhIHByb3BlcnR5IG5hbWUgd2ls
bCBiZSBnZW5lcmF0ZWQgYnkgcGVyZm9ybWluZyB0aGUKKy8vIGZvbGxvd2luZyBjb252ZXJzaW9u
OgorLy8gIC0gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc2VsZWN0b3IKKy8v
ICAtIEFueSBsb3dlcmNhc2UgbGV0dGVyIHRoYXQgaGFkIGZvbGxvd2VkIGEgc2VtaWNvbG9uIHdp
bGwgYmUgY2FwaXRhbGl6ZWQuCisvLyBVbmRlciB0aGUgZGVmYXVsdCBjb252ZXJzaW9uIGEgc2Vs
ZWN0b3IgImRvRm9vOndpdGhCYXI6IiB3aWxsIGJlIGV4cG9ydGVkIGFzCisvLyAiZG9Gb29XaXRo
QmFyIi4gVGhlIGRlZmF1bHQgY29udmVyc2lvbiBtYXkgYmUgb3ZlcnJpZGVuIHVzaW5nIHRoZSBK
U0V4cG9ydEFzCisvLyBtYWNybywgZm9yIGV4YW1wbGUgdG8gZXhwb3J0IGEgbWV0aG9kICJkb0Zv
bzp3aXRoQmFyOiIgYXMgImRvRm9vIjoKKy8vCisvLyAgICBAcHJvdG9jb2wgTXlDbGFzc0phdmFT
Y3JpcHRNZXRob2RzIDxKU0V4cG9ydD4KKy8vICAgIEpTRXhwb3J0QXMoZG9Gb28sCisvLyAgICAt
ICh2b2lkKWRvRm9vOihpZClmb28gd2l0aEJhcjooaWQpYmFyCisvLyAgICApOworLy8gICAgQGVu
ZAorLy8KKy8vIE5vdGUgdGhhdCB0aGUgSlNFeHBvcnQgbWFjcm8gbWF5IG9ubHkgYmUgYXBwbGll
ZCB0byBhIHNlbGVjdG9yIHRoYXQgdGFrZXMgb25lCisvLyBvciBtb3JlIGFyZ3VtZW50LgorI2Rl
ZmluZSBKU0V4cG9ydEFzKFByb3BlcnR5TmFtZSwgU2VsZWN0b3IpIFwKKyAgICBAb3B0aW9uYWwg
U2VsZWN0b3IgX19KU19FWFBPUlRfQVNfXyMjUHJvcGVydHlOYW1lOihpZClhcmd1bWVudDsgQHJl
cXVpcmVkIFNlbGVjdG9yCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
YWx1ZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQg
IkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJEYXRlSW5zdGFuY2Uu
aCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIgorI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAu
aCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisj
aW1wb3J0ICJ3dGYvSGFzaE1hcC5oIgorI2ltcG9ydCAid3RmL0hhc2hTZXQuaCIKKyNpbXBvcnQg
Ind0Zi9WZWN0b3IuaCIKKyNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisjaW1wb3J0ICJ3dGYv
dGV4dC9XVEZTdHJpbmcuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3Jp
cHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVy
dHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CitOU1N0cmluZyAqIGNv
bnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yQ29uZmlndXJhYmxlS2V5ID0gQCJjb25maWd1cmFibGUi
OworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclZhbHVlS2V5ID0gQCJ2YWx1
ZSI7CitOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5ID0gQCJnZXQi
OworTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVzY3JpcHRvclNldEtleSA9IEAic2V0IjsK
KworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUgeworICAgIEpTVmFsdWVSZWYgbV92YWx1ZTsKKyAg
ICBKU0NvbnRleHQgKm1fd2Vha0NvbnRleHQ7Cit9CisKKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhP
YmplY3Q6KGlkKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpvYmplY3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVl
KSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9P
TCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVl
ICopdmFsdWVXaXRoRG91YmxlOihkb3VibGUpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoSW50MzI6KGludDMyX3QpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFZhbHVlOkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVX
aXRoVUludDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQK
K3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0
XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmpl
Y3RNYWtlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIDApIGluQ29udGV4dDpj
b250ZXh0XTsKK30KKysgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdBcnJheUluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpK
U09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxM
LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVn
dWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0
cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIEpTU3Ry
aW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJp
bmdSZWYpcGF0dGVybik7CisgICAgSlNTdHJpbmdSZWYgZmxhZ3NTdHJpbmcgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpZmxhZ3MpOworICAgIEpTVmFsdWVSZWYgYXJn
dW1lbnRzWzJdID0geyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBwYXR0ZXJuU3RyaW5nKSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgZmxhZ3NTdHJpbmcpIH07CisgICAgSlNTdHJpbmdSZWxlYXNlKHBh
dHRlcm5TdHJpbmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShmbGFnc1N0cmluZyk7CisKKyAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmplY3RNYWtlUmVnRXhwKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIDIsIGFyZ3VtZW50cywgMCkgaW5Db250ZXh0OmNvbnRl
eHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICBKU1N0
cmluZ1JlZiBzdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYp
bWVzc2FnZSk7CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAgSlNTdHJpbmdSZWxl
YXNlKHN0cmluZyk7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNPYmpl
Y3RNYWtlRXJyb3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMSwgJmFyZ3VtZW50
LCAwKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisrIChKU1ZhbHVlICopdmFsdWVXaXRoTnVsbElu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZU51bGwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSkgaW5Db250ZXh0OmNvbnRleHRdOworfQorKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVuZGVmaW5l
ZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKGlkKXRvT2JqZWN0Cit7Cisg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KGNvbnRleHQs
IG1fdmFsdWUpOworfQorLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHMKK3sKKyAgICBp
ZCByZXN1bHQgPSBbc2VsZiB0b09iamVjdF07CisgICAgcmV0dXJuIFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpjbHNdID8gcmVzdWx0IDogbmlsOworfQorCistIChCT09MKXRvQm9vbAoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIHJldHVybiAoY29udGV4dCAm
JiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFs
dWUpKSA/IFlFUyA6IE5POworfQorLSAoZG91YmxlKXRvRG91YmxlCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChpbnQzMl90
KXRvSW50MzIKK3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKFtzZWxmIHRvRG91YmxlXSk7Cit9
CistICh1aW50MzJfdCl0b1VJbnQzMgoreworICAgIHJldHVybiBKU0M6OnRvVUludDMyKFtzZWxm
IHRvRG91YmxlXSk7Cit9CistIChOU051bWJlciAqKXRvTnVtYmVyCit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJlc3Vs
dCA9IHZhbHVlVG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1
ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TU3Ry
aW5nICopdG9TdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0
XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
ZXhjZXB0aW9uKQorICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoTlNEYXRlICopdG9EYXRlCit7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGlkIHJl
c3VsdCA9IHZhbHVlVG9EYXRlKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFs
dWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFtjb250ZXh0IG5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgIHJldHVybiByZXN1bHQ7Cit9CistIChOU0Fy
cmF5ICopdG9BcnJheQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRd
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKKyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvQXJyYXkoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKE5TRGljdGlvbmFyeSAqKXRvRGljdGlvbmFyeQorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
KyAgICBpZCByZXN1bHQgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAg
ICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCistIChKU1ZhbHVlICopdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9w
ZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVl
UmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChj
b250ZXh0KSwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
bmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVl
RnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CistICh2b2lkKXNldFZh
bHVlOihpZCl2YWx1ZSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKKyAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgb2JqZWN0
VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksIDAsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVs
ZWFzZShuYW1lKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIFtjb250ZXh0IG5vdGlm
eUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorfQorLSAoQk9P
TClkZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBOTzsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
cmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAg
ICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5n
UmVmKXByb3BlcnR5TmFtZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdERlbGV0ZVByb3Bl
cnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4Y2Vw
dGlvbikgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CisgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorLSAoQk9PTCloYXNQcm9wZXJ0
eTooTlNTdHJpbmcgKilwcm9wZXJ0eU5hbWUKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBOTzsKKwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0
IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBu
YW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFt
ZSk7CisgICAgQk9PTCByZXN1bHQgPSBKU09iamVjdEhhc1Byb3BlcnR5KGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG9iamVjdCwgbmFtZSkgPyBZRVMgOiBOTzsKKyAgICBKU1N0cmlu
Z1JlbGVhc2UobmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy0gKHZvaWQpZGVmaW5lUHJv
cGVydHk6KE5TU3RyaW5nICopcHJvcGVydHkgZGVzY3JpcHRvcjooaWQpZGVzY3JpcHRvcgorewor
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFtbY29udGV4dCBnbG9iYWxPYmplY3RdW0AiT2JqZWN0
Il0gaW52b2tlTWV0aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVudHM6QFsgc2VsZiwg
cHJvcGVydHksIGRlc2NyaXB0b3IgXV07Cit9CisKKy0gKEpTVmFsdWUgKil2YWx1ZUF0SW5kZXg6
KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAo
aW5kZXggIT0gKHVuc2lnbmVkKWluZGV4KQorICAgICAgICBbc2VsZiB2YWx1ZUZvclByb3BlcnR5
OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3Ry
aW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCks
IG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVy
biBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorLSAodm9pZClzZXRWYWx1ZToo
aWQpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHNldFZhbHVlOnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6
aW5kZXggaW5Db250ZXh0OmNvbnRleHRdIHRvU3RyaW5nXV07CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsICh1bnNpZ25l
ZClpbmRleCwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAg
IGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgW2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy0gKEJPT0wpaXNVbmRlZmluZWQK
K3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4g
KGNvbnRleHQgJiYgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClpc051bGwKK3sKKyAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQg
JiYgSlNWYWx1ZUlzTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVl
KSkgPyBZRVMgOiBOTzsKK30KKy0gKEJPT0wpaXNCb29sZWFuCit7CisgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJ
c0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVT
IDogTk87Cit9CistIChCT09MKWlzTnVtYmVyCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc051bWJlcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKK30K
Ky0gKEJPT0wpaXNTdHJpbmcKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAoQk9PTClp
c09iamVjdAoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87Cit9CisKKy0gKEJPT0wpaXNFcXVhbFRv
T2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJu
IEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUsIG9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpKSA/IFlFUyA6IE5POworfQorLSAo
Qk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQoreworICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIE5POworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEJP
T0wgcmVzdWx0ID0gSlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pID8g
WUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IGJv
b2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZhbHVlCit7CisgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW3NlbGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
Tk87CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgY29u
c3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworCisgICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29u
c3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwgY29uc3Ry
dWN0b3IsICZleGNlcHRpb24pID8gWUVTIDogTk87CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgcmV0dXJuIFtjb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChKU1ZhbHVlICopY2FsbFdpdGhBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmdzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50
ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRdOworICAgIEpTVmFsdWVSZWYgYXJndW1l
bnRzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVu
dENvdW50OyArK2kpCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoY29udGV4
dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9
IDA7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChleGNl
cHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5j
dGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIDAsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwor
CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29u
dGV4dF07Cit9CistIChKU1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBcnJheSAq
KWFyZ3MKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJbnRlZ2VyIGFyZ3Vt
ZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbYXJndW1l
bnRDb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCBbYXJncyBv
YmplY3RBdEluZGV4OmldKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4
dChjb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihj
b250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9
CistIChKU1ZhbHVlICopaW52b2tlTWV0aG9kOihOU1N0cmluZyAqKW1ldGhvZCB3aXRoQXJndW1l
bnRzOihOU0FycmF5ICopYXJndW1lbnRzCit7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3Nl
bGYgY29udGV4dF07CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50cyBjb3VudF07CisgICAgSlNW
YWx1ZVJlZiBhcmdzW2FyZ3VtZW50Q291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBvYmplY3RUb1ZhbHVlKGNv
bnRleHQsIFthcmd1bWVudHMgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IDA7CisgICAgSlNPYmplY3RSZWYgdGhpc09iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsK
KyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisKKyAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7CisgICAgSlNWYWx1ZVJl
ZiBmdW5jID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhjZXB0aW9uKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
bmFtZSk7CisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVl
RnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworCisgICAgSlNPYmplY3RSZWYgb2JqZWN0
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGZ1bmMs
ICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4
dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNlcHRp
b24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU0NvbnRleHQg
Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIG9iamNfbG9hZFdlYWsoJm1fd2Vha0NvbnRleHQpOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlKFN0cnVjdFN1cHBvcnQpCisKKy0g
KENHUG9pbnQpdG9Qb2ludAoreworICAgIHJldHVybiAoQ0dQb2ludCl7CisgICAgICAgIFtzZWxm
W0AieCJdIHRvRG91YmxlXSwKKyAgICAgICAgW3NlbGZbQCJ5Il0gdG9Eb3VibGVdCisgICAgfTsK
K30KKworLSAoTlNSYW5nZSl0b1JhbmdlCit7CisgICAgcmV0dXJuIChOU1JhbmdlKXsKKyAgICAg
ICAgKE5TVUludGVnZXIpW3NlbGZbQCJsb2NhdGlvbiJdIHRvRG91YmxlXSwKKyAgICAgICAgKE5T
VUludGVnZXIpW3NlbGZbQCJsZW5ndGgiXSB0b0RvdWJsZV0KKyAgICB9OworfQorCistIChDR1Jl
Y3QpdG9SZWN0Cit7CisgICAgcmV0dXJuIChDR1JlY3QpeworICAgICAgICBbc2VsZiB0b1BvaW50
XSwKKyAgICAgICAgW3NlbGYgdG9TaXplXQorICAgIH07Cit9CisKKy0gKENHU2l6ZSl0b1NpemUK
K3sKKyAgICByZXR1cm4gKENHU2l6ZSl7CisgICAgICAgIFtzZWxmW0Aid2lkdGgiXSB0b0RvdWJs
ZV0sCisgICAgICAgIFtzZWxmW0AiaGVpZ2h0Il0gdG9Eb3VibGVdCisgICAgfTsKK30KKworKyAo
SlNWYWx1ZSAqKXZhbHVlV2l0aFBvaW50OihDR1BvaW50KXBvaW50IGluQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsK
KyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnBvaW50LnhdLAorICAgICAg
ICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueV0KKyAgICB9IGluQ29udGV4
dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJhbmdlOihOU1JhbmdlKXJh
bmdlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAgQCJsb2NhdGlvbiI6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpyYW5nZS5sb2NhdGlvbl0sCisgICAgICAgIEAibGVuZ3RoIjpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnJhbmdlLmxlbmd0aF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsK
K30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFJlY3Q6KENHUmVjdClyZWN0IGluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmpl
Y3Q6QHsKKyAgICAgICAgQCJ4IjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJlY3Qub3JpZ2lu
LnhdLAorICAgICAgICBAInkiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmlnaW4u
eV0sCisgICAgICAgIEAid2lkdGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5zaXpl
LndpZHRoXSwKKyAgICAgICAgQCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVj
dC5zaXplLmhlaWdodF0KKyAgICB9IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworKyAoSlNWYWx1
ZSAqKXZhbHVlV2l0aFNpemU6KENHU2l6ZSlzaXplIGluQ29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dAoreworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6QHsKKyAgICAgICAg
QCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzaXplLndpZHRoXSwKKyAgICAgICAg
QCJoZWlnaHQiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2l6ZS5oZWlnaHRdCisgICAgfSBp
bkNvbnRleHQ6Y29udGV4dF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTVmFsdWUo
U3Vic2NyaXB0U3VwcG9ydCkKKworLSAoSlNWYWx1ZSAqKW9iamVjdEZvcktleWVkU3Vic2NyaXB0
OihpZClrZXkKK3sKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVsoTlNPYmpl
Y3QqKWtleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgIGtleSA9
IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmlu
Z107CisgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVl
V2l0aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKyAgICB9CisKKyAgICByZXR1cm4gW3Nl
bGYgdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilrZXldOworfQorCistIChKU1ZhbHVlICop
b2JqZWN0QXRJbmRleGVkU3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgcmV0dXJu
IFtzZWxmIHZhbHVlQXRJbmRleDppbmRleF07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihpZClv
YmplY3QgZm9yS2V5ZWRTdWJzY3JpcHQ6KGlkIDxOU0NvcHlpbmc+KWtleQoreworICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSkgeworICAgICAgICBrZXkgPSBbW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0
OmtleSBpbkNvbnRleHQ6Y29udGV4dF0gdG9TdHJpbmddOworICAgICAgICBpZiAoIWtleSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBzZXRWYWx1ZTpvYmplY3QgZm9y
UHJvcGVydHk6KE5TU3RyaW5nICopa2V5XTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9i
amVjdCBhdEluZGV4ZWRTdWJzY3JpcHQ6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBbc2VsZiBz
ZXRWYWx1ZTpvYmplY3QgYXRJbmRleDppbmRleF07Cit9CisKK0BlbmQKKworaW5saW5lIGJvb2wg
aXNEYXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpCit7
CisgICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4dCkpOworICAgIHJl
dHVybiB0b0pTKG9iamVjdCktPmluaGVyaXRzKCZKU0M6OkRhdGVJbnN0YW5jZTo6c19pbmZvKTsK
K30KKworaW5saW5lIGJvb2wgaXNBcnJheShKU09iamVjdFJlZiBvYmplY3QsIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0KQoreworICAgIEpTQzo6QVBJRW50cnlTaGltIGVudHJ5U2hpbSh0b0pT
KGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUyhvYmplY3QpLT5pbmhlcml0cygmSlNDOjpKU0Fy
cmF5OjpzX2luZm8pOworfQorCitAaW1wbGVtZW50YXRpb24gSlNWYWx1ZShJbnRlcm5hbCkKKwor
ZW51bSBDb252ZXJzaW9uVHlwZSB7CisgICAgQ29udGFpbmVyTm9uZSwKKyAgICBDb250YWluZXJB
cnJheSwKKyAgICBDb250YWluZXJEaWN0aW9uYXJ5Cit9OworCitjbGFzcyBKU0NvbnRhaW5lckNv
bnZlcnRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBKU1ZhbHVlUmVm
IGpzOworICAgICAgICBpZCBvYmpjOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAg
IH07CisKKyAgICBKU0NvbnRhaW5lckNvbnZlcnRvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgaWQg
Y29udmVydChKU1ZhbHVlUmVmIHByb3BlcnR5KTsKKyAgICB2b2lkIGFkZChUYXNrIHRhc2spOwor
ICAgIFRhc2sgdGFrZSgpOworICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4gIW1f
d29ya2xpc3Quc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1f
Y29udGV4dDsKKyAgICBXVEY6Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1fb2JqZWN0TWFwOwor
ICAgIFdURjo6VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7Cit9OworCitpbmxpbmUgaWQgSlNDb250
YWluZXJDb252ZXJ0b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBXVEY6Okhh
c2hNYXA8SlNWYWx1ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmplY3RNYXAuZmluZCh2
YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9vYmplY3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKworICAgIFRhc2sgcmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRD
b3B5KG1fY29udGV4dCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuanMpCisgICAgICAgIGFkZChy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQub2JqYzsKK30KKwordm9pZCBKU0NvbnRhaW5lckNv
bnZlcnRvcjo6YWRkKFRhc2sgdGFzaykKK3sKKyAgICBtX29iamVjdE1hcC5hZGQodGFzay5qcywg
dGFzay5vYmpjKTsKKyAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5vbmUpCisgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKHRhc2spOworfQorCitKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFz
ayBKU0NvbnRhaW5lckNvbnZlcnRvcjo6dGFrZSgpCit7CisgICAgQVNTRVJUKCFpc1dvcmtMaXN0
RW1wdHkoKSk7CisgICAgVGFzayBsYXN0ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgbV93b3Jr
bGlzdC5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBKU0NvbnRh
aW5lckNvbnZlcnRvcjo6VGFzayB2YWx1ZVRvT2JqZWN0V2l0aG91dENvcHkoSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlkIHByaW1pdGl2ZTsKKyAgICAgICAg
aWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgcHJpbWl0
aXZlID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgPyBAWUVTIDogQE5POworICAg
ICAgICBlbHNlIGlmIChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAg
ICAgICAvLyBOb3JtYWxpemUgdGhlIG51bWJlciwgc28gaXQgd2lsbCB1bmlxdWUgY29ycmVjdGx5
IGluIHRoZSBoYXNoIG1hcCAtCisgICAgICAgICAgICAvLyBpdCdzIG5pY2VyIG5vdCB0byBsZWFr
IHRoaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIQorICAgICAgICAgICAgdmFsdWUg
PSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFs
dWUsIDApKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCldOworICAgICAgICB9IGVsc2Ug
aWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIFdv
dWxkIGJlIG5pY2UgdG8gdW5pcXVlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgICAgIEpTU3RyaW5n
UmVmIGpzc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Cisg
ICAgICAgICAgICBOU1N0cmluZyAqIHN0cmluZ05TID0gKE5TU3RyaW5nICopSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNzdHJpbmcpOworICAgICAgICAgICAgSlNT
dHJpbmdSZWxlYXNlKGpzc3RyaW5nKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IFtzdHJpbmdO
UyBhdXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCB2YWx1ZSkpCisgICAgICAgICAgICBwcmltaXRpdmUgPSBbTlNOdWxsIG51bGxdOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwg
dmFsdWUpKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZSA9IG5pbDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gKEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgdmFsdWUsIHByaW1pdGl2ZSwg
Q29udGFpbmVyTm9uZSB9OworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CisKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRy
eVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIChKU0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgd3JhcHBlZCwgQ29udGFpbmVyTm9uZSB9
OworCisgICAgaWYgKGlzRGF0ZShvYmplY3QsIGNvbnRleHQpKQorICAgICAgICByZXR1cm4gKEpT
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2UxOTcwOkpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvYmplY3QsIDApXSwgQ29u
dGFpbmVyTm9uZSB9OworCisgICAgaWYgKGlzQXJyYXkob2JqZWN0LCBjb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgW05TTXV0YWJs
ZUFycmF5IGFycmF5XSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgIHJldHVybiAoSlNDb250YWlu
ZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25h
cnldLCBDb250YWluZXJEaWN0aW9uYXJ5IH07Cit9CisKK3N0YXRpYyBpZCBjb250YWluZXJWYWx1
ZVRvT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayB0YXNrKQoreworICAgIEFTU0VSVCh0YXNrLnR5cGUgIT0gQ29udGFpbmVyTm9uZSk7
CisgICAgSlNDb250YWluZXJDb252ZXJ0b3IgY29udmVydG9yKGNvbnRleHQpOworICAgIGNvbnZl
cnRvci5hZGQodGFzayk7CisgICAgQVNTRVJUKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkp
OworICAgIAorICAgIGRvIHsKKyAgICAgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgY3Vy
cmVudCA9IHRhc2sgPSBjb252ZXJ0b3IudGFrZSgpOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIGN1cnJlbnQuanMpKTsKKyAgICAgICAgSlNPYmplY3RSZWYganMgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY3VycmVudC5qcywgMCk7CisKKyAgICAgICAgaWYgKGN1
cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgeworICAgICAgICAgICAgQVNTRVJUKFtjdXJy
ZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNNdXRhYmxlQXJyYXkgY2xhc3NdXSk7CisgICAgICAg
ICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSAoTlNNdXRhYmxlQXJyYXkgKiljdXJyZW50Lm9i
amM7CisgICAgICAgIAorICAgICAgICAgICAgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyaW5nID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gSlNDOjp0b1VJbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqcywgbGVuZ3RoU3RyaW5nLCAwKSwgMCkpOworICAgICAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKGxlbmd0aFN0cmluZyk7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlkIG9i
amMgPSBjb252ZXJ0b3IuY29udmVydChKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBqcywgaSwgMCkpOworICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6b2JqYyA/IG9i
amMgOiBbTlNOdWxsIG51bGxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TTXV0YWJsZURp
Y3Rpb25hcnkgY2xhc3NdXSk7CisgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0
aW9uYXJ5ID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKiljdXJyZW50Lm9iamM7CisKKyAgICAgICAg
ICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lQXJyYXkgPSBKU09iamVjdENv
cHlQcm9wZXJ0eU5hbWVzKGNvbnRleHQsIGpzKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocHJvcGVydHlOYW1lQXJyYXkpOworCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5h
bWVBdEluZGV4KHByb3BlcnR5TmFtZUFycmF5LCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQg
b2JqYyA9IGNvbnZlcnRvci5jb252ZXJ0KEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganMs
IHByb3BlcnR5TmFtZSwgMCkpKQorICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W1soTlNT
dHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwcm9wZXJ0
eU5hbWUpIGF1dG9yZWxlYXNlXV0gPSBvYmpjOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZShwcm9wZXJ0eU5hbWVBcnJheSk7CisgICAgICAg
IH0KKworICAgIH0gd2hpbGUgKCFjb252ZXJ0b3IuaXNXb3JrTGlzdEVtcHR5KCkpOworCisgICAg
cmV0dXJuIHRhc2sub2JqYzsKK30KKworaWQgdmFsdWVUb09iamVjdChKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sg
cmVzdWx0ID0gdmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCksIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gQ29udGFpbmVyTm9uZSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5vYmpjOworICAgIHJldHVybiBjb250YWluZXJWYWx1ZVRv
T2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHJlc3VsdCk7Cit9CisKK2lk
IHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
ICAgIGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkp
IHsKKyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0p
CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZDsKKyAgICB9CisKKyAgICBpZiAoSlNWYWx1ZUlz
Qm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIHZhbHVlKSA/IEBZRVMgOiBATk87CisKKyAgICBkb3VibGUgcmVzdWx0ID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZToqZXhjZXB0aW9uID8gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjpxdWlldF9OYU4oKSA6IHJlc3VsdF07Cit9CitpZCB2YWx1ZVRvU3RyaW5nKEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9
IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3Jh
cHBlZCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
IHdyYXBwZWQ7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWYganNzdHJpbmcgPSBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0aW9u
KSB7CisgICAgICAgIEFTU0VSVCghanNzdHJpbmcpOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH0KKworICAgIE5TU3RyaW5nKiBzdHJpbmdOUyA9IFsoTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmluZykgYXV0b3JlbGVhc2VdOworICAg
IEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJuIHN0cmluZ05TOworfQoraWQg
dmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAg
IGlmIChpZCB3cmFwcGVkID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0LCB2YWx1ZSkpIHsK
KyAgICAgICAgaWYgKFt3cmFwcGVkIGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKQorICAg
ICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgZG91YmxlIHJlc3VsdCA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gKmV4
Y2VwdGlvbiA/IG5pbCA6IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6cmVz
dWx0XTsKK30KK2lkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisgICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRl
eHQsIHZhbHVlKSkgeworICAgICAgICBpZiAoW3dyYXBwZWQgaXNLaW5kT2ZDbGFzczpbTlNBcnJh
eSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgfQorCisgICAgaWYg
KEpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBjb250YWlu
ZXJWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IHZh
bHVlLCBbTlNNdXRhYmxlQXJyYXkgYXJyYXldLCBDb250YWluZXJBcnJheX0pOworCisgICAgaWYg
KCEoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNv
bnRleHQsIHZhbHVlKSkpCisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5
cGVFcnJvcih0b0pTKGNvbnRleHQpLCAiQ2Fubm90IGNvbnZlcnQgcHJpbWl0aXZlIHRvIE5TQXJy
YXkiKSk7CisgICAgcmV0dXJuIG5pbDsKK30KK2lkIHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBpZiAoaWQgd3JhcHBlZCA9IHRy
eVVud3JhcE9iamNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIGlmIChbd3JhcHBl
ZCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVkOworICAgIH0KKworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFs
dWUpKQorICAgICAgICByZXR1cm4gY29udGFpbmVyVmFsdWVUb09iamVjdChjb250ZXh0LCAoSlND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyB2YWx1ZSwgW05TTXV0YWJsZURpY3Rpb25hcnkgZGlj
dGlvbmFyeV0sIENvbnRhaW5lckRpY3Rpb25hcnl9KTsKKworICAgIGlmICghKEpTVmFsdWVJc051
bGwoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkp
KQorICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhj
b250ZXh0KSwgIkNhbm5vdCBjb252ZXJ0IHByaW1pdGl2ZSB0byBOU0RpY3Rpb25hcnkiKSk7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworY2xhc3MgT2JqY0NvbnRhaW5lckNvbnZlcnRvciB7CitwdWJs
aWM6CisgICAgc3RydWN0IFRhc2sgeworICAgICAgICBpZCBvYmpjOworICAgICAgICBKU1ZhbHVl
UmVmIGpzOworICAgICAgICBDb252ZXJzaW9uVHlwZSB0eXBlOworICAgIH07CisKKyAgICBPYmpj
Q29udGFpbmVyQ29udmVydG9yKEpTQ29udGV4dCAqY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjb252ZXJ0KGlkIG9i
amVjdCk7CisgICAgdm9pZCBhZGQoVGFzayB0YXNrKTsKKyAgICBUYXNrIHRha2UoKTsKKyAgICBi
b29sIGlzV29ya0xpc3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQorCitw
cml2YXRlOgorICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OworICAgIFdURjo6SGFzaE1hcDxpZCwg
SlNWYWx1ZVJlZj4gbV9vYmplY3RNYXA7CisgICAgV1RGOjpWZWN0b3I8VGFzaz4gbV93b3JrbGlz
dDsKK307CisKK0pTVmFsdWVSZWYgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6Y29udmVydChpZCBv
YmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBhdXRvIGl0ID0gbV9vYmplY3RN
YXAuZmluZChvYmplY3QpOworICAgIGlmIChpdCAhPSBtX29iamVjdE1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKKworICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sg
dGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShtX2NvbnRleHQsIG9iamVjdCk7CisgICAg
YWRkKHRhc2spOworICAgIHJldHVybiB0YXNrLmpzOworfQorCit2b2lkIE9iamNDb250YWluZXJD
b252ZXJ0b3I6OmFkZChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIHRhc2spCit7CisgICAg
bV9vYmplY3RNYXAuYWRkKHRhc2sub2JqYywgdGFzay5qcyk7CisgICAgaWYgKHRhc2sudHlwZSAh
PSBDb250YWluZXJOb25lKQorICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKK30KKwor
T2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBPYmpjQ29udGFpbmVyQ29udmVydG9yOjp0YWtl
KCkKK3sKKyAgICBBU1NFUlQoIWlzV29ya0xpc3RFbXB0eSgpKTsKKyAgICBUYXNrIGxhc3QgPSBt
X3dvcmtsaXN0Lmxhc3QoKTsKKyAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1
cm4gbGFzdDsKK30KKworc3RhdGljIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgb2JqZWN0
VG9WYWx1ZVdpdGhvdXRDb3B5KEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQoreworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRh
c2speyBvYmplY3QsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQo
Y29udGV4dCkpLCBDb250YWluZXJOb25lIH07CisKKyAgICBpZiAoIWNsYXNzX2NvbmZvcm1zVG9Q
cm90b2NvbChvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSwgZ2V0SlNFeHBvcnRQcm90b2NvbCgpKSkg
eworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCisg
ICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3Qs
IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDAsIE5V
TEwsIDApLCBDb250YWluZXJBcnJheSB9OworCisgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2UoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKKworICAg
ICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSkKKyAgICAgICAg
ICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpLCBDb250YWluZXJOb25l
IH07CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNWYWx1ZSBjbGFzc11d
KQorICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2Jq
ZWN0LCAoKEpTVmFsdWUgKilvYmplY3QpLT5tX3ZhbHVlLCBDb250YWluZXJOb25lIH07CisKKyAg
ICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAg
ICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBOVUxMLCAw
KSwgQ29udGFpbmVyQXJyYXkgfTsKKworICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNz
OltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5l
ckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIDAsIDApLCBDb250YWluZXJEaWN0aW9uYXJ5IH07CisKKyAgICAgICAg
aWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICAg
ICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKW9iamVjdCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGpzID0gSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsKKyAgICAgICAg
ICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBqcywgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xh
c3NdXSkgeworICAgICAgICAgICAgaWQgbGl0ZXJhbFRydWUgPSBAWUVTOworICAgICAgICAgICAg
aWYgKG9iamVjdCA9PSBsaXRlcmFsVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE9iamND
b250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlQm9vbGVhbihjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB0cnVlKSwgQ29udGFpbmVyTm9uZSB9OworICAg
ICAgICAgICAgaWQgbGl0ZXJhbEZhbHNlID0gQE5POworICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBsaXRlcmFsRmFsc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29u
dmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgZmFsc2UpLCBDb250YWluZXJOb25lIH07CisgICAgICAgICAgICBy
ZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIFsoTlNOdW1iZXIqKW9iamVj
dCBkb3VibGVWYWx1ZV0pLCBDb250YWluZXJOb25lIH07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RhdGUgY2xhc3NdXSkgeworICAgICAgICAgICAg
SlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENv
bnRleHQoY29udGV4dCksIFsoTlNEYXRlICopb2JqZWN0IHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0p
OworICAgICAgICAgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlRGF0ZShjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAxLCAmYXJndW1lbnQsIDApOworICAgICAgICAg
ICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCByZXN1bHQs
IENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoT2JqY0Nv
bnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgdmFsdWVJbnRlcm5hbFZhbHVlKFtjb250
ZXh0IHdyYXBwZXJGb3JPYmplY3Q6b2JqZWN0XSksIENvbnRhaW5lck5vbmUgfTsKK30KKworSlNW
YWx1ZVJlZiBvYmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQorewor
ICAgIE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRo
b3V0Q29weShjb250ZXh0LCBvYmplY3QpOworICAgIGlmICh0YXNrLnR5cGUgPT0gQ29udGFpbmVy
Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRhc2suanM7CisKKyAgICBPYmpjQ29udGFpbmVyQ29udmVy
dG9yIGNvbnZlcnRvcihjb250ZXh0KTsKKyAgICBjb252ZXJ0b3IuYWRkKHRhc2spOworICAgIEFT
U0VSVCghY29udmVydG9yLmlzV29ya0xpc3RFbXB0eSgpKTsKKworICAgIGRvIHsKKyAgICAgICAg
T2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBjdXJyZW50ID0gY29udmVydG9yLnRha2UoKTsK
KyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBjdXJyZW50LmpzKSk7CisgICAgICAgIEpTT2JqZWN0UmVmIGpzID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGN1cnJlbnQuanMsIDApOwor
CisgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT0gQ29udGFpbmVyQXJyYXkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSk7
CisgICAgICAgICAgICBOU0FycmF5ICogYXJyYXkgPSAoTlNBcnJheSAqKWN1cnJlbnQub2JqYzsK
KyAgICAgICAgICAgIE5TVUludGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOworICAgICAgICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKKyAg
ICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBqcywgaW5kZXgsIGNvbnZlcnRvci5jb252ZXJ0KFthcnJheSBvYmpl
Y3RBdEluZGV4OmluZGV4XSksIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJEaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIEFT
U0VSVChbY3VycmVudC5vYmpjIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsK
KyAgICAgICAgICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IChOU0RpY3Rpb25hcnkqKWN1
cnJlbnQub2JqYzsKKyAgICAgICAgICAgIE5TRW51bWVyYXRvciogZW51bWVyYXRvciA9IFtkaWN0
aW9uYXJ5IGtleUVudW1lcmF0b3JdOworICAgICAgICAgICAgd2hpbGUgKGlkIGtleSA9IFtlbnVt
ZXJhdG9yIG5leHRPYmplY3RdKSB7CisgICAgICAgICAgICAgICAgaWYgKFtrZXkgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYp
a2V5KTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBqcywgcHJvcGVydHlOYW1lLCBjb252ZXJ0b3IuY29udmVy
dChbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XSksIDAsIDApOworICAgICAgICAgICAgICAg
ICAgICBKU1N0cmluZ1JlbGVhc2UocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfSB3aGlsZSAoIWNvbnZlcnRv
ci5pc1dvcmtMaXN0RW1wdHkoKSk7CisKKyAgICByZXR1cm4gdGFzay5qczsKK30KKworSlNWYWx1
ZVJlZiB2YWx1ZUludGVybmFsVmFsdWUoSlNWYWx1ZSAqIHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZS0+bV92YWx1ZTsKK30KKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVl
UmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0Cit7CisgICAgcmV0dXJuIFtb
W0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgaW5Db250ZXh0OmNvbnRleHRdIGF1
dG9yZWxlYXNlXTsKK30KKworLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYp
dmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQKK3sKKyAgICBBU1NFUlQodmFsdWUp
OworCisgICAgb2JqY19pbml0V2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7CisKKyAgICBb
c3VwZXIgaW5pdF07CisgICAgW2NvbnRleHQgcHJvdGVjdDp2YWx1ZV07CisgICAgbV92YWx1ZSA9
IHZhbHVlOworICAgIHJldHVybiBzZWxmOworfQorCitzdHJ1Y3QgU3RydWN0VGFnSGFuZGxlciB7
CisgICAgU0VMIHR5cGVUb1ZhbHVlU0VMOworICAgIFNFTCB2YWx1ZVRvVHlwZVNFTDsKK307CisK
K3N0YXRpYyBTdHJ1Y3RUYWdIYW5kbGVyKiBnZXRTdHJ1Y3RUYWdIYW5kbGVyKGNvbnN0IGNoYXIq
IGVuY29kZWRUeXBlKQoreworICAgIHN0YXRpYyBTcGluTG9jayBnZXRTdHJ1Y3RUYWdIYW5kbGVy
TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xk
ZXIoJmdldFN0cnVjdFRhZ0hhbmRsZXJMb2NrKTsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFw
PFJlZlB0cjxTdHJpbmdJbXBsPiwgU3RydWN0VGFnSGFuZGxlcj4gU3RydWN0SGFuZGxlcnM7Cisg
ICAgc3RhdGljIFN0cnVjdEhhbmRsZXJzICptX3N0cnVjdEhhbmRsZXJzID0gMDsKKworICAgIGlm
ICghbV9zdHJ1Y3RIYW5kbGVycykgeworICAgICAgICBtX3N0cnVjdEhhbmRsZXJzID0gbmV3IFN0
cnVjdEhhbmRsZXJzKCk7CisKKyAgICAgICAgLy8gU3RlcCAxOiBmaW5kIGFsbCB2YWx1ZVdpdGg8
Rm9vPjppbkNvbnRleHQ6IGNsYXNzIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICAgICAgc2l6ZV90
IHZhbHVlV2l0aE1pbkxlbiA9IHN0cmxlbigidmFsdWVXaXRoWDppbkNvbnRleHQ6Iik7CisgICAg
ICAgIGZvckVhY2hNZXRob2RJbkNsYXNzKG9iamVjdF9nZXRDbGFzcyhbSlNWYWx1ZSBjbGFzc10p
LCBeKE1ldGhvZCBtZXRob2QpeworICAgICAgICAgICAgU0VMIHNlbCA9IG1ldGhvZF9nZXROYW1l
KG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2VsX2dldE5hbWUoc2Vs
KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgdmFsdWVXaXRoPEZvbz46Y29udGV4dDoKKyAgICAgICAgICAgIGlmIChsZW4g
PCB2YWx1ZVdpdGhNaW5MZW4gfHwgc3RybmNtcChuYW1lLCAidmFsdWVXaXRoIiwgOSkgfHwgc3Ry
bmNtcChuYW1lICsgbGVuIC0gMTEsICI6aW5Db250ZXh0OiIsIDExKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgWyBpZCwgU0VMLCA8dHlwZT4sIDxj
b250ZXh0VHlwZT4gXQorICAgICAgICAgICAgaWYgKG1ldGhvZF9nZXROdW1iZXJPZkFyZ3VtZW50
cyhtZXRob2QpICE9IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hh
ciBpZFR5cGVbM107CisgICAgICAgICAgICAvLyBDaGVjayAybmQgYXJndW1lbnQgdHlwZSBpcyAi
QCIKKyAgICAgICAgICAgIGNoYXIqIHNlY29uZFR5cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlw
ZShtZXRob2QsIDMpOworICAgICAgICAgICAgaWYgKHN0cmNtcChzZWNvbmRUeXBlLCAiQCIpKSB7
CisgICAgICAgICAgICAgICAgZnJlZShzZWNvbmRUeXBlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKHNlY29uZFR5cGUpOworICAgICAg
ICAgICAgLy8gQ2hlY2sgcmVzdWx0IHR5cGUgaXMgYWxzbyAiQCIKKyAgICAgICAgICAgIG1ldGhv
ZF9nZXRSZXR1cm5UeXBlKG1ldGhvZCwgaWRUeXBlLCAzKTsKKyAgICAgICAgICAgIGlmIChzdHJj
bXAoaWRUeXBlLCAiQCIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNo
YXIqIHR5cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlwZShtZXRob2QsIDIpOworICAgICAgICAg
ICAgbV9zdHJ1Y3RIYW5kbGVycy0+YWRkKFdURjo6U3RyaW5nKHR5cGUpLmltcGwoKSwgKFN0cnVj
dFRhZ0hhbmRsZXIpeyBzZWwsIDAgfSk7CisgICAgICAgICAgICBmcmVlKHR5cGUpOworICAgICAg
ICB9KTsKKworICAgICAgICAvLyBTdGVwIDI6IGZpbmQgYWxsIHRvPEZvbz4gaW5zdGFuY2UgbWV0
aG9kcyBpbiBKU1ZhbHVlLgorICAgICAgICBzaXplX3QgbWluTGVuVmFsdWUgPSBzdHJsZW4oInRv
WCIpOworICAgICAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhbSlNWYWx1ZSBjbGFzc10sIF4oTWV0
aG9kIG1ldGhvZCl7CisgICAgICAgICAgICBTRUwgc2VsID0gbWV0aG9kX2dldE5hbWUobWV0aG9k
KTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFtZShzZWwpOworICAg
ICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciB0bzxGb28+CisgICAgICAgICAgICBpZiAobGVuIDwgbWluTGVuVmFsdWUgfHwgc3RybmNt
cChuYW1lLCAidG8iLCAyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgWyBpZCwgU0VMIF0KKyAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0TnVtYmVy
T2ZBcmd1bWVudHMobWV0aG9kKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIC8vIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdmFsdWVXaXRoPEZvbz46Y29udGV4dDog
bWV0aG9kLgorICAgICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5UmV0dXJuVHlwZSht
ZXRob2QpOworCisgICAgICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1f
c3RydWN0SGFuZGxlcnMtPmZpbmQoV1RGOjpTdHJpbmcodHlwZSkuaW1wbCgpKTsKKyAgICAgICAg
ICAgIGZyZWUodHlwZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdEhhbmRsZXJz
LT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBTdHJ1Y3RUYWdI
YW5kbGVyJiBoYW5kbGVyID0gaXRlci0+dmFsdWU7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRo
YXQgc3RybGVuKDxmb28+KSA9PSBzdHJsZW4oPEZvbz4pCisgICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZVdpdGhOYW1lID0gc2VsX2dldE5hbWUoaGFuZGxlci50eXBlVG9WYWx1ZVNFTCk7Cisg
ICAgICAgICAgICBzaXplX3QgdmFsdWVXaXRoTGVuID0gc3RybGVuKHZhbHVlV2l0aE5hbWUpOwor
ICAgICAgICAgICAgaWYgKHZhbHVlV2l0aExlbiAtIHZhbHVlV2l0aE1pbkxlbiAhPSBsZW4gLSBt
aW5MZW5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBDaGVj
ayB0aGF0IDxGb28+ID09IDxGb28+CisgICAgICAgICAgICBpZiAoc3RybmNtcCh2YWx1ZVdpdGhO
YW1lICsgOSwgbmFtZSArIDIsIGxlbiAtIG1pbkxlblZhbHVlIC0gMSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaGFuZGxlci52YWx1ZVRvVHlwZVNFTCA9IHNlbDsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gU3RlcCAzOiBjbGVhbiB1cCAtIHJlbW92ZSBlbnRyaWVz
IHdoZXJlIHdlIGZvdW5kIHByb3NwZWN0aXZlIHZhbHVlV2l0aDxGb28+OmluQ29udGV4dDogY29u
dmVyc2lvbnMsIGJ1dCBubyBtYXRjaGluZyB0bzxGb28+IG1ldGhvZHMuCisgICAgICAgIHR5cGVk
ZWYgV1RGOjpIYXNoU2V0PFJlZlB0cjxXVEY6OlN0cmluZ0ltcGw+ID4gUmVtb3ZlU2V0OworICAg
ICAgICBSZW1vdmVTZXQgcmVtb3ZlU2V0OworICAgICAgICBmb3IgKFN0cnVjdEhhbmRsZXJzOjpp
dGVyYXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5kbGVycy0+YmVnaW4oKTsgaXRlciAhPSBtX3N0cnVj
dEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBTdHJ1Y3RUYWdIYW5kbGVy
JiBoYW5kbGVyID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXIudmFsdWVU
b1R5cGVTRUwpCisgICAgICAgICAgICAgICAgcmVtb3ZlU2V0LmFkZChpdGVyLT5rZXkpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChSZW1vdmVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSByZW1vdmVT
ZXQuYmVnaW4oKTsgaXRlciAhPSByZW1vdmVTZXQuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAg
IG1fc3RydWN0SGFuZGxlcnMtPnJlbW92ZSgqaXRlcik7CisgICAgfQorCisgICAgU3RydWN0SGFu
ZGxlcnM6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0cnVjdEhhbmRsZXJzLT5maW5kKFdURjo6U3RyaW5n
KGVuY29kZWRUeXBlKS5pbXBsKCkpOworICAgIGlmIChpdGVyID09IG1fc3RydWN0SGFuZGxlcnMt
PmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJml0ZXItPnZhbHVlOworfQor
CisrIChTRUwpc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFn
Cit7CisgICAgU3RydWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVjdFRhZ0hhbmRsZXIo
c3RydWN0VGFnKTsKKyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnR5cGVUb1ZhbHVlU0VM
IDogbmlsOworfQorCisrIChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Oihjb25zdCBjaGFy
ICopc3RydWN0VGFnCit7CisgICAgU3RydWN0VGFnSGFuZGxlciogaGFuZGxlciA9IGdldFN0cnVj
dFRhZ0hhbmRsZXIoc3RydWN0VGFnKTsKKyAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXItPnZh
bHVlVG9UeXBlU0VMIDogbmlsOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
W2NvbnRleHQgdW5wcm90ZWN0Om1fdmFsdWVdOworICAgIG9iamNfZGVzdHJveVdlYWsoJm1fd2Vh
a0NvbnRleHQpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNj
cmlwdGlvbgoreworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChpZCB3cmFwcGVk
ID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBt
X3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFt3cmFwcGVkIGRlc2NyaXB0aW9uXTsKKyAgICByZXR1
cm4gW3NlbGYgdG9TdHJpbmddOworfQorCitOU0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2Nh
dGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKK3sKKyAgICBTRUwgc2VsZWN0b3IgPSBb
SlNWYWx1ZSBzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6ZW5jb2RlZFR5cGVdOworICAgIGlmICgh
c2VsZWN0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hhciogbWV0aG9kVHlw
ZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldENsYXNzTWV0aG9kKFtKU1ZhbHVl
IGNsYXNzXSwgc2VsZWN0b3IpKTsKKyAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJ
bnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07CisgICAgW2ludm9jYXRpb24g
c2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAgIHJldHVybiBpbnZvY2F0aW9uOworfQorCitOU0lu
dm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlw
ZSkKK3sKKyAgICBTRUwgc2VsZWN0b3IgPSBbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1
Y3Q6ZW5jb2RlZFR5cGVdOworICAgIGlmICghc2VsZWN0b3IpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgY29uc3QgY2hhciogbWV0aG9kVHlwZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNs
YXNzX2dldEluc3RhbmNlTWV0aG9kKFtKU1ZhbHVlIGNsYXNzXSwgc2VsZWN0b3IpKTsKKyAgICBO
U0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0
aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1l
dGhvZFR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAg
IHJldHVybiBpbnZvY2F0aW9uOworfQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9ydCAi
QVBJSlNWYWx1ZS5oIgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIEpT
VmFsdWUoSW50ZXJuYWwpCisKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUq
KTsKKworKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihK
U1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKworSlNWYWx1
ZVJlZiBvYmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqLCBpZCk7CitpZCB2YWx1ZVRvT2JqZWN0KEpT
Q29udGV4dCAqLCBKU1ZhbHVlUmVmKTsKK2lkIHZhbHVlVG9OdW1iZXIoSlNHbG9iYWxDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb1N0cmlu
ZyhKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CitpZCB2YWx1ZVRvRGF0ZShKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CitpZCB2YWx1ZVRvQXJyYXkoSlNHbG9iYWxDb250ZXh0UmVmLCBKU1Zh
bHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworaWQgdmFsdWVUb0RpY3Rpb25hcnkoSlNH
bG9iYWxDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisr
IChTRUwpc2VsZWN0b3JGb3JTdHJ1Y3RUb1ZhbHVlOihjb25zdCBjaGFyICopc3RydWN0VGFnOwor
KyAoU0VMKXNlbGVjdG9yRm9yVmFsdWVUb1N0cnVjdDooY29uc3QgY2hhciAqKXN0cnVjdFRhZzsK
KworQGVuZAorCitOU0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25zdCBj
aGFyKiBlbmNvZGVkVHlwZSk7CitOU0ludm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZv
cihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNf
T0JKQ19BUElfRU5BQkxFRAorCisvLyBBbiBpbnN0YW5jZSBvZiBKU1ZpcnR1YWxNYWNoaW5lIHJl
cHJlc2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCAib2JqZWN0IHNwYWNlIgorLy8gb3Igc2V0IG9m
IGV4ZWN1dGlvbiByZXNvdXJjZXMuIFRocmVhZCBzYWZldHkgaXMgc3VwcG9ydGVkIGJ5IGxvY2tp
bmcgdGhlCisvLyB2aXJ0dWFsIG1hY2hpbmUsIHdpdGggY29uY3VycmVudCBKYXZhU2NyaXB0IGV4
ZWN1dGlvbiBzdXBwb3J0ZWQgYnkgYWxsb2NhdGluZworLy8gc2VwYXJhdGUgaW5zdGFuY2VzIG9m
IEpTVmlydHVhbE1hY2hpbmUuCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCitAaW50ZXJm
YWNlIEpTVmlydHVhbE1hY2hpbmUgOiBOU09iamVjdAorCistIChpZClpbml0OworCitAZW5kCisK
KyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisK
KyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
IgorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZSB7CisgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKK30KKworLSAoaWQpaW5pdAoreworICAgIFtzdXBlciBpbml0XTsKKyAg
ICBtX2dyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICB0b0pTKG1fZ3JvdXApLT5t
X2FwaURhdGEgPSBzZWxmOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICB0b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSAwOworICAgIEpTQ29udGV4dEdyb3VwUmVs
ZWFzZShtX2dyb3VwKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0pTQ29udGV4dEdyb3Vw
UmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxN
YWNoaW5lKQoreworICAgIHJldHVybiB2aXJ0dWFsTWFjaGluZS0+bV9ncm91cDsKK30KKworQGVu
ZAorCisjZW5kaWYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCitAaW50ZXJm
YWNlIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCisKK0pTQ29udGV4dEdyb3VwUmVmIGdldEdy
b3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUqKTsKKworQGVuZAorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
KyNpbXBvcnQgPEpTVmFsdWVJbnRlcm5hbC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUu
aD4KKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBKU1dyYXBwZXJNYXAg
OiBOU09iamVjdAorCistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7
CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CisKK0BlbmQKKwor
aWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwor
CitQcm90b2NvbCogZ2V0SlNFeHBvcnRQcm90b2NvbCgpOworQ2xhc3MgZ2V0TlNCbG9ja0NsYXNz
KCk7CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBl
ck1hcC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9y
dCAiSmF2YVNjcmlwdENvcmUuaCIKKworI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKworI2ltcG9y
dCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgorI2ltcG9y
dCAiT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgi
CisjaW1wb3J0IDx3dGYvVENTcGluTG9jay5oPgorI2ltcG9ydCAid3RmL1ZlY3Rvci5oIgorCitz
dGF0aWMgdm9pZCB3cmFwcGVyRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFso
aWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkgcmVsZWFzZV07Cit9CisKKy8vIEFsbCB3cmFw
cGVyIG9iamVjdHMgYW5kIGNvbnN0cnVjdG9yIG9iamVjdHMgZGVyaXZlIGZyb20gdGhpcyB0eXBl
LCBzbyB3ZSBjYW4gZGV0ZWN0ICYgdW53cmFwIE9iamVjdGl2ZS1DIGluc3RhbmNlcy9DbGFzc2Vz
Lgorc3RhdGljIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgU3Bpbkxv
Y2sgaW5pdExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKKyAgICBTcGluTG9ja0hvbGRlciBs
b2NrSG9sZGVyKCZpbml0TG9jayk7CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9
IDA7CisKKyAgICBpZiAoIWNsYXNzUmVmKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRl
ZmluaXRpb247CisgICAgICAgIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsK
KyAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAib2JqY19jbGFzcyI7CisgICAgICAgIGRl
ZmluaXRpb24uZmluYWxpemUgPSB3cmFwcGVyRmluYWxpemU7CisgICAgICAgIGNsYXNzUmVmID0g
SlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGNsYXNzUmVm
OworfQorCisvLyBEZWZhdWx0IGNvbnZlcnNpb24gb2Ygc2VsZWN0b3JzIHRvIHByb3BlcnR5IG5h
bWVzLgorLy8gQWxsIHNlbWljb2xvbnMgYXJlIHJlbW92ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZv
bGxvd2luZyBhIHNlbWljb2xvbiBhcmUgY2FwaXRhbGl6ZWQuCitzdGF0aWMgTlNTdHJpbmcqIHNl
bGVjdG9yVG9Qcm9wZXJ0eU5hbWUoY29uc3QgY2hhciogc3RhcnQpCit7CisgICAgLy8gVXNlICdp
bmRleCcgdG8gY2hlY2sgZm9yIGNvbG9ucywgaWYgdGhlcmUgYXJlIG5vbiwgdGhpcyBpcyBlYXN5
IQorICAgIGNvbnN0IGNoYXIqIGZpcnN0Q29sb24gPSBpbmRleChzdGFydCwgJzonKTsKKyAgICBp
ZiAoIWZpcnN0Q29sb24pCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6c3RhcnRdOworCisgICAgLy8gJ2hlYWRlcicgaXMgdGhlIGxlbmd0aCBvZiBzdHJpbmcg
dXAgdG8gdGhlIGZpcnN0IGNvbG9uLgorICAgIHNpemVfdCBoZWFkZXIgPSBmaXJzdENvbG9uIC0g
c3RhcnQ7CisgICAgLy8gVGhlIG5ldyBzdHJpbmcgbmVlZHMgdG8gYmUgbG9uZyBlbm91Z2ggdG8g
aG9sZCAnaGVhZGVyJywgcGx1cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcsIGV4Y2x1ZGlu
ZworICAgIC8vIGF0IGxlYXN0IG9uZSAnOicsIGJ1dCBpbmNsdWRpbmcgYSAnXDAnLiAoVGhpcyBp
cyBjb25zZXJ2YXRpdmUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgJzonKS4KKyAgICBjaGFy
KiBidWZmZXIgPSAoY2hhciopbWFsbG9jKGhlYWRlciArIHN0cmxlbihmaXJzdENvbG9uICsgMSkg
KyAxKTsKKyAgICAvLyBDb3B5ICdoZWFkZXInIGNoYXJhY3RlcnMsIHNldCBvdXRwdXQgdG8gcG9p
bnQgdG8gdGhlIGVuZCBvZiB0aGlzICYgaW5wdXQgdG8gcG9pbnQgcGFzdCB0aGUgZmlyc3QgJzon
LgorICAgIG1lbWNweShidWZmZXIsIHN0YXJ0LCBoZWFkZXIpOworICAgIGNoYXIqIG91dHB1dCA9
IGJ1ZmZlciArIGhlYWRlcjsKKyAgICBjb25zdCBjaGFyKiBpbnB1dCA9IHN0YXJ0ICsgaGVhZGVy
ICsgMTsKKworICAgIC8vIE9uIGVudHJ5IHRvIHRoZSBsb29wLCB3ZSBoYXZlIGFscmVhZHkgc2tp
cHBlZCBvdmVyIGEgJzonIGZyb20gdGhlIGlucHV0LgorICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIGNoYXIgYzsKKyAgICAgICAgLy8gU2tpcCBvdmVyIGFueSBhZGRpdGlvbmFsICc6J3MuIFdl
J2xsIGxlYXZlIGMgaG9sZGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICAg
IC8vIGxhc3QgJzonLCBhbmQgaW5wdXQgcG9pbnRpbmcgcGFzdCBjLgorICAgICAgICB3aGlsZSAo
KGMgPSAqKGlucHV0KyspKSA9PSAnOicpOworICAgICAgICAvLyBDb3B5IHRoZSBjaGFyYWN0ZXIs
IGNvbnZlcnRpbmcgdG8gdXBwZXIgY2FzZSBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIElmIHRo
ZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAnXDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgIGlm
ICghKCoob3V0cHV0KyspID0gdG91cHBlcihjKSkpCisgICAgICAgICAgICBnb3RvIGRvbmU7Cisg
ICAgICAgIC8vIExvb3Agb3ZlciBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gJzonLgorICAgICAgICB3
aGlsZSAoKGMgPSAqKGlucHV0KyspKSAhPSAnOicpIHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhl
IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgd2UgY29weSBpcyAn
XDAnLCB0aGVuIHdlJ3JlIGRvbmUhCisgICAgICAgICAgICBpZiAoISgqKG91dHB1dCsrKSA9IGMp
KQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgd2UndmUgY29uc3VtZWQgYSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0Lgor
ICAgIH0KK2RvbmU6CisgICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpidWZmZXJdOworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBNYWtlIGFuIG9iamVjdCB0aGF0IGlzIGluIGFsbCB3YXlzIGFyZSBjb21wbGV0
ZWx5IHZhbmlsbGEgSmF2YVNjcmlwdCBvYmplY3QsCisvLyBvdGhlciB0aGFuIHRoYXQgaXQgaGFz
IGEgbmF0aXZlIGJyYW5kIHNldCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGJ5IHRoZSBkZWZhdWx0
CisvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGNvbXZlcnNpb24uCitzdGF0aWMgSlNWYWx1
ZSogY3JlYXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5kKEpTQ29udGV4dCogY29udGV4dCwgTlNTdHJp
bmcqIGJyYW5kLCBKU0NsYXNzUmVmIHBhcmVudENsYXNzID0gMCwgdm9pZCogcHJpdmF0ZURhdGEg
PSAwKQoreworICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlv
biA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0g
W2JyYW5kIFVURjhTdHJpbmddOworICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBwYXJlbnRD
bGFzczsKKyAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlv
bik7CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIGNsYXNzUmVmLCBwcml2YXRlRGF0YSk7CisgICAgSlNDbGFzc1Jl
bGVhc2UoY2xhc3NSZWYpOworICAgIHJldHVybiBbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFs
dWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworLy8gTG9vayBmb3IgQG9wdGlvbmFs
IHByb3BlcnRpZXMgaW4gdGhlIHByb3RvdHlwZSBjb250YWluaW5nIGEgc2VsZWN0b3IgdG8gcHJv
cGVydHkKKy8vIG5hbWUgbWFwcGluZywgc2VwYXJhdGVkIGJ5IGEgX19KU19FWFBPUlRfQVNfXyBk
ZWxpbWl0ZXIuCitzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSogY3JlYXRlUmVuYW1lTWFwKFBy
b3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kKQoreworICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkqIHJlbmFtZU1hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF07CisKKyAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgTk8sIGlzSW5zdGFu
Y2VNZXRob2QsIF4oU0VMIHNlbCwgY29uc3QgY2hhciopeworICAgICAgICBOU1N0cmluZyogcmVu
YW1lID0gQChzZWxfZ2V0TmFtZShzZWwpKTsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtyZW5h
bWUgcmFuZ2VPZlN0cmluZzpAIl9fSlNfRVhQT1JUX0FTX18iXTsKKyAgICAgICAgaWYgKHJhbmdl
LmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5T
U3RyaW5nKiBzZWxlY3RvciA9IFtyZW5hbWUgc3Vic3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlv
bl07CisgICAgICAgIE5TVUludGVnZXIgYmVnaW4gPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxl
bmd0aDsKKyAgICAgICAgTlNVSW50ZWdlciBsZW5ndGggPSBbcmVuYW1lIGxlbmd0aF0gLSBiZWdp
biAtIDE7CisgICAgICAgIE5TU3RyaW5nKiBuYW1lID0gW3JlbmFtZSBzdWJzdHJpbmdXaXRoUmFu
Z2U6KE5TUmFuZ2UpeyBiZWdpbiwgbGVuZ3RoIH1dOworICAgICAgICByZW5hbWVNYXBbc2VsZWN0
b3JdID0gbmFtZTsKKyAgICB9KTsKKworICAgIHJldHVybiByZW5hbWVNYXA7Cit9CisKK2lubGlu
ZSB2b2lkIHB1dE5vbkVudW1lcmFibGUoSlNWYWx1ZSogYmFzZSwgTlNTdHJpbmcqIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgW2Jhc2UgZGVmaW5lUHJvcGVydHk6cHJvcGVy
dHlOYW1lIGRlc2NyaXB0b3I6QHsKKyAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JWYWx1ZUtl
eTogdmFsdWUsCisgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yV3JpdGFibGVLZXk6IEBZRVMs
CisgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAg
ICBKU1Byb3BlcnR5RGVzY3JpcHRvckNvbmZpZ3VyYWJsZUtleTogQFlFUworICAgIH1dOworfQor
CisvLyBUaGlzIG1ldGhvZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlcXVpcmVkIG1l
dGhvZHMgaW4gdGhlIHByb3RvY29sLCBhbmQ6CisvLyAgKiBEZXRlcm1pbmUgYSBwcm9wZXJ0eSBu
YW1lIChlaXRoZXIgdmlhIGEgcmVuYW1lTWFwIG9yIGRlZmF1bHQgY29udmVyc2lvbikuCisvLyAg
KiBJZiBhbiBhY2Nlc3Nvck1hcCBpcyBwcm92aWRlZCwgYW5kIGNvbmF0aW5zIGEgdGhpcyBuYW1l
LCBzdG9yZSB0aGUgbWV0aG9kIGluIHRoZSBtYXAuCisvLyAgKiBPdGhlcndpc2UsIGlmIHRoZSBv
YmplY3QgZG9lc24ndCBhbHJlYWR5IGNvbmF0aW4gYSBwcm9wZXJ0eSB3aXRoIG5hbWUsIGNyZWF0
ZSBpdC4KK3N0YXRpYyB2b2lkIGNvcHlNZXRob2RzVG9PYmplY3QoSlNDb250ZXh0KiBjb250ZXh0
LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0
aG9kLCBKU1ZhbHVlKiBvYmplY3QsIE5TTXV0YWJsZURpY3Rpb25hcnkqIGFjY2Vzc29yTWV0aG9k
cyA9IG5pbCkKK3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZW5hbWVNYXAgPSBjcmVhdGVS
ZW5hbWVNYXAocHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QpOworCisgICAgZm9yRWFjaE1ldGhv
ZEluUHJvdG9jb2wocHJvdG9jb2wsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCwgXihTRUwgc2VsLCBj
b25zdCBjaGFyKiB0eXBlcyl7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWVDU3RyID0gc2VsX2dl
dE5hbWUoc2VsKTsKKyAgICAgICAgTlNTdHJpbmcqIG5hbWUgPSBAKG5hbWVDU3RyKTsKKyAgICAg
ICAgaWYgKGFjY2Vzc29yTWV0aG9kcyAmJiBhY2Nlc3Nvck1ldGhvZHNbbmFtZV0pIHsKKyAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9k
KGNvbnRleHQsIG9iamNDbGFzcywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlw
ZXMpOworICAgICAgICAgICAgaWYgKCFtZXRob2QpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgYWNjZXNzb3JNZXRob2RzW25hbWVdID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFs
dWU6bWV0aG9kIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG5hbWUgPSByZW5hbWVNYXBbbmFtZV07CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAg
ICAgICAgICAgICAgbmFtZSA9IHNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUobmFtZUNTdHIpOworICAg
ICAgICAgICAgaWYgKFtvYmplY3QgaGFzUHJvcGVydHk6bmFtZV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JNZXRob2QoY29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1l
dGhvZCwgc2VsLCB0eXBlcyk7CisgICAgICAgICAgICBpZiAobWV0aG9kKQorICAgICAgICAgICAg
ICAgIHB1dE5vbkVudW1lcmFibGUob2JqZWN0LCBuYW1lLCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAg
W3JlbmFtZU1hcCByZWxlYXNlXTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VQcm9wZXJ0eUF0dHJp
YnV0ZXMob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5LCBjaGFyKiYgZ2V0dGVyTmFtZSwgY2hhciom
IHNldHRlck5hbWUpCit7CisgICAgYm9vbCByZWFkb25seSA9IGZhbHNlOworICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZUNvdW50OworICAgIG9iamNfcHJvcGVydHlfYXR0cmlidXRlX3QqIGF0dHJpYnV0
ZXMgPSBwcm9wZXJ0eV9jb3B5QXR0cmlidXRlTGlzdChwcm9wZXJ0eSwgJmF0dHJpYnV0ZUNvdW50
KTsKKyAgICBpZiAoYXR0cmlidXRlQ291bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKihhdHRy
aWJ1dGVzW2ldLm5hbWUpKSB7CisgICAgICAgICAgICBjYXNlICdHJzoKKyAgICAgICAgICAgICAg
ICBnZXR0ZXJOYW1lID0gc3RyZHVwKGF0dHJpYnV0ZXNbaV0udmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgc2V0dGVy
TmFtZSA9IHN0cmR1cChhdHRyaWJ1dGVzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgICAgIHJlYWRvbmx5ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJlZShh
dHRyaWJ1dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlYWRvbmx5OworfQorCitzdGF0aWMgY2hh
ciogbWFrZVNldHRlck5hbWUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzaXplX3QgbmFtZUxl
bmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBjaGFyKiBzZXR0ZXJOYW1lID0gKGNoYXIqKW1hbGxv
YyhuYW1lTGVuZ3RoICsgNSk7IC8vICJzZXQiIE5hbWUgIjpcMCIKKyAgICBzZXR0ZXJOYW1lWzBd
ID0gJ3MnOworICAgIHNldHRlck5hbWVbMV0gPSAnZSc7CisgICAgc2V0dGVyTmFtZVsyXSA9ICd0
JzsKKyAgICBzZXR0ZXJOYW1lWzNdID0gdG91cHBlcigqbmFtZSk7CisgICAgbWVtY3B5KHNldHRl
ck5hbWUgKyA0LCBuYW1lICsgMSwgbmFtZUxlbmd0aCAtIDEpOworICAgIHNldHRlck5hbWVbbmFt
ZUxlbmd0aCArIDNdID0gJzonOworICAgIHNldHRlck5hbWVbbmFtZUxlbmd0aCArIDRdID0gJ1ww
JzsKKyAgICByZXR1cm4gc2V0dGVyTmFtZTsKK30KKworc3RhdGljIHZvaWQgY29weVByb3RvdHlw
ZVByb3BlcnRpZXMoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY29s
KiBwcm90b2NvbCwgSlNWYWx1ZSogcHJvdG90eXBlVmFsdWUpCit7CisgICAgLy8gRmlyc3QgZ2F0
aGVyIHByb3ByZXRpZXMgaW50byB0aGlzIGxpc3QsIHRoZW4gaGFuZGxlIHRoZSBtZXRob2RzIChj
YXB0dXJpbmcgdGhlIGFjY2Vzc29yIG1ldGhvZHMpLgorICAgIHN0cnVjdCBQcm9wZXJ0eSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIGNoYXIqIGdldHRlck5hbWU7CisgICAg
ICAgIGNoYXIqIHNldHRlck5hbWU7CisgICAgfTsKKyAgICBfX2Jsb2NrIFdURjo6VmVjdG9yPFBy
b3BlcnR5PiBwcm9wZXJ0eUxpc3Q7CisKKyAgICAvLyBNYXAgcmVjb3JkaW5nIHRoZSBtZXRob2Rz
IHVzZWQgYXMgZ2V0dGVycy9zZXR0ZXJzLgorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmFjY2Vz
c29yTWV0aG9kcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworCisgICAgLy8g
VXNlZnVsIHZhbHVlLgorICAgIEpTVmFsdWUqIHVuZGVmaW5lZCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKKworICAgIGZvckVhY2hQcm9wZXJ0eUluUHJv
dG9jb2wocHJvdG9jb2wsIF4ob2JqY19wcm9wZXJ0eV90IHByb3BlcnR5KXsKKyAgICAgICAgY2hh
ciogZ2V0dGVyTmFtZSA9IDA7CisgICAgICAgIGNoYXIqIHNldHRlck5hbWUgPSAwOworICAgICAg
ICBib29sIHJlYWRvbmx5ID0gcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZXMocHJvcGVydHksIGdldHRl
ck5hbWUsIHNldHRlck5hbWUpOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gcHJvcGVydHlf
Z2V0TmFtZShwcm9wZXJ0eSk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2V0
dGVyICYgc2V0dGVyIG1ldGhvZHMgdG8gCisgICAgICAgIGlmICghZ2V0dGVyTmFtZSkKKyAgICAg
ICAgICAgIGdldHRlck5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgICAgIGFjY2Vzc29yTWV0aG9k
c1tAKGdldHRlck5hbWUpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKCFyZWFkb25seSkgewor
ICAgICAgICAgICAgaWYgKCFzZXR0ZXJOYW1lKQorICAgICAgICAgICAgICAgIHNldHRlck5hbWUg
PSBtYWtlU2V0dGVyTmFtZShuYW1lKTsKKyAgICAgICAgICAgIGFjY2Vzc29yTWV0aG9kc1tAKHNl
dHRlck5hbWUpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUg
cHJvcGVydGllcyB0byBhIGxpc3QuCisgICAgICAgIHByb3BlcnR5TGlzdC5hcHBlbmQoKFByb3Bl
cnR5KXsgbmFtZSwgZ2V0dGVyTmFtZSwgc2V0dGVyTmFtZSB9KTsKKyAgICB9KTsKKworICAgIC8v
IENvcHkgbWV0aG9kcyB0byB0aGUgcHJvdG90eXBlLCBjYXB0dXJpbmcgYWNjZXNzb3JzIGluIHRo
ZSBhY2Nlc3Nvck1ldGhvZHMgbWFwLgorICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwg
b2JqY0NsYXNzLCBwcm90b2NvbCwgWUVTLCBwcm90b3R5cGVWYWx1ZSwgYWNjZXNzb3JNZXRob2Rz
KTsKKworICAgIC8vIEl0ZXJhdGUgdGhlIHByb3BlcnR5TGlzdCAmIGdlbmVyYXRlIGFjY2Vzc29y
IHByb3BlcnRpZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eUxpc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgUHJvcGVydHkmIHByb3BlcnR5ID0gcHJvcGVydHlMaXN0W2ld
OworCisgICAgICAgIEpTVmFsdWUqIGdldHRlciA9IGFjY2Vzc29yTWV0aG9kc1tAKHByb3BlcnR5
LmdldHRlck5hbWUpXTsKKyAgICAgICAgZnJlZShwcm9wZXJ0eS5nZXR0ZXJOYW1lKTsKKyAgICAg
ICAgQVNTRVJUKCFbZ2V0dGVyIGlzVW5kZWZpbmVkXSk7CisKKyAgICAgICAgSlNWYWx1ZSogc2V0
dGVyID0gdW5kZWZpbmVkOworICAgICAgICBpZiAocHJvcGVydHkuc2V0dGVyTmFtZSkgeworICAg
ICAgICAgICAgc2V0dGVyID0gYWNjZXNzb3JNZXRob2RzW0AocHJvcGVydHkuc2V0dGVyTmFtZSld
OworICAgICAgICAgICAgZnJlZShwcm9wZXJ0eS5zZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIEFT
U0VSVCghW3NldHRlciBpc1VuZGVmaW5lZF0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBbcHJvdG90eXBlVmFsdWUgZGVmaW5lUHJvcGVydHk6QChwcm9wZXJ0eS5uYW1lKSBkZXNjcmlw
dG9yOkB7CisgICAgICAgICAgICBKU1Byb3BlcnR5RGVzY3JpcHRvckdldEtleTogZ2V0dGVyLAor
ICAgICAgICAgICAgSlNQcm9wZXJ0eURlc2NyaXB0b3JTZXRLZXk6IHNldHRlciwKKyAgICAgICAg
ICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleTogQE5PLAorICAgICAgICAgICAg
SlNQcm9wZXJ0eURlc2NyaXB0b3JDb25maWd1cmFibGVLZXk6IEBZRVMKKyAgICAgICAgfV07Cisg
ICAgfQorfQorCitAaW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6IE5TT2JqZWN0IHsKKyAgICBK
U0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBDbGFzcyBtX2NsYXNzOworICAgIGJvb2wgbV9ibG9j
azsKKyAgICBKU0NsYXNzUmVmIG1fY2xhc3NSZWY7CisgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7
CisgICAgSlNWYWx1ZSogbV9jb25zdHJ1Y3RvcjsKK30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0
OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xhc3M6KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzoo
SlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5mbzsKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9y
T2JqZWN0OihpZClvYmplY3Q7CistIChKU1ZhbHVlICopY29uc3RydWN0b3I7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIEpTT2JqQ0NsYXNzSW5mbworCistIChpZClpbml0V2l0aENvbnRleHQ6
KEpTQ29udGV4dCopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihK
U09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZvCit7CisgICAgW3N1cGVyIGluaXRdOworCisg
ICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFtZShjbHMpOworICAgIG1fY29u
dGV4dCA9IGNvbnRleHQ7CisgICAgbV9jbGFzcyA9IGNsczsKKyAgICBtX2Jsb2NrID0gW2NscyBp
c1N1YmNsYXNzT2ZDbGFzczpnZXROU0Jsb2NrQ2xhc3MoKV07CisgICAgSlNDbGFzc0RlZmluaXRp
b24gZGVmaW5pdGlvbjsKKyAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7
CisgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgZGVmaW5pdGlvbi5w
YXJlbnRDbGFzcyA9IHdyYXBwZXJDbGFzcygpOworICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3Jl
YXRlKCZkZWZpbml0aW9uKTsKKworICAgIEFTU0VSVCgoY2xzID09IFtOU09iamVjdCBjbGFzc10p
ID09ICFzdXBlckNsYXNzSW5mbyk7CisgICAgaWYgKCFzdXBlckNsYXNzSW5mbykgeworICAgICAg
ICBtX2NvbnN0cnVjdG9yID0gW2NvbnRleHRbQCJPYmplY3QiXSByZXRhaW5dOworICAgICAgICBt
X3Byb3RvdHlwZSA9IFttX2NvbnN0cnVjdG9yW0AicHJvdG90eXBlIl0gcmV0YWluXTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHByb3RvdHlwZS9jb25zdHJ1Y3RvciBwYWly
LgorICAgICAgICBtX3Byb3RvdHlwZSA9IGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChjb250
ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzUHJvdG90eXBlIiwgY2xhc3NOYW1l
XSk7CisgICAgICAgIG1fY29uc3RydWN0b3IgPSBjcmVhdGVPYmplY3RXaXRoQ3VzdG9tQnJhbmQo
Y29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlc0NvbnN0cnVjdG9yIiwgY2xh
c3NOYW1lXSwgd3JhcHBlckNsYXNzKCksIFtjbHMgcmV0YWluXSk7CisgICAgICAgIHB1dE5vbkVu
dW1lcmFibGUobV9wcm90b3R5cGUsIEAiY29uc3RydWN0b3IiLCBtX2NvbnN0cnVjdG9yKTsKKyAg
ICAgICAgcHV0Tm9uRW51bWVyYWJsZShtX2NvbnN0cnVjdG9yLCBAInByb3RvdHlwZSIsIG1fcHJv
dG90eXBlKTsKKworICAgICAgICBQcm90b2NvbCogZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9y
dFByb3RvY29sKCk7CisgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29s
KGNscywgZXhwb3J0UHJvdG9jb2wsIF4oUHJvdG9jb2wqIHByb3RvY29sKXsKKyAgICAgICAgICAg
IGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKGNvbnRleHQsIGNscywgcHJvdG9jb2wsIG1fcHJvdG90
eXBlKTsKKyAgICAgICAgICAgIGNvcHlNZXRob2RzVG9PYmplY3QoY29udGV4dCwgY2xzLCBwcm90
b2NvbCwgTk8sIG1fY29uc3RydWN0b3IpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBTZXQg
W1Byb3RvdHlwZV0uCisgICAgICAgIG1fcHJvdG90eXBlW0AiX19wcm90b19fIl0gPSBzdXBlckNs
YXNzSW5mby0+bV9wcm90b3R5cGU7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYpOworICAgIFtt
X3Byb3RvdHlwZSByZWxlYXNlXTsKKyAgICBbbV9jb25zdHJ1Y3RvciByZWxlYXNlXTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClv
YmplY3QKK3sKKyAgICBBU1NFUlQoW29iamVjdCBpc0tpbmRPZkNsYXNzOm1fY2xhc3NdKTsKKyAg
ICBBU1NFUlQobV9ibG9jayA9PSBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6Z2V0TlNCbG9ja0NsYXNz
KCldKTsKKyAgICBpZiAobV9ibG9jaykgeworICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9k
ID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhtX2NvbnRleHQsIG9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6bWV0aG9kIGluQ29udGV4dDpt
X2NvbnRleHRdOworICAgIH0KKworICAgIEpTVmFsdWVSZWYgcHJvdG90eXBlVmFsdWUgPSB2YWx1
ZUludGVybmFsVmFsdWUobV9wcm90b3R5cGUpOworICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpLCBwcm90b3R5cGVWYWx1ZSkpOworICAg
IEpTT2JqZWN0UmVmIHByb3RvdHlwZSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KG1fY29udGV4dCksIHByb3RvdHlwZVZhbHVlLCAwKTsKKworICAgIEpTT2JqZWN0UmVm
IHdyYXBwZXIgPSBKU09iamVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQp
LCBtX2NsYXNzUmVmLCBbb2JqZWN0IHJldGFpbl0pOworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBl
KGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9jb250ZXh0KSwgd3JhcHBlciwgcHJvdG90eXBlKTsK
KyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6d3JhcHBlciBpbkNvbnRleHQ6bV9j
b250ZXh0XTsKK30KKworLSAoSlNWYWx1ZSAqKWNvbnN0cnVjdG9yCit7CisgICAgcmV0dXJuIG1f
Y29uc3RydWN0b3I7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7
CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogbV9j
bGFzc01hcDsKK30KKworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQK
K3sKKyAgICBbc3VwZXIgaW5pdF07CisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2Ns
YXNzTWFwID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW21fY2xhc3NNYXAgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5m
b0ZvckNsYXNzOihDbGFzcyljbHMKK3sKKyAgICBpZiAoIWNscykKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIC8vIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBhIEpTT2JqQ0NsYXNz
SW5mbyBmb3IgdGhpcyBDbGFzcy4KKyAgICBpZiAoSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8g
PSAoSlNPYmpDQ2xhc3NJbmZvKiltX2NsYXNzTWFwW2Nsc10pCisgICAgICAgIHJldHVybiBjbGFz
c0luZm87CisKKyAgICAvLyBTa2lwIGludGVybmFsIGNsYXNzZXMgYmVnaW5pbmcgd2l0aCAnXycg
LSBqdXN0IGNvcHkgbGluayB0byB0aGUgcGFyZW50IGNsYXNzJ3MgaW5mby4KKyAgICBpZiAoJ18n
ID09ICpjbGFzc19nZXROYW1lKGNscykpCisgICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10g
PSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldOworCisg
ICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5p
dFdpdGhDb250ZXh0Om1fY29udGV4dCBmb3JDbGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYg
Y2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2Vd
OworfQorCistIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0Cit7CisgICAg
SlNWYWx1ZSogd3JhcHBlciA9IG9iamNfZ2V0QXNzb2NpYXRlZE9iamVjdChvYmplY3QsIG1fY29u
dGV4dCk7CisgICAgaWYgKHdyYXBwZXIgJiYgd3JhcHBlci5jb250ZXh0KQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKworICAgIGlmIChjbGFzc19pc01ldGFDbGFzcyhvYmplY3RfZ2V0Q2xhc3Mo
b2JqZWN0KSkpCisgICAgICAgIHdyYXBwZXIgPSBbW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENs
YXNzKW9iamVjdF0gY29uc3RydWN0b3JdOworICAgIGVsc2UgeworICAgICAgICBKU09iakNDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IFtzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOltvYmplY3QgY2xhc3Nd
XTsKKyAgICAgICAgd3JhcHBlciA9IFtjbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpvYmplY3Rd
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA1ODkxCisgICAgLy8gVGhpcyBnZW5lcmFsIGFwcHJvYWNoIHRvIHdyYXBwZXIg
Y2FjaGluZyBpcyBwcmV0dHkgZWZmZWN0aXZlLCBidXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHBy
b2JsZW1zOgorICAgIC8vICgxKSBGb3IgaW1tb3J0YWwgb2JqZWN0cyBKU1ZhbHVlcyB3aWxsIGVm
ZmVjdGl2ZWx5IGxlYWogYW5kIHRoaXMgcmVzdWx0cyBpbiBlcnJvciBvdXRwdXQgYmVpbmcgbG9n
Z2VkIC0gd2Ugc2hvdWxkIGF2b2lkIGFkZGluZyBhc3NvY2lhdGVkIG9iamVjdHMgdG8gaW1tb3J0
YWwgb2JqZWN0cy4KKyAgICAvLyAoMikgQSBsb25nIGxpdmVkIG9iamVjdCBtYXkgcmFjayB1cCBt
YW55IEpTVmFsdWVzLiBXaGVuIHRoZSBjb250ZXh0cyBhcmUgcmVsZWFzZWQgdGhlc2Ugd2lsbCB1
bnByb2N0ZWN0IHRoZSBhc3NvY2lhdGVkIEphdmFTY3JpcHQgb2JqZWN0cywKKyAgICAvLyAgICAg
YnV0IHN0aWxsLCB3b3VsZCBwcm9iYWJseSBuaWNlciBpZiB3ZSBtYWRlIGl0IHNvIHRoYXQgb25s
eSBvbmUgYXNzb2NpYXRlZCBvYmplY3Qgd2FzIHJlcXVpcmVkLCBicm9hZGNhc3Rpbmcgb2JqZWN0
IGRlYWxsb2MuCisgICAgb2JqY19zZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0
LCB3cmFwcGVyLCBPQkpDX0FTU09DSUFUSU9OX1JFVEFJTik7CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK0BlbmQKKworaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChj
b250ZXh0LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgLy9BU1NFUlQoIWV4Y2VwdGlvbik7CisgICAg
aWYgKEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCB3cmFwcGVyQ2xhc3Mo
KSkpCisgICAgICAgIHJldHVybiAoaWQpSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCk7CisgICAg
aWYgKGlkIHRhcmdldCA9IHRyeVVud3JhcEJsb2NrKGNvbnRleHQsIG9iamVjdCkpCisgICAgICAg
IHJldHVybiB0YXJnZXQ7CisgICAgcmV0dXJuIG5pbDsKK30KKworUHJvdG9jb2wqIGdldEpTRXhw
b3J0UHJvdG9jb2woKQoreworICAgIHN0YXRpYyBQcm90b2NvbCogcHJvdG9jb2wgPSAwOworICAg
IGlmICghcHJvdG9jb2wpCisgICAgICAgIHByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNF
eHBvcnQiKTsKKyAgICByZXR1cm4gcHJvdG9jb2w7Cit9CisKK0NsYXNzIGdldE5TQmxvY2tDbGFz
cygpCit7CisgICAgc3RhdGljIENsYXNzIGNscyA9IDA7CisgICAgaWYgKCFjbHMpCisgICAgICAg
IGNscyA9IG9iamNfZ2V0Q2xhc3MoIk5TQmxvY2siKTsKKyAgICByZXR1cm4gY2xzOworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlwdENvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgJ
KHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNjcmlw
dENvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNCArMjksMTMgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmdSZWZDRi5oPgogCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU0NvbnRl
eHQuaCIKKyNpbXBvcnQgIkFQSUpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUu
aCIKKyNpbXBvcnQgIkpTRXhwb3J0LmgiCisKKyNlbmRpZgorCiAjZW5kaWYgLyogSmF2YVNjcmlw
dENvcmVfaCAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlNfT0JKQ19BUElfRU5BQkxF
RAorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQq
LCBDbGFzcywgUHJvdG9jb2wqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwgY29uc3QgY2hh
ciogdHlwZXMpOworSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhKU0Nv
bnRleHQqLCBpZCk7CisKK2lkIHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisKKyNp
ZiBKU19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQ
SVNoaW1zLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiSlNCbG9ja0FkYXB0b3IuaCIK
KyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIK
KyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiT2JqQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKyNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJvYmpjL3J1bnRp
bWUuaCIKKyNpbXBvcnQgInd0Zi9SZXRhaW5QdHIuaCIKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FsbGJhY2tBcmd1bWVudCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiwgTlNJbnRlZ2VyLCBKU0NvbnRleHQqLCBKU1ZhbHVl
UmVmLCBKU1ZhbHVlUmVmKikgPSAwOworCisgICAgT3duUHRyPENhbGxiYWNrQXJndW1lbnQ+IG1f
bmV4dDsKK307CisKK0NhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KCkKK3sKK30K
KworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1
bWVudCwgSlNWYWx1ZVJlZiopCisgICAgeworICAgICAgICBib29sIHZhbHVlID0gSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCk7CisgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVy
XTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudEludGVnZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIs
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2Vw
dGlvbikpOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDph
cmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IENhbGxiYWNrQXJndW1lbnREb3VibGUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVU
b051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0
aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJn
dW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnRKU1ZhbHVl
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAg
ICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNv
bnRleHQ6Y29udGV4dF07CisgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBh
dEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKKyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja0FyZ3Vt
ZW50SWQgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgewor
ICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnQpOworICAg
ICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MgOiBwdWJsaWMg
Q2FsbGJhY2tBcmd1bWVudCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3Mo
Q2xhc3MgY2xzKQorICAgICAgICA6IENhbGxiYWNrQXJndW1lbnQoKQorICAgICAgICAsIG1fY2xh
c3MoY2xzKQorICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmV0YWluXTsKKyAgICB9CisKKyAgICB+
Q2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoKQorICAgIHsKKyAgICAgICAgW21fY2xhc3MgcmVsZWFz
ZV07CisgICAgfQorCisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1
bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAg
aWQgb2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIGFyZ3VtZW50KTsKKyAgICAgICAg
aWYgKG9iamVjdCAmJiBbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFzc10pIHsKKyAgICAgICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoSlNWYWx1
ZUlzTnVsbChjdHgsIGFyZ3VtZW50KSB8fCBKU1ZhbHVlSXNVbmRlZmluZWQoY3R4LCBhcmd1bWVu
dCkpIHsKKyAgICAgICAgICAgIG9iamVjdCA9IG5pbDsKKyAgICAgICAgICAgIFtpbnZvY2F0aW9u
IHNldEFyZ3VtZW50OiZvYmplY3QgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpj
cmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAiQXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggT2JqZWN0
aXZlLUMgQ2xhc3MiKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsYXNzIG1fY2xhc3M7Cit9
OworCitjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1
bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFsdWUg
PSB2YWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50
LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dE5TU3RyaW5nIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb1N0cmluZyhjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2lu
dm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAg
IH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1lbnROU0RhdGUgOiBwdWJsaWMgQ2FsbGJhY2tB
cmd1bWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9u
LCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJl
ZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgaWQgdmFs
dWUgPSB2YWx1ZVRvRGF0ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVu
dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0
SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrQXJndW1l
bnROU0FycmF5IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgeworcHVibGljOgorICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKKyAgICB7CisgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0FycmF5KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAg
fQorfTsKKworY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeSA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgeworICAgICAgICBp
ZCB2YWx1ZSA9IHZhbHVlVG9EaWN0aW9uYXJ5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOworICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tBcmd1bWVudFN0cnVjdCA6IHB1YmxpYyBDYWxsYmFja0FyZ3VtZW50IHsKK3B1YmxpYzoK
KyAgICBDYWxsYmFja0FyZ3VtZW50U3RydWN0KE5TSW52b2NhdGlvbiogY29udmVyc2lvbkludm9j
YXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgICAgICA6IG1fY29udmVyc2lvbklu
dm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisgICAgeworICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiByZXRhaW5dOworICAgICAgICBOU1VJbnRlZ2VyIHNpemUsIGFsaWdubWVu
dDsKKyAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29kZWRUeXBlLCAmc2l6ZSwgJmFs
aWdubWVudCk7CisgICAgICAgIC0tYWxpZ25tZW50OworICAgICAgICBtX2FsbG9jYXRpb24gPSAo
Y2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOworICAgICAgICBtX2J1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2FsbG9jYXRp
b24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFs
IH5DYWxsYmFja0FyZ3VtZW50U3RydWN0KCkKKyAgICB7CisgICAgICAgIFttX2NvbnZlcnNpb25J
bnZvY2F0aW9uIHJlbGVhc2VdOworICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpT
VmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1
ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIFttX2NvbnZl
cnNpb25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6dmFsdWVdOworICAgICAgICBbbV9jb252
ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2J1ZmZlcl07CisgICAgICAgIFtpbnZv
Y2F0aW9uIHNldEFyZ3VtZW50Om1fYnVmZmVyIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247
CisgICAgY2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xh
c3MgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2sgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVu
dCB7CitwdWJsaWM6CisgICAgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soSlNCbG9ja0Fk
YXB0b3IqIGFkYXB0b3IpCisgICAgICAgIDogbV9hZGFwdG9yKGFkYXB0b3IpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjaygpCisg
ICAgeworICAgICAgICBbbV9hZGFwdG9yIHJlbGVhc2VdOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCisgICAgeworICAgICAgICBpZCBibG9jayA9IFttX2FkYXB0b3IgYmxvY2tGcm9tVmFs
dWU6YXJndW1lbnQgaW5Db250ZXh0OmNvbnRleHQgd2l0aEV4Y2VwdGlvbjpleGNlcHRpb25dOwor
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomYmxvY2sgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CisgICAgfQorCitwcml2YXRlOgorICAgIEpTQmxvY2tBZGFwdG9yKiBtX2FkYXB0b3I7
Cit9OworCitjbGFzcyBBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBDYWxsYmFja0FyZ3VtZW50KiBSZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyPFQ+OworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZURvdWJsZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnREb3VibGU8VD47CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDYWxsYmFja0FyZ3VtZW50Qm9vbGVhbjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0
VHlwZSB0eXBlVm9pZCgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SWQ7CisgICAgfQor
CisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZU9mQ2xhc3MoY29uc3QgY2hhciogYmVnaW4sIGNv
bnN0IGNoYXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVu
ZCk7CisgICAgICAgIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoY29weSk7CisgICAgICAgIGlm
ICghY2xzKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICBpZiAoY2xzID09IFtK
U1ZhbHVlIGNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEpT
VmFsdWU7CisgICAgICAgIGlmIChjbHMgPT0gW05TU3RyaW5nIGNsYXNzXSkKKyAgICAgICAgICAg
IHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5TU3RyaW5nOworICAgICAgICBpZiAoY2xzID09
IFtOU051bWJlciBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1l
bnROU051bWJlcjsKKyAgICAgICAgaWYgKGNscyA9PSBbTlNEYXRlIGNsYXNzXSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZTsKKyAgICAgICAgaWYgKGNscyA9
PSBbTlNBcnJheSBjbGFzc10pCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1l
bnROU0FycmF5OworICAgICAgICBpZiAoY2xzID09IFtOU0RpY3Rpb25hcnkgY2xhc3NdKQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5OworCisgICAg
ICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3MoY2xzKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlQmxvY2soY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNo
YXIqIGVuZCkKKyAgICB7CisgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7Cisg
ICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2soW1tKU0Jsb2Nr
QWRhcHRvciBhbGxvY10gaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZyb21Qcm90b2NvbDpjb3B5XSk7
CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBi
ZWdpbiwgY29uc3QgY2hhciogZW5kKQorICAgIHsKKyAgICAgICAgU3RyaW5nUmFuZ2UgY29weShi
ZWdpbiwgZW5kKTsKKyAgICAgICAgaWYgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHZhbHVl
VG9UeXBlSW52b2NhdGlvbkZvcihjb3B5KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tBcmd1bWVudFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICB9Cit9OworCitjbGFzcyBDYWxsYmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q2FsbGJhY2tSZXN1bHQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7Cit9Owor
CitjbGFzcyBDYWxsYmFja1Jlc3VsdFZvaWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBDYWxsYmFja1Jlc3VsdElkIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGlkIHZhbHVl
OworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFsdWVdOworICAgICAgICBy
ZXR1cm4gb2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIENhbGxiYWNrUmVzdWx0TnVtZXJpYyA6IHB1YmxpYyBDYWxs
YmFja1Jlc3VsdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9j
YXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisgICAg
eworICAgICAgICBUIHZhbHVlOworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTom
dmFsdWVdOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSwgKGRvdWJsZSl2YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQ2Fs
bGJhY2tSZXN1bHRCb29sZWFuIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsdWU7Cisg
ICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFs
dWUpOworICAgIH0KK307CisKK2NsYXNzIENhbGxiYWNrUmVzdWx0U3RydWN0IDogcHVibGljIENh
bGxiYWNrUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0ludm9j
YXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKKyAg
ICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmV0YWluXTsKKyAgICAgICAgTlNV
SW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7CisgICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChl
bmNvZGVkVHlwZSwgJnNpemUsICZhbGlnbm1lbnQpOworICAgICAgICAtLWFsaWdubWVudDsKKyAg
ICAgICAgbV9hbGxvY2F0aW9uID0gKGNoYXIqKW1hbGxvYyhzaXplICsgYWxpZ25tZW50KTsKKyAg
ICAgICAgbV9idWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4obV9hbGxvY2F0aW9uKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50KTsKKyAg
ICB9CisgICAgCisgICAgdmlydHVhbCB+Q2FsbGJhY2tSZXN1bHRTdHJ1Y3QoKQorICAgIHsKKyAg
ICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07CisgICAgICAgIGZyZWUobV9h
bGxvY2F0aW9uKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCisg
ICAgeworICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTptX2FsbG9jYXRpb25dOwor
CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYWxsb2NhdGlv
biBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomY29udGV4dCBhdEluZGV4OjNdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBp
bnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNzXV07CisKKyAgICAgICAgSlNWYWx1ZSogdmFs
dWU7CisgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1
ZV07CisgICAgICAgIHJldHVybiB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAg
Y2hhciogbV9idWZmZXI7CisgICAgY2hhciogbV9hbGxvY2F0aW9uOworfTsKKworY2xhc3MgUmVz
dWx0VHlwZURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENhbGxiYWNrUmVzdWx0KiBS
ZXN1bHRUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0
VHlwZSB0eXBlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrUmVz
dWx0TnVtZXJpYzxUPjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHRUeXBlIHR5cGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBD
YWxsYmFja1Jlc3VsdE51bWVyaWM8VD47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUg
dHlwZUJvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdEJvb2xl
YW47CisgICAgfQorCisgICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZVZvaWQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFZvaWQ7CisgICAgfQorCisgICAgc3RhdGlj
IFJlc3VsdFR5cGUgdHlwZUlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tS
ZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVPZkNsYXNzKGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbGJh
Y2tSZXN1bHRJZCgpOworICAgIH0KKworICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxi
YWNrUmVzdWx0SWQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0
KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCisgICAgeworICAgICAgICBTdHJp
bmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOworICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uID0gdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICAgICAgcmV0
dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICB9Cit9OworCitlbnVtIENhbGxiYWNrVHlwZSB7CisgICAgQ2FsbGJh
Y2tJbnN0YW5jZU1ldGhvZCwKKyAgICBDYWxsYmFja0NsYXNzTWV0aG9kLAorICAgIENhbGxiYWNr
QmxvY2sKK307CisKK2NsYXNzIE9iakNDYWxsYmFja0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBP
YmpDQ2FsbGJhY2tGdW5jdGlvbihKU0NvbnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiogaW52
b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NPd25Q
dHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVzdWx0
PiByZXN1bHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICwgbV9pbnN0YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFpbl0p
CisgICAgICAgICwgbV9pbnZvY2F0aW9uKGludm9jYXRpb24pCisgICAgICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCh0eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2QgfHwgaW5zdGFuY2VDbGFzcyk7
CisgICAgfQorCisgICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFtt
X2luc3RhbmNlQ2xhc3MgcmVsZWFzZV07CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBjYWxsKEpT
Q29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisKKyAgICBKU0NvbnRleHQqIGNvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZCB3cmFwcGVkQmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA9PSBDYWxsYmFja0Jsb2NrID8gW21faW52b2NhdGlvbiB0YXJn
ZXRdIDogbmlsOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWFrQ29udGV4dFJlZiBtX2NvbnRl
eHQ7CisgICAgQ2FsbGJhY2tUeXBlIG1fdHlwZTsKKyAgICBDbGFzcyBtX2luc3RhbmNlQ2xhc3M7
CisgICAgV1RGOjpSZXRhaW5QdHI8TlNJbnZvY2F0aW9uPiBtX2ludm9jYXRpb247CisgICAgT3du
UHRyPENhbGxiYWNrQXJndW1lbnQ+IG1fYXJndW1lbnRzOworICAgIE93blB0cjxDYWxsYmFja1Jl
c3VsdD4gbV9yZXN1bHQ7Cit9OworCitzdGF0aWMgdm9pZCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZp
bmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBkZWxldGUgKE9iakNDYWxsYmFja0Z1
bmN0aW9uKilKU09iamVjdEdldFByaXZhdGUob2JqZWN0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY2FsbGVy
Q29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gUmV0YWtlIHRoZSBBUEkgbG9jayAtIHdlIG5lZWQg
dGhpcyBmb3IgYSBmZXcgcmVhc29uczoKKyAgICAvLyAoMSkgV2UgZG9uJ3Qgd2FudCB0byBzdXBw
b3J0IHRoZSBDLUFQSSdzIGNvbmZ1c2luZyBkcm9wcy1sb2Nrcy1vbmNlIHBvbGljeSAtIHNob3Vs
ZCBvbmx5IGRyb3AgbG9ja3MgaWYgd2UgY2FuIGRvIHNvIHJlY3Vyc2l2ZXkuCisgICAgLy8gKDIp
IFdlJ3JlIGNhbGluZyBzb21lIEpTQyBpbnRlcm5hbHMgdGhhdCByZXF1aXJlIHVzIHRvIGJlIG9u
IHRoZSAnaW5zaWRlJyAtIGUuZy4gY3JlYXRlVHlwZUVycm9yLgorICAgIC8vICgzKSBXZSBuZWVk
IHRvIGJlIGxvY2tlZCAocGVyIGNvbnRleHQgd291bGQgYmUgZmluZSkgYWdhaW5zdCBjb25mbGlj
dGluZyB1c2dhZSBvZiB0aGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb24ncyBOU0ludm9jYXRpb24uCisg
ICAgSlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY2FsbGVyQ29udGV4dCkpOworCisg
ICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gKE9iakNDYWxsYmFja0Z1bmN0aW9u
KilKU09iamVjdEdldFByaXZhdGUoZnVuY3Rpb24pOworICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IGNhbGxiYWNrLT5jb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODk0CisgICAg
ICAgIC8vIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0aGF0IHRoZSBjb250ZXh0IGJlIHJldGFpbmVk
LCBpdCB3b3VsZCBwcm9iYWJseSBiZSBtb3JlCisgICAgICAgIC8vIGFwcHJvcHJpYXRlIHRvIHVz
ZSBhIG5ldyBKU0NvbnRleHQgaW5zdGFuY2UgKGNyZWF0aW5nIG9uZSBpZiBuZWNlc3NhcnkpLgor
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjYWxs
ZXJDb250ZXh0KSwgIk9iamVjdGl2ZS1DIGNhbGxiYWNrIGZ1bmN0aW9uIGNvbnRleHQgcmVsZWFz
ZWQiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjYWxsZXJDb250ZXh0
KTsKKyAgICB9CisKKyAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOworICAgIEpTVmFsdWVS
ZWYgcmVzdWx0OworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbY29udGV4dCBiZWdp
bkNhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6dGhpc09iamVjdCBhcmd1
bWVudENvdW50OmFyZ3VtZW50Q291bnQgYXJndW1lbnRzOmFyZ3VtZW50c107CisgICAgICAgIHJl
c3VsdCA9IGNhbGxiYWNrLT5jYWxsKGNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKQor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0LmV4Y2Vw
dGlvbik7CisgICAgICAgIFtjb250ZXh0IGVuZENhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0
YV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBKU0NsYXNzUmVmIG9i
akNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQoreworICAgIHN0YXRpYyBTcGluTG9jayBpbml0TG9j
ayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIo
JmluaXRMb2NrKTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gMDsKKworICAg
IGlmICghY2xhc3NSZWYpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsK
KyAgICAgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7CisgICAgICAgIGRlZmluaXRpb24uZmlu
YWxpemUgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplOworICAgICAgICBkZWZpbml0aW9u
LmNhbGxBc0Z1bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbjsKKyAg
ICAgICAgY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gY2xhc3NSZWY7Cit9CisKK0pTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpOworCisgICAgc2l6ZV90IGZpcnN0QXJndW1lbnQ7CisgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6IHsKKyAgICAg
ICAgaWQgdGFyZ2V0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjdHgsIHRoaXNPYmplY3QpOworICAg
ICAgICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFz
c10pIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJv
cih0b0pTKGN0eCksICJzZWxmIHR5cGUgY2hlY2sgZmFpbGVkIGZvciBPYmplY3RpdmUtQyBpbnN0
YW5jZSBtZXRob2QiKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKKyAgICAgICAgfQorICAgICAgICBbbV9pbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRd
OworICAgIH0KKyAgICBjYXNlIENhbGxiYWNrQ2xhc3NNZXRob2Q6CisgICAgICAgIGZpcnN0QXJn
dW1lbnQgPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxiYWNrQmxvY2s6CisgICAg
ICAgIGZpcnN0QXJndW1lbnQgPSAxOworICAgIH0KKworICAgIHNpemVfdCBhcmd1bWVudE51bWJl
ciA9IDA7CisgICAgZm9yIChDYWxsYmFja0FyZ3VtZW50KiBhcmd1bWVudCA9IG1fYXJndW1lbnRz
LmdldCgpOyBhcmd1bWVudDsgYXJndW1lbnQgPSBhcmd1bWVudC0+bV9uZXh0LmdldCgpKSB7Cisg
ICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBhcmd1bWVudE51bWJlciA8IGFyZ3VtZW50Q291bnQg
PyBhcmd1bWVudHNbYXJndW1lbnROdW1iZXJdIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
KyAgICAgICAgYXJndW1lbnQtPnNldChtX2ludm9jYXRpb24uZ2V0KCksIGFyZ3VtZW50TnVtYmVy
ICsgZmlyc3RBcmd1bWVudCwgY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIGlm
ICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CisgICAgICAgICsrYXJndW1lbnROdW1iZXI7CisgICAgfQorCisgICAgW21faW52b2NhdGlv
biBpbnZva2VdOworCisgICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9pbnZvY2F0aW9uLmdldCgp
LCBjb250ZXh0LCBleGNlcHRpb24pOworfQorCitzdGF0aWMgYm9vbCBibG9ja1NpZ25hdHVyZUNv
bnRhaW5zQ2xhc3MoKQoreworICAgIGVudW0gQ2hlY2tSZXN1bHQgeworICAgICAgICBDaGVja1Jl
c3VsdEZhbHNlLAorICAgICAgICBDaGVja1Jlc3VsdFRydWUsCisgICAgICAgIENoZWNrUmVzdWx0
VW5rbm93bgorICAgIH07CisgICAgc3RhdGljIGVudW0gQ2hlY2tSZXN1bHQgY2hlY2sgPSBDaGVj
a1Jlc3VsdFVua25vd247CisgICAgaWYgKGNoZWNrID09IENoZWNrUmVzdWx0VW5rbm93bikgewor
ICAgICAgICBpZCBibG9jayA9IF4oTlNTdHJpbmcgKnN0cmluZyl7IHJldHVybiBzdHJpbmc7IH07
CisgICAgICAgIGNoZWNrID0gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxvY2spICYmIHN0cnN0cihf
QmxvY2tfc2lnbmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIikgPyBDaGVja1Jlc3VsdFRydWUgOiBD
aGVja1Jlc3VsdEZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKGJvb2wpY2hlY2s7Cit9CisKK2lu
bGluZSBib29sIHNraXBOdW1iZXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAgIGlmICgh
aXNkaWdpdCgqcG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUoaXNk
aWdpdCgqKytwb3NpdGlvbikpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgSlNPYmpl
Y3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9uKEpTQ29udGV4dCogY29udGV4
dCwgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5z
dGFuY2VDbGFzcywgY29uc3QgY2hhciogc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzKQoreworICAg
IGNvbnN0IGNoYXIqIHBvc2l0aW9uID0gc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzOworCisgICAg
T3duUHRyPENhbGxiYWNrUmVzdWx0PiByZXN1bHQgPSBhZG9wdFB0cihwYXJzZU9iakNUeXBlPFJl
c3VsdFR5cGVEZWxlZ2F0ZT4ocG9zaXRpb24pKTsKKyAgICBpZiAoIXJlc3VsdCB8fCAhc2tpcE51
bWJlcihwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6CisgICAgY2FzZSBDYWxsYmFja0Ns
YXNzTWV0aG9kOgorICAgICAgICBpZiAoJ0AnICE9ICoocG9zaXRpb24rKykgfHwgIXNraXBOdW1i
ZXIocG9zaXRpb24pIHx8ICc6JyAhPSAqKHBvc2l0aW9uKyspIHx8ICFza2lwTnVtYmVyKHBvc2l0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FsbGJhY2tCbG9jazoKKyAgICAgICAgaWYgKCgnQCcgIT0gKihwb3NpdGlvbisrKSkgfHwgKCc/
JyAhPSAqKHBvc2l0aW9uKyspKSB8fCAhc2tpcE51bWJlcihwb3NpdGlvbikgfHwgKCFibG9ja1Np
Z25hdHVyZUNvbnRhaW5zQ2xhc3MoKSAmJiBzdHJjaHIocG9zaXRpb24sICdAJykpKQorICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgT3duUHRyPENh
bGxiYWNrQXJndW1lbnQ+IGFyZ3VtZW50cyA9IDA7CisgICAgT3duUHRyPENhbGxiYWNrQXJndW1l
bnQ+KiBuZXh0QXJndW1lbnQgPSAmYXJndW1lbnRzOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnQgPSAwOworICAgIHdoaWxlICgqcG9zaXRpb24pIHsKKyAgICAgICAgT3duUHRyPENhbGxiYWNr
QXJndW1lbnQ+IGFyZ3VtZW50ID0gYWRvcHRQdHIocGFyc2VPYmpDVHlwZTxBcmd1bWVudFR5cGVE
ZWxlZ2F0ZT4ocG9zaXRpb24pKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCB8fCAhc2tpcE51bWJl
cihwb3NpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICpuZXh0QXJn
dW1lbnQgPSBhcmd1bWVudC5yZWxlYXNlKCk7CisgICAgICAgIG5leHRBcmd1bWVudCA9ICYoKm5l
eHRBcmd1bWVudCktPm1fbmV4dDsKKyAgICAgICAgKythcmd1bWVudENvdW50OworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1
ODkyCisgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgYSByZWd1bGFyIGhvc3QgZnVuY3Rpb24s
IHJhdGhlciB0aGFuIGEgY2FsbGFibGUgQyBBUEkgb2JqZWN0LgorICAgIC8vIFBhdGNoIGluIHRo
ZSByaWdodCBsZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5vdywgYnV0IHNob3VsZCBm
aXggdGhpcy4KKyAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY3VycmVudGx5IGZh
aWxzLCBzaW5jZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBmdW5jdG9uLCBidXQgY2Fs
bCAmIGFwcGx5IGRvIHdvcmsuCisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU09i
amVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25DbGFzcygpLCBuZXcgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgaW52b2NhdGlv
biwgdHlwZSwgaW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVzdWx0LnJlbGVh
c2UoKSkpOworICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVu
Y3Rpb25PYmplY3QgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHZhbHVlW0AibGVuZ3RoIl0gPSBA
KGFyZ3VtZW50Q291bnQpOworICAgIHZhbHVlW0AiX19wcm90b19fIl0gPSBjb250ZXh0W0AiRnVu
Y3Rpb24iXVtAInByb3RvdHlwZSJdOworICAgIHZhbHVlW0AidG9TdHJpbmciXSA9IFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0aW9uKCl7IHJldHVybiAnIgorICAgICAgICAiZnVuY3Rp
b24gPE9iamVjdGl2ZS1DPigpIHsiICJcXG4iCisgICAgICAgICIgICAgW25hdGl2ZSBjb2RlXSIg
ICAgICAgICAgIlxcbiIKKyAgICAgICAgIn0iICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxu
IgorICAgICInfSkiXTsKKyAgICByZXR1cm4gZnVuY3Rpb25PYmplY3Q7Cit9CisKK0pTT2JqZWN0
UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCogY29udGV4dCwgQ2xh
c3MgY2xzLCBQcm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMIHNl
bCwgY29uc3QgY2hhciogdHlwZXMpCit7CisgICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0g
W05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWdu
YXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczp0eXBlc11dOworICAgIFtpbnZvY2F0aW9uIHNl
dFNlbGVjdG9yOnNlbF07CisgICAgaWYgKCFpc0luc3RhbmNlTWV0aG9kKQorICAgICAgICBbaW52
b2NhdGlvbiBzZXRUYXJnZXQ6Y2xzXTsKKyAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25G
b3JJbnZvY2F0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIGlzSW5zdGFuY2VNZXRob2QgPyBDYWxs
YmFja0luc3RhbmNlTWV0aG9kIDogQ2FsbGJhY2tDbGFzc01ldGhvZCwgaXNJbnN0YW5jZU1ldGhv
ZCA/IGNscyA6IG5pbCwgX3Byb3RvY29sX2dldE1ldGhvZFR5cGVFbmNvZGluZyhwcm90b2NvbCwg
c2VsLCBZRVMsIGlzSW5zdGFuY2VNZXRob2QpKTsKK30KKworSlNPYmplY3RSZWYgb2JqQ0NhbGxi
YWNrRnVuY3Rpb25Gb3JCbG9jayhKU0NvbnRleHQqIGNvbnRleHQsIGlkIHRhcmdldCkKK3sKKyAg
ICBpZiAoIV9CbG9ja19oYXNfc2lnbmF0dXJlKHRhcmdldCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSA9IF9CbG9ja19zaWduYXR1cmUodGFyZ2V0KTsKKyAg
ICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRo
TWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVz
OnNpZ25hdHVyZV1dOworICAgIFtpbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRdOworICAgIHJl
dHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlv
biwgQ2FsbGJhY2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOworfQorCitpZCB0cnlVbndyYXBCbG9j
ayhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjb250ZXh0LCBvYmplY3QsIG9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuICgoT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKS0+d3JhcHBlZEJs
b2NrKCk7Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpj
UnVudGltZUV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqY1J1bnRpbWVFeHRyYXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqY1J1bnRpbWVFeHRyYXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL1Zl
Y3Rvci5oPgorCitpbmxpbmUgYm9vbCBwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChQcm90b2Nv
bCogY2FuZGlkYXRlLCBQcm90b2NvbCogdGFyZ2V0KQoreworICAgIHVuc2lnbmVkIHByb3RvY29s
UHJvdG9jb2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbFByb3RvY29scyA9IHByb3Rv
Y29sX2NvcHlQcm90b2NvbExpc3QoY2FuZGlkYXRlLCAmcHJvdG9jb2xQcm90b2NvbHNDb3VudCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sUHJvdG9jb2xzQ291bnQ7ICsr
aSkgeworICAgICAgICBpZiAocHJvdG9jb2xfaXNFcXVhbChwcm90b2NvbFByb3RvY29sc1tpXSwg
dGFyZ2V0KSkgeworICAgICAgICAgICAgZnJlZShwcm90b2NvbFByb3RvY29scyk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlKHByb3RvY29sUHJv
dG9jb2xzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hQcm90
b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKENsYXNzIGNscywgUHJvdG9jb2wqIHRhcmdldCwgdm9p
ZCAoXmNhbGxiYWNrKShQcm90b2NvbCopKQoreworICAgIEFTU0VSVChjbHMpOworICAgIEFTU0VS
VCh0YXJnZXQpOworCisgICAgV1RGOjpWZWN0b3I8UHJvdG9jb2wqPiB3b3JrbGlzdDsKKyAgICBX
VEY6Okhhc2hTZXQ8dm9pZCo+IHZpc2l0ZWQ7CisKKyAgICAvLyBJbml0aWFsbHkgZmlsbCB0aGUg
d29ya2xpc3Qgd2l0aCB0aGUgQ2xhc3MncyBwcm90b2NvbHMuCisgICAgdW5zaWduZWQgcHJvdG9j
b2xzQ291bnQ7CisgICAgUHJvdG9jb2wqKiBwcm90b2NvbHMgPSBjbGFzc19jb3B5UHJvdG9jb2xM
aXN0KGNscywgJnByb3RvY29sc0NvdW50KTsKKyAgICBpZiAocHJvdG9jb2xzQ291bnQpIHsKKyAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKHByb3RvY29scywgcHJvdG9jb2xzQ291bnQpOworICAgICAg
ICBmcmVlKHByb3RvY29scyk7CisgICAgfQorCisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgUHJvdG9jb2wqIHByb3RvY29sID0gd29ya2xpc3QubGFzdCgpOworICAg
ICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisKKyAgICAgICAgLy8gQXJlIHdlIGVuY291bnRl
cmluZyB0aGlzIFByb3RvY29sIGZvciB0aGUgZmlyc3QgdGltZT8KKyAgICAgICAgaWYgKCF2aXNp
dGVkLmFkZChwcm90b2NvbCkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIElmIGl0IGltcGxlbWVudHMgdGhlIHByb3RvY29sLCBtYWtlIHRoZSBjYWxsYmFj
ay4KKyAgICAgICAgaWYgKHByb3RvY29sSW1wbGVtZW50c1Byb3RvY29sKHByb3RvY29sLCB0YXJn
ZXQpKQorICAgICAgICAgICAgY2FsbGJhY2socHJvdG9jb2wpOworCisgICAgICAgIC8vIEFkZCBp
bmNvcnBvcmF0ZWQgcHJvdG9jb2xzIHRvIHRoZSB3b3JrbGlzdC4KKyAgICAgICAgcHJvdG9jb2xz
ID0gcHJvdG9jb2xfY29weVByb3RvY29sTGlzdChwcm90b2NvbCwgJnByb3RvY29sc0NvdW50KTsK
KyAgICAgICAgaWYgKHByb3RvY29sc0NvdW50KSB7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQocHJvdG9jb2xzLCBwcm90b2NvbHNDb3VudCk7CisgICAgICAgICAgICBmcmVlKHByb3RvY29s
cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVhY2hNZXRob2RJbkNs
YXNzKENsYXNzIGNscywgdm9pZCAoXmNhbGxiYWNrKShNZXRob2QgbWV0aG9kKSkKK3sKKyAgICB1
bnNpZ25lZCBjb3VudDsKKyAgICBNZXRob2QqIG1ldGhvZHMgPSBjbGFzc19jb3B5TWV0aG9kTGlz
dChjbHMsICZjb3VudCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2sobWV0aG9kc1tpXSk7
CisgICAgICAgIGZyZWUobWV0aG9kcyk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBmb3JFYWNo
TWV0aG9kSW5Qcm90b2NvbChQcm90b2NvbCogcHJvdG9jb2wsIEJPT0wgaXNSZXF1aXJlZE1ldGhv
ZCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCB2b2lkICheY2FsbGJhY2spKFNFTCwgY29uc3QgY2hh
ciopKQoreworICAgIHVuc2lnbmVkIGNvdW50OworICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNj
cmlwdGlvbiogbWV0aG9kcyA9IHByb3RvY29sX2NvcHlNZXRob2REZXNjcmlwdGlvbkxpc3QocHJv
dG9jb2wsIGlzUmVxdWlyZWRNZXRob2QsIGlzSW5zdGFuY2VNZXRob2QsICZjb3VudCk7CisgICAg
aWYgKGNvdW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICAgICAgY2FsbGJhY2sobWV0aG9kc1tpXS5uYW1lLCBtZXRob2RzW2ldLnR5cGVz
KTsKKyAgICAgICAgZnJlZShtZXRob2RzKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGZvckVh
Y2hQcm9wZXJ0eUluUHJvdG9jb2woUHJvdG9jb2wqIHByb3RvY29sLCB2b2lkICheY2FsbGJhY2sp
KG9iamNfcHJvcGVydHlfdCkpCit7CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgb2JqY19wcm9w
ZXJ0eV90KiBwcm9wZXJ0aWVzID0gcHJvdG9jb2xfY29weVByb3BlcnR5TGlzdChwcm90b2NvbCwg
JmNvdW50KTsKKyAgICBpZiAoY291bnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0aWVzW2ldKTsKKyAg
ICAgICAgZnJlZShwcm9wZXJ0aWVzKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPGNoYXIgb3Blbiwg
Y2hhciBjbG9zZT4KK3ZvaWQgc2tpcFBhaXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQoreworICAg
IE5TVUludGVnZXIgY291bnQgPSAxOworICAgIGRvIHsKKyAgICAgICAgY2hhciBjID0gKihwb3Np
dGlvbisrKTsKKyAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgQHRocm93IFtOU0V4Y2VwdGlv
biBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiByZWFz
b246QCJNYWxmb3JtZWQgdHlwZSBlbmNvZGluZyIgdXNlckluZm86bmlsXTsKKyAgICAgICAgaWYg
KGMgPT0gb3BlbikKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgIGVsc2UgaWYgKGMgPT0g
Y2xvc2UpCisgICAgICAgICAgICAtLWNvdW50OworICAgIH0gd2hpbGUgKGNvdW50KTsKK30KKwor
Y2xhc3MgU3RyaW5nUmFuZ2UgeworcHVibGljOgorICAgIFN0cmluZ1JhbmdlKGNvbnN0IGNoYXIq
IGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpIDogbV9wdHIoc3RybmR1cChiZWdpbiwgZW5kIC0gYmVn
aW4pKSB7IH0KKyAgICB+U3RyaW5nUmFuZ2UoKSB7IGZyZWUobV9wdHIpOyB9CisgICAgb3BlcmF0
b3IgY29uc3QgY2hhciooKSB7IHJldHVybiBtX3B0cjsgfQorICAgIGNvbnN0IGNoYXIqIGdldCgp
IHsgcmV0dXJuIG1fcHRyOyB9CisKK3ByaXZhdGU6CisgICAgY2hhciogbV9wdHI7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBEZWxlZ2F0ZVR5cGU+Cit0eXBlbmFtZSBEZWxlZ2F0ZVR5cGU6OlJl
c3VsdFR5cGUgcGFyc2VPYmpDVHlwZShjb25zdCBjaGFyKiYgcG9zaXRpb24pCit7CisgICAgQVNT
RVJUKCpwb3NpdGlvbik7CisKKyAgICBzd2l0Y2ggKCoocG9zaXRpb24rKykpIHsKKyAgICBjYXNl
ICdjJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8
Y2hhcj4oKTsKKyAgICBjYXNlICdpJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVt
cGxhdGUgdHlwZUludGVnZXI8aW50PigpOworICAgIGNhc2UgJ3MnOgorICAgICAgICByZXR1cm4g
RGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjxzaG9ydD4oKTsKKyAgICBjYXNlICds
JzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZUludGVnZXI8bG9u
Zz4oKTsKKyAgICBjYXNlICdxJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxh
dGUgdHlwZURvdWJsZTx1bnNpZ25lZCBsb25nIGxvbmc+KCk7CisgICAgY2FzZSAnQyc6CisgICAg
ICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5cGVJbnRlZ2VyPHVuc2lnbmVkIGNo
YXI+KCk7CisgICAgY2FzZSAnSSc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBs
YXRlIHR5cGVJbnRlZ2VyPHVuc2lnbmVkPigpOworICAgIGNhc2UgJ1MnOgorICAgICAgICByZXR1
cm4gRGVsZWdhdGVUeXBlOjp0ZW1wbGF0ZSB0eXBlSW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4oKTsK
KyAgICBjYXNlICdMJzoKKyAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlw
ZUludGVnZXI8dW5zaWduZWQgbG9uZz4oKTsKKyAgICBjYXNlICdRJzoKKyAgICAgICAgcmV0dXJu
IERlbGVnYXRlVHlwZTo6dGVtcGxhdGUgdHlwZURvdWJsZTx1bnNpZ25lZCBsb25nIGxvbmc+KCk7
CisgICAgY2FzZSAnZic6CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnRlbXBsYXRlIHR5
cGVEb3VibGU8ZmxvYXQ+KCk7CisgICAgY2FzZSAnZCc6CisgICAgICAgIHJldHVybiBEZWxlZ2F0
ZVR5cGU6OnRlbXBsYXRlIHR5cGVEb3VibGU8ZG91YmxlPigpOworICAgIGNhc2UgJ0InOgorICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlQm9vbCgpOworICAgIGNhc2UgJ3YnOgorICAg
ICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlVm9pZCgpOworICAgIAorICAgIGNhc2UgJ0An
OiB7IC8vIEFuIG9iamVjdCAod2hldGhlciBzdGF0aWNhbGx5IHR5cGVkIG9yIHR5cGVkIGlkKQor
ICAgICAgICBpZiAocG9zaXRpb25bMF0gPT0gJz8nICYmIHBvc2l0aW9uWzFdID09ICc8Jykgewor
ICAgICAgICAgICAgcG9zaXRpb24gKz0gMjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJlZ2lu
ID0gcG9zaXRpb247CisgICAgICAgICAgICBza2lwUGFpcjwnPCcsJz4nPihwb3NpdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm4gRGVsZWdhdGVUeXBlOjp0eXBlQmxvY2soYmVnaW4sIHBvc2l0aW9u
IC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKnBvc2l0aW9uID09ICciJykgeworICAg
ICAgICAgICAgY29uc3QgY2hhciogYmVnaW4gPSArK3Bvc2l0aW9uOworICAgICAgICAgICAgcG9z
aXRpb24gPSBpbmRleChwb3NpdGlvbiwgJyInKTsKKyAgICAgICAgICAgIHJldHVybiBEZWxlZ2F0
ZVR5cGU6OnR5cGVPZkNsYXNzKGJlZ2luLCBwb3NpdGlvbisrKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVJZCgpOworICAgIH0KKworICAgIGNhc2UgJ3sn
OiB7IC8vIHtuYW1lPXR5cGUuLi59IEEgc3RydWN0dXJlCisgICAgICAgIGNvbnN0IGNoYXIqIGJl
Z2luID0gcG9zaXRpb24gLSAxOworICAgICAgICBza2lwUGFpcjwneycsJ30nPihwb3NpdGlvbik7
CisgICAgICAgIHJldHVybiBEZWxlZ2F0ZVR5cGU6OnR5cGVTdHJ1Y3QoYmVnaW4sIHBvc2l0aW9u
KTsKKyAgICB9CisKKyAgICAvLyBOT1Qgc3VwcG9ydGluZyBDIHN0cmluZ3MsIGFycmF5cywgcG9p
bnRlcnMsIHVuaW9ucywgYml0ZmllbGRzLCBmdW5jdGlvbiBwb2ludGVycy4KKyAgICBjYXNlICcq
JzogLy8gQSBjaGFyYWN0ZXIgc3RyaW5nIChjaGFyICopCisgICAgY2FzZSAnWyc6IC8vIFthcnJh
eSB0eXBlXSBBbiBhcnJheQorICAgIGNhc2UgJygnOiAvLyAobmFtZT10eXBlLi4uKSBBIHVuaW9u
CisgICAgY2FzZSAnYic6IC8vIGJudW0gQSBiaXQgZmllbGQgb2YgbnVtIGJpdHMKKyAgICBjYXNl
ICdeJzogLy8gXnR5cGUgQSBwb2ludGVyIHRvIHR5cGUKKyAgICBjYXNlICc/JzogLy8gQW4gdW5r
bm93biB0eXBlIChhbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgY29kZSBpcyB1c2VkIGZvciBmdW5j
dGlvbiBwb2ludGVycykKKyAgICAvLyBOT1Qgc3VwcG9ydGluZyBPYmplY3RpdmUtQyBDbGFzcywg
U0VMCisgICAgY2FzZSAnIyc6IC8vIEEgY2xhc3Mgb2JqZWN0IChDbGFzcykKKyAgICBjYXNlICc6
JzogLy8gQSBtZXRob2Qgc2VsZWN0b3IgKFNFTCkKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gbmlsOworICAgIH0KK30KKworZXh0ZXJuICJDIiB7CisgICAgY29uc3QgY2hhciAqX3Byb3Rv
Y29sX2dldE1ldGhvZFR5cGVFbmNvZGluZyhQcm90b2NvbCAqLCBTRUwsIEJPT0wgaXNSZXF1aXJl
ZE1ldGhvZCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kKTsKKyAgICBpZCBvYmpjX2luaXRXZWFrKGlk
ICosIGlkKTsKKyAgICB2b2lkIG9iamNfZGVzdHJveVdlYWsoaWQgKik7CisgICAgYm9vbCBfQmxv
Y2tfaGFzX3NpZ25hdHVyZSh2b2lkICopOworICAgIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0
dXJlKHZvaWQgKik7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkuYwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEyIEBAIHN0YXRpYyBk
b3VibGUgbmFuKGNvbnN0IGNoYXIqKQogCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CisjZW5kaWYKKwogc3RhdGljIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0Owotc3RhdGljIGludCBmYWlsZWQ7CitpbnQgZmFpbGVkOwogc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzQXNCb29sZWFuKEpTVmFsdWVSZWYgdmFsdWUsIGJvb2wgZXhwZWN0
ZWRWYWx1ZSkKIHsKICAgICBpZiAoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgIT0g
ZXhwZWN0ZWRWYWx1ZSkgewpAQCAtMTA0MCw2ICsxMDQ0LDEwIEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiBhcmd2W10pCiAgICAgOjpTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKE1BQykKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworI2VuZGlmCisKICAgICBjb25z
dCBjaGFyICpzY3JpcHRQYXRoID0gInRlc3RhcGkuanMiOwogICAgIGlmIChhcmdjID4gMSkgewog
ICAgICAgICBzY3JpcHRQYXRoID0gYXJndlsxXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCisKK2Jvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUodm9pZCAqKTsKK2Nv
bnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKHZvaWQgKik7CisKK2V4dGVybiBpbnQgZmFpbGVk
Owordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKKworI2lmIEpTX09CSkNfQVBJX0VOQUJM
RUQKKworQHByb3RvY29sIFBhcmVudE9iamVjdCA8SlNFeHBvcnQ+CitAZW5kCisKK0BpbnRlcmZh
Y2UgUGFyZW50T2JqZWN0IDogTlNPYmplY3Q8UGFyZW50T2JqZWN0PgorKyAoTlNTdHJpbmcgKilw
YXJlbnRUZXN0OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gUGFyZW50T2JqZWN0CisrIChOU1N0
cmluZyAqKXBhcmVudFRlc3QKK3sKKyAgICByZXR1cm4gW3NlbGYgZGVzY3JpcHRpb25dOworfQor
QGVuZAorCitAcHJvdG9jb2wgVGVzdE9iamVjdCA8SlNFeHBvcnQ+CitAcHJvcGVydHkgaW50IHZh
cmlhYmxlOworQHByb3BlcnR5IChyZWFkb25seSkgaW50IHNpeDsKK0Bwcm9wZXJ0eSBDR1BvaW50
IHBvaW50OworKyAoTlNTdHJpbmcgKiljbGFzc1Rlc3Q7CisrIChOU1N0cmluZyAqKXBhcmVudFRl
c3Q7CistIChOU1N0cmluZyAqKWdldFN0cmluZzsKK0pTRXhwb3J0QXModGVzdEFyZ3VtZW50VHlw
ZXMsCistIChOU1N0cmluZyAqKXRlc3RBcmd1bWVudFR5cGVzV2l0aEludDooaW50KWkgZG91Ymxl
Oihkb3VibGUpZCBib29sZWFuOihCT09MKWIgc3RyaW5nOihOU1N0cmluZyopcyBudW1iZXI6KE5T
TnVtYmVyKiluIGFycmF5OihOU0FycmF5KilhIGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSopbwor
KTsKKy0gKHZvaWQpY2FsbGJhY2s6KHZvaWQoXikoaW50KSlibG9jazsKK0BlbmQKKworQGludGVy
ZmFjZSBUZXN0T2JqZWN0IDogUGFyZW50T2JqZWN0IDxUZXN0T2JqZWN0PgorQHByb3BlcnR5IGlu
dCBzaXg7CisrIChpZCl0ZXN0T2JqZWN0OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdE9i
amVjdAorQHN5bnRoZXNpemUgdmFyaWFibGU7CitAc3ludGhlc2l6ZSBzaXg7CitAc3ludGhlc2l6
ZSBwb2ludDsKKysgKGlkKXRlc3RPYmplY3QKK3sKKyAgICByZXR1cm4gW1tbVGVzdE9iamVjdCBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworfQorKyAoTlNTdHJpbmcgKiljbGFzc1Rlc3QKK3sK
KyAgICByZXR1cm4gQCJjbGFzc1Rlc3QgLSBva2F5IjsKK30KKy0gKE5TU3RyaW5nICopZ2V0U3Ry
aW5nCit7CisgICAgcmV0dXJuIEAiNDIiOworfQorLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRU
eXBlc1dpdGhJbnQ6KGludClpIGRvdWJsZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmlu
ZzooTlNTdHJpbmcqKXMgbnVtYmVyOihOU051bWJlciopbiBhcnJheTooTlNBcnJheSopYSBkaWN0
aW9uYXJ5OihOU0RpY3Rpb25hcnkqKW8KK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlZCwlZywlZCwlQCwlZCwlQCwlQCIsIGksIGQsIGI9PVlFUz90cnVlOmZhbHNl
LHMsW24gaW50VmFsdWVdLGFbMV0sb1tAIngiXV07Cit9CistICh2b2lkKWNhbGxiYWNrOih2b2lk
KF4pKGludCkpYmxvY2sKK3sKKyAgICBibG9jayg0Mik7Cit9CitAZW5kCisKK2Jvb2wgdGVzdFhZ
WlRlc3RlZCA9IGZhbHNlOworCitAcHJvdG9jb2wgVGV4dFhZWiA8SlNFeHBvcnQ+CitAcHJvcGVy
dHkgaW50IHg7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBpbnQgeTsKKy0gKHZvaWQpdGVzdDooTlNT
dHJpbmcgKiltZXNzYWdlOworQGVuZAorCitAaW50ZXJmYWNlIFRleHRYWVogOiBOU09iamVjdCA8
VGV4dFhZWj4KK0Bwcm9wZXJ0eSBpbnQgeDsKK0Bwcm9wZXJ0eSBpbnQgeTsKK0Bwcm9wZXJ0eSBp
bnQgejsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRleHRYWVoKK0BzeW50aGVzaXplIHg7CitA
c3ludGhlc2l6ZSB5OworQHN5bnRoZXNpemUgejsKKy0gKHZvaWQpdGVzdDooTlNTdHJpbmcgKilt
ZXNzYWdlCit7CisgICAgdGVzdFhZWlRlc3RlZCA9IFttZXNzYWdlIGlzRXF1YWw6QCJ0ZXN0Il0g
JiYgeCA9PSAxMyAmIHkgPT0gNCAmJiB6ID09IDU7Cit9CitAZW5kCisKK3N0YXRpYyB2b2lkIGNo
ZWNrUmVzdWx0KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgYm9vbCBwYXNzZWQpCit7CisgICAgTlNM
b2coQCJURVNUOiBcIiVAXCI6ICVAIiwgZGVzY3JpcHRpb24sIHBhc3NlZCA/IEAiUEFTU0VEIiA6
IEAiRkFJTEVEIik7CisgICAgaWYgKCFwYXNzZWQpCisgICAgICAgIGZhaWxlZCA9IDE7Cit9CisK
K3N0YXRpYyBib29sIGJsb2NrU2lnbmF0dXJlQ29udGFpbnNDbGFzcygpCit7CisgICAgZW51bSBD
aGVja1Jlc3VsdCB7CisgICAgICAgIENoZWNrUmVzdWx0RmFsc2UsCisgICAgICAgIENoZWNrUmVz
dWx0VHJ1ZSwKKyAgICAgICAgQ2hlY2tSZXN1bHRVbmtub3duCisgICAgfTsKKyAgICBzdGF0aWMg
ZW51bSBDaGVja1Jlc3VsdCBjaGVjayA9IENoZWNrUmVzdWx0VW5rbm93bjsKKyAgICBpZiAoY2hl
Y2sgPT0gQ2hlY2tSZXN1bHRVbmtub3duKSB7CisgICAgICAgIGlkIGJsb2NrID0gXihOU1N0cmlu
ZyAqc3RyaW5nKXsgcmV0dXJuIHN0cmluZzsgfTsKKyAgICAgICAgY2hlY2sgPSBfQmxvY2tfaGFz
X3NpZ25hdHVyZShibG9jaykgJiYgc3Ryc3RyKF9CbG9ja19zaWduYXR1cmUoYmxvY2spLCAiTlNT
dHJpbmciKSA/IENoZWNrUmVzdWx0VHJ1ZSA6IENoZWNrUmVzdWx0RmFsc2U7CisgICAgfQorICAg
IHJldHVybiAoYm9vbCljaGVjazsKK30KKwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCit7Cisg
ICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOworCisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAIjIgKyAyIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiMiArIDIiLCBb
cmVzdWx0IHRvSW50MzJdID09IDQpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiVHdvIHBsdXMgdHdvIGlzICVAIiwgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCIyICsgMiJdXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJzdHJpbmdXaXRoRm9ybWF0IiwgW3Jl
c3VsdCBpc0VxdWFsOkAiVHdvIHBsdXMgdHdvIGlzIDQiXSk7CisgICAgfQorCisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0AibWVzc2FnZSJdID0g
QCJIZWxsbyI7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAibWVzc2FnZSArICcsIFdvcmxkISciXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJIZWxs
bywgV29ybGQhIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJIZWxsbywgV29ybGQhIl0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIoeyB4OjQyIH0pIl07
CisgICAgICAgIGlkIG9iaiA9IFtyZXN1bHQgdG9PYmplY3RdOworICAgICAgICBjaGVja1Jlc3Vs
dChAIkNoZWNrIGRpY3Rpb25hcnkgbGl0ZXJhbCIsIFtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pOworICAgICAgICBpZCBudW0gPSAoTlNEaWN0aW9uYXJ5KilvYmpbQCJ4
Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiQ2hlY2sgbnVtZXJpYyBsaXRlcmFsIiwgW251bSBp
c0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIF9fYmxvY2sgaW50IHJlc3VsdDsKKyAgICAg
ICAgY29udGV4dFtAImJsb2NrQ2FsbGJhY2siXSA9IF4oaW50IHZhbHVlKXsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHZhbHVlOworICAgICAgICB9OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAImJsb2NrQ2FsbGJhY2soNDIpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiYmxvY2tD
YWxsYmFjayIsIHJlc3VsdCA9PSA0Mik7CisgICAgfQorCisgICAgaWYgKGJsb2NrU2lnbmF0dXJl
Q29udGFpbnNDbGFzcygpKSB7CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgICAgICBfX2Jsb2NrIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAg
ICAgICBjb250ZXh0W0AiYmxvY2tDYWxsYmFjayJdID0gXihOU1N0cmluZyAqdmFsdWUpeworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IFtAIjQyIiBpc0VxdWFsVG9TdHJpbmc6dmFsdWVdID09IFlF
UzsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
ImJsb2NrQ2FsbGJhY2soNDIpIl07CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAImJsb2NrQ2Fs
bGJhY2soTlNTdHJpbmcgKikiLCByZXN1bHQpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIE5TTG9nKEAiU2tpcHBpbmcgJ2Jsb2NrQ2FsbGJhY2soTlNTdHJpbmcgKiknIHRlc3QgY2Fz
ZSIpOworCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjaGVj
a1Jlc3VsdChAIiFjb250ZXh0LmV4Y2VwdGlvbiIsICFjb250ZXh0LmV4Y2VwdGlvbik7CisgICAg
ICAgIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJ
RCBKQVZBU0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
Y29udGV4dC5leGNlcHRpb24iLCBjb250ZXh0LmV4Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBfX2Jsb2NrIGJvb2wgY2F1Z2h0
ID0gZmFsc2U7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0
ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgICh2b2lkKWNvbnRl
eHQ7CisgICAgICAgICAgICAodm9pZClleGNlcHRpb247CisgICAgICAgICAgICBjYXVnaHQgPSB0
cnVlOworICAgICAgICB9OworICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQl
XiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQVCBTWU5UQVggIUAjJCVeJiooKSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAIkpTQ29udGV4dC5leGNlcHRpb25IYW5kbGVyIiwgY2F1Z2h0
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IGNvbnRleHRbQCJjYWxsYmFjayJdID0gXnsKKyAgICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgICAgICAgICAgY29udGV4dC5leGNl
cHRpb24gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiU29tZXRoaW5n
IHdlbnQgd3JvbmcuIiBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIH07CisgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdDsgdHJ5
IHsgY2FsbGJhY2soKTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlvbic7
IH0iXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJFeHBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAt
IHdhcyBjYXVnaHQgYnkgSmF2YVNjcmlwdCIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAi
Q2F1Z2h0IGV4Y2VwdGlvbiJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJFeHBsaWNpdCB0aHJv
dyBpbiBjYWxsYmFjayAtIG5vdCB0aHJvd24gdG8gT2JqZWN0aXZlLUMiLCAhY29udGV4dC5leGNl
cHRpb24pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgY29udGV4dFtAImNhbGxiYWNrIl0gPSBeeworICAgICAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgICAgICAgICBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAIiFAIyQlXiYqKCkgVEhJUyBJUyBOT1QgVkFMSUQgSkFWQVNDUklQ
VCBTWU5UQVggIUAjJCVeJiooKSJdOworICAgICAgICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInZhciByZXN1bHQ7IHRyeSB7IGNhbGxiYWNr
KCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0NhdWdodCBleGNlcHRpb24nOyB9Il07CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAiSW1wbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0
IGJ5IEphdmFTY3JpcHQiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIkNhdWdodCBleGNl
cHRpb24iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiSW1wbGljaXQgdGhyb3cgaW4gY2FsbGJh
Y2sgLSBub3QgdGhyb3duIHRvIE9iamVjdGl2ZS1DIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OgorICAgICAgICAgICAgQCJmdW5jdGlvbiBzdW0oYXJyYXkpIHsg
XAorICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwOyBcCisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSBpbiBhcnJheSkgXAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXJyYXlb
aV07IFwKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgICAgICAgICB9Il07
CisgICAgICAgIEpTVmFsdWUgKmFycmF5ID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkBbQDEz
LCBAMiwgQDddIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgSlNWYWx1ZSAqc3VtRnVuY3Rp
b24gPSBjb250ZXh0W0Aic3VtIl07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtzdW1GdW5j
dGlvbiBjYWxsV2l0aEFyZ3VtZW50czpAWyBhcnJheSBdXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJzdW0oWzEzLCAyLCA3XSkiLCBbcmVzdWx0IHRvSW50MzJdID09IDIyKTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIEpTVmFsdWUgKm11bEFk
ZEZ1bmN0aW9uID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6CisgICAgICAgICAgICBAIihmdW5j
dGlvbihhcnJheSwgb2JqZWN0KSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107
IFwKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGFycmF5KSBcCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldICogb2JqZWN0LnggKyBvYmplY3QueSk7IFwKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgICAgICAgICB9KSJdOworICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbbXVsQWRkRnVuY3Rpb24gY2FsbFdpdGhBcmd1bWVudHM6QFsg
QFsgQDIsIEA0LCBAOCBdLCBAeyBAIngiOkAwLjUsIEAieSI6QDQyIH0gXV07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAibXVsQWRkRnVuY3Rpb24iLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpA
IjQzLDQ0LDQ2Il0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0
SW5Db250ZXh0OmNvbnRleHRdOworCisgICAgICAgIG9iamVjdFtAInBvaW50Il0gPSBAeyBAIngi
OkAxLCBAInkiOkAyIH07CisgICAgICAgIG9iamVjdFtAInBvaW50Il1bQCJ4Il0gPSBAMzsKKyAg
ICAgICAgQ0dQb2ludCBwb2ludCA9IFtvYmplY3RbQCJwb2ludCJdIHRvUG9pbnRdOworICAgICAg
ICBjaGVja1Jlc3VsdChAInRvUG9pbnQiLCBwb2ludC54ID09IDMgJiYgcG9pbnQueSA9PSAyKTsK
KworICAgICAgICBvYmplY3RbQHsgQCJ0b1N0cmluZyI6XnsgcmV0dXJuIEAiZm9vIjsgfSB9XSA9
IEAiYmFyIjsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0b1N0cmluZyBpbiBvYmplY3QgbGl0ZXJh
bCB1c2VkIGFzIHN1YnNjcmlwdCIsIFtbb2JqZWN0W0AiZm9vIl0gdG9TdHJpbmddIGlzRXF1YWw6
QCJiYXIiXSk7CisKKyAgICAgICAgb2JqZWN0W1tAImZvb2JhciIgc3Vic3RyaW5nVG9JbmRleDoz
XV0gPSBAImJhciI7CisgICAgICAgIGNoZWNrUmVzdWx0KEAic3Vic3RyaW5nIHVzZWQgYXMgc3Vi
c2NyaXB0IiwgW1tvYmplY3RbQCJmb28iXSB0b1N0cmluZ10gaXNFcXVhbDpAImJhciJdKTsKKyAg
ICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRleHRY
WVogKnRlc3RYWVogPSBbW1RleHRYWVogYWxsb2NdIGluaXRdOworICAgICAgICBjb250ZXh0W0Ai
dGVzdFhZWiJdID0gdGVzdFhZWjsKKyAgICAgICAgdGVzdFhZWi54ID0gMzsKKyAgICAgICAgdGVz
dFhZWi55ID0gNDsKKyAgICAgICAgdGVzdFhZWi56ID0gNTsKKyAgICAgICAgW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnggPSAxMzsgdGVzdFhZWi55ID0gMTQ7Il07CisgICAgICAg
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdFhZWi50ZXN0KCd0ZXN0JykiXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gdGVzdFhZWlRlc3RlZCIsIHRlc3RYWVpUZXN0ZWQp
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRl
c3RYWVoueCArICcsJyArIHRlc3RYWVoueSArICcsJyArIHRlc3RYWVoueiJdOworICAgICAgICBj
aGVja1Jlc3VsdChAIlRleHRYWVogLSByZXN1bHQiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVh
bDpAIjEzLDQsdW5kZWZpbmVkIl0pOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgW2NvbnRleHRbQCJPYmplY3QiXVtAInByb3RvdHlwZSJdIGRl
ZmluZVByb3BlcnR5OkAiZ2V0dGVyUHJvcGVydHkiIGRlc2NyaXB0b3I6QHsKKyAgICAgICAgICAg
IEpTUHJvcGVydHlEZXNjcmlwdG9yR2V0S2V5Ol57CisgICAgICAgICAgICAgICAgcmV0dXJuIFtK
U0NvbnRleHQgY3VycmVudFRoaXNdW0AieCJdOworICAgICAgICAgICAgfQorICAgICAgICB9XTsK
KyAgICAgICAgSlNWYWx1ZSAqb2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkB7IEAi
eCI6QDEwMSB9IGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgaW50IHJlc3VsdCA9IFtvYmpl
Y3QgW0AiZ2V0dGVyUHJvcGVydHkiXSB0b0ludDMyXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJn
ZXR0ZXJQcm9wZXJ0eSIsIHJlc3VsdCA9PSAxMDEpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFz
ZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAImNvbmNhdGVuYXRlIl0gPSBe
eworICAgICAgICAgICAgTlNBcnJheSAqYXJndW1lbnRzID0gW0pTQ29udGV4dCBjdXJyZW50QXJn
dW1lbnRzXTsKKyAgICAgICAgICAgIGlmICghW2FyZ3VtZW50cyBjb3VudF0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEAiIjsKKyAgICAgICAgICAgIE5TU3RyaW5nICptZXNzYWdlID0gW2FyZ3Vt
ZW50c1swXSBkZXNjcmlwdGlvbl07CisgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaW5kZXgg
PSAxOyBpbmRleCA8IFthcmd1bWVudHMgY291bnRdOyArK2luZGV4KQorICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICVAIiwgbWVzc2FnZSwg
YXJndW1lbnRzW2luZGV4XV07CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAg
fTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJj
b25jYXRlbmF0ZSgnSGVsbG8sJywgJ1dvcmxkIScpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
Y29uY2F0ZW5hdGUiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIkhlbGxvLCBXb3JsZCEiXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBj
b250ZXh0W0AiZm9vIl0gPSBAWUVTOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAInR5cGVvZiBmb28iXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJA
WUVTIGlzIGJvb2xlYW4iLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAImJvb2xlYW4iXSk7
CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBU
ZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAg
IGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyh0ZXN0T2JqZWN0KSJdOwor
ICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyh0ZXN0T2JqZWN0KSIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAiW29iamVjdCBUZXN0T2JqZWN0XSJdKTsKKyAgICB9CisKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmpl
Y3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmpl
Y3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiU3RyaW5nKHRlc3RPYmplY3QuX19wcm90b19fKSJdOworICAgICAgICBj
aGVja1Jlc3VsdChAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJvdG9fXykiLCBbW3Jlc3VsdCB0b1N0
cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdFByb3RvdHlwZV0iXSk7CisgICAgfQor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
W0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBjb250ZXh0W0Ai
VGVzdE9iamVjdCJdID0gW1Rlc3RPYmplY3QgY2xhc3NdOworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIlN0cmluZyhUZXN0T2JqZWN0KSJdOworICAg
ICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyhUZXN0T2JqZWN0KSIsIFtbcmVzdWx0IHRvU3RyaW5n
XSBpc0VxdWFsOkAiW29iamVjdCBUZXN0T2JqZWN0Q29uc3RydWN0b3JdIl0pOworICAgIH0KKwor
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tK
U0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6W1Rlc3RPYmplY3QgY2xhc3NdIGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJbdmFsdWUgdG9PYmplY3RdID09IFtU
ZXN0T2JqZWN0IGNsYXNzXSIsIFt2YWx1ZSB0b09iamVjdF0gPT0gW1Rlc3RPYmplY3QgY2xhc3Nd
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAg
IGNvbnRleHRbQCJUZXN0T2JqZWN0Il0gPSBbVGVzdE9iamVjdCBjbGFzc107CisgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiVGVzdE9iamVjdC5wYXJl
bnRUZXN0KCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXN0T2JqZWN0LnBhcmVudFRlc3Qo
KSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiVGVzdE9iamVjdCJdKTsKKyAgICB9CisKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlND
b250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3QqIHRl
c3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtAInRl
c3RPYmplY3RBIl0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdEIi
XSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAidGVzdE9iamVjdEEgPT0gdGVzdE9iamVjdEIiXTsKKyAgICAgICAgY2hlY2tS
ZXN1bHQoQCJ0ZXN0T2JqZWN0QSA9PSB0ZXN0T2JqZWN0QiIsIFtyZXN1bHQgdG9Cb29sXSk7Cisg
ICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0
T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNv
bnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICB0ZXN0T2JqZWN0LnBv
aW50ID0gKENHUG9pbnQpezMsNH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHRlc3RPYmplY3Qu
cG9pbnQpOyB0ZXN0T2JqZWN0LnBvaW50ID0ge3g6MTIseToxNH07IHJlc3VsdCJdOworICAgICAg
ICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QucG9pbnQgLSByZXN1bHQiLCBbW3Jlc3VsdCB0b1N0
cmluZ10gaXNFcXVhbDpAIntcInhcIjozLFwieVwiOjR9Il0pOworICAgICAgICBjaGVja1Jlc3Vs
dChAInRlc3RPYmplY3QucG9pbnQgLSB7eDoxMix5OjE0fSIsIHRlc3RPYmplY3QucG9pbnQueCA9
PSAxMiAmJiB0ZXN0T2JqZWN0LnBvaW50LnkgPT0gMTQpOworICAgIH0KKworICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9
IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICB0ZXN0T2JqZWN0LnNpeCA9IDY7Cisg
ICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OworICAgICAgICBjb250
ZXh0W0AibXVsIl0gPSBeKGludCB4LCBpbnQgeSl7IHJldHVybiB4ICogeTsgfTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJtdWwodGVzdE9iamVj
dC5zaXgsIDcpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAibXVsKHRlc3RPYmplY3Quc2l4LCA3
KSIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0
T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKKyAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXVtAInZhcmlhYmxlIl0gPSBA
NDsKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIrK3Rlc3RPYmplY3QudmFyaWFi
bGUiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIrK3Rlc3RPYmplY3QudmFyaWFibGUiLCB0ZXN0
T2JqZWN0LnZhcmlhYmxlID09IDUpOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgY29udGV4dFtAInBvaW50Il0gPSBAeyBAIngiOkA2LCBAInki
OkA3IH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAicG9pbnQueCArICcsJyArIHBvaW50LnkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJwb2lu
dC54ICsgJywnICsgcG9pbnQueSIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiNiw3Il0p
OworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
Y29udGV4dFtAInBvaW50Il0gPSBAeyBAIngiOkA2LCBAInkiOkA3IH07CisgICAgICAgIEpTVmFs
dWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAicG9pbnQueCArICcsJyArIHBv
aW50LnkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJwb2ludC54ICsgJywnICsgcG9pbnQueSIs
IFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiNiw3Il0pOworICAgIH0KKworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVj
dCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBjb250ZXh0W0AidGVzdE9iamVj
dCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0LmdldFN0cmluZygpIl07CisgICAgICAgIGNoZWNrUmVz
dWx0KEAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOwor
ICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgVGVz
dE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOworICAgICAgICBj
b250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0LnRlc3RBcmd1bWVudFR5
cGVzKDEwMSwwLjUsdHJ1ZSwnZm9vJyw2NjYsW2ZhbHNlLCdiYXInLGZhbHNlXSx7eDonYmF6J30p
Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC50ZXN0QXJndW1lbnRUeXBlcyIs
IFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiMTAxLDAuNSwxLGZvbyw2NjYsYmFyLGJheiJdKTsK
KyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRl
c3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAg
Y29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgKnJl
c3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2Fs
bCh0ZXN0T2JqZWN0KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3Ry
aW5nLmNhbGwodGVzdE9iamVjdCkiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFRlc3RPYmplY3Qq
IHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgY29udGV4dFtA
InRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9i
amVjdC5nZXRTdHJpbmcuY2FsbCh7fSkgcHJlIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKKyAgICAg
ICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0T2JqZWN0LmdldFN0cmluZy5jYWxsKHt9
KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwoe30p
IHBvc3QiLCBjb250ZXh0LmV4Y2VwdGlvbik7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworICAgICAgICBUZXN0T2JqZWN0KiB0ZXN0T2JqZWN0ID0gW1Rlc3RP
YmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0
T2JqZWN0OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAInZhciByZXN1bHQgPSAwOyB0ZXN0T2JqZWN0LmNhbGxiYWNrKGZ1bmN0aW9uKHgpeyByZXN1
bHQgPSB4OyB9KTsgcmVzdWx0Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5j
YWxsYmFjayIsIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOworICAgIH0KKworICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQxID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRdOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQyID0gW1tKU0NvbnRleHQgYWxs
b2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dDEudmlydHVhbE1hY2hpbmVdOworICAg
ICAgICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aERvdWJsZTo0MiBpbkNvbnRl
eHQ6Y29udGV4dDJdOworICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlLmNvbnRleHQgPT0gY29u
dGV4dDIiLCB2YWx1ZS5jb250ZXh0ID09IGNvbnRleHQyKTsKKyAgICAgICAgY29udGV4dDFbQCJw
YXNzVmFsdWVCZXR3ZWVuQ29udGV4dHMiXSA9IHZhbHVlOworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBbY29udGV4dDEgZXZhbHVhdGVTY3JpcHQ6QCJwYXNzVmFsdWVCZXR3ZWVuQ29udGV4dHMi
XTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQuY29udGV4dCA9PSBjb250ZXh0MSIsIHJl
c3VsdC5jb250ZXh0ID09IGNvbnRleHQxKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJbdmFsdWUg
aXNFcXVhbFRvT2JqZWN0OnJlc3VsdF0iLCBbdmFsdWUgaXNFcXVhbFRvT2JqZWN0OnJlc3VsdF0p
OworICAgICAgICBbY29udGV4dDEgcmVsZWFzZV07CisgICAgICAgIFtjb250ZXh0MiByZWxlYXNl
XTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQoreworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzg2
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0MCw3IEBACiAJCTg2Q0M4
NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRD
YWxsLmNwcCAqLzsgfTsKIAkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5
QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi87IH07
CiAJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUg
LyogSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg2RDIyMjFBMTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQyMjIxOTE2N0VGOTQ0MDAyNEM4
MDQgLyogdGVzdGFwaS5tICovOyB9OwogCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJN
QXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RDNCMkJGMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwICovOyB9Owog
CQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMDEwMTU2QkRFMDAyODY1
RTcgLyogQVJNQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZl
cldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RDNCMkMxMTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRo
Q29uc3RhbnRQb29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTU0OCw2ICs1NDksMTggQEAKIAkJODZEM0IzQzQxMDE1OUQ3RjAwMjg2NUU3IC8q
IFJlcGF0Y2hCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEQjY0NjQwRjk1
QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkRCNjQ2MzBGOTVDNkZD
MDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLzsgfTsKIAkJ
ODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFMTE2QjAwRkU3NUFDODAwQjUxMkJD
IC8qIENvZGVMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTg2RTNDNjEyMTY3QkFCRDcwMDZENzYwQSAvKiBBUElKU1ZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwNjE2N0JB
Qjg3MDA2RDc2MEEgLyogQVBJSlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFB1YmxpYywgKTsgfTsgfTsKKwkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2
MDcxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpT
RXhwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkUzQzYwQTE2N0JBQjg3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJODZFM0M2
MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0Nv
bnRleHQubW0gKi87IH07CisJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi87IH07CisJ
CTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQjE2N0JBQjg3MDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLm1tICovOyB9OworCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEg
LyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkUzQzYwQzE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi87IH07
CisJCTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEQxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmFsdWUubW0gKi87IH07CisJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1Zh
bHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgfTsK
KwkJODZFM0M2MUMxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYxMDE2N0JBQjg3
MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSAqLzsgfTsKKwkJODZFM0M2MUQxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8q
IEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyB9OwogCQk4NkU4NTUzOTExMUI5OTY4MDAx
QUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWls
ZGVyLmggKi87IH07CiAJCTg2RUJGMkZGMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZF
QkYyRjkxNTYwRjAzNjAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCTg2
RUJGMzAwMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUJGMkZBMTU2MEYwMzYwMDhFOTIy
MiAvKiBOYW1lQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTU2OSw2ICs1ODIsMTEgQEAKIAkJODZF
QzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURDMzEzMjhERjgyMDAyQjJB
RDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLzsgfTsKIAkJODZFQ0EzRUExMzJERUYxQzAwMkIy
QUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi87IH07CiAJCTg2
RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcg
LyogREZHU2NvcmVCb2FyZC5oICovOyB9OworCQk4NkYzRUVCQjE2OENERTkzMDA3N0I5MkEgLyog
SlNCbG9ja0FkYXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RjNFRUI3MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5oICovOyB9
OworCQk4NkYzRUVCQzE2OENERTkzMDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzRUVCODE2OENDRjc1
MDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IubW0gKi87IH07CisJCTg2RjNFRUJEMTY4Q0RFOTMw
MDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGM0VFQjkxNjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakND
YWxsYmFja0Z1bmN0aW9uLmggKi87IH07CisJCTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBP
YmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RjNFRUJBMTY4Q0NGNzUwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5j
dGlvbi5tbSAqLzsgfTsKKwkJODZGM0VFQkYxNjhDREU5MzAwNzdCOTJBIC8qIE9iamNSdW50aW1l
RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLzsgfTsKIAkJ
ODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkZBOUU4RjE0MkJCQjJEMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJODZGQTlFOTIxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5oICovOyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlz
dGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MDIxM0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CkBA
IC0xMzc4LDYgKzEzOTYsNyBAQAogCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2Fs
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8q
IEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVFByb3BlcnR5QWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZDQ0VGREQwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NkQyMjIxOTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVzdGFwaS5tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLm9iamM7IG5hbWUgPSB0ZXN0YXBpLm07IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjJCRjEwMTU2QkRFMDAyODY1RTcgLyog
QVJNQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFS
TUFzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNCMkMwMTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVJNQXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RDNCMkMxMTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29s
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzc2VtYmxlckJ1ZmZlcldpdGhD
b25zdGFudFBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODYsNiArMTQw
NSwxOCBAQAogCQk4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlTG9jYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEFQ
SUpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSlNWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwNzE2N0JBQjg3MDA2RDc2MEEg
LyogSlNDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwODE2N0JBQjg3MDA2RDc2
MEEgLyogSlNDb250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gSlNDb250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYwOTE2
N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDb250ZXh0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXhwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2RTNDNjBCMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1dyYXBwZXJNYXAubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBK
U1dyYXBwZXJNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXcmFwcGVy
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjBEMTY3QkFCODcwMDZE
NzYwQSAvKiBKU1ZhbHVlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gSlNWYWx1ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFM0M2MEUxNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1ZhbHVlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWaXJ0dWFsTWFjaGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4NkUzQzYxMDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFs
TWFjaGluZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTVmly
dHVhbE1hY2hpbmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RTNDNjExMTY3
QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmlu
Z0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdCdWls
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUJGMkY5MTU2MEYwMzYwMDhF
OTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmFtZUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZFQkYyRkExNTYwRjAzNjAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYW1lQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDcsNiArMTQzOCwxMSBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCNjE2ODU1QTVCMDA3
N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT2JqY1J1bnRpbWVFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODZGM0VFQjcxNjhDQ0Y3NTAwNzdCOTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmxvY2tBZGFwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg2RjNFRUI4MTY4Q0NGNzUwMDc3QjkyQSAvKiBKU0Jsb2NrQWRhcHRvci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQmxvY2tBZGFwdG9y
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkYzRUVCOTE2OENDRjc1MDA3N0I5
MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODZGM0VFQkExNjhDQ0Y3NTAwNzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ0NhbGxiYWNrRnVuY3Rp
b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Rjc1RUZCMTUxQzA2MkYwMDdD
OUJBMyAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZGNzVFRkMxNTFDMDYyRjAwN0M5QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBDYWNoZWRSZXN1bHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8q
IFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTg3OCw2ICsxOTE0LDcgQEAKIAkJCQkxNDQwMDUxNzBBNTMxQ0I1MDAwNUYwNjEgLyogbWlu
aWRvbSAqLywKIAkJCQkxNEJENUEyRDBBM0U5MUY2MDBCQUY1OUMgLyogdGVzdGFwaS5jICovLAog
CQkJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovLAorCQkJCTg2RDIy
MjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm0gKi8sCiAJCQkJNjUxMTIyRTUxNDA0NjlC
QTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSB0ZXN0czsK
QEAgLTIwNDUsNiArMjA4Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTE0ODJCNzhBMEE0MzA1QUIwMDUxN0NGQyAvKiBBUElDYXN0LmggKi8sCisJCQkJODZF
M0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEFQSUpTVmFsdWUuaCAqLywKIAkJCQk4NjVGNDA4NzEw
RTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0
MUJDRkYgLyogSmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAv
KiBKYXZhU2NyaXB0Q29yZS5oICovLApAQCAtMjA1Myw2ICsyMDkxLDggQEAKIAkJCQkxNDIxMzU5
QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCAqLywKIAkJCQkxNDI3MTEzODBBNDYwQkJC
MDA4MEVFRUEgLyogSlNCYXNlLmggKi8sCiAJCQkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8q
IEpTQmFzZVByaXZhdGUuaCAqLywKKwkJCQk4NkYzRUVCNzE2OENDRjc1MDA3N0I5MkEgLyogSlNC
bG9ja0FkYXB0b3IuaCAqLywKKwkJCQk4NkYzRUVCODE2OENDRjc1MDA3N0I5MkEgLyogSlNCbG9j
a0FkYXB0b3IubW0gKi8sCiAJCQkJMTQ0MEY4QUQwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJMTQ0MEY4QUMwQTUwOEQyMDAwMDVGMDYxIC8qIEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5oICovLAogCQkJCTE0NDBGODkwMEE1MDhCMTAwMDA1RjA2MSAv
KiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwICovLApAQCAtMjA2Miw5ICsyMTAyLDEzIEBACiAJCQkJ
QThFODk0MzEwQ0QwNjAyNDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAq
LywKIAkJCQkxNDQwRkNFMjBBNTFFNDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgKi8sCiAJ
CQkJMTQ0MEZDRTEwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuaCAqLywKKwkJCQk4NkUz
QzYwNzE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggKi8sCisJCQkJODZFM0M2MDgxNjdC
QUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSAqLywKKwkJCQk4NkUzQzYwOTE2N0JBQjg3MDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCAqLywKIAkJCQkxNEJENUEyOTBBM0U5MUY2MDBC
QUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCAqLywKIAkJCQkxNEJENUEyQTBBM0U5MUY2MDBCQUY1
OUMgLyogSlNDb250ZXh0UmVmLmggKi8sCiAJCQkJMTQ4Q0QxRDcxMDhDRjkwMjAwODE2M0M2IC8q
IEpTQ29udGV4dFJlZlByaXZhdGUuaCAqLywKKwkJCQk4NkUzQzYwQTE2N0JBQjg3MDA2RDc2MEEg
LyogSlNFeHBvcnQuaCAqLywKIAkJCQkxNDgyQjdFMjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmpl
Y3RSZWYuY3BwICovLAogCQkJCTE0ODJCN0UxMEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJl
Zi5oICovLAogCQkJCUE3OUVEQjA4MTE1MzFDRDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlByaXZh
dGUuaCAqLywKQEAgLTIwNzcsMTEgKzIxMjEsMjEgQEAKIAkJCQkxNDgyQjc0QjBBNDMwMzI4MDA1
MTdDRkMgLyogSlNTdHJpbmdSZWYuaCAqLywKIAkJCQkxNDZBQUIzNzBCNjZBOTQ0MDBFNTVGMTYg
LyogSlNTdHJpbmdSZWZDRi5jcHAgKi8sCiAJCQkJMTQ2QUFCMkEwQjY2QTg0OTAwRTU1RjE2IC8q
IEpTU3RyaW5nUmVmQ0YuaCAqLywKKwkJCQk4NkUzQzYwRDE2N0JBQjg3MDA2RDc2MEEgLyogSlNW
YWx1ZS5tbSAqLywKKwkJCQk4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVy
bmFsLmggKi8sCiAJCQkJMTRCRDVBMkIwQTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3Bw
ICovLAogCQkJCTE0ODJCNkVBMEE0MzAwQjMwMDUxN0NGQyAvKiBKU1ZhbHVlUmVmLmggKi8sCisJ
CQkJODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCAqLywKKwkJ
CQk4NkUzQzYxMDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSAqLywKKwkJ
CQk4NkUzQzYxMTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
Ki8sCiAJCQkJQTc0ODJFMzcxMTZBNjk3QjAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZklu
dGVybmFsLmggKi8sCiAJCQkJQTc0ODJCN0ExMTY2Q0RFQTAwM0IwNzEyIC8qIEpTV2Vha09iamVj
dE1hcFJlZlByaXZhdGUuY3BwICovLAogCQkJCUE3NDgyQjc5MTE2NkNERUEwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggKi8sCisJCQkJODZFM0M2MEIxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5tbSAqLywKKwkJCQk4NkUzQzYwQzE2N0JBQjg3MDA2RDc2MEEg
LyogSlNXcmFwcGVyTWFwLmggKi8sCisJCQkJODZGM0VFQjkxNjhDQ0Y3NTAwNzdCOTJBIC8qIE9i
akNDYWxsYmFja0Z1bmN0aW9uLmggKi8sCisJCQkJODZGM0VFQkExNjhDQ0Y3NTAwNzdCOTJBIC8q
IE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tICovLAorCQkJCTg2RjNFRUI2MTY4NTVBNUIwMDc3Qjky
QSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovLAogCQkJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8sCiAJCQkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYx
IC8qIE9wYXF1ZUpTU3RyaW5nLmggKi8sCiAJCQkJNURFM0QwRjQwREQ4RERGQjAwNDY4NzE0IC8q
IFdlYktpdEF2YWlsYWJpbGl0eS5oICovLApAQCAtMzIwNSw2ICszMjU5LDE3IEBACiAJCQkJMEYw
NUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8q
IEFQSUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYw
QSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZE
NzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MTUxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjE3
MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZGM0VFQkIxNjhDREU5MzAwNzdC
OTJBIC8qIEpTQmxvY2tBZGFwdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkYzRUVCRDE2OENE
RTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg2RjNFRUJGMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0zNTI4LDYgKzM1OTMsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTE0NDBGNjEwMEE0Rjg1NjcwMDA1RjA2MSAvKiB0ZXN0
YXBpLmMgaW4gU291cmNlcyAqLywKKwkJCQk4NkQyMjIxQTE2N0VGOTQ0MDAyNEM4MDQgLyogdGVz
dGFwaS5tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zODI1LDYgKzM4OTEsMTIgQEAKIAkJCQlBN0MwQzRB
RDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RUY5MUUxNjg3OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5r
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlND
b250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTg2RTNDNjFBMTY3QkFCRUUwMDZE
NzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJODZFM0M2MUMxNjdCQUJFRTAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gaW4gU291cmNlcyAqLywKKwkJCQk4NkYzRUVC
QzE2OENERTkzMDA3N0I5MkEgLyogSlNCbG9ja0FkYXB0b3IubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk4NkYzRUVCRTE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3
IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIG1fdGlt
ZW91dENvdW50KDUxMikKICNlbmRpZgogICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENv
bnN0KDApCisgICAgLCBtX2FwaURhdGEoMCkKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICwg
bV9jYW5Vc2VBc3NlbWJsZXIoZW5hYmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVBbGxvY2F0b3IpKQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Myw2ICs0NTMsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2Rl
KCk7CiAKKyAgICAgICAgdm9pZCAqbV9hcGlEYXRhOworCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAxMzg2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQCBKU0dsb2JhbE9iamVj
dDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxECiAgICAgLCBtX3dlYWtSYW5kb20oT3B0aW9uczo6
Zm9yY2VXZWFrUmFuZG9tU2VlZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQoKSA6
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkK
ICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
PyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQor
ICAgICwgbV9hcGlEYXRhKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk2LDYgKzE5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGhhc0RlYnVn
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogICAgICAgICBib29sIGhhc1Byb2Zp
bGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQ
cm9maWxpbmcodGhpcyk7IH0KIAorICAgICAgICB2b2lkKiBtX2FwaURhdGE7CisKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KiA9IDApOwogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMi0zMSAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgT2JqZWN0aXZlLUMg
QVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldU
RlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
Lmg6CisgICAgICAgIChXVEZUaHJlYWREYXRhKToKKyAgICAgICAgICAgIC0gQWRkZWQgbV9hcGlE
YXRhIC0gcHJvdmlkZSBjb252ZW5pZW50IHN0b3JhZ2UgZm9yIHVzZSBieSB0aGUgQVBJLgorCiAy
MDEyLTEyLTI4ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1lbnRhdGlvbjogaW5zdHJ1
bWVudCBub3QgaW5zdHJ1bWVudGVkIG1lbWJlcnMuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZU
aHJlYWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRh
LmNwcAkocmV2aXNpb24gMTM4NjAwKQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIFdURiB7CiBUaHJl
YWRTcGVjaWZpYzxXVEZUaHJlYWREYXRhPiogV1RGVGhyZWFkRGF0YTo6c3RhdGljRGF0YTsKIAog
V1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgpCi0gICAgOiBtX2F0b21pY1N0cmluZ1RhYmxl
KDApCisgICAgOiBtX2FwaURhdGEoMCkKKyAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUoMCkKICAg
ICAsIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKDApCiAjaWYgVVNFKEpTQykKICAgICAs
IG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZShuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKSkKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHJldmlzaW9uIDEzODYwMCkKKysrIFNvdXJjZS9XVEYv
d3RmL1dURlRocmVhZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw4IEBAIHB1
YmxpYzoKICNlbmRpZgogI2VuZGlmIC8vIFVTRShKU0MpCiAKKyAgICB2b2lkKiBtX2FwaURhdGE7
CisKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7
CiAgICAgQXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0
cnVjdG9yOwo=
</data>
<flag name="review"
          id="198464"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181080</attachid>
            <date>2013-01-02 15:25:46 -0800</date>
            <delta_ts>2013-01-10 23:29:14 -0800</delta_ts>
            <desc>Darin review feedback part 1</desc>
            <filename>105889.Darin.1.patch</filename>
            <type>text/plain</type>
            <size>95366</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMy0wMS0wMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJSlNWYWx1ZS5o
OgorICAgICAgICAgICAgLSBGaXggdHlwb3MgaW4gY29tbWVudAorICAgICAgICAgICAgLSBBZGQg
bmV3bGluZSBiZWZvcmUgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIE5BKQorICAgICAgICAgICAg
LSBjbHMgLT4gZXhwZWN0ZWRDbGFzcworICAgICAgICAgICAgLSBrZXkgdHlwZSBmb3IgLXNldE9i
amVjdDpmb3JLZXllZFN1YnNjcmlwdDogaXMgbm93IE5TT2JqZWN0IDxOU0NvcHlpbmc+ICoKKyAg
ICAgICAgKiBBUEkvSlNCYXNlLmg6CisgICAgICAgICAgICAtIEpTX09CSkNfQVBJX0VOQUJMRUQg
bm8gbG9uZ2VyIGltcGxpZXMgX19PQkpDX18KKyAgICAgICAgKiBBUEkvSlNCbG9ja0FkYXB0b3Iu
bW06CisgICAgICAgIChCbG9ja0FyZ3VtZW50U3RydWN0OjpCbG9ja0FyZ3VtZW50U3RydWN0KToK
KyAgICAgICAgKEJsb2NrQXJndW1lbnRTdHJ1Y3QpOgorICAgICAgICAgICAgLSBtYXJrIHZpcnR1
YWwgZnVuY3Rpb25zIGFzIHZpcnR1YWwsIG92ZXJyaWRlLCBhbmQgcHJpdmF0ZQorICAgICAgICAg
ICAgLSByZWZhY3RvciBvdXQgYnVmZmVyIGFsbG9jYXRpb24gZm9yIHN0cnVjdCB0eXBlcworICAg
ICAgICAoQmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZVZvaWQpOgorICAgICAgICAoQmxv
Y2tBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAgICAgICAgKEJsb2NrQXJndW1l
bnRUeXBlRGVsZWdhdGU6OnR5cGVTdHJ1Y3QpOgorICAgICAgICAgICAgLSByZXR1cm4gbmlsIC0+
IHJldHVybiAwCisgICAgICAgIChCbG9ja1Jlc3VsdFN0cnVjdDo6QmxvY2tSZXN1bHRTdHJ1Y3Qp
OgorICAgICAgICAoQmxvY2tSZXN1bHRTdHJ1Y3QpOgorICAgICAgICAgICAgLSBtYXJrIHZpcnR1
YWwgZnVuY3Rpb25zIGFzIHZpcnR1YWwsIG92ZXJyaWRlLCBhbmQgcHJpdmF0ZQorICAgICAgICAg
ICAgLSByZWZhY3RvciBvdXQgYnVmZmVyIGFsbG9jYXRpb24gZm9yIHN0cnVjdCB0eXBlcworICAg
ICAgICAoYnVpbGRCbG9ja1NpZ25hdHVyZSk6CisgICAgICAgICAgICAtICVsdSBpcyBub3QgYW4g
YXBwcm9wcmlhdGUgZm9ybWF0IHNwZWNpZmllciBmb3IgTlNJbnRlZ2VyCisgICAgICAgICgtW0pT
QmxvY2tBZGFwdG9yIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6XSk6CisgICAg
ICAgICAgICAtIG5pbCBjaGVjayBbc3VwZXIgaW5pdF0KKyAgICAgICAgKC1bSlNCbG9ja0FkYXB0
b3IgYmxvY2tNYXRjaGVzU2lnbmF0dXJlOl0pOgorICAgICAgICAoLVtKU0Jsb2NrQWRhcHRvciBi
bG9ja0Zyb21WYWx1ZTppbkNvbnRleHQ6d2l0aEV4Y2VwdGlvbjpdKToKKyAgICAgICAgICAgIC0g
Y3R4IC0+IGNvbnRleHRSZWYKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lmg6CisgICAgICAgICAg
ICAtIEZpeCB0eXBvcyBpbiBjb21tZW50CisgICAgICAgICAgICAtIEFkZCBuZXdsaW5lIGJlZm9y
ZSBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCisgICAgICAgICAgICAtIGtleSB0eXBlIGZv
ciAtc2V0T2JqZWN0OmZvcktleWVkU3Vic2NyaXB0OiBpcyBub3cgTlNPYmplY3QgPE5TQ29weWlu
Zz4gKgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgICgtW0pTQ29udGV4dCBp
bml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAgICAgLSBuaWwgY2hlY2sgW3N1cGVy
IGluaXRdCisgICAgICAgICgrW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRzXSk6CisgICAgICAg
ICAgICAtIGFyZ3MgLT4gYXJndW1lbnRBcnJheQorICAgICAgICAoLVtKU0NvbnRleHQgc2V0T2Jq
ZWN0OmZvcktleWVkU3Vic2NyaXB0Ol0pOgorICAgICAgICAgICAgLSBrZXkgdHlwZSBmb3IgLXNl
dE9iamVjdDpmb3JLZXllZFN1YnNjcmlwdDogaXMgbm93IE5TT2JqZWN0IDxOU0NvcHlpbmc+ICoK
KyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHBy
b3RlY3Q6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB1bnByb3RlY3Q6XSk6CisgICAgICAgICAg
ICAtIG1fcHJvdGVjdGVkIC0+IG1fcHJvdGVjdENvdW50cworICAgICAgICAqIEFQSS9KU1ZhbHVl
Lm1tOgorICAgICAgICAoLVtKU1ZhbHVlIHRvT2JqZWN0T2ZDbGFzczpdKToKKyAgICAgICAgICAg
IC0gY2xzIC0+IGV4cGVjdGVkQ2xhc3MKKyAgICAgICAgKC1bSlNWYWx1ZSB0b0Jvb2xdKToKKyAg
ICAgICAgKC1bSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eTpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBo
YXNQcm9wZXJ0eTpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVmaW5lZF0pOgorICAgICAg
ICAoLVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzQm9vbGVhbl0pOgor
ICAgICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNTdHJp
bmddKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAgICAgICAoLVtKU1ZhbHVl
IGlzRXF1YWxUb09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0VxdWFsV2l0aFR5cGVD
b2VyY2lvblRvT2JqZWN0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzSW5zdGFuY2VPZjpdKToK
KyAgICAgICAgICAgIC0gcmVtb3ZlZCA/IFlFUyA6IE5PCisgICAgICAgICgtW0pTVmFsdWUgY2Fs
bFdpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW0pTVmFsdWUgY29uc3RydWN0V2l0aEFyZ3Vt
ZW50czpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpbnZva2VNZXRob2Q6d2l0aEFyZ3VtZW50czpd
KToKKyAgICAgICAgICAgIC0gYXJncyAtPiBhcmd1bWVudEFycmF5CisgICAgICAgICgrW0pTVmFs
dWUgdmFsdWVXaXRoUG9pbnQ6aW5Db250ZXh0Ol0pOgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OmluQ29udGV4dDpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhTaXplOmluQ29udGV4
dDpdKToKKyAgICAgICAgICAgIC0gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpdIC0+IEAoKQor
ICAgICAgICAoLVtKU1ZhbHVlIG9iamVjdEZvcktleWVkU3Vic2NyaXB0Ol0pOgorICAgICAgICAo
LVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNjcmlwdDpdKToKKyAgICAgICAgICAgIC0g
a2V5IHR5cGUgZm9yIC1zZXRPYmplY3Q6Zm9yS2V5ZWRTdWJzY3JpcHQ6IGlzIG5vdyBOU09iamVj
dCA8TlNDb3B5aW5nPiAqCisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcik6CisgICAgICAg
IChKU0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToKKyAgICAgICAgKEpTQ29u
dGFpbmVyQ29udmVydG9yOjpjb252ZXJ0KToKKyAgICAgICAgKE9iamNDb250YWluZXJDb252ZXJ0
b3IpOgorICAgICAgICAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6aXNXb3JrTGlzdEVtcHR5KToK
KyAgICAgICAgICAgIC0gcmVtb3ZlIFdURjo6CisgICAgICAgICAgICAtIGlzV29ya0xpc3RFbXB0
eSBpcyBjb25zdAorICAgICAgICAob2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICAgICAtICB1c2Ug
ZmFzdCBlbnVtZXJhdGlvbgorICAgICAgICAoLVtKU1ZhbHVlIGluaXRXaXRoVmFsdWU6aW5Db250
ZXh0Ol0pOgorICAgICAgICAgICAgLSBuaWwgY2hlY2sgW3N1cGVyIGluaXRdCisgICAgICAgIChn
ZXRTdHJ1Y3RUYWdIYW5kbGVyKToKKyAgICAgICAgICAgIC0gbV9zdHJ1Y3RIYW5kbGVycyAtPiBz
dHJ1Y3RIYW5kbGVycworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLmg6CisgICAgICAg
ICAgICAtIEFkZCBuZXdsaW5lIGJlZm9yZSBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCisg
ICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1h
Y2hpbmUgaW5pdF0pOgorICAgICAgICAgICAgLSBuaWwgY2hlY2sgW3N1cGVyIGluaXRdCisgICAg
ICAgICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKHNlbGVjdG9yVG9Qcm9wZXJ0eU5h
bWUpOgorICAgICAgICAoY29weVByb3RvdHlwZVByb3BlcnRpZXMpOgorICAgICAgICAgICAgLSBy
ZW1vdmUgV1RGOjoKKyAgICAgICAgICAgIC0gdXNlIHN0YXRpY19jYXN0CisgICAgICAgICgtW0pT
T2JqQ0NsYXNzSW5mbyBpbml0V2l0aENvbnRleHQ6Zm9yQ2xhc3M6c3VwZXJDbGFzc0luZm86XSk6
CisgICAgICAgICgtW0pTV3JhcHBlck1hcCBpbml0V2l0aENvbnRleHQ6XSk6CisgICAgICAgICAg
ICAtIG5pbCBjaGVjayBbc3VwZXIgaW5pdF0KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIHdyYXBw
ZXJGb3JPYmplY3Q6XSk6CisgICAgICAgICh0cnlVbndyYXBPYmpjT2JqZWN0KToKKyAgICAgICAg
ICAgIC0gZW5hYmxlIEFTU0VSVAorICAgICAgICAoZ2V0SlNFeHBvcnRQcm90b2NvbCk6CisgICAg
ICAgIChnZXROU0Jsb2NrQ2xhc3MpOgorICAgICAgICAgICAgLSByZW1vdmUgaWYgY2hlY2sgb24g
aW5pdGlhbGl6aW5nIHN0YXRpYworICAgICAgICAqIEFQSS9KYXZhU2NyaXB0Q29yZS5oOgorICAg
ICAgICAgICAgLSBKU19PQkpDX0FQSV9FTkFCTEVEIG5vIGxvbmdlciBpbXBsaWVzIF9fT0JKQ19f
CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAgICAoQ2FsbGJh
Y2tBcmd1bWVudE9mQ2xhc3MpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudE9mQ2xhc3M6On5D
YWxsYmFja0FyZ3VtZW50T2ZDbGFzcyk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50U3RydWN0
OjpDYWxsYmFja0FyZ3VtZW50U3RydWN0KToKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3QpOgorICAgICAgICAoQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2spOgorICAgICAgICAg
ICAgLSBtYXJrIHZpcnR1YWwgZnVuY3Rpb25zIGFzIHZpcnR1YWwsIG92ZXJyaWRlLCBhbmQgcHJp
dmF0ZQorICAgICAgICAgICAgLSByZWZhY3RvciBvdXQgYnVmZmVyIGFsbG9jYXRpb24gZm9yIHN0
cnVjdCB0eXBlcworICAgICAgICAoQXJndW1lbnRUeXBlRGVsZWdhdGU6OnR5cGVWb2lkKToKKyAg
ICAgICAgKEFyZ3VtZW50VHlwZURlbGVnYXRlOjp0eXBlT2ZDbGFzcyk6CisgICAgICAgIChBcmd1
bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgICAgICAtIHJldHVybiBuaWwg
LT4gcmV0dXJuIDAKKyAgICAgICAgKENhbGxiYWNrUmVzdWx0U3RydWN0OjpDYWxsYmFja1Jlc3Vs
dFN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgICAgICAt
IG1hcmsgdmlydHVhbCBmdW5jdGlvbnMgYXMgdmlydHVhbCwgb3ZlcnJpZGUsIGFuZCBwcml2YXRl
CisgICAgICAgICAgICAtIHJlZmFjdG9yIG91dCBidWZmZXIgYWxsb2NhdGlvbiBmb3Igc3RydWN0
IHR5cGVzCisgICAgICAgIChSZXN1bHRUeXBlRGVsZWdhdGU6OnR5cGVTdHJ1Y3QpOgorICAgICAg
ICAgICAgLSByZXR1cm4gbmlsIC0+IHJldHVybiAwCisgICAgICAgIChPYmpDQ2FsbGJhY2tGdW5j
dGlvbik6CisgICAgICAgICAgICAtIHJlbW92ZSBXVEY6OgorICAgICAgICAob2JqQ0NhbGxiYWNr
RnVuY3Rpb25GaW5hbGl6ZSk6CisgICAgICAgICAgICAtIHVzZSBzdGF0aWNfY2FzdAorICAgICAg
ICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbik6CisgICAgICAgICAgICAtIEZp
eCB0eXBvcyBpbiBjb21tZW50CisgICAgICAgIChjcmVhdGVPYmpDQ2FsbGJhY2tGdW5jdGlvbkNs
YXNzKToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MpOgorICAgICAgICAgICAg
LSBTcGxpdCBvdXQgY3JlYXRlT2JqQ0NhbGxiYWNrRnVuY3Rpb25DbGFzcyBmcm9tIG9iakNDYWxs
YmFja0Z1bmN0aW9uQ2xhc3MKKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKToK
KyAgICAgICAgICAgIC0gY3R4IC0+IGNvbnRleHRSZWYKKyAgICAgICAgKGJsb2NrU2lnbmF0dXJl
Q29udGFpbnNDbGFzcyk6CisgICAgICAgICAgICAtIFJlbW92ZSB0cmktc3RhdGUgZW51bS4KKyAg
ICAgICAgKHNraXBOdW1iZXIpOgorICAgICAgICAgICAgLSBpc2RpZ2l0IC0+IGlzQVNDSUlEaWdp
dCAKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbik6CisgICAgICAg
ICAgICAtIGNsZWFuIHVwICYgY29tbWVudCBibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKSB1
c2FnZQorICAgICAgICAodHJ5VW53cmFwQmxvY2spOgorICAgICAgICAgICAgLSB1c2Ugc3RhdGlj
X2Nhc3QKKyAgICAgICAgKiBBUEkvT2JqY1J1bnRpbWVFeHRyYXMuaDoKKyAgICAgICAgKGZvckVh
Y2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKToKKyAgICAgICAgKGZvckVhY2hNZXRob2RJ
bkNsYXNzKToKKyAgICAgICAgKGZvckVhY2hNZXRob2RJblByb3RvY29sKToKKyAgICAgICAgKGZv
ckVhY2hQcm9wZXJ0eUluUHJvdG9jb2wpOgorICAgICAgICAgICAgLSBSZW1vdmUgV1RGOjoKKyAg
ICAgICAgICAgIC0gUmVtb3ZlIGlmIChjb3VudCkgY2hlY2tzCisgICAgICAgIChza2lwUGFpcik6
CisgICAgICAgICAgICAtIE5TVUludGVnZXIgLT4gc2l6ZV90CisgICAgICAgIChTdHJpbmdSYW5n
ZSk6CisgICAgICAgIChTdHJpbmdSYW5nZTo6b3BlcmF0b3IgY29uc3QgY2hhciopOgorICAgICAg
ICAoU3RyaW5nUmFuZ2U6OmdldCk6CisgICAgICAgIChTdHJ1Y3RCdWZmZXIpOgorICAgICAgICAo
U3RydWN0QnVmZmVyOjpTdHJ1Y3RCdWZmZXIpOgorICAgICAgICAoU3RydWN0QnVmZmVyOjp+U3Ry
dWN0QnVmZmVyKToKKyAgICAgICAgKFN0cnVjdEJ1ZmZlcjo6b3BlcmF0b3Igdm9pZCopOgorICAg
ICAgICAgICAgLSBBZGRlZCBoZWxwZXIgZm9yIGNyZWF0aW5nIGFuIGFsaWduZWQgYnVmZmVyLCB1
c2VkIGJ5IHN0cnVjdCBjb252ZXJzaW9uIGludm9jYXRpb25zLgorICAgICAgICAocGFyc2VPYmpD
VHlwZSk6CisgICAgICAgICAgICAtICoocG9zaXRpb24rKykgLT4gKnBvc2l0aW9uKysKKyAgICAg
ICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAgICAgLSBQTEFURk9STShNQUMpIC0+
IEpTX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tOgorICAg
ICAgICAoYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNzKToKKyAgICAgICAgICAgIC0gUmVtb3Zl
IHRyaS1zdGF0ZSBlbnVtLgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAg
ICAgLSBBZGRlZCBtb3JlIHJlc3VsdCB0eXBlIGNoZWNrcy4KKwogMjAxMy0wMS0wMiAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgbm90IHVzZSB0
aGUgSW5saW5lQ2FsbEZyYW1lJ3MgY2FsbGVlIHdoZW4gaXQgY291bGQgaGF2ZSB1c2VkIHRoZSBl
eGVjdXRhYmxlIGlzdGVhZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElKU1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElKU1ZhbHVl
LmgJKHJldmlzaW9uIDEzODY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJSlNW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiAvLyBvcmlnaW5hdGUgZnJv
bSB0aGUgc2FtZSBKU0NvbnRleHQgYXMgdGhlIEpTVmFsdWUgb24gd2hpY2ggdGhlIG1ldGhvZCB3
YXMKIC8vIGludm9rZWQuCiAvLwotLy8gVGhlIEpTQ29udGV4dCBpcyB1c2VkIHRvIG1hbmFnZSB0
aGUgbGlmZS1jeWNsZSBvZiB0aGUgcmVmZXJlY2VkIEphdmFTY3JpcHQKKy8vIFRoZSBKU0NvbnRl
eHQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHJlZmVyZW5jZWQgSmF2
YVNjcmlwdAogLy8gdmFsdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFNvIGxvbmcgYXMg
dGhlIEpTQ29udGV4dCBpcyBiZWluZyByZXRhaW5lZAotLy8gdGhlIEpTVmFsdWUgd2lsbCBjb250
aW51ZSB0byBrZWVwIHRoZSByZWZlcmVuY2QgdmFsdWUgd2l0aGluIHRoZSBKYXZhU2NyaXB0Cisv
LyB0aGUgSlNWYWx1ZSB3aWxsIGNvbnRpbnVlIHRvIGtlZXAgdGhlIHJlZmVyZW5jZWQgdmFsdWUg
d2l0aGluIHRoZSBKYXZhU2NyaXB0CiAvLyB2aXJ0dWFsIG1hY2hpbmUgYWxpdmUuIFdoZW4gdGhl
IEpTQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggYSBKU1ZhbHVlIGlzCiAvLyBkZWFsbG9jYXRlZCB0
aGUgd2VhayBjb250ZXh0IHByb3BlcnR5IG9mIHRoZSBKU1ZhbHVlIHdpbGwgYmVjb21lIG5pbC4g
QWZ0ZXIKIC8vIHRoaXMgb2NjdXJzIHRoZSB2YWx1ZSB3aXRoaW4gdGhlIEphdmFTY3JpcHQgdmly
dHVhbCBtYWNoaW5lIGlzIG5vIGxvbmdlcgpAQCAtNDcsNyArNDcsNyBAQAogLy8gRm9yIGFsbCBt
ZXRob2RzIHRha2luZyBhcmd1bWVudHMgb2YgdHlwZSBpZCwgYXJndW1lbnRzIHdpbGwgYmUgY29u
dmVydGVkCiAvLyBpbnRvIGEgSmF2YVNjcmlwdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnZl
cnNpb24gc3BlY2lmaWVkIGJlbG93LgogLy8gQWxsIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBhc3Nv
Y2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIEpTVmlydHVhbE1hY2hpbmUKLS8vICh0aGUgYXNzb2Np
YXRlZCBKU1ZpcnR1YWxNYWNoaW5lIGlzIGF2YWlibGUgaW5kaXJlY3RseSB2aWEgdGhlIGNvbnRl
eHQKKy8vICh0aGUgYXNzb2NpYXRlZCBKU1ZpcnR1YWxNYWNoaW5lIGlzIGF2YWlsYWJsZSBpbmRp
cmVjdGx5IHZpYSB0aGUgY29udGV4dAogLy8gcHJvcGVydHkpLiBBbiBpbnN0YW5jZSBvZiBKU1Zh
bHVlIG1heSBvbmx5IGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0bwogLy8gbWV0aG9kcyBvbiBp
bnN0YW5jZXMgb2YgSlNWYWx1ZSBhbmQgSlNDb250ZXh0IHRoYXQgYmVsb25nIHRvIHRoZSBzYW1l
CiAvLyBKU1ZpcnR1YWxNYWNoaW5lIC0gcGFzc2luZyBhIEpTVmFsdWUgdG8gYSBtZXRob2Qgb24g
YW4gb2JqZWN0IG9yaWdpbmF0aW5nCkBAIC05MCw4ICs5MCw5IEBACiAvLyB0aGUgT2JqZWN0aXZl
LUMgaW5zdGFuY2UgYmVpbmcgcmV0YWluZWQgYnkgdGhlIHdyYXBwZXIgaXMgcmV0dXJuZWQuCiAv
LwogLy8gKioqIEZvciBPYmplY3RpdmUtQyBDbGFzcyBvYmplY3RzIGEgY29uc3RydWN0b3Igb2Jq
ZWN0IGNvbnRhaW5pbmcgZXhwb3J0ZWQKLS8vIGNsYXNzIG1ldGhvZHMgd2lsbCBiZSByZXR1cm5l
ZC4gU2VlIEpTRXhwb3J0Lmggc29yIG1vcmUgaW5mb3JtYXRpb24gb24KKy8vIGNsYXNzIG1ldGhv
ZHMgd2lsbCBiZSByZXR1cm5lZC4gU2VlIEpTRXhwb3J0LmggZm9yIG1vcmUgaW5mb3JtYXRpb24g
b24KIC8vIGNvbnN0cnVjdG9yIG9iamVjdHMuCisKIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBO
QSkKIEBpbnRlcmZhY2UgSlNWYWx1ZSA6IE5TT2JqZWN0CiAKQEAgLTExNSw3ICsxMTYsNyBAQCBO
U19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiAtIChpZCl0b09iamVjdDsKIC8vIENvbnZlcnQg
dGhpcyB2YWx1ZSB0byBhIGNvcnJlc3BvbmRpbmcgT2JqZWN0aXZlLUMgb2JqZWN0LCBpZiB0aGUg
cmVzdWx0IGlzCiAvLyBub3Qgb2YgdGhlIHNwZWNpZmllZCBjbGFzcyB0aGVuIG5pbCB3aWxsIGJl
IHJldHVybmVkLgotLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHM7CistIChpZCl0b09i
amVjdE9mQ2xhc3M6KENsYXNzKWV4cGVjdGVkQ2xhc3M7CiAvLyBUaGUgdmFsdWUgaXMgY29waWVk
IHRvIGEgYm9vbGVhbiBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVkIGJ5IHRo
ZQogLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4KIC0gKEJPT0wpdG9Cb29sOwpAQCAtMjU0LDcgKzI1
NSw3IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKIAogLSAoSlNWYWx1ZSAqKW9iamVj
dEZvcktleWVkU3Vic2NyaXB0OihpZClrZXk7CiAtIChKU1ZhbHVlICopb2JqZWN0QXRJbmRleGVk
U3Vic2NyaXB0OihOU1VJbnRlZ2VyKWluZGV4OwotLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVj
dCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4pa2V5OworLSAodm9pZClzZXRPYmpl
Y3Q6KGlkKW9iamVjdCBmb3JLZXllZFN1YnNjcmlwdDooTlNPYmplY3QgPE5TQ29weWluZz4gKilr
ZXk7CiAtICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGF0SW5kZXhlZFN1YnNjcmlwdDooTlNV
SW50ZWdlcilpbmRleDsKIAogQGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5o
CShyZXZpc2lvbiAxMzg2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDYgQEAgSlNfRVhQT1JUIHZvaWQgSlNHYXJi
YWdlQ29sbGVjdChKU0NvbnRleAogCiAvKiBFbmFibGUgdGhlIE9iamVjdGl2ZS1DIEFQSSBmb3Ig
cGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4gKi8KICN1bmRlZiBKU19PQkpDX0FQSV9F
TkFCTEVECi0jZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJMRUQgKGRlZmluZWQoX19PQkpDX18pICYm
IGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgKF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCkgJiYgIWRlZmluZWQoX19pMzg2X18pKQorI2Rl
ZmluZSBKU19PQkpDX0FQSV9FTkFCTEVEIChkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChf
X0FQUExFX18pICYmIChfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTApICYm
ICFkZWZpbmVkKF9faTM4Nl9fKSkKIAogI2VuZGlmIC8qIEpTQmFzZV9oICovCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0JKHJldmlzaW9uIDEzODY0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKICNpbXBvcnQgInd0Zi9Pd25QdHIuaCIKIAogZXh0
ZXJuICJDIiB7Ci1pZCBfX05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2FwdHVyZUJsb2NrKGNvbnN0
IGNoYXIgKnNpZ25hdHVyZSwgdm9pZCAoXmhhbmRsZXIpKE5TSW52b2NhdGlvbiAqaW52KSk7Ci19
OworaWQgX19OU01ha2VTcGVjaWFsRm9yd2FyZGluZ0NhcHR1cmVCbG9jayhjb25zdCBjaGFyICpz
aWduYXR1cmUsIHZvaWQgKF5oYW5kbGVyKShOU0ludm9jYXRpb24gKikpOworfQogCiBjbGFzcyBC
bG9ja0FyZ3VtZW50IHsKIHB1YmxpYzoKQEAgLTU2LDggKzU2LDcgQEAgQmxvY2tBcmd1bWVudDo6
fkJsb2NrQXJndW1lbnQoKQogfQogCiBjbGFzcyBCbG9ja0FyZ3VtZW50Qm9vbGVhbiA6IHB1Ymxp
YyBCbG9ja0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRp
b24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlv
biogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRl
eHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYm9vbCB2YWx1ZTsKICAg
ICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1i
ZXJdOwpAQCAtNjcsOCArNjYsNyBAQCBwdWJsaWM6CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBj
bGFzcyBCbG9ja0FyZ3VtZW50TnVtZXJpYyA6IHB1YmxpYyBCbG9ja0FyZ3VtZW50IHsKLXB1Ymxp
YzoKLSAgICBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdl
ciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB2
aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2Vy
IGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlk
ZQogICAgIHsKICAgICAgICAgVCB2YWx1ZTsKICAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1l
bnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwpAQCAtNzcsOCArNzUsNyBAQCBwdWJs
aWM6CiB9OwogCiBjbGFzcyBCbG9ja0FyZ3VtZW50SWQgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7
Ci1wdWJsaWM6Ci0gICAgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiop
CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlkIHZhbHVlOwogICAgICAgICBbaW52b2NhdGlvbiBn
ZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CkBAIC05MCwyNiArODcs
MTYgQEAgY2xhc3MgQmxvY2tBcmd1bWVudFN0cnVjdCA6IHB1YmxpYyBCbG9jawogcHVibGljOgog
ICAgIEJsb2NrQXJndW1lbnRTdHJ1Y3QoTlNJbnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlv
biwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCiAgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2Nh
dGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikKKyAgICAgICAgLCBtX2J1ZmZlcihlbmNvZGVkVHlw
ZSkKICAgICB7Ci0gICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHJldGFpbl07Ci0gICAg
ICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25tZW50OwotICAgICAgICBOU0dldFNpemVBbmRBbGln
bm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAmYWxpZ25tZW50KTsKLSAgICAgICAgLS1hbGlnbm1l
bnQ7Ci0gICAgICAgIG1fYWxsb2NhdGlvbiA9IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVu
dCk7Ci0gICAgICAgIG1fYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVu
dCk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgfkJsb2NrQXJndW1lbnRTdHJ1Y3QoKQotICAg
IHsKLSAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gcmVsZWFzZV07Ci0gICAgICAgIGZy
ZWUobV9hbGxvY2F0aW9uKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlND
b250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKK3ByaXZhdGU6CisgICAgdmlydHVhbCBKU1Zh
bHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51
bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OmFyZ3Vt
ZW50TnVtYmVyXTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6bV9idWZmZXIgYXRJ
bmRleDphcmd1bWVudE51bWJlcl07CiAKLSAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24g
c2V0QXJndW1lbnQ6bV9hbGxvY2F0aW9uIGF0SW5kZXg6Ml07CisgICAgICAgIFttX2NvbnZlcnNp
b25JbnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYnVmZmVyIGF0SW5kZXg6Ml07CiAgICAgICAgIFtt
X2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZjb250ZXh0IGF0SW5kZXg6M107CiAg
ICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6W0pTVmFsdWUg
Y2xhc3NdXTsKIApAQCAtMTE4LDEwICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2
YWx1ZUludGVybmFsVmFsdWUodmFsdWUpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBOU0ludm9j
YXRpb24qIG1fY29udmVyc2lvbkludm9jYXRpb247Ci0gICAgY2hhciogbV9idWZmZXI7Ci0gICAg
Y2hhciogbV9hbGxvY2F0aW9uOworICAgIFJldGFpblB0cjxOU0ludm9jYXRpb24+IG1fY29udmVy
c2lvbkludm9jYXRpb247CisgICAgU3RydWN0QnVmZmVyIG1fYnVmZmVyOwogfTsKIAogY2xhc3Mg
QmxvY2tBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CkBAIC0xNDgsNyArMTMzLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVWb2lkKCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKICAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlSWQoKQpAQCAtMTYzLDcgKzE0OCw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVCbG9jayhjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciopCiAgICAgewotICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIq
IGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCkBAIC0xNzEsNyArMTU2LDcgQEAgcHVibGljOgogICAg
ICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOwogICAgICAgICBpZiAoTlNJbnZvY2F0
aW9uKiBpbnZvY2F0aW9uID0gdmFsdWVUb1R5cGVJbnZvY2F0aW9uRm9yKGNvcHkpKQogICAgICAg
ICAgICAgcmV0dXJuIG5ldyBCbG9ja0FyZ3VtZW50U3RydWN0KGludm9jYXRpb24sIGNvcHkpOwot
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9OwogCkBAIC0x
ODUsMTYgKzE3MCwxNCBAQCBwdWJsaWM6CiB9OwogCiBjbGFzcyBCbG9ja1Jlc3VsdFZvaWQgOiBw
dWJsaWMgQmxvY2tSZXN1bHQgewotcHVibGljOgotICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbios
IEpTQ29udGV4dCosIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqKQorICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiopIG92
ZXJyaWRlCiAgICAgewogICAgIH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBC
bG9ja1Jlc3VsdEludGVnZXIgOiBwdWJsaWMgQmxvY2tSZXN1bHQgewotcHVibGljOgotICAgIHZv
aWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVS
ZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVUb051bWJlcihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbikpOwogICAgICAgICBbaW52b2Nh
dGlvbiBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOwpAQCAtMjAzLDggKzE4Niw3IEBAIHB1YmxpYzoK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEJsb2NrUmVzdWx0RG91YmxlIDogcHVibGlj
IEJsb2NrUmVzdWx0IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlv
biwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVUb051
bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbik7
CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CkBAIC0yMTIsOCAr
MTk0LDcgQEAgcHVibGljOgogfTsKIAogY2xhc3MgQmxvY2tSZXN1bHRCb29sZWFuIDogcHVibGlj
IEJsb2NrUmVzdWx0IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVSZWYq
KQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGJvb2wgdmFsdWUgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIHJlc3VsdCk7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldFJldHVy
blZhbHVlOiZ2YWx1ZV07CkBAIC0yMjQsMjIgKzIwNSwxMiBAQCBjbGFzcyBCbG9ja1Jlc3VsdFN0
cnVjdCA6IHB1YmxpYyBCbG9ja1JlCiBwdWJsaWM6CiAgICAgQmxvY2tSZXN1bHRTdHJ1Y3QoTlNJ
bnZvY2F0aW9uKiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUp
CiAgICAgICAgIDogbV9jb252ZXJzaW9uSW52b2NhdGlvbihjb252ZXJzaW9uSW52b2NhdGlvbikK
KyAgICAgICAgLCBtX2J1ZmZlcihlbmNvZGVkVHlwZSkKICAgICB7Ci0gICAgICAgIFttX2NvbnZl
cnNpb25JbnZvY2F0aW9uIHJldGFpbl07Ci0gICAgICAgIE5TVUludGVnZXIgc2l6ZSwgYWxpZ25t
ZW50OwotICAgICAgICBOU0dldFNpemVBbmRBbGlnbm1lbnQoZW5jb2RlZFR5cGUsICZzaXplLCAm
YWxpZ25tZW50KTsKLSAgICAgICAgLS1hbGlnbm1lbnQ7Ci0gICAgICAgIG1fYWxsb2NhdGlvbiA9
IChjaGFyKiltYWxsb2Moc2l6ZSArIGFsaWdubWVudCk7Ci0gICAgICAgIG1fYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYWxsb2Nh
dGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1
YWwgfkJsb2NrUmVzdWx0U3RydWN0KCkKLSAgICB7Ci0gICAgICAgIFttX2NvbnZlcnNpb25JbnZv
Y2F0aW9uIHJlbGVhc2VdOwotICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7CiAgICAgfQogICAg
IAotICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiopCitwcml2YXRlOgorICAgIHZpcnR1
YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAg
IEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4
dDpjb250ZXh0XTsKICAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRh
cmdldDp2YWx1ZV07CkBAIC0yNDcsMjUgKzIxOCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIFtpbnZv
Y2F0aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CiAgICAgfQogCi1wcml2YXRlOgotICAgIE5T
SW52b2NhdGlvbiogbV9jb252ZXJzaW9uSW52b2NhdGlvbjsKLSAgICBjaGFyKiBtX2J1ZmZlcjsK
LSAgICBjaGFyKiBtX2FsbG9jYXRpb247CisgICAgUmV0YWluUHRyPE5TSW52b2NhdGlvbj4gbV9j
b252ZXJzaW9uSW52b2NhdGlvbjsKKyAgICBTdHJ1Y3RCdWZmZXIgbV9idWZmZXI7CiB9OwogCiBA
aW1wbGVtZW50YXRpb24gSlNCbG9ja0FkYXB0b3IgewotICAgIFdURjo6UmV0YWluUHRyPE5TU3Ry
aW5nPiBtX3NpZ25hdHVyZVdpdGhPZmZzZXRzOwotICAgIFdURjo6UmV0YWluUHRyPE5TU3RyaW5n
PiBtX3NpZ25hdHVyZVdpdGhvdXRPZmZzZXRzOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9z
aWduYXR1cmVXaXRoT2Zmc2V0czsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc2lnbmF0dXJl
V2l0aG91dE9mZnNldHM7CiAgICAgT3duUHRyPEJsb2NrUmVzdWx0PiBtX3Jlc3VsdDsKICAgICBP
d25QdHI8QmxvY2tBcmd1bWVudD4gbV9hcmd1bWVudHM7CiAgICAgc2l6ZV90IG1fYXJndW1lbnRD
b3VudDsKIH0KIAogLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBvZmZzZXQgaW5mb3JtYXRpb24g
YmFjayBpbnRvIGEgYmxvY2sgc2lnbmF0dXJlLgotc3RhdGljIE5TU3RyaW5nKiBidWlsZEJsb2Nr
U2lnbmF0dXJlKE5TU3RyaW5nKiBwcmVmaXgsIGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFy
KiBlbmQsIE5TVUludGVnZXImIG9mZnNldCwgTlNTdHJpbmcqIHBvc3RmaXgpCitzdGF0aWMgTlNT
dHJpbmcqIGJ1aWxkQmxvY2tTaWduYXR1cmUoTlNTdHJpbmcqIHByZWZpeCwgY29uc3QgY2hhciog
YmVnaW4sIGNvbnN0IGNoYXIqIGVuZCwgdW5zaWduZWQgbG9uZyBsb25nJiBvZmZzZXQsIE5TU3Ry
aW5nKiBwb3N0Zml4KQogewogICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7Ci0gICAg
TlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlcyVsdSVA
IiwgcHJlZml4LCBjb3B5LmdldCgpLCBvZmZzZXQsIHBvc3RmaXhdOworICAgIE5TU3RyaW5nKiBy
ZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJXMlQCVAIiwgcHJlZml4LCBj
b3B5LmdldCgpLCBAKG9mZnNldCksIHBvc3RmaXhdOwogICAgIE5TVUludGVnZXIgc2l6ZTsKICAg
ICBOU0dldFNpemVBbmRBbGlnbm1lbnQoY29weSwgJnNpemUsIDApOwogICAgIGlmIChzaXplIDwg
NCkKQEAgLTI3Niw3ICsyNDUsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIGJ1aWxkQmxvY2tTaWduYXR1
cmUoTlNTCiAKIC0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6KGNvbnN0
IGNoYXIqKWVuY29kZWRUeXBlCiB7Ci0gICAgW3N1cGVyIGluaXRdOworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgbV9z
aWduYXR1cmVXaXRob3V0T2Zmc2V0cyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpl
bmNvZGVkVHlwZV07CiAgICAgbV9hcmd1bWVudENvdW50ID0gMDsKQEAgLTI4OCwxNiArMjU5LDE1
IEBAIC0gKGlkKWluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2wKICAgICBPd25QdHI8
QmxvY2tSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBCbG9ja1Jlc3VsdFZvaWQpOwogICAg
IGNvbnN0IGNoYXIqIHJlc3VsdFR5cGVFbmQgPSBlbmNvZGVkVHlwZTsKIAotICAgIGlmIChlbmNv
ZGVkVHlwZVswXSAhPSAnQCcgfHwgZW5jb2RlZFR5cGVbMV0gIT0gJz8nKSB7CisgICAgaWYgKGVu
Y29kZWRUeXBlWzBdICE9ICdAJyB8fCBlbmNvZGVkVHlwZVsxXSAhPSAnPycpCiAgICAgICAgIHJl
dHVybiBzZWxmOwotICAgIH0KICAgICBlbmNvZGVkVHlwZSArPSAyOwogCiAgICAgLy8gVGhlIGZp
cnN0IGFyZ3VtZW50IHRvIGEgYmxvY2sgaXMgdGhlIGJsb2NrIGl0c2VsZi4KICAgICBOU1N0cmlu
Zyogc2lnbmF0dXJlID0gQCJAPzAiOwotICAgIE5TVUludGVnZXIgb2Zmc2V0ID0gc2l6ZW9mKHZv
aWQqKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsKIAot
ICAgIE93blB0cjxCbG9ja0FyZ3VtZW50PiBhcmd1bWVudHMgPSAwOworICAgIE93blB0cjxCbG9j
a0FyZ3VtZW50PiBhcmd1bWVudHM7CiAgICAgT3duUHRyPEJsb2NrQXJndW1lbnQ+KiBuZXh0QXJn
dW1lbnQgPSAmYXJndW1lbnRzOwogICAgIHdoaWxlICgqZW5jb2RlZFR5cGUpIHsKICAgICAgICAg
Y29uc3QgY2hhciogYmVnaW4gPSBlbmNvZGVkVHlwZTsKQEAgLTMxNiw3ICsyODYsNyBAQCAtIChp
ZClpbml0V2l0aEJsb2NrU2lnbmF0dXJlRnJvbVByb3RvY29sCiAKICAgICAvLyBQcmVmaXggdGhl
IHNpZ25hdHVyZSB3aXRoIHRoZSByZXR1cm4gdHlwZSAmIHRvdGFsIHN0YWNrZnJhbWUgc2l6ZS4K
ICAgICAvLyAodGhpcyBjYWxsIHdpbGwgYWxzbyBhZGQgdGhlIHJldHVybiB0eXBlIHNpemUgdG8g
dGhlIG9mZnNldCwKLSAgICAvLyB3aGljaCBpcyBhIG5vbnNlc25lLCBidXQgaGFybWxlc3Mgc2lu
Y2UgdGhpcyBpcyB0aGUgbGFzdCB1c2UpLgorICAgIC8vIHdoaWNoIGlzIGEgbm9uc2Vuc2UsIGJ1
dCBoYXJtbGVzcyBzaW5jZSB0aGlzIGlzIHRoZSBsYXN0IHVzZSkuCiAgICAgc2lnbmF0dXJlID0g
YnVpbGRCbG9ja1NpZ25hdHVyZShAIiIsIHJlc3VsdFR5cGVCZWdpbiwgcmVzdWx0VHlwZUVuZCwg
b2Zmc2V0LCBzaWduYXR1cmUpOwogCiAgICAgbV9zaWduYXR1cmVXaXRoT2Zmc2V0cyA9IHNpZ25h
dHVyZTsKQEAgLTMzNCw3ICszMDQsNyBAQCAtIChib29sKWJsb2NrTWF0Y2hlc1NpZ25hdHVyZToo
aWQpYmxvY2sKICAgICBpZiAoIV9CbG9ja19oYXNfc2lnbmF0dXJlKGJsb2NrKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgY2hhciogd2l0aG91dE9mZnNldHM9IFttX3NpZ25h
dHVyZVdpdGhvdXRPZmZzZXRzIFVURjhTdHJpbmddOworICAgIGNvbnN0IGNoYXIqIHdpdGhvdXRP
ZmZzZXRzID0gW21fc2lnbmF0dXJlV2l0aG91dE9mZnNldHMgVVRGOFN0cmluZ107CiAgICAgY29u
c3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZShibG9jayk7CiAKICAgICB3aGls
ZSAodHJ1ZSkgewpAQCAtMzU0LDMwICszMjQsMzAgQEAgLSAoYm9vbClibG9ja01hdGNoZXNTaWdu
YXR1cmU6KGlkKWJsb2NrCiAKIC0gKGlkKWJsb2NrRnJvbVZhbHVlOihKU1ZhbHVlUmVmKWFyZ3Vt
ZW50IGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0IHdpdGhFeGNlcHRpb246KEpTVmFsdWVS
ZWYqKWV4Y2VwdGlvbgogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVm
ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKIAogICAgIC8vIENoZWNrIGZvciBu
dWxsL3VuZGVmaW5lZC4KLSAgICBpZiAoSlNWYWx1ZUlzVW5kZWZpbmVkKGN0eCwgYXJndW1lbnQp
IHx8IEpTVmFsdWVJc051bGwoY3R4LCBhcmd1bWVudCkpCisgICAgaWYgKEpTVmFsdWVJc1VuZGVm
aW5lZChjb250ZXh0UmVmLCBhcmd1bWVudCkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0UmVmLCBh
cmd1bWVudCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBKU09iamVjdFJlZiBmdW5jdGlv
biA9IDA7Ci0gICAgaWYgKGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY3R4LCBhcmd1
bWVudCkpIHsKKyAgICBpZiAoaWQgb2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChjb250ZXh0
UmVmLCBhcmd1bWVudCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGFu
IE9iamVjdGl2ZS1DIGJsb2NrLgogICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOmdl
dE5TQmxvY2tDbGFzcygpXSkgewogICAgICAgICAgICAgaWYgKFtzZWxmIGJsb2NrTWF0Y2hlc1Np
Z25hdHVyZTpvYmplY3RdKQogICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG1fc2lnbmF0dXJlV2l0aE9mZnNldHMgJiYgSlNWYWx1ZUlzT2Jq
ZWN0KGN0eCwgYXJndW1lbnQpKSB7CisgICAgfSBlbHNlIGlmIChtX3NpZ25hdHVyZVdpdGhPZmZz
ZXRzICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0UmVmLCBhcmd1bWVudCkpIHsKICAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbgogICAgICAg
ICAvLyAoYW5kIHRoYXQgd2VyZSBhYmxlIHRvIGNyZWF0ZSBhIGZvcndhcmRpbmcgYmxvY2sgZm9y
IHRoaXMgc2lnbmF0dXJlKS4KLSAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGN0eCwgYXJndW1lbnQsIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChKU09iamVjdElz
RnVuY3Rpb24oY3R4LCBvYmplY3QpKQorICAgICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1Zh
bHVlVG9PYmplY3QoY29udGV4dFJlZiwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlm
IChKU09iamVjdElzRnVuY3Rpb24oY29udGV4dFJlZiwgb2JqZWN0KSkKICAgICAgICAgICAgIGZ1
bmN0aW9uID0gb2JqZWN0OwogICAgIH0KIAogICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAg
SlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY3R4KSk7Ci0gICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGN0eCksICJJbnZhbGlkIGFyZ3Vt
ZW50IHN1cHBsaWVkIGZvciBPYmplY3RpdmUtQyBibG9jayIpKTsKKyAgICAgICAgSlNDOjpBUElF
bnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY29udGV4dFJlZikpOworICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0UmVmKSwgIkludmFsaWQg
YXJndW1lbnQgc3VwcGxpZWQgZm9yIE9iamVjdGl2ZS1DIGJsb2NrIikpOwogICAgICAgICByZXR1
cm4gbmlsOwogICAgIH0KIApAQCAtMzk2LDE1ICszNjYsMTUgQEAgLSAoaWQpYmxvY2tGcm9tVmFs
dWU6KEpTVmFsdWVSZWYpYXJndW1lbgogICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSB2YWx1
ZS5jb250ZXh0OwogICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpOworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgSlNWYWx1ZVJlZiBhcmdzW2FkYXB0
b3ItPm1fYXJndW1lbnRDb3VudF07CisgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRBcnJheVth
ZGFwdG9yLT5tX2FyZ3VtZW50Q291bnRdOwogCiAgICAgICAgIHNpemVfdCBhcmd1bWVudE51bWJl
ciA9IDA7CiAgICAgICAgIEJsb2NrQXJndW1lbnQqIGFyZ3VtZW50cyA9IGFkYXB0b3ItPm1fYXJn
dW1lbnRzLmdldCgpOwogICAgICAgICBmb3IgKEJsb2NrQXJndW1lbnQqIGFyZ3VtZW50ID0gYXJn
dW1lbnRzOyBhcmd1bWVudDsgYXJndW1lbnQgPSBhcmd1bWVudC0+bV9uZXh0LmdldCgpKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgICAgICBhcmdzW2Fy
Z3VtZW50TnVtYmVyXSA9IGFyZ3VtZW50LT5nZXQoaW52b2NhdGlvbiwgYXJndW1lbnROdW1iZXIg
KyAxLCBjb250ZXh0LCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGFyZ3VtZW50QXJyYXlbYXJn
dW1lbnROdW1iZXJdID0gYXJndW1lbnQtPmdldChpbnZvY2F0aW9uLCBhcmd1bWVudE51bWJlciAr
IDEsIGNvbnRleHQsICZleGNlcHRpb24pOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewog
ICAgICAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxNSw3ICszODUsNyBAQCAtIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVuCiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0g
YXJndW1lbnROdW1iZXI7CiAKICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAg
ICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGN0eCwgSlNWYWx1ZVRvT2JqZWN0KGN0eCwgdmFs
dWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCksIDAsIGFyZ3VtZW50Q291bnQsIGFyZ3MsICZleGNl
cHRpb24pOworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHRSZWYsIEpTVmFs
dWVUb09iamVjdChjb250ZXh0UmVmLCB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpLCAwKSwgMCwg
YXJndW1lbnRDb3VudCwgYXJndW1lbnRBcnJheSwgJmV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChl
eGNlcHRpb24pIHsKICAgICAgICAgICAgIFtjb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25dOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5oCShyZXZpc2lvbiAxMzg2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKIEBjbGFzcyBK
U1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOwogCi0vLyBBbiBpbnN0YW5jZSBvZiBKU0NvbnRleHQg
cmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZXhlY3V0aW9uIGVudmlyb25tZW50LCBhbGwKKy8vIEFu
IGluc3RhbmNlIG9mIEpTQ29udGV4dCByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBleGVjdXRpb24g
ZW52aXJvbm1lbnQuIEFsbAogLy8gSmF2YVNjcmlwdCBleGVjdXRpb24gdGFrZXMgcGxhY2Ugd2l0
aGluIGEgY29udGV4dC4KIC8vIEpTQ29udGV4dCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRoZSBs
aWZlLWN5Y2xlIG9mIG9iamVjdHMgd2l0aGluIHRoZQogLy8gSmF2YVNjcmlwdCB2aXJ0dWFsIG1h
Y2hpbmUuIEV2ZXJ5IGluc3RhbmNlIG9mIEpTVmFsdWUgaXMgYXNzb2NpYXRlZCB3aXRoIGEKQEAg
LTM4LDYgKzM4LDcgQEAKIC8vIG9mIEpTQ29udGV4dCBpcyBkZWFsbG9jYXRlZCBhbmQgdGhlIHdl
YWsgcmVmZXJlbmNlcyB0byBpdCBhcmUgY2xlYXJlZCB0aGUKIC8vIEpTVmFsdWVzIHRoYXQgaGFk
IGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCB3aWxsIGJlIGludmFsaWRhdGVkLCBh
bmQKIC8vIHdpbGwgY2Vhc2UgdG8ga2VlcCB0aGUgdmFsdWVzIHdpdGhpbiB0aGUgSmF2YVNjcmlw
dCBlbmdpbmUgYWxpdmUuCisKIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKIEBpbnRlcmZh
Y2UgSlNDb250ZXh0IDogTlNPYmplY3QKIApAQCAtMTA5LDcgKzExMCw3IEBAIE5TX0NMQVNTX0FW
QUlMQUJMRSgxMF85LCBOQSkKIEBpbnRlcmZhY2UgSlNDb250ZXh0KFN1YnNjcmlwdFN1cHBvcnQp
CiAKIC0gKEpTVmFsdWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5OwotLSAodm9p
ZClzZXRPYmplY3Q6KGlkKW9iamVjdCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4p
a2V5OworLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVjdCBmb3JLZXllZFN1YnNjcmlwdDooTlNP
YmplY3QgPE5TQ29weWluZz4gKilrZXk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDEzODY0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTMg
QEAKIAogI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8SlNW
YWx1ZVJlZiwgc2l6ZV90PiBQcm90ZWN0TWFwOwordHlwZWRlZiBIYXNoTWFwPEpTVmFsdWVSZWYs
IHNpemVfdD4gUHJvdGVjdE1hcDsKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dCB7CiAgICAg
SlNWaXJ0dWFsTWFjaGluZSAqbV92aXJ0dWFsTWFjaGluZTsKICAgICBKU0dsb2JhbENvbnRleHRS
ZWYgbV9jb250ZXh0OwogICAgIEpTV3JhcHBlck1hcCAqbV93cmFwcGVyTWFwOwotICAgIFByb3Rl
Y3RNYXAgbV9wcm90ZWN0ZWQ7CisgICAgUHJvdGVjdE1hcCBtX3Byb3RlY3RDb3VudHM7CiB9CiAK
IEBzeW50aGVzaXplIGV4Y2VwdGlvbjsKQEAgLTU2LDcgKzU2LDkgQEAgLSAoaWQpaW5pdAogCiAt
IChpZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1h
Y2hpbmUKIHsKLSAgICBbc3VwZXIgaW5pdF07CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBtX3ZpcnR1YWxNYWNoaW5l
ID0gW3ZpcnR1YWxNYWNoaW5lIHJldGFpbl07CiAgICAgbV9jb250ZXh0ID0gSlNHbG9iYWxDb250
ZXh0Q3JlYXRlSW5Hcm91cChnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZSh2aXJ0dWFsTWFjaGlu
ZSksIDApOwpAQCAtMTE1LDEwICsxMTcsMTAgQEAgKyAoTlNBcnJheSAqKWN1cnJlbnRBcmd1bWVu
dHMKICAgICBpZiAoIWVudHJ5LT5jdXJyZW50QXJndW1lbnRzKSB7CiAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY3VycmVudENvbnRleHRdOwogICAgICAgICBzaXplX3Qg
Y291bnQgPSBlbnRyeS0+YXJndW1lbnRDb3VudDsKLSAgICAgICAgSlNWYWx1ZSAqIGFyZ3NbY291
bnRdOworICAgICAgICBKU1ZhbHVlICogYXJndW1lbnRBcnJheVtjb3VudF07CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPTA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgYXJnc1tpXSA9IFtK
U1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmVudHJ5LT5hcmd1bWVudHNbaV0gaW5Db250ZXh0OmNvbnRl
eHRdOwotICAgICAgICBlbnRyeS0+Y3VycmVudEFyZ3VtZW50cyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhPYmplY3RzOmFyZ3MgY291bnQ6Y291bnRdOworICAgICAgICAgICAgYXJndW1lbnRB
cnJheVtpXSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmVudHJ5LT5hcmd1bWVudHNbaV0gaW5D
b250ZXh0OmNvbnRleHRdOworICAgICAgICBlbnRyeS0+Y3VycmVudEFyZ3VtZW50cyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOmFyZ3VtZW50QXJyYXkgY291bnQ6Y291bnRdOwog
ICAgIH0KIAogICAgIHJldHVybiBlbnRyeS0+Y3VycmVudEFyZ3VtZW50czsKQEAgLTEzOCw3ICsx
NDAsNyBAQCAtIChKU1ZhbHVlICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlkCiAgICAgcmV0
dXJuIFtzZWxmIGdsb2JhbE9iamVjdF1ba2V5XTsKIH0KIAotLSAodm9pZClzZXRPYmplY3Q6KGlk
KW9iamVjdCBmb3JLZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4pa2V5CistICh2b2lkKXNl
dE9iamVjdDooaWQpb2JqZWN0IGZvcktleWVkU3Vic2NyaXB0OihOU09iamVjdCA8TlNDb3B5aW5n
PiAqKWtleQogewogICAgIFtzZWxmIGdsb2JhbE9iamVjdF1ba2V5XSA9IG9iamVjdDsKIH0KQEAg
LTE1Niw4ICsxNTgsOCBAQCAtICh2b2lkKWRlYWxsb2MKIHsKICAgICB0b0pTKG1fY29udGV4dCkt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+bV9hcGlEYXRhID0gMDsKIAotICAgIFByb3RlY3RNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9wcm90ZWN0ZWQuYmVnaW4oKTsKLSAgICBQcm90ZWN0TWFw
OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZC5lbmQoKTsKKyAgICBQcm90ZWN0TWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdENvdW50cy5iZWdpbigpOworICAgIFByb3RlY3RNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50cy5lbmQoKTsKICAgICBmb3IgKDsgaXRlcmF0
b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQogICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4
dCwgaXRlcmF0b3ItPmtleSk7CiAKQEAgLTIwNywxMCArMjA5LDEwIEBAIC0gKHZvaWQpZW5kQ2Fs
bGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXQKIAogLSAodm9pZClwcm90ZWN0OihKU1ZhbHVlUmVm
KXZhbHVlCiB7Ci0gICAgLy8gTG9jayBhY2Nlc3MgdG8gbV9wcm90ZWN0ZWQKKyAgICAvLyBMb2Nr
IGFjY2VzcyB0byBtX3Byb3RlY3RDb3VudHMKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHRv
SlMobV9jb250ZXh0KSk7CiAKLSAgICBQcm90ZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9w
cm90ZWN0ZWQuYWRkKHZhbHVlLCAxKTsKKyAgICBQcm90ZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gbV9wcm90ZWN0Q291bnRzLmFkZCh2YWx1ZSwgMSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIHZhbHVlKTsKICAgICBlbHNl
CkBAIC0yMTksMTIgKzIyMSwxMiBAQCAtICh2b2lkKXByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUK
IAogLSAodm9pZCl1bnByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUKIHsKLSAgICAvLyBMb2NrIGFj
Y2VzcyB0byBtX3Byb3RlY3RlZAorICAgIC8vIExvY2sgYWNjZXNzIHRvIG1fcHJvdGVjdENvdW50
cwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKIAotICAgIFBy
b3RlY3RNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9wcm90ZWN0ZWQuZmluZCh2YWx1ZSk7Cisg
ICAgUHJvdGVjdE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX3Byb3RlY3RDb3VudHMuZmluZCh2
YWx1ZSk7CiAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZSA9PSAxKSB7Ci0gICAgICAgIG1fcHJvdGVj
dGVkLnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIG1fcHJvdGVjdENvdW50cy5yZW1vdmUodmFsdWUp
OwogICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgdmFsdWUpOwogICAgIH0gZWxz
ZQogICAgICAgICAtLWl0ZXJhdG9yLT52YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmFsdWUubW0JKHJldmlzaW9uIDEzODY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsMzAgKzYwLDM3IEBAICsgKEpTVmFs
dWUgKil2YWx1ZVdpdGhPYmplY3Q6KGlkKXZhbHVlIGkKIHsKICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoVmFsdWU6b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkgaW5Db250ZXh0OmNv
bnRleHRdOwogfQorCiArIChKU1ZhbHVlICopdmFsdWVXaXRoQm9vbDooQk9PTCl2YWx1ZSBpbkNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVX
aXRoVmFsdWU6SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCksIHZhbHVlKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CisKICsgKEpTVmFsdWUgKil2YWx1ZVdp
dGhEb3VibGU6KGRvdWJsZSl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsK
ICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIoY29u
dGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsK
IH0KKwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aEludDMyOihpbnQzMl90KXZhbHVlIGluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dAogewogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhW
YWx1ZTpKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB2
YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRdOwogfQorCiArIChKU1ZhbHVlICopdmFsdWVXaXRoVUlu
dDMyOih1aW50MzJfdCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKICAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsKIH0K
KwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dAogewogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVjdE1h
a2UoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgMCkgaW5Db250ZXh0OmNvbnRl
eHRdOwogfQorCiArIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3QXJyYXlJbkNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQKIHsKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgTlVMTCwg
MCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQorCiArIChKU1ZhbHVlICopdmFsdWVXaXRoTmV3UmVn
dWxhckV4cHJlc3Npb25Gcm9tUGF0dGVybjooTlNTdHJpbmcgKilwYXR0ZXJuIGZsYWdzOihOU1N0
cmluZyAqKWZsYWdzIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewogICAgIEpTU3Ry
aW5nUmVmIHBhdHRlcm5TdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJp
bmdSZWYpcGF0dGVybik7CkBAIC05NCw2ICsxMDEsNyBAQCArIChKU1ZhbHVlICopdmFsdWVXaXRo
TmV3UmVndWxhckV4cHJlc3NpCiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6
SlNPYmplY3RNYWtlUmVnRXhwKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIDIsIGFy
Z3VtZW50cywgMCkgaW5Db250ZXh0OmNvbnRleHRdOwogfQorCiArIChKU1ZhbHVlICopdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dAogewogICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZiltZXNzYWdlKTsKQEAgLTEwMiwxMCArMTEwLDEy
IEBAICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWcKIAogICAgIHJldHVy
biBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU09iamVjdE1ha2VFcnJvcihjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpLCAxLCAmYXJndW1lbnQsIDApIGluQ29udGV4dDpjb250ZXh0XTsK
IH0KKwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQKIHsKICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6SlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpIGluQ29udGV4dDpjb250ZXh0XTsK
IH0KKwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0
ICopY29udGV4dAogewogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpKSBpbkNvbnRleHQ6
Y29udGV4dF07CkBAIC0xMTgsMTcgKzEyOCwxOSBAQCAtIChpZCl0b09iamVjdAogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1fdmFsdWUpOwog
fQotLSAoaWQpdG9PYmplY3RPZkNsYXNzOihDbGFzcyljbHMKKworLSAoaWQpdG9PYmplY3RPZkNs
YXNzOihDbGFzcylleHBlY3RlZENsYXNzCiB7CiAgICAgaWQgcmVzdWx0ID0gW3NlbGYgdG9PYmpl
Y3RdOwotICAgIHJldHVybiBbcmVzdWx0IGlzS2luZE9mQ2xhc3M6Y2xzXSA/IHJlc3VsdCA6IG5p
bDsKKyAgICByZXR1cm4gW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOmV4cGVjdGVkQ2xhc3NdID8gcmVz
dWx0IDogbmlsOwogfQogCiAtIChCT09MKXRvQm9vbAogewogICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtzZWxmIGNvbnRleHRdOwotICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5P
OworICAgIHJldHVybiAoY29udGV4dCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKTsKIH0KKwogLSAoZG91YmxlKXRvRG91YmxlCiB7
CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CkBAIC0xNDQsMTQgKzE1
NiwxNyBAQCAtIChkb3VibGUpdG9Eb3VibGUKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CisKIC0g
KGludDMyX3QpdG9JbnQzMgogewogICAgIHJldHVybiBKU0M6OnRvSW50MzIoW3NlbGYgdG9Eb3Vi
bGVdKTsKIH0KKwogLSAodWludDMyX3QpdG9VSW50MzIKIHsKICAgICByZXR1cm4gSlNDOjp0b1VJ
bnQzMihbc2VsZiB0b0RvdWJsZV0pOwogfQorCiAtIChOU051bWJlciAqKXRvTnVtYmVyCiB7CiAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CkBAIC0xNjQsNiArMTc5LDcg
QEAgLSAoTlNOdW1iZXIgKil0b051bWJlcgogICAgICAgICBbY29udGV4dCBub3RpZnlFeGNlcHRp
b246ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQorCiAtIChOU1N0cmluZyAqKXRv
U3RyaW5nCiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CkBAIC0x
NzYsNiArMTkyLDcgQEAgLSAoTlNTdHJpbmcgKil0b1N0cmluZwogICAgICAgICBbY29udGV4dCBu
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQorCiAtIChO
U0RhdGUgKil0b0RhdGUKIHsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0
XTsKQEAgLTE4OCw2ICsyMDUsNyBAQCAtIChOU0RhdGUgKil0b0RhdGUKICAgICAgICAgW2NvbnRl
eHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwog
LSAoTlNBcnJheSAqKXRvQXJyYXkKIHsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBj
b250ZXh0XTsKQEAgLTIwMCw2ICsyMTgsNyBAQCAtIChOU0FycmF5ICopdG9BcnJheQogICAgICAg
ICBbY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQorCiAtIChOU0RpY3Rpb25hcnkgKil0b0RpY3Rpb25hcnkKIHsKICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKQEAgLTIzMiw2ICsyNTEsNyBAQCAtIChKU1ZhbHVl
ICopdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJpbmcgCiAKICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKIH0KKwogLSAodm9pZClzZXRW
YWx1ZTooaWQpdmFsdWUgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1lCiB7CiAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CkBAIC0yNTMsNiArMjczLDcg
QEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yUHJvcGVydHk6KAogICAgICAgICByZXR1
cm47CiAgICAgfQogfQorCiAtIChCT09MKWRlbGV0ZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3Bl
cnR5TmFtZQogewogICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOwpAQCAt
MjY1LDEzICsyODYsMTQgQEAgLSAoQk9PTClkZWxldGVQcm9wZXJ0eTooTlNTdHJpbmcgKilwcm9w
ZQogICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uXTsKIAogICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKLSAgICBCT09MIHJlc3VsdCA9IEpTT2JqZWN0
RGVsZXRlUHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqZWN0LCBu
YW1lLCAmZXhjZXB0aW9uKSA/IFlFUyA6IE5POworICAgIEJPT0wgcmVzdWx0ID0gSlNPYmplY3RE
ZWxldGVQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBvYmplY3QsIG5h
bWUsICZleGNlcHRpb24pOwogICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uXTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CisKIC0gKEJPT0wpaGFzUHJvcGVy
dHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1lCiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W3NlbGYgY29udGV4dF07CkBAIC0yODQsMTAgKzMwNiwxMSBAQCAtIChCT09MKWhhc1Byb3BlcnR5
OihOU1N0cmluZyAqKXByb3BlcnR5CiAgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogCiAgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilwcm9wZXJ0eU5hbWUpOwotICAgIEJP
T0wgcmVzdWx0ID0gSlNPYmplY3RIYXNQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBvYmplY3QsIG5hbWUpID8gWUVTIDogTk87CisgICAgQk9PTCByZXN1bHQgPSBKU09i
amVjdEhhc1Byb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwg
bmFtZSk7CiAgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CisKIC0gKHZvaWQpZGVmaW5lUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHkgZGVzY3JpcHRv
cjooaWQpZGVzY3JpcHRvcgogewogICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOwpAQCAtMzE2LDYgKzMzOSw3IEBAIC0gKEpTVmFsdWUgKil2YWx1ZUF0SW5kZXg6KE5TVUlu
dGVnZXIpaW4KIAogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1bHQgaW5D
b250ZXh0OmNvbnRleHRdOwogfQorCiAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBhdEluZGV4
OihOU1VJbnRlZ2VyKWluZGV4CiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29u
dGV4dF07CkBAIC0zNDIsMzIgKzM2NiwzNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBh
dEluZGV4OihOU1VJCiAtIChCT09MKWlzVW5kZWZpbmVkCiB7CiAgICAgSlNDb250ZXh0ICpjb250
ZXh0ID0gW3NlbGYgY29udGV4dF07Ci0gICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMg
OiBOTzsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKTsKIH0KKwogLSAoQk9PTClpc051bGwK
IHsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250ZXh0XTsKLSAgICByZXR1cm4g
KGNvbnRleHQgJiYgSlNWYWx1ZUlzTnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
LCBtX3ZhbHVlKSkgPyBZRVMgOiBOTzsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlz
TnVsbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSk7CiB9CisKIC0g
KEJPT0wpaXNCb29sZWFuCiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4
dF07Ci0gICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSkpID8gWUVTIDogTk87CisgICAgcmV0dXJuIChj
b250ZXh0ICYmIEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSkpOwogfQorCiAtIChCT09MKWlzTnVtYmVyCiB7CiAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW3NlbGYgY29udGV4dF07Ci0gICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJ
c051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSkgPyBZRVMg
OiBOTzsKKyAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKTsKIH0KKwogLSAoQk9PTClpc1N0cmluZwog
ewogICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOwotICAgIHJldHVybiAo
Y29udGV4dCAmJiBKU1ZhbHVlSXNTdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSkpID8gWUVTIDogTk87CisgICAgcmV0dXJuIChjb250ZXh0ICYmIEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlKSk7CiB9CisK
IC0gKEJPT0wpaXNPYmplY3QKIHsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbc2VsZiBjb250
ZXh0XTsKLSAgICByZXR1cm4gKGNvbnRleHQgJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUpKSA/IFlFUyA6IE5POworICAgIHJldHVybiAo
Y29udGV4dCAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgbV92YWx1ZSkpOwogfQogCiAtIChCT09MKWlzRXF1YWxUb09iamVjdDooaWQpdmFsdWUKQEAg
LTM3Niw4ICs0MDUsOSBAQCAtIChCT09MKWlzRXF1YWxUb09iamVjdDooaWQpdmFsdWUKICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBKU1ZhbHVlSXNT
dHJpY3RFcXVhbChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBtX3ZhbHVlLCBvYmpl
Y3RUb1ZhbHVlKGNvbnRleHQsIHZhbHVlKSkgPyBZRVMgOiBOTzsKKyAgICByZXR1cm4gSlNWYWx1
ZUlzU3RyaWN0RXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkpOwogfQorCiAtIChCT09MKWlzRXF1YWxXaXRo
VHlwZUNvZXJjaW9uVG9PYmplY3Q6KGlkKXZhbHVlCiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW3NlbGYgY29udGV4dF07CkBAIC0zODUsMTIgKzQxNSwxMyBAQCAtIChCT09MKWlzRXF1YWxX
aXRoVHlwZUNvZXJjaW9uVG9PYmplY3Q6CiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0VxdWFsKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsIG9iamVjdFRvVmFsdWUoY29u
dGV4dCwgdmFsdWUpLCAmZXhjZXB0aW9uKSA/IFlFUyA6IE5POworICAgIEJPT0wgcmVzdWx0ID0g
SlNWYWx1ZUlzRXF1YWwoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgbV92YWx1ZSwg
b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOwogICAgIGlmIChleGNl
cHRpb24pCiAgICAgICAgIHJldHVybiBbY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwogLSAoQk9PTClpc0luc3RhbmNl
T2Y6KGlkKXZhbHVlCiB7CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07
CkBAIC00MDIsMjMgKzQzMywyMyBAQCAtIChCT09MKWlzSW5zdGFuY2VPZjooaWQpdmFsdWUKICAg
ICBpZiAoZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlF
eGNlcHRpb246ZXhjZXB0aW9uXTsKIAotICAgIEJPT0wgcmVzdWx0ID0gSlNWYWx1ZUlzSW5zdGFu
Y2VPZkNvbnN0cnVjdG9yKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUs
IGNvbnN0cnVjdG9yLCAmZXhjZXB0aW9uKSA/IFlFUyA6IE5POworICAgIEJPT0wgcmVzdWx0ID0g
SlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIG1fdmFsdWUsIGNvbnN0cnVjdG9yLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0
aW9uKQogICAgICAgICByZXR1cm4gW2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246ZXhj
ZXB0aW9uXTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKEpTVmFsdWUgKiljYWxsV2l0
aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3MKKy0gKEpTVmFsdWUgKiljYWxsV2l0aEFyZ3VtZW50
czooTlNBcnJheSAqKWFyZ3VtZW50QXJyYXkKIHsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
c2VsZiBjb250ZXh0XTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBOU1VJbnRlZ2VyIGFyZ3VtZW50Q291bnQgPSBbYXJncyBjb3VudF07CisgICAgTlNVSW50
ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3VtZW50QXJyYXkgY291bnRdOwogICAgIEpTVmFsdWVS
ZWYgYXJndW1lbnRzW2FyZ3VtZW50Q291bnRdOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFs
dWUoY29udGV4dCwgW2FyZ3Mgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgIGFyZ3VtZW50c1tp
XSA9IG9iamVjdFRvVmFsdWUoY29udGV4dCwgW2FyZ3VtZW50QXJyYXkgb2JqZWN0QXRJbmRleDpp
XSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNPYmplY3RSZWYgb2Jq
ZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG1f
dmFsdWUsICZleGNlcHRpb24pOwpAQCAtNDMxLDE2ICs0NjIsMTcgQEAgLSAoSlNWYWx1ZSAqKWNh
bGxXaXRoQXJndW1lbnRzOihOU0FycmF5IAogCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aFZhbHVlOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07CiB9Ci0tIChKU1ZhbHVlICopY29uc3Ry
dWN0V2l0aEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3MKKworLSAoSlNWYWx1ZSAqKWNvbnN0cnVj
dFdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudEFycmF5CiB7CiAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW3NlbGYgY29udGV4dF07CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gW2FyZ3MgY291bnRd
OworICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3VudCA9IFthcmd1bWVudEFycmF5IGNvdW50XTsK
ICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1thcmd1bWVudENvdW50XTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHNbaV0g
PSBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIFthcmdzIG9iamVjdEF0SW5kZXg6aV0pOworICAgICAg
ICBhcmd1bWVudHNbaV0gPSBvYmplY3RUb1ZhbHVlKGNvbnRleHQsIFthcmd1bWVudEFycmF5IG9i
amVjdEF0SW5kZXg6aV0pOwogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgIEpT
T2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKQEAgLTQ1Myw2ICs0ODUsNyBAQCAtIChK
U1ZhbHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBCiAKICAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpjb250ZXh0XTsKIH0KKwogLSAoSlNW
YWx1ZSAqKWludm9rZU1ldGhvZDooTlNTdHJpbmcgKiltZXRob2Qgd2l0aEFyZ3VtZW50czooTlNB
cnJheSAqKWFyZ3VtZW50cwogewogICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRl
eHRdOwpAQCAtNDYwLDkgKzQ5Myw5IEBAIC0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6KE5TU3Ry
aW5nICopbWUKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIE5TVUludGVnZXIgYXJndW1lbnRD
b3VudCA9IFthcmd1bWVudHMgY291bnRdOwotICAgIEpTVmFsdWVSZWYgYXJnc1thcmd1bWVudENv
dW50XTsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50QXJyYXlbYXJndW1lbnRDb3VudF07CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgYXJn
c1tpXSA9IG9iamVjdFRvVmFsdWUoY29udGV4dCwgW2FyZ3VtZW50cyBvYmplY3RBdEluZGV4Omld
KTsKKyAgICAgICAgYXJndW1lbnRBcnJheVtpXSA9IG9iamVjdFRvVmFsdWUoY29udGV4dCwgW2Fy
Z3VtZW50cyBvYmplY3RBdEluZGV4OmldKTsKIAogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKICAgICBKU09iamVjdFJlZiB0aGlzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOwpAQCAtNDcwLDE2
ICs1MDMsMTYgQEAgLSAoSlNWYWx1ZSAqKWludm9rZU1ldGhvZDooTlNTdHJpbmcgKiltZQogICAg
ICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07
CiAKICAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENG
U3RyaW5nUmVmKW1ldGhvZCk7Ci0gICAgSlNWYWx1ZVJlZiBmdW5jID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAm
ZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlUmVmIGZ1bmN0aW9uID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCB0aGlzT2JqZWN0LCBuYW1lLCAmZXhj
ZXB0aW9uKTsKICAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25dOwogCi0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJ
bnRlcm5hbENvbnRleHQoY29udGV4dCksIGZ1bmMsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0
UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRl
eHQpLCBmdW5jdGlvbiwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAg
cmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogCi0g
ICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxB
c0Z1bmN0aW9uKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iamVjdCwgdGhpc09i
amVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRBcnJheSwgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpleGNlcHRpb25dOwogCkBAIC01MDYsOCArNTM5LDggQEAgLSAoQ0dQb2ludCl0b1BvaW50
CiAtIChOU1JhbmdlKXRvUmFuZ2UKIHsKICAgICByZXR1cm4gKE5TUmFuZ2UpewotICAgICAgICAo
TlNVSW50ZWdlcilbc2VsZltAImxvY2F0aW9uIl0gdG9Eb3VibGVdLAotICAgICAgICAoTlNVSW50
ZWdlcilbc2VsZltAImxlbmd0aCJdIHRvRG91YmxlXQorICAgICAgICBbW3NlbGZbQCJsb2NhdGlv
biJdIHRvTnVtYmVyXSB1bnNpZ25lZEludGVnZXJWYWx1ZV0sCisgICAgICAgIFtbc2VsZltAImxl
bmd0aCJdIHRvTnVtYmVyXSB1bnNpZ25lZEludGVnZXJWYWx1ZV0KICAgICB9OwogfQogCkBAIC01
MzAsMzQgKzU2MywzNCBAQCAtIChDR1NpemUpdG9TaXplCiArIChKU1ZhbHVlICopdmFsdWVXaXRo
UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7CiAg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAewotICAgICAgICBAIngiOltOU051
bWJlciBudW1iZXJXaXRoRmxvYXQ6cG9pbnQueF0sCi0gICAgICAgIEAieSI6W05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDpwb2ludC55XQorICAgICAgICBAIngiOkAocG9pbnQueCksCisgICAgICAg
IEAieSI6QChwb2ludC55KQogICAgIH0gaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiArIChKU1Zh
bHVlICopdmFsdWVXaXRoUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAewotICAg
ICAgICBAImxvY2F0aW9uIjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnJhbmdlLmxvY2F0aW9u
XSwKLSAgICAgICAgQCJsZW5ndGgiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmFuZ2UubGVu
Z3RoXQorICAgICAgICBAImxvY2F0aW9uIjpAKHJhbmdlLmxvY2F0aW9uKSwKKyAgICAgICAgQCJs
ZW5ndGgiOkAocmFuZ2UubGVuZ3RoKQogICAgIH0gaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiAr
IChKU1ZhbHVlICopdmFsdWVXaXRoUmVjdDooQ0dSZWN0KXJlY3QgaW5Db250ZXh0OihKU0NvbnRl
eHQgKiljb250ZXh0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAewot
ICAgICAgICBAIngiOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6cmVjdC5vcmlnaW4ueF0sCi0g
ICAgICAgIEAieSI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0Lm9yaWdpbi55XSwKLSAg
ICAgICAgQCJ3aWR0aCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0LnNpemUud2lkdGhd
LAotICAgICAgICBAImhlaWdodCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyZWN0LnNpemUu
aGVpZ2h0XQorICAgICAgICBAIngiOkAocmVjdC5vcmlnaW4ueCksCisgICAgICAgIEAieSI6QChy
ZWN0Lm9yaWdpbi55KSwKKyAgICAgICAgQCJ3aWR0aCI6QChyZWN0LnNpemUud2lkdGgpLAorICAg
ICAgICBAImhlaWdodCI6QChyZWN0LnNpemUuaGVpZ2h0KQogICAgIH0gaW5Db250ZXh0OmNvbnRl
eHRdOwogfQogCiArIChKU1ZhbHVlICopdmFsdWVXaXRoU2l6ZTooQ0dTaXplKXNpemUgaW5Db250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aE9iamVjdDpAewotICAgICAgICBAIndpZHRoIjpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNp
emUud2lkdGhdLAotICAgICAgICBAImhlaWdodCI6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpz
aXplLmhlaWdodF0KKyAgICAgICAgQCJ3aWR0aCI6QChzaXplLndpZHRoKSwKKyAgICAgICAgQCJo
ZWlnaHQiOkAoc2l6ZS5oZWlnaHQpCiAgICAgfSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKQEAg
LTU3MSw3ICs2MDQsNyBAQCAtIChKU1ZhbHVlICopb2JqZWN0Rm9yS2V5ZWRTdWJzY3JpcHQ6KGlk
CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKCFbKE5T
T2JqZWN0KilrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgIGlmICgh
W2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CiAgICAgICAgIGtleSA9IFtb
SlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmluZ107
CiAgICAgICAgIGlmICgha2V5KQogICAgICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDpjb250ZXh0XTsKQEAgLTU4NSwxMyArNjE4LDEzIEBAIC0gKEpT
VmFsdWUgKilvYmplY3RBdEluZGV4ZWRTdWJzY3JpcHQ6KE4KICAgICByZXR1cm4gW3NlbGYgdmFs
dWVBdEluZGV4OmluZGV4XTsKIH0KIAotLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVjdCBmb3JL
ZXllZFN1YnNjcmlwdDooaWQgPE5TQ29weWluZz4pa2V5CistICh2b2lkKXNldE9iamVjdDooaWQp
b2JqZWN0IGZvcktleWVkU3Vic2NyaXB0OihOU09iamVjdCA8TlNDb3B5aW5nPiAqKWtleQogewog
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtzZWxmIGNvbnRleHRdOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFbKE5TT2JqZWN0KilrZXkgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgIGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBjbGFzc11dKSB7CiAgICAgICAgIGtleSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmpl
Y3Q6a2V5IGluQ29udGV4dDpjb250ZXh0XSB0b1N0cmluZ107CiAgICAgICAgIGlmICgha2V5KQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjQxLDE5ICs2NzQsMTkgQEAgcHVibGljOgogICAgIH0K
IAogICAgIGlkIGNvbnZlcnQoSlNWYWx1ZVJlZiBwcm9wZXJ0eSk7Ci0gICAgdm9pZCBhZGQoVGFz
ayB0YXNrKTsKKyAgICB2b2lkIGFkZChUYXNrKTsKICAgICBUYXNrIHRha2UoKTsKLSAgICBib29s
IGlzV29ya0xpc3RFbXB0eSgpIHsgcmV0dXJuICFtX3dvcmtsaXN0LnNpemUoKTsgfQorICAgIGJv
b2wgaXNXb3JrTGlzdEVtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fd29ya2xpc3Quc2l6ZSgpOyB9
CiAKIHByaXZhdGU6CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBXVEY6
Okhhc2hNYXA8SlNWYWx1ZVJlZiwgaWQ+IG1fb2JqZWN0TWFwOwotICAgIFdURjo6VmVjdG9yPFRh
c2s+IG1fd29ya2xpc3Q7CisgICAgSGFzaE1hcDxKU1ZhbHVlUmVmLCBpZD4gbV9vYmplY3RNYXA7
CisgICAgVmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7CiB9OwogCiBpbmxpbmUgaWQgSlNDb250YWlu
ZXJDb252ZXJ0b3I6OmNvbnZlcnQoSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBXVEY6Okhhc2hN
YXA8SlNWYWx1ZVJlZiwgaWQ+OjppdGVyYXRvciBpdGVyID0gbV9vYmplY3RNYXAuZmluZCh2YWx1
ZSk7CisgICAgSGFzaE1hcDxKU1ZhbHVlUmVmLCBpZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX29iamVj
dE1hcC5maW5kKHZhbHVlKTsKICAgICBpZiAoaXRlciAhPSBtX29iamVjdE1hcC5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogCkBAIC03ODUsNiArODE4LDcgQEAgaWQgdmFsdWVU
b051bWJlcihKU0dsb2JhbENvbnRleHRSZWYgY29udAogICAgIGRvdWJsZSByZXN1bHQgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOipleGNlcHRpb24gPyBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpIDogcmVzdWx0XTsKIH0KKwogaWQgdmFsdWVUb1N0cmluZyhKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CkBAIC04MDMsNiArODM3LDcgQEAg
aWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29udAogICAgIEpTU3RyaW5nUmVs
ZWFzZShqc3N0cmluZyk7CiAgICAgcmV0dXJuIHN0cmluZ05TOwogfQorCiBpZCB2YWx1ZVRvRGF0
ZShKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CkBAIC04MTQsNiArODQ5
LDcgQEAgaWQgdmFsdWVUb0RhdGUoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleAogICAgIGRvdWJs
ZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuICpleGNlcHRpb24gPyBuaWwgOiBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFs
U2luY2UxOTcwOnJlc3VsdF07CiB9CisKIGlkIHZhbHVlVG9BcnJheShKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CkBAIC04MjksNiArODY1LDcgQEAgaWQgdmFsdWVUb0Fy
cmF5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZQogICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0KSwgIkNhbm5vdCBjb252ZXJ0IHByaW1p
dGl2ZSB0byBOU0FycmF5IikpOwogICAgIHJldHVybiBuaWw7CiB9CisKIGlkIHZhbHVlVG9EaWN0
aW9uYXJ5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKQEAgLTg1OSwx
NCArODk2LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKU1ZhbHVlUmVmIGNvbnZlcnQoaWQg
b2JqZWN0KTsKLSAgICB2b2lkIGFkZChUYXNrIHRhc2spOworICAgIHZvaWQgYWRkKFRhc2spOwog
ICAgIFRhc2sgdGFrZSgpOwotICAgIGJvb2wgaXNXb3JrTGlzdEVtcHR5KCkgeyByZXR1cm4gIW1f
d29ya2xpc3Quc2l6ZSgpOyB9CisgICAgYm9vbCBpc1dvcmtMaXN0RW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhbV93b3JrbGlzdC5zaXplKCk7IH0KIAogcHJpdmF0ZToKICAgICBKU0NvbnRleHQgKm1f
Y29udGV4dDsKLSAgICBXVEY6Okhhc2hNYXA8aWQsIEpTVmFsdWVSZWY+IG1fb2JqZWN0TWFwOwot
ICAgIFdURjo6VmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7CisgICAgSGFzaE1hcDxpZCwgSlNWYWx1
ZVJlZj4gbV9vYmplY3RNYXA7CisgICAgVmVjdG9yPFRhc2s+IG1fd29ya2xpc3Q7CiB9OwogCiBK
U1ZhbHVlUmVmIE9iamNDb250YWluZXJDb252ZXJ0b3I6OmNvbnZlcnQoaWQgb2JqZWN0KQpAQCAt
OTY1LDcgKzEwMDIsNyBAQCBKU1ZhbHVlUmVmIG9iamVjdFRvVmFsdWUoSlNDb250ZXh0ICpjb250
CiAKICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PSBDb250YWluZXJBcnJheSkgewogICAgICAg
ICAgICAgQVNTRVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11d
KTsKLSAgICAgICAgICAgIE5TQXJyYXkgKiBhcnJheSA9IChOU0FycmF5ICopY3VycmVudC5vYmpj
OworICAgICAgICAgICAgTlNBcnJheSAqYXJyYXkgPSAoTlNBcnJheSAqKWN1cnJlbnQub2JqYzsK
ICAgICAgICAgICAgIE5TVUludGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOwogICAgICAgICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKICAg
ICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxD
b250ZXh0KGNvbnRleHQpLCBqcywgaW5kZXgsIGNvbnZlcnRvci5jb252ZXJ0KFthcnJheSBvYmpl
Y3RBdEluZGV4OmluZGV4XSksIDApOwpAQCAtOTczLDggKzEwMTAsNyBAQCBKU1ZhbHVlUmVmIG9i
amVjdFRvVmFsdWUoSlNDb250ZXh0ICpjb250CiAgICAgICAgICAgICBBU1NFUlQoY3VycmVudC50
eXBlID09IENvbnRhaW5lckRpY3Rpb25hcnkpOwogICAgICAgICAgICAgQVNTRVJUKFtjdXJyZW50
Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwogICAgICAgICAgICAg
TlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gKE5TRGljdGlvbmFyeSopY3VycmVudC5vYmpjOwot
ICAgICAgICAgICAgTlNFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gW2RpY3Rpb25hcnkga2V5RW51
bWVyYXRvcl07Ci0gICAgICAgICAgICB3aGlsZSAoaWQga2V5ID0gW2VudW1lcmF0b3IgbmV4dE9i
amVjdF0pIHsKKyAgICAgICAgICAgIGZvciAoaWQga2V5IGluIFtkaWN0aW9uYXJ5IGtleUVudW1l
cmF0b3JdKSB7CiAgICAgICAgICAgICAgICAgaWYgKFtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJp
bmcgY2xhc3NdXSkgewogICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5h
bWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpa2V5KTsKICAgICAg
ICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBqcywgcHJvcGVydHlOYW1lLCBjb252ZXJ0b3IuY29udmVydChbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6a2V5XSksIDAsIDApOwpAQCAtMTAwMCwxMSArMTAzNiwxMiBAQCArIChK
U1ZhbHVlICopdmFsdWVXaXRoVmFsdWU6KEpTVmFsdWVSZWYpCiAKIC0gKEpTVmFsdWUgKilpbml0
V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0
CiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAg
b2JqY19pbml0V2VhaygmbV93ZWFrQ29udGV4dCwgY29udGV4dCk7Ci0KLSAgICBbc3VwZXIgaW5p
dF07CiAgICAgW2NvbnRleHQgcHJvdGVjdDp2YWx1ZV07CiAgICAgbV92YWx1ZSA9IHZhbHVlOwog
ICAgIHJldHVybiBzZWxmOwpAQCAtMTAyMCwyMCArMTA1NywyMCBAQCBzdGF0aWMgU3RydWN0VGFn
SGFuZGxlciogZ2V0U3RydWN0VGFnSGFuCiAgICAgc3RhdGljIFNwaW5Mb2NrIGdldFN0cnVjdFRh
Z0hhbmRsZXJMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja0hvbGRlcigmZ2V0U3RydWN0VGFnSGFuZGxlckxvY2spOwogCi0gICAgdHlwZWRlZiBXVEY6
Okhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBTdHJ1Y3RUYWdIYW5kbGVyPiBTdHJ1Y3RIYW5k
bGVyczsKLSAgICBzdGF0aWMgU3RydWN0SGFuZGxlcnMgKm1fc3RydWN0SGFuZGxlcnMgPSAwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN0cnVjdFRhZ0hhbmRsZXI+
IFN0cnVjdEhhbmRsZXJzOworICAgIHN0YXRpYyBTdHJ1Y3RIYW5kbGVycyogc3RydWN0SGFuZGxl
cnMgPSAwOwogCi0gICAgaWYgKCFtX3N0cnVjdEhhbmRsZXJzKSB7Ci0gICAgICAgIG1fc3RydWN0
SGFuZGxlcnMgPSBuZXcgU3RydWN0SGFuZGxlcnMoKTsKKyAgICBpZiAoIXN0cnVjdEhhbmRsZXJz
KSB7CisgICAgICAgIHN0cnVjdEhhbmRsZXJzID0gbmV3IFN0cnVjdEhhbmRsZXJzKCk7CiAKICAg
ICAgICAgLy8gU3RlcCAxOiBmaW5kIGFsbCB2YWx1ZVdpdGg8Rm9vPjppbkNvbnRleHQ6IGNsYXNz
IG1ldGhvZHMgaW4gSlNWYWx1ZS4KLSAgICAgICAgc2l6ZV90IHZhbHVlV2l0aE1pbkxlbiA9IHN0
cmxlbigidmFsdWVXaXRoWDppbkNvbnRleHQ6Iik7CisgICAgICAgIHNpemVfdCB2YWx1ZVdpdGhN
aW5MZW5ndGggPSBzdHJsZW4oInZhbHVlV2l0aFg6aW5Db250ZXh0OiIpOwogICAgICAgICBmb3JF
YWNoTWV0aG9kSW5DbGFzcyhvYmplY3RfZ2V0Q2xhc3MoW0pTVmFsdWUgY2xhc3NdKSwgXihNZXRo
b2QgbWV0aG9kKXsKLSAgICAgICAgICAgIFNFTCBzZWwgPSBtZXRob2RfZ2V0TmFtZShtZXRob2Qp
OwotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbCk7Ci0gICAg
ICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgU0VMIHNlbGVj
dG9yID0gbWV0aG9kX2dldE5hbWUobWV0aG9kKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWUgPSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7CisgICAgICAgICAgICBzaXplX3QgbmFtZUxlbmd0
aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAgIC8vIENoZWNrIGZvciB2YWx1ZVdpdGg8Rm9v
Pjpjb250ZXh0OgotICAgICAgICAgICAgaWYgKGxlbiA8IHZhbHVlV2l0aE1pbkxlbiB8fCBzdHJu
Y21wKG5hbWUsICJ2YWx1ZVdpdGgiLCA5KSB8fCBzdHJuY21wKG5hbWUgKyBsZW4gLSAxMSwgIjpp
bkNvbnRleHQ6IiwgMTEpKQorICAgICAgICAgICAgaWYgKG5hbWVMZW5ndGggPCB2YWx1ZVdpdGhN
aW5MZW5ndGggfHwgc3RybmNtcChuYW1lLCAidmFsdWVXaXRoIiwgOSkgfHwgc3RybmNtcChuYW1l
ICsgbmFtZUxlbmd0aCAtIDExLCAiOmluQ29udGV4dDoiLCAxMSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFsgaWQsIFNFTCwgPHR5cGU+LCA8Y29u
dGV4dFR5cGU+IF0KICAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0TnVtYmVyT2ZBcmd1bWVudHMo
bWV0aG9kKSAhPSA0KQpAQCAtMTA1MSwxOCArMTA4OCwxOCBAQCBzdGF0aWMgU3RydWN0VGFnSGFu
ZGxlciogZ2V0U3RydWN0VGFnSGFuCiAgICAgICAgICAgICBpZiAoc3RyY21wKGlkVHlwZSwgIkAi
KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjaGFyKiB0eXBlID0gbWV0
aG9kX2NvcHlBcmd1bWVudFR5cGUobWV0aG9kLCAyKTsKLSAgICAgICAgICAgIG1fc3RydWN0SGFu
ZGxlcnMtPmFkZChXVEY6OlN0cmluZyh0eXBlKS5pbXBsKCksIChTdHJ1Y3RUYWdIYW5kbGVyKXsg
c2VsLCAwIH0pOworICAgICAgICAgICAgc3RydWN0SGFuZGxlcnMtPmFkZChTdHJpbmcodHlwZSku
aW1wbCgpLCAoU3RydWN0VGFnSGFuZGxlcil7IHNlbGVjdG9yLCAwIH0pOwogICAgICAgICAgICAg
ZnJlZSh0eXBlKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgLy8gU3RlcCAyOiBmaW5kIGFsbCB0
bzxGb28+IGluc3RhbmNlIG1ldGhvZHMgaW4gSlNWYWx1ZS4KICAgICAgICAgc2l6ZV90IG1pbkxl
blZhbHVlID0gc3RybGVuKCJ0b1giKTsKICAgICAgICAgZm9yRWFjaE1ldGhvZEluQ2xhc3MoW0pT
VmFsdWUgY2xhc3NdLCBeKE1ldGhvZCBtZXRob2QpewotICAgICAgICAgICAgU0VMIHNlbCA9IG1l
dGhvZF9nZXROYW1lKG1ldGhvZCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc2Vs
X2dldE5hbWUoc2VsKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7Cisg
ICAgICAgICAgICBTRUwgc2VsZWN0b3IgPSBtZXRob2RfZ2V0TmFtZShtZXRob2QpOworICAgICAg
ICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKyAgICAgICAg
ICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gc3RybGVuKG5hbWUpOwogICAgICAgICAgICAgLy8gQ2hl
Y2sgZm9yIHRvPEZvbz4KLSAgICAgICAgICAgIGlmIChsZW4gPCBtaW5MZW5WYWx1ZSB8fCBzdHJu
Y21wKG5hbWUsICJ0byIsIDIpKQorICAgICAgICAgICAgaWYgKG5hbWVMZW5ndGggPCBtaW5MZW5W
YWx1ZSB8fCBzdHJuY21wKG5hbWUsICJ0byIsIDIpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIC8vIENoZWNrIGZvciBbIGlkLCBTRUwgXQogICAgICAgICAgICAgaWYgKG1l
dGhvZF9nZXROdW1iZXJPZkFyZ3VtZW50cyhtZXRob2QpICE9IDIpCkBAIC0xMDcwLDM4ICsxMTA3
LDM4IEBAIHN0YXRpYyBTdHJ1Y3RUYWdIYW5kbGVyKiBnZXRTdHJ1Y3RUYWdIYW4KICAgICAgICAg
ICAgIC8vIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdmFsdWVXaXRoPEZvbz46Y29udGV4dDogbWV0
aG9kLgogICAgICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5UmV0dXJuVHlwZShtZXRo
b2QpOwogCi0gICAgICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IG1fc3Ry
dWN0SGFuZGxlcnMtPmZpbmQoV1RGOjpTdHJpbmcodHlwZSkuaW1wbCgpKTsKKyAgICAgICAgICAg
IFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gc3RydWN0SGFuZGxlcnMtPmZpbmQoU3Ry
aW5nKHR5cGUpLmltcGwoKSk7CiAgICAgICAgICAgICBmcmVlKHR5cGUpOwotICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gbV9zdHJ1Y3RIYW5kbGVycy0+ZW5kKCkpCisgICAgICAgICAgICBpZiAoaXRl
ciA9PSBzdHJ1Y3RIYW5kbGVycy0+ZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgU3RydWN0VGFnSGFuZGxlciYgaGFuZGxlciA9IGl0ZXItPnZhbHVlOwogCiAgICAg
ICAgICAgICAvLyBjaGVjayB0aGF0IHN0cmxlbig8Zm9vPikgPT0gc3RybGVuKDxGb28+KQogICAg
ICAgICAgICAgY29uc3QgY2hhciogdmFsdWVXaXRoTmFtZSA9IHNlbF9nZXROYW1lKGhhbmRsZXIu
dHlwZVRvVmFsdWVTRUwpOwogICAgICAgICAgICAgc2l6ZV90IHZhbHVlV2l0aExlbiA9IHN0cmxl
bih2YWx1ZVdpdGhOYW1lKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZVdpdGhMZW4gLSB2YWx1ZVdp
dGhNaW5MZW4gIT0gbGVuIC0gbWluTGVuVmFsdWUpCisgICAgICAgICAgICBpZiAodmFsdWVXaXRo
TGVuIC0gdmFsdWVXaXRoTWluTGVuZ3RoICE9IG5hbWVMZW5ndGggLSBtaW5MZW5WYWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IDxGb28+ID09
IDxGb28+Ci0gICAgICAgICAgICBpZiAoc3RybmNtcCh2YWx1ZVdpdGhOYW1lICsgOSwgbmFtZSAr
IDIsIGxlbiAtIG1pbkxlblZhbHVlIC0gMSkpCisgICAgICAgICAgICBpZiAoc3RybmNtcCh2YWx1
ZVdpdGhOYW1lICsgOSwgbmFtZSArIDIsIG5hbWVMZW5ndGggLSBtaW5MZW5WYWx1ZSAtIDEpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGhhbmRsZXIudmFsdWVUb1R5cGVT
RUwgPSBzZWw7CisgICAgICAgICAgICBoYW5kbGVyLnZhbHVlVG9UeXBlU0VMID0gc2VsZWN0b3I7
CiAgICAgICAgIH0pOwogCiAgICAgICAgIC8vIFN0ZXAgMzogY2xlYW4gdXAgLSByZW1vdmUgZW50
cmllcyB3aGVyZSB3ZSBmb3VuZCBwcm9zcGVjdGl2ZSB2YWx1ZVdpdGg8Rm9vPjppbkNvbnRleHQ6
IGNvbnZlcnNpb25zLCBidXQgbm8gbWF0Y2hpbmcgdG88Rm9vPiBtZXRob2RzLgotICAgICAgICB0
eXBlZGVmIFdURjo6SGFzaFNldDxSZWZQdHI8V1RGOjpTdHJpbmdJbXBsPiA+IFJlbW92ZVNldDsK
KyAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPiA+IFJlbW92ZVNldDsK
ICAgICAgICAgUmVtb3ZlU2V0IHJlbW92ZVNldDsKLSAgICAgICAgZm9yIChTdHJ1Y3RIYW5kbGVy
czo6aXRlcmF0b3IgaXRlciA9IG1fc3RydWN0SGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gbV9z
dHJ1Y3RIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICBmb3IgKFN0cnVjdEhhbmRs
ZXJzOjppdGVyYXRvciBpdGVyID0gc3RydWN0SGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gc3Ry
dWN0SGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdFRhZ0hhbmRs
ZXImIGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIGlmICghaGFuZGxlci52YWx1
ZVRvVHlwZVNFTCkKICAgICAgICAgICAgICAgICByZW1vdmVTZXQuYWRkKGl0ZXItPmtleSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKFJlbW92ZVNldDo6aXRlcmF0b3IgaXRlciA9IHJlbW92
ZVNldC5iZWdpbigpOyBpdGVyICE9IHJlbW92ZVNldC5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgbV9zdHJ1Y3RIYW5kbGVycy0+cmVtb3ZlKCppdGVyKTsKKyAgICAgICAgICAgIHN0cnVjdEhh
bmRsZXJzLT5yZW1vdmUoKml0ZXIpOwogICAgIH0KIAotICAgIFN0cnVjdEhhbmRsZXJzOjppdGVy
YXRvciBpdGVyID0gbV9zdHJ1Y3RIYW5kbGVycy0+ZmluZChXVEY6OlN0cmluZyhlbmNvZGVkVHlw
ZSkuaW1wbCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX3N0cnVjdEhhbmRsZXJzLT5lbmQoKSkKKyAg
ICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IHN0cnVjdEhhbmRsZXJzLT5maW5kKFN0
cmluZyhlbmNvZGVkVHlwZSkuaW1wbCgpKTsKKyAgICBpZiAoaXRlciA9PSBzdHJ1Y3RIYW5kbGVy
cy0+ZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiAmaXRlci0+dmFsdWU7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAko
cmV2aXNpb24gMTM4NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIC8vIG9yIHNldCBvZiBl
eGVjdXRpb24gcmVzb3VyY2VzLiBUaHJlYWQgc2FmZXR5IGlzIHN1cHBvcnRlZCBieSBsb2NraW5n
IHRoZQogLy8gdmlydHVhbCBtYWNoaW5lLCB3aXRoIGNvbmN1cnJlbnQgSmF2YVNjcmlwdCBleGVj
dXRpb24gc3VwcG9ydGVkIGJ5IGFsbG9jYXRpbmcKIC8vIHNlcGFyYXRlIGluc3RhbmNlcyBvZiBK
U1ZpcnR1YWxNYWNoaW5lLgorCiBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiBAaW50ZXJm
YWNlIEpTVmlydHVhbE1hY2hpbmUgOiBOU09iamVjdAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAxMzg2NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDEwIEBACiAKIC0gKGlkKWluaXQKIHsKLSAgICBbc3VwZXIgaW5pdF07
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisKICAgICBtX2dyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKICAgICB0b0pT
KG1fZ3JvdXApLT5tX2FwaURhdGEgPSBzZWxmOwogICAgIHJldHVybiBzZWxmOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDEzODY0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBOU1N0cmluZyogc2VsZWN0b3JUb1Byb3BlcnR5
TmFtZSgKICAgICBzaXplX3QgaGVhZGVyID0gZmlyc3RDb2xvbiAtIHN0YXJ0OwogICAgIC8vIFRo
ZSBuZXcgc3RyaW5nIG5lZWRzIHRvIGJlIGxvbmcgZW5vdWdoIHRvIGhvbGQgJ2hlYWRlcicsIHBs
dXMgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nLCBleGNsdWRpbmcKICAgICAvLyBhdCBsZWFz
dCBvbmUgJzonLCBidXQgaW5jbHVkaW5nIGEgJ1wwJy4gKFRoaXMgaXMgY29uc2VydmF0aXZlIGlm
IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lICc6JykuCi0gICAgY2hhciogYnVmZmVyID0gKGNoYXIq
KW1hbGxvYyhoZWFkZXIgKyBzdHJsZW4oZmlyc3RDb2xvbiArIDEpICsgMSk7CisgICAgY2hhciog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhoZWFkZXIgKyBzdHJsZW4oZmlyc3RD
b2xvbiArIDEpICsgMSkpOwogICAgIC8vIENvcHkgJ2hlYWRlcicgY2hhcmFjdGVycywgc2V0IG91
dHB1dCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoaXMgJiBpbnB1dCB0byBwb2ludCBwYXN0IHRo
ZSBmaXJzdCAnOicuCiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RhcnQsIGhlYWRlcik7CiAgICAgY2hh
ciogb3V0cHV0ID0gYnVmZmVyICsgaGVhZGVyOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHN0YXRpYyB2
b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ28KICAgICAgICAgY2hhciogZ2V0dGVyTmFt
ZTsKICAgICAgICAgY2hhciogc2V0dGVyTmFtZTsKICAgICB9OwotICAgIF9fYmxvY2sgV1RGOjpW
ZWN0b3I8UHJvcGVydHk+IHByb3BlcnR5TGlzdDsKKyAgICBfX2Jsb2NrIFZlY3RvcjxQcm9wZXJ0
eT4gcHJvcGVydHlMaXN0OwogCiAgICAgLy8gTWFwIHJlY29yZGluZyB0aGUgbWV0aG9kcyB1c2Vk
IGFzIGdldHRlcnMvc2V0dGVycy4KICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphY2Nlc3Nvck1l
dGhvZHMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKQEAgLTMwMiw3ICszMDIs
OSBAQCAtIChKU1ZhbHVlICopY29uc3RydWN0b3I7CiAKIC0gKGlkKWluaXRXaXRoQ29udGV4dDoo
SlNDb250ZXh0Kiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpT
T2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KIHsKLSAgICBbc3VwZXIgaW5pdF07CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSBjbGFzc19nZXROYW1lKGNscyk7CiAgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKQEAgLTM3OCw3ICszODAsMTAgQEAgLSAoSlNWYWx1ZSAqKWNv
bnN0cnVjdG9yCiAKIC0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0CiB7
Ci0gICAgW3N1cGVyIGluaXRdOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCiAgICAgbV9jb250ZXh0ID0gY29udGV4dDsKICAg
ICBtX2NsYXNzTWFwID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKICAgICBy
ZXR1cm4gc2VsZjsKQEAgLTQyMSw3ICs0MjYsNyBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZvck9i
amVjdDooaWQpb2JqZWN0CiAKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNTg5MQogICAgIC8vIFRoaXMgZ2VuZXJhbCBhcHByb2FjaCB0byB3
cmFwcGVyIGNhY2hpbmcgaXMgcHJldHR5IGVmZmVjdGl2ZSwgYnV0IHRoZXJlIGFyZSBhIGNvdXBs
ZSBvZiBwcm9ibGVtczoKLSAgICAvLyAoMSkgRm9yIGltbW9ydGFsIG9iamVjdHMgSlNWYWx1ZXMg
d2lsbCBlZmZlY3RpdmVseSBsZWFqIGFuZCB0aGlzIHJlc3VsdHMgaW4gZXJyb3Igb3V0cHV0IGJl
aW5nIGxvZ2dlZCAtIHdlIHNob3VsZCBhdm9pZCBhZGRpbmcgYXNzb2NpYXRlZCBvYmplY3RzIHRv
IGltbW9ydGFsIG9iamVjdHMuCisgICAgLy8gKDEpIEZvciBpbW1vcnRhbCBvYmplY3RzIEpTVmFs
dWVzIHdpbGwgZWZmZWN0aXZlbHkgbGVhayBhbmQgdGhpcyByZXN1bHRzIGluIGVycm9yIG91dHB1
dCBiZWluZyBsb2dnZWQgLSB3ZSBzaG91bGQgYXZvaWQgYWRkaW5nIGFzc29jaWF0ZWQgb2JqZWN0
cyB0byBpbW1vcnRhbCBvYmplY3RzLgogICAgIC8vICgyKSBBIGxvbmcgbGl2ZWQgb2JqZWN0IG1h
eSByYWNrIHVwIG1hbnkgSlNWYWx1ZXMuIFdoZW4gdGhlIGNvbnRleHRzIGFyZSByZWxlYXNlZCB0
aGVzZSB3aWxsIHVucHJvY3RlY3QgdGhlIGFzc29jaWF0ZWQgSmF2YVNjcmlwdCBvYmplY3RzLAog
ICAgIC8vICAgICBidXQgc3RpbGwsIHdvdWxkIHByb2JhYmx5IG5pY2VyIGlmIHdlIG1hZGUgaXQg
c28gdGhhdCBvbmx5IG9uZSBhc3NvY2lhdGVkIG9iamVjdCB3YXMgcmVxdWlyZWQsIGJyb2FkY2Fz
dGluZyBvYmplY3QgZGVhbGxvYy4KICAgICBvYmpjX3NldEFzc29jaWF0ZWRPYmplY3Qob2JqZWN0
LCBtX2NvbnRleHQsIHdyYXBwZXIsIE9CSkNfQVNTT0NJQVRJT05fUkVUQUlOKTsKQEAgLTQzNiw3
ICs0NDEsNyBAQCBpZCB0cnlVbndyYXBPYmpjT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlv
bik7Ci0gICAgLy9BU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOwog
ICAgIGlmIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIG9iamVjdCwgd3JhcHBlckNs
YXNzKCkpKQogICAgICAgICByZXR1cm4gKGlkKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOwog
ICAgIGlmIChpZCB0YXJnZXQgPSB0cnlVbndyYXBCbG9jayhjb250ZXh0LCBvYmplY3QpKQpAQCAt
NDQ2LDE3ICs0NTEsMTMgQEAgaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0dsb2JhbENvbnRleHRS
ZQogCiBQcm90b2NvbCogZ2V0SlNFeHBvcnRQcm90b2NvbCgpCiB7Ci0gICAgc3RhdGljIFByb3Rv
Y29sKiBwcm90b2NvbCA9IDA7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAgICAgICAgcHJvdG9jb2wg
PSBvYmpjX2dldFByb3RvY29sKCJKU0V4cG9ydCIpOworICAgIHN0YXRpYyBQcm90b2NvbCogcHJv
dG9jb2wgPSBvYmpjX2dldFByb3RvY29sKCJKU0V4cG9ydCIpOwogICAgIHJldHVybiBwcm90b2Nv
bDsKIH0KIAogQ2xhc3MgZ2V0TlNCbG9ja0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgQ2xhc3MgY2xz
ID0gMDsKLSAgICBpZiAoIWNscykKLSAgICAgICAgY2xzID0gb2JqY19nZXRDbGFzcygiTlNCbG9j
ayIpOworICAgIHN0YXRpYyBDbGFzcyBjbHMgPSBvYmpjX2dldENsYXNzKCJOU0Jsb2NrIik7CiAg
ICAgcmV0dXJuIGNsczsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZh
U2NyaXB0Q29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2
YVNjcmlwdENvcmUuaAkocmV2aXNpb24gMTM4NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KYXZhU2NyaXB0Q29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBk
ZWZpbmVkKF9fT0JKQ19fKSAmJiBKU19PQkpDX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkpTQ29u
dGV4dC5oIgogI2ltcG9ydCAiQVBJSlNWYWx1ZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZpc2lvbiAxMzg2NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBACiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwu
aCIKICNpbXBvcnQgIk9iakNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW1wb3J0ICJPYmpjUnVudGlt
ZUV4dHJhcy5oIgotI2ltcG9ydCAib2JqYy9ydW50aW1lLmgiCi0jaW1wb3J0ICJ3dGYvUmV0YWlu
UHRyLmgiCisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudCB7CiBwdWJsaWM6CkBAIC01Myw4ICs1Myw3IEBA
IENhbGxiYWNrQXJndW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KCkKIH0KIAogY2xhc3MgQ2FsbGJh
Y2tBcmd1bWVudEJvb2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnRO
dW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJl
ZiopCisgICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50
ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGJvb2wgdmFsdWUgPSBK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50
KTsKICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1l
bnROdW1iZXJdOwpAQCAtNjMsOCArNjIsNyBAQCBwdWJsaWM6CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50SW50ZWdlciA6IHB1YmxpYyBDYWxsYmFja0FyZ3Vt
ZW50IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgdmlydHVhbCB2b2lkIHNldChOU0lu
dm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBUIHZhbHVlID0gKFQpSlNDOjp0b0ludDMyKEpTVmFsdWVU
b051bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0
aW9uKSk7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFy
Z3VtZW50TnVtYmVyXTsKQEAgLTczLDggKzcxLDcgQEAgcHVibGljOgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudERvdWJsZSA6IHB1YmxpYyBDYWxsYmFja0Fy
Z3VtZW50IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24s
IE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgdmlydHVhbCB2b2lkIHNldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
IG92ZXJyaWRlCiAgICAgewogICAgICAgICBUIHZhbHVlID0gKFQpSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOwogICAg
ICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CkBAIC04Miw4ICs3OSw3IEBAIHB1YmxpYzoKIH07CiAKIGNsYXNzIENhbGxiYWNrQXJndW1l
bnRKU1ZhbHVlIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotcHVibGljOgotICAgIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKQorICAg
IHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiopIG92ZXJyaWRlCiAgICAgewogICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1Zh
bHVlIHZhbHVlV2l0aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4dDpjb250ZXh0XTsKICAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwpA
QCAtOTEsOCArODcsNyBAQCBwdWJsaWM6CiB9OwogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50SWQg
OiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXQoTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopCisgICAgdmlydHVhbCB2
b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJl
ciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb09iamVjdChjb250ZXh0
LCBhcmd1bWVudCk7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdElu
ZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTEwOCwzNyArMTAzLDM2IEBAIHB1YmxpYzoKICAgICAg
ICAgW21fY2xhc3MgcmV0YWluXTsKICAgICB9CiAKLSAgICB+Q2FsbGJhY2tBcmd1bWVudE9mQ2xh
c3MoKQorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIH5DYWxsYmFja0FyZ3VtZW50T2ZDbGFzcygpCiAg
ICAgewogICAgICAgICBbbV9jbGFzcyByZWxlYXNlXTsKICAgICB9CiAKLSAgICB2b2lkIHNldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CisgICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdl
ciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBKU0dsb2Jh
bENvbnRleHRSZWYgY3R4ID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKyAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpOwogCi0gICAgICAgIGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY3R4
LCBhcmd1bWVudCk7CisgICAgICAgIGlkIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29u
dGV4dFJlZiwgYXJndW1lbnQpOwogICAgICAgICBpZiAob2JqZWN0ICYmIFtvYmplY3QgaXNLaW5k
T2ZDbGFzczptX2NsYXNzXSkgewogICAgICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6
Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChKU1ZhbHVlSXNOdWxsKGN0eCwgYXJndW1lbnQpIHx8IEpT
VmFsdWVJc1VuZGVmaW5lZChjdHgsIGFyZ3VtZW50KSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlz
TnVsbChjb250ZXh0UmVmLCBhcmd1bWVudCkgfHwgSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHRS
ZWYsIGFyZ3VtZW50KSkgewogICAgICAgICAgICAgb2JqZWN0ID0gbmlsOwogICAgICAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamVjdCBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGN0eCksICJBcmd1bWVudCBkb2VzIG5vdCBt
YXRjaCBPYmplY3RpdmUtQyBDbGFzcyIpKTsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpT
Qzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dFJlZiksICJBcmd1bWVudCBkb2VzIG5vdCBt
YXRjaCBPYmplY3RpdmUtQyBDbGFzcyIpKTsKICAgICB9CiAKLXByaXZhdGU6CiAgICAgQ2xhc3Mg
bV9jbGFzczsKIH07CiAKIGNsYXNzIENhbGxiYWNrQXJndW1lbnROU051bWJlciA6IHB1YmxpYyBD
YWxsYmFja0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgdmlydHVhbCB2
b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJl
ciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9OdW1i
ZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7
CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50
TnVtYmVyXTsKQEAgLTE0Niw4ICsxNDAsNyBAQCBwdWJsaWM6CiB9OwogCiBjbGFzcyBDYWxsYmFj
a0FyZ3VtZW50TlNTdHJpbmcgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnRO
dW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0
aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1
ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29u
dGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOwogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1
bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CkBAIC0xNTUsOCArMTQ4LDcgQEAg
cHVibGljOgogfTsKIAogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGF0ZSA6IHB1YmxpYyBDYWxs
YmFja0FyZ3VtZW50IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9j
YXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCisgICAgdmlydHVhbCB2b2lk
IHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwg
SlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9EYXRlKGNv
bnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3VtZW50LCBleGNlcHRpb24pOwogICAg
ICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJl
cl07CkBAIC0xNjQsOCArMTU2LDcgQEAgcHVibGljOgogfTsKIAogY2xhc3MgQ2FsbGJhY2tBcmd1
bWVudE5TQXJyYXkgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIs
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWQgdmFsdWUgPSB2YWx1ZVRvQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwg
YXJndW1lbnQsIGV4Y2VwdGlvbik7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2
YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTE3Myw4ICsxNjQsNyBAQCBwdWJsaWM6
CiB9OwogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDogcHVibGljIENhbGxi
YWNrQXJndW1lbnQgewotcHVibGljOgotICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFs
dWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBK
U0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlkIHZhbHVlID0gdmFsdWVUb0RpY3Rpb25h
cnkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7
CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50
TnVtYmVyXTsKQEAgLTE4NSwyMiArMTc1LDEyIEBAIGNsYXNzIENhbGxiYWNrQXJndW1lbnRTdHJ1
Y3QgOiBwdWJsaWMgQ2EKIHB1YmxpYzoKICAgICBDYWxsYmFja0FyZ3VtZW50U3RydWN0KE5TSW52
b2NhdGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQog
ICAgICAgICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCisg
ICAgICAgICwgbV9idWZmZXIoZW5jb2RlZFR5cGUpCiAgICAgewotICAgICAgICBbbV9jb252ZXJz
aW9uSW52b2NhdGlvbiByZXRhaW5dOwotICAgICAgICBOU1VJbnRlZ2VyIHNpemUsIGFsaWdubWVu
dDsKLSAgICAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGVuY29kZWRUeXBlLCAmc2l6ZSwgJmFs
aWdubWVudCk7Ci0gICAgICAgIC0tYWxpZ25tZW50OwotICAgICAgICBtX2FsbG9jYXRpb24gPSAo
Y2hhciopbWFsbG9jKHNpemUgKyBhbGlnbm1lbnQpOwotICAgICAgICBtX2J1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KChyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2FsbG9jYXRp
b24pICsgYWxpZ25tZW50KSAmIH5hbGlnbm1lbnQpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFs
IH5DYWxsYmFja0FyZ3VtZW50U3RydWN0KCkKLSAgICB7Ci0gICAgICAgIFttX2NvbnZlcnNpb25J
bnZvY2F0aW9uIHJlbGVhc2VdOwotICAgICAgICBmcmVlKG1fYWxsb2NhdGlvbik7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpT
VmFsdWVSZWYqKQorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiog
aW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAgICAg
ICAgSlNWYWx1ZSogdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNv
bnRleHQ6Y29udGV4dF07CiAgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGludm9rZVdp
dGhUYXJnZXQ6dmFsdWVdOwpAQCAtMjA4LDEwICsxODgsOCBAQCBwdWJsaWM6CiAgICAgICAgIFtp
bnZvY2F0aW9uIHNldEFyZ3VtZW50Om1fYnVmZmVyIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwog
ICAgIH0KIAotcHJpdmF0ZToKLSAgICBOU0ludm9jYXRpb24qIG1fY29udmVyc2lvbkludm9jYXRp
b247Ci0gICAgY2hhciogbV9idWZmZXI7Ci0gICAgY2hhciogbV9hbGxvY2F0aW9uOworICAgIFJl
dGFpblB0cjxOU0ludm9jYXRpb24+IG1fY29udmVyc2lvbkludm9jYXRpb247CisgICAgU3RydWN0
QnVmZmVyIG1fYnVmZmVyOwogfTsKIAogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJh
Y2sgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7CkBAIC0yMjEsMTggKzE5OSwxOCBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB+Q2FsbGJhY2tB
cmd1bWVudEJsb2NrQ2FsbGJhY2soKQogICAgIHsKICAgICAgICAgW21fYWRhcHRvciByZWxlYXNl
XTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBO
U0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBh
cmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJ
bnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4
dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWQgYmxvY2sgPSBbbV9hZGFwdG9yIGJsb2NrRnJvbVZh
bHVlOmFyZ3VtZW50IGluQ29udGV4dDpjb250ZXh0IHdpdGhFeGNlcHRpb246ZXhjZXB0aW9uXTsK
ICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JmJsb2NrIGF0SW5kZXg6YXJndW1lbnRO
dW1iZXJdOwogICAgIH0KIAotcHJpdmF0ZToKICAgICBKU0Jsb2NrQWRhcHRvciogbV9hZGFwdG9y
OwogfTsKIApAQCAtMjYwLDcgKzIzOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVzdWx0VHlw
ZSB0eXBlVm9pZCgpCiAgICAgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgc3RhdGljIFJl
c3VsdFR5cGUgdHlwZUlkKCkKQEAgLTI3Myw3ICsyNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0
cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7CiAgICAgICAgIENsYXNzIGNscyA9IG9iamNfZ2V0
Q2xhc3MoY29weSk7CiAgICAgICAgIGlmICghY2xzKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGlmIChjbHMgPT0gW0pTVmFsdWUgY2xh
c3NdKQogICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja0FyZ3VtZW50SlNWYWx1ZTsKQEAg
LTMwMiw3ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZ1JhbmdlIGNvcHkoYmVnaW4s
IGVuZCk7CiAgICAgICAgIGlmIChOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSB2YWx1ZVRvVHlw
ZUludm9jYXRpb25Gb3IoY29weSkpCiAgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJn
dW1lbnRTdHJ1Y3QoaW52b2NhdGlvbiwgY29weSk7Ci0gICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIH07CiAKQEAgLTMxNiwxNiArMjk0LDE0IEBAIHB1YmxpYzoK
IH07CiAKIGNsYXNzIENhbGxiYWNrUmVzdWx0Vm9pZCA6IHB1YmxpYyBDYWxsYmFja1Jlc3VsdCB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qLCBKU0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKQorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQo
TlNJbnZvY2F0aW9uKiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0SW50ZXJu
YWxDb250ZXh0KGNvbnRleHQpKTsKICAgICB9CiB9OwogCiBjbGFzcyBDYWxsYmFja1Jlc3VsdElk
IDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIEpTVmFsdWVS
ZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmKikKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlkIHZhbHVlOwogICAgICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFs
dWVdOwpAQCAtMzM1LDE4ICszMTEsMTYgQEAgcHVibGljOgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgQ2FsbGJhY2tSZXN1bHROdW1lcmljIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikKKyAgICB2aXJ0dWFsIEpTVmFs
dWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIFQgdmFsdWU7CiAgICAgICAgIFtp
bnZvY2F0aW9uIGdldFJldHVyblZhbHVlOiZ2YWx1ZV07Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAoZG91YmxlKXZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCksIHZhbHVlKTsKICAgICB9CiB9OwogCiBjbGFzcyBDYWxsYmFja1Jlc3VsdEJv
b2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgewotcHVibGljOgotICAgIHZpcnR1YWwgSlNW
YWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYqKQorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBp
bnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgYm9vbCB2YWx1ZTsKICAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFs
dWU6JnZhbHVlXTsKQEAgLTM1OCwyNiArMzMyLDE2IEBAIGNsYXNzIENhbGxiYWNrUmVzdWx0U3Ry
dWN0IDogcHVibGljIENhbGwKIHB1YmxpYzoKICAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0lu
dm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkK
ICAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQor
ICAgICAgICAsIG1fYnVmZmVyKGVuY29kZWRUeXBlKQogICAgIHsKLSAgICAgICAgW21fY29udmVy
c2lvbkludm9jYXRpb24gcmV0YWluXTsKLSAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1l
bnQ7Ci0gICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZh
bGlnbm1lbnQpOwotICAgICAgICAtLWFsaWdubWVudDsKLSAgICAgICAgbV9hbGxvY2F0aW9uID0g
KGNoYXIqKW1hbGxvYyhzaXplICsgYWxpZ25tZW50KTsKLSAgICAgICAgbV9idWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9hbGxvY2F0
aW9uKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50KTsKICAgICB9CiAgICAgCi0gICAgdmlydHVh
bCB+Q2FsbGJhY2tSZXN1bHRTdHJ1Y3QoKQotICAgIHsKLSAgICAgICAgW21fY29udmVyc2lvbklu
dm9jYXRpb24gcmVsZWFzZV07Ci0gICAgICAgIGZyZWUobV9hbGxvY2F0aW9uKTsKLSAgICB9Ci0g
ICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24s
IEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiopCitwcml2YXRlOgorICAgIHZpcnR1YWwg
SlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRl
eHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgW2ludm9jYXRpb24gZ2V0
UmV0dXJuVmFsdWU6bV9hbGxvY2F0aW9uXTsKKyAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJu
VmFsdWU6bV9idWZmZXJdOwogCi0gICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIHNldEFy
Z3VtZW50Om1fYWxsb2NhdGlvbiBhdEluZGV4OjJdOworICAgICAgICBbbV9jb252ZXJzaW9uSW52
b2NhdGlvbiBzZXRBcmd1bWVudDptX2J1ZmZlciBhdEluZGV4OjJdOwogICAgICAgICBbbV9jb252
ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDomY29udGV4dCBhdEluZGV4OjNdOwogICAgICAg
ICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBpbnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVlIGNsYXNz
XV07CiAKQEAgLTM4NiwxMCArMzUwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWVJ
bnRlcm5hbFZhbHVlKHZhbHVlKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgTlNJbnZvY2F0aW9u
KiBtX2NvbnZlcnNpb25JbnZvY2F0aW9uOwotICAgIGNoYXIqIG1fYnVmZmVyOwotICAgIGNoYXIq
IG1fYWxsb2NhdGlvbjsKKyAgICBSZXRhaW5QdHI8TlNJbnZvY2F0aW9uPiBtX2NvbnZlcnNpb25J
bnZvY2F0aW9uOworICAgIFN0cnVjdEJ1ZmZlciBtX2J1ZmZlcjsKIH07CiAKIGNsYXNzIFJlc3Vs
dFR5cGVEZWxlZ2F0ZSB7CkBAIC00MzgsNyArNDAwLDcgQEAgcHVibGljOgogICAgICAgICBTdHJp
bmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOwogICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZv
Y2F0aW9uID0gdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvcHkpKQogICAgICAgICAgICAgcmV0
dXJuIG5ldyBDYWxsYmFja1Jlc3VsdFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKLSAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfTsKIApAQCAtNDgyLDI1ICs0
NDQsMjUgQEAgcHJpdmF0ZToKICAgICBXZWFrQ29udGV4dFJlZiBtX2NvbnRleHQ7CiAgICAgQ2Fs
bGJhY2tUeXBlIG1fdHlwZTsKICAgICBDbGFzcyBtX2luc3RhbmNlQ2xhc3M7Ci0gICAgV1RGOjpS
ZXRhaW5QdHI8TlNJbnZvY2F0aW9uPiBtX2ludm9jYXRpb247CisgICAgUmV0YWluUHRyPE5TSW52
b2NhdGlvbj4gbV9pbnZvY2F0aW9uOwogICAgIE93blB0cjxDYWxsYmFja0FyZ3VtZW50PiBtX2Fy
Z3VtZW50czsKICAgICBPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IG1fcmVzdWx0OwogfTsKIAogc3Rh
dGljIHZvaWQgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
CiB7Ci0gICAgZGVsZXRlIChPYmpDQ2FsbGJhY2tGdW5jdGlvbiopSlNPYmplY3RHZXRQcml2YXRl
KG9iamVjdCk7CisgICAgZGVsZXRlIHN0YXRpY19jYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4o
SlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICAvLyBSZXRha2UgdGhlIEFQSSBsb2NrIC0gd2UgbmVlZCB0aGlzIGZv
ciBhIGZldyByZWFzb25zOgotICAgIC8vICgxKSBXZSBkb24ndCB3YW50IHRvIHN1cHBvcnQgdGhl
IEMtQVBJJ3MgY29uZnVzaW5nIGRyb3BzLWxvY2tzLW9uY2UgcG9saWN5IC0gc2hvdWxkIG9ubHkg
ZHJvcCBsb2NrcyBpZiB3ZSBjYW4gZG8gc28gcmVjdXJzaXZleS4KLSAgICAvLyAoMikgV2UncmUg
Y2FsaW5nIHNvbWUgSlNDIGludGVybmFscyB0aGF0IHJlcXVpcmUgdXMgdG8gYmUgb24gdGhlICdp
bnNpZGUnIC0gZS5nLiBjcmVhdGVUeXBlRXJyb3IuCi0gICAgLy8gKDMpIFdlIG5lZWQgdG8gYmUg
bG9ja2VkIChwZXIgY29udGV4dCB3b3VsZCBiZSBmaW5lKSBhZ2FpbnN0IGNvbmZsaWN0aW5nIHVz
Z2FlIG9mIHRoZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbidzIE5TSW52b2NhdGlvbi4KKyAgICAvLyAo
MSkgV2UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IHRoZSBDLUFQSSdzIGNvbmZ1c2luZyBkcm9wcy1s
b2Nrcy1vbmNlIHBvbGljeSAtIHNob3VsZCBvbmx5IGRyb3AgbG9ja3MgaWYgd2UgY2FuIGRvIHNv
IHJlY3Vyc2l2ZWx5LgorICAgIC8vICgyKSBXZSdyZSBjYWxsaW5nIHNvbWUgSlNDIGludGVybmFs
cyB0aGF0IHJlcXVpcmUgdXMgdG8gYmUgb24gdGhlICdpbnNpZGUnIC0gZS5nLiBjcmVhdGVUeXBl
RXJyb3IuCisgICAgLy8gKDMpIFdlIG5lZWQgdG8gYmUgbG9ja2VkIChwZXIgY29udGV4dCB3b3Vs
ZCBiZSBmaW5lKSBhZ2FpbnN0IGNvbmZsaWN0aW5nIHVzYWdlIG9mIHRoZSBPYmpDQ2FsbGJhY2tG
dW5jdGlvbidzIE5TSW52b2NhdGlvbi4KICAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0o
dG9KUyhjYWxsZXJDb250ZXh0KSk7CiAKLSAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJh
Y2sgPSAoT2JqQ0NhbGxiYWNrRnVuY3Rpb24qKUpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbik7
CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdldFByaXZhdGUoZnVuY3Rpb24pKTsKICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBjYWxsYmFjay0+Y29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkg
ewogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNTg5NApAQCAtNTIyLDM5ICs0ODQsNDAgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0Nh
bGxiYWNrRnVuY3Rpb25DYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU0NsYXNz
UmVmIGNyZWF0ZU9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQoreworICAgIEpTQ2xhc3NEZWZp
bml0aW9uIGRlZmluaXRpb247CisgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVt
cHR5OworICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkZ1bmN0aW9uIjsKKyAgICBkZWZpbml0
aW9uLmZpbmFsaXplID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25GaW5hbGl6ZTsKKyAgICBkZWZpbml0
aW9uLmNhbGxBc0Z1bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5jdGlvbjsK
KyAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Cit9CisKIHN0YXRpYyBKU0Ns
YXNzUmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKQogewogICAgIHN0YXRpYyBTcGluTG9j
ayBpbml0TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwogICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tIb2xkZXIoJmluaXRMb2NrKTsKIAotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0g
MDsKLQotICAgIGlmICghY2xhc3NSZWYpIHsKLSAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVm
aW5pdGlvbjsKLSAgICAgICAgZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5Owot
ICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJGdW5jdGlvbiI7Ci0gICAgICAgIGRlZmlu
aXRpb24uZmluYWxpemUgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZpbmFsaXplOwotICAgICAgICBk
ZWZpbml0aW9uLmNhbGxBc0Z1bmN0aW9uID0gb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNGdW5j
dGlvbjsKLSAgICAgICAgY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKLSAg
ICB9Ci0KKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGNyZWF0ZU9iakNDYWxsYmFj
a0Z1bmN0aW9uQ2xhc3MoKTsKICAgICByZXR1cm4gY2xhc3NSZWY7CiB9CiAKIEpTVmFsdWVSZWYg
T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0LCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjdHggPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpOworICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKIAog
ICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50OwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2Fz
ZSBDYWxsYmFja0luc3RhbmNlTWV0aG9kOiB7Ci0gICAgICAgIGlkIHRhcmdldCA9IHRyeVVud3Jh
cE9iamNPYmplY3QoY3R4LCB0aGlzT2JqZWN0KTsKKyAgICAgICAgaWQgdGFyZ2V0ID0gdHJ5VW53
cmFwT2JqY09iamVjdChjb250ZXh0UmVmLCB0aGlzT2JqZWN0KTsKICAgICAgICAgaWYgKCF0YXJn
ZXQgfHwgIVt0YXJnZXQgaXNLaW5kT2ZDbGFzczptX2luc3RhbmNlQ2xhc3NdKSB7Ci0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjdHgpLCAi
c2VsZiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0aXZlLUMgaW5zdGFuY2UgbWV0aG9kIikp
OwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0
UmVmKSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9iamVjdGl2ZS1DIGluc3RhbmNlIG1l
dGhvZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
UmVmKTsKICAgICAgICAgfQogICAgICAgICBbbV9pbnZvY2F0aW9uIHNldFRhcmdldDp0YXJnZXRd
OwogICAgIH0KKyAgICAvLyBmYWxsdGhyb3VnaCAtIGZpcnN0QXJndW1lbnQgZm9yIENhbGxiYWNr
SW5zdGFuY2VNZXRob2QgaXMgYWxzbyAyIQogICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoK
ICAgICAgICAgZmlyc3RBcmd1bWVudCA9IDI7CiAgICAgICAgIGJyZWFrOwpAQCAtNTY0LDEwICs1
MjcsMTAgQEAgSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbChKUwogCiAgICAg
c2l6ZV90IGFyZ3VtZW50TnVtYmVyID0gMDsKICAgICBmb3IgKENhbGxiYWNrQXJndW1lbnQqIGFy
Z3VtZW50ID0gbV9hcmd1bWVudHMuZ2V0KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3VtZW50
LT5tX25leHQuZ2V0KCkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IGFyZ3VtZW50TnVt
YmVyIDwgYXJndW1lbnRDb3VudCA/IGFyZ3VtZW50c1thcmd1bWVudE51bWJlcl0gOiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gYXJndW1lbnRO
dW1iZXIgPCBhcmd1bWVudENvdW50ID8gYXJndW1lbnRzW2FyZ3VtZW50TnVtYmVyXSA6IEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHRSZWYpOwogICAgICAgICBhcmd1bWVudC0+c2V0KG1faW52
b2NhdGlvbi5nZXQoKSwgYXJndW1lbnROdW1iZXIgKyBmaXJzdEFyZ3VtZW50LCBjb250ZXh0LCB2
YWx1ZSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0UmVmKTsKICAgICAgICAgKythcmd1bWVudE51bWJlcjsK
ICAgICB9CiAKQEAgLTU3OCwyNCArNTQxLDE4IEBAIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVu
Y3Rpb246OmNhbGwoSlMKIAogc3RhdGljIGJvb2wgYmxvY2tTaWduYXR1cmVDb250YWluc0NsYXNz
KCkKIHsKLSAgICBlbnVtIENoZWNrUmVzdWx0IHsKLSAgICAgICAgQ2hlY2tSZXN1bHRGYWxzZSwK
LSAgICAgICAgQ2hlY2tSZXN1bHRUcnVlLAotICAgICAgICBDaGVja1Jlc3VsdFVua25vd24KLSAg
ICB9OwotICAgIHN0YXRpYyBlbnVtIENoZWNrUmVzdWx0IGNoZWNrID0gQ2hlY2tSZXN1bHRVbmtu
b3duOwotICAgIGlmIChjaGVjayA9PSBDaGVja1Jlc3VsdFVua25vd24pIHsKKyAgICBzdGF0aWMg
Ym9vbCBjb250YWluc0NsYXNzID0gXnsKICAgICAgICAgaWQgYmxvY2sgPSBeKE5TU3RyaW5nICpz
dHJpbmcpeyByZXR1cm4gc3RyaW5nOyB9OwotICAgICAgICBjaGVjayA9IF9CbG9ja19oYXNfc2ln
bmF0dXJlKGJsb2NrKSAmJiBzdHJzdHIoX0Jsb2NrX3NpZ25hdHVyZShibG9jayksICJOU1N0cmlu
ZyIpID8gQ2hlY2tSZXN1bHRUcnVlIDogQ2hlY2tSZXN1bHRGYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIChib29sKWNoZWNrOworICAgICAgICByZXR1cm4gX0Jsb2NrX2hhc19zaWduYXR1cmUoYmxv
Y2spICYmIHN0cnN0cihfQmxvY2tfc2lnbmF0dXJlKGJsb2NrKSwgIk5TU3RyaW5nIik7CisgICAg
fTsKKyAgICByZXR1cm4gY29udGFpbnNDbGFzczsKIH0KIAogaW5saW5lIGJvb2wgc2tpcE51bWJl
cihjb25zdCBjaGFyKiYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKCFpc2RpZ2l0KCpwb3NpdGlvbikp
CisgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHdoaWxlKGlzZGlnaXQoKisrcG9zaXRpb24pKTsKKyAgICB3aGlsZSAoaXNBU0NJSURp
Z2l0KCorK3Bvc2l0aW9uKSkgeyB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYxMCwxMSAr
NTY3LDE2IEBAIHN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkYKICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6CiAgICAgY2Fz
ZSBDYWxsYmFja0NsYXNzTWV0aG9kOgotICAgICAgICBpZiAoJ0AnICE9ICoocG9zaXRpb24rKykg
fHwgIXNraXBOdW1iZXIocG9zaXRpb24pIHx8ICc6JyAhPSAqKHBvc2l0aW9uKyspIHx8ICFza2lw
TnVtYmVyKHBvc2l0aW9uKSkKKyAgICAgICAgLy8gTWV0aG9kcyBhcmUgcGFzc2VkIHR3byBpbXBs
aWNpdCBhcmd1bWVudHMgLSAoaWQpc2VsZiwgYW5kIHRoZSBzZWxlY3Rvci4KKyAgICAgICAgaWYg
KCdAJyAhPSAqcG9zaXRpb24rKyB8fCAhc2tpcE51bWJlcihwb3NpdGlvbikgfHwgJzonICE9ICpw
b3NpdGlvbisrIHx8ICFza2lwTnVtYmVyKHBvc2l0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsbGJhY2tCbG9jazoKLSAgICAgICAgaWYg
KCgnQCcgIT0gKihwb3NpdGlvbisrKSkgfHwgKCc/JyAhPSAqKHBvc2l0aW9uKyspKSB8fCAhc2tp
cE51bWJlcihwb3NpdGlvbikgfHwgKCFibG9ja1NpZ25hdHVyZUNvbnRhaW5zQ2xhc3MoKSAmJiBz
dHJjaHIocG9zaXRpb24sICdAJykpKQorICAgICAgICAvLyBCbG9ja3MgYXJlIHBhc3NlZCBvbmUg
aW1wbGljaXQgYXJndW1lbnQgLSB0aGUgYmxvY2ssIG9mIHR5cGUgIkA/Ii4KKyAgICAgICAgaWYg
KCgnQCcgIT0gKnBvc2l0aW9uKyspIHx8ICgnPycgIT0gKnBvc2l0aW9uKyspIHx8ICFza2lwTnVt
YmVyKHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIC8vIE9ubHkg
YWxsb3cgYXJndW1lbnRzIG9mIHR5cGUgJ2lkJyBpZiB0aGUgYmxvY2sgc2lnbmF0dXJlIGNvbnRh
aW5zIHRoZSBOUyB0eXBlIGluZm9ybWF0aW9uLgorICAgICAgICBpZiAoKCFibG9ja1NpZ25hdHVy
ZUNvbnRhaW5zQ2xhc3MoKSAmJiBzdHJjaHIocG9zaXRpb24sICdAJykpKQogICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjcxLDcgKzYzMyw3IEBAIGlk
IHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJlZiBjb24KIHsKICAgICBpZiAoIUpTVmFs
dWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgb2JqZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNs
YXNzKCkpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoKE9iakNDYWxsYmFja0Z1
bmN0aW9uKilKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSktPndyYXBwZWRCbG9jaygpOworICAg
IHJldHVybiAoc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihKU09iamVjdEdldFBy
aXZhdGUob2JqZWN0KSkpLT53cmFwcGVkQmxvY2soKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpjUnVudGltZUV4dHJhcy5oCShyZXZpc2lvbiAx
Mzg2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDE2ICs0NiwxNCBAQCBpbmxpbmUgdm9pZCBmb3JFYWNoUHJv
dG9jb2xJbXBsZW1lbnRpbmdQCiAgICAgQVNTRVJUKGNscyk7CiAgICAgQVNTRVJUKHRhcmdldCk7
CiAKLSAgICBXVEY6OlZlY3RvcjxQcm90b2NvbCo+IHdvcmtsaXN0OwotICAgIFdURjo6SGFzaFNl
dDx2b2lkKj4gdmlzaXRlZDsKKyAgICBWZWN0b3I8UHJvdG9jb2wqPiB3b3JrbGlzdDsKKyAgICBI
YXNoU2V0PHZvaWQqPiB2aXNpdGVkOwogCiAgICAgLy8gSW5pdGlhbGx5IGZpbGwgdGhlIHdvcmts
aXN0IHdpdGggdGhlIENsYXNzJ3MgcHJvdG9jb2xzLgogICAgIHVuc2lnbmVkIHByb3RvY29sc0Nv
dW50OwogICAgIFByb3RvY29sKiogcHJvdG9jb2xzID0gY2xhc3NfY29weVByb3RvY29sTGlzdChj
bHMsICZwcm90b2NvbHNDb3VudCk7Ci0gICAgaWYgKHByb3RvY29sc0NvdW50KSB7Ci0gICAgICAg
IHdvcmtsaXN0LmFwcGVuZChwcm90b2NvbHMsIHByb3RvY29sc0NvdW50KTsKLSAgICAgICAgZnJl
ZShwcm90b2NvbHMpOwotICAgIH0KKyAgICB3b3JrbGlzdC5hcHBlbmQocHJvdG9jb2xzLCBwcm90
b2NvbHNDb3VudCk7CisgICAgZnJlZShwcm90b2NvbHMpOwogCiAgICAgd2hpbGUgKCF3b3JrbGlz
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgUHJvdG9jb2wqIHByb3RvY29sID0gd29ya2xpc3QubGFz
dCgpOwpAQCAtNzEsNTIgKzY5LDQ0IEBAIGlubGluZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxl
bWVudGluZ1AKIAogICAgICAgICAvLyBBZGQgaW5jb3Jwb3JhdGVkIHByb3RvY29scyB0byB0aGUg
d29ya2xpc3QuCiAgICAgICAgIHByb3RvY29scyA9IHByb3RvY29sX2NvcHlQcm90b2NvbExpc3Qo
cHJvdG9jb2wsICZwcm90b2NvbHNDb3VudCk7Ci0gICAgICAgIGlmIChwcm90b2NvbHNDb3VudCkg
ewotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHByb3RvY29scywgcHJvdG9jb2xzQ291bnQp
OwotICAgICAgICAgICAgZnJlZShwcm90b2NvbHMpOwotICAgICAgICB9CisgICAgICAgIHdvcmts
aXN0LmFwcGVuZChwcm90b2NvbHMsIHByb3RvY29sc0NvdW50KTsKKyAgICAgICAgZnJlZShwcm90
b2NvbHMpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgZm9yRWFjaE1ldGhvZEluQ2xhc3MoQ2xh
c3MgY2xzLCB2b2lkICheY2FsbGJhY2spKE1ldGhvZCBtZXRob2QpKQoraW5saW5lIHZvaWQgZm9y
RWFjaE1ldGhvZEluQ2xhc3MoQ2xhc3MgY2xzLCB2b2lkICheY2FsbGJhY2spKE1ldGhvZCkpCiB7
CiAgICAgdW5zaWduZWQgY291bnQ7CiAgICAgTWV0aG9kKiBtZXRob2RzID0gY2xhc3NfY29weU1l
dGhvZExpc3QoY2xzLCAmY291bnQpOwotICAgIGlmIChjb3VudCkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxiYWNrKG1ldGhv
ZHNbaV0pOwotICAgICAgICBmcmVlKG1ldGhvZHMpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgY2FsbGJhY2sobWV0aG9kc1tpXSk7Cisg
ICAgZnJlZShtZXRob2RzKTsKIH0KIAogaW5saW5lIHZvaWQgZm9yRWFjaE1ldGhvZEluUHJvdG9j
b2woUHJvdG9jb2wqIHByb3RvY29sLCBCT09MIGlzUmVxdWlyZWRNZXRob2QsIEJPT0wgaXNJbnN0
YW5jZU1ldGhvZCwgdm9pZCAoXmNhbGxiYWNrKShTRUwsIGNvbnN0IGNoYXIqKSkKIHsKICAgICB1
bnNpZ25lZCBjb3VudDsKICAgICBzdHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3JpcHRpb24qIG1ldGhv
ZHMgPSBwcm90b2NvbF9jb3B5TWV0aG9kRGVzY3JpcHRpb25MaXN0KHByb3RvY29sLCBpc1JlcXVp
cmVkTWV0aG9kLCBpc0luc3RhbmNlTWV0aG9kLCAmY291bnQpOwotICAgIGlmIChjb3VudCkgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAg
IGNhbGxiYWNrKG1ldGhvZHNbaV0ubmFtZSwgbWV0aG9kc1tpXS50eXBlcyk7Ci0gICAgICAgIGZy
ZWUobWV0aG9kcyk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICBjYWxsYmFjayhtZXRob2RzW2ldLm5hbWUsIG1ldGhvZHNbaV0udHlwZXMp
OworICAgIGZyZWUobWV0aG9kcyk7CiB9CiAKIGlubGluZSB2b2lkIGZvckVhY2hQcm9wZXJ0eUlu
UHJvdG9jb2woUHJvdG9jb2wqIHByb3RvY29sLCB2b2lkICheY2FsbGJhY2spKG9iamNfcHJvcGVy
dHlfdCkpCiB7CiAgICAgdW5zaWduZWQgY291bnQ7CiAgICAgb2JqY19wcm9wZXJ0eV90KiBwcm9w
ZXJ0aWVzID0gcHJvdG9jb2xfY29weVByb3BlcnR5TGlzdChwcm90b2NvbCwgJmNvdW50KTsKLSAg
ICBpZiAoY291bnQpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgZnJlZShw
cm9wZXJ0aWVzKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgIGNhbGxiYWNrKHByb3BlcnRpZXNbaV0pOworICAgIGZyZWUocHJvcGVydGll
cyk7CiB9CiAKIHRlbXBsYXRlPGNoYXIgb3BlbiwgY2hhciBjbG9zZT4KIHZvaWQgc2tpcFBhaXIo
Y29uc3QgY2hhciomIHBvc2l0aW9uKQogewotICAgIE5TVUludGVnZXIgY291bnQgPSAxOworICAg
IHNpemVfdCBjb3VudCA9IDE7CiAgICAgZG8gewotICAgICAgICBjaGFyIGMgPSAqKHBvc2l0aW9u
KyspOworICAgICAgICBjaGFyIGMgPSAqcG9zaXRpb24rKzsKICAgICAgICAgaWYgKCFjKQogICAg
ICAgICAgICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpOU0ludGVybmFs
SW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiByZWFzb246QCJNYWxmb3JtZWQgdHlwZSBlbmNvZGluZyIg
dXNlckluZm86bmlsXTsKICAgICAgICAgaWYgKGMgPT0gb3BlbikKQEAgLTEyNywyMiArMTE3LDQz
IEBAIHZvaWQgc2tpcFBhaXIoY29uc3QgY2hhciomIHBvc2l0aW9uKQogfQogCiBjbGFzcyBTdHJp
bmdSYW5nZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nUmFuZ2UpOwogcHVibGlj
OgogICAgIFN0cmluZ1JhbmdlKGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpIDog
bV9wdHIoc3RybmR1cChiZWdpbiwgZW5kIC0gYmVnaW4pKSB7IH0KICAgICB+U3RyaW5nUmFuZ2Uo
KSB7IGZyZWUobV9wdHIpOyB9Ci0gICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSB7IHJldHVybiBt
X3B0cjsgfQotICAgIGNvbnN0IGNoYXIqIGdldCgpIHsgcmV0dXJuIG1fcHRyOyB9CisgICAgb3Bl
cmF0b3IgY29uc3QgY2hhciooKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorICAgIGNvbnN0IGNo
YXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAKIHByaXZhdGU6CiAgICAgY2hhciog
bV9wdHI7CiB9OwogCitjbGFzcyBTdHJ1Y3RCdWZmZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFN0cnVjdEJ1ZmZlcik7CitwdWJsaWM6CisgICAgU3RydWN0QnVmZmVyKGNvbnN0IGNoYXIq
IGVuY29kZWRUeXBlKQorICAgIHsKKyAgICAgICAgTlNVSW50ZWdlciBzaXplLCBhbGlnbm1lbnQ7
CisgICAgICAgIE5TR2V0U2l6ZUFuZEFsaWdubWVudChlbmNvZGVkVHlwZSwgJnNpemUsICZhbGln
bm1lbnQpOworICAgICAgICAtLWFsaWdubWVudDsKKyAgICAgICAgbV9hbGxvY2F0aW9uID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzaXplICsgYWxpZ25tZW50KSk7CisgICAgICAgIG1fYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KG1fYWxsb2NhdGlvbikgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudCk7CisgICAgfQorCisgICAg
flN0cnVjdEJ1ZmZlcigpIHsgZnJlZShtX2FsbG9jYXRpb24pOyB9CisgICAgb3BlcmF0b3Igdm9p
ZCooKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQorCitwcml2YXRlOgorICAgIHZvaWQqIG1f
YWxsb2NhdGlvbjsKKyAgICB2b2lkKiBtX2J1ZmZlcjsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1l
IERlbGVnYXRlVHlwZT4KIHR5cGVuYW1lIERlbGVnYXRlVHlwZTo6UmVzdWx0VHlwZSBwYXJzZU9i
akNUeXBlKGNvbnN0IGNoYXIqJiBwb3NpdGlvbikKIHsKICAgICBBU1NFUlQoKnBvc2l0aW9uKTsK
IAotICAgIHN3aXRjaCAoKihwb3NpdGlvbisrKSkgeworICAgIHN3aXRjaCAoKnBvc2l0aW9uKysp
IHsKICAgICBjYXNlICdjJzoKICAgICAgICAgcmV0dXJuIERlbGVnYXRlVHlwZTo6dGVtcGxhdGUg
dHlwZUludGVnZXI8Y2hhcj4oKTsKICAgICBjYXNlICdpJzoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAxMzg2NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBzdGF0aWMgZG91YmxlIG5hbihjb25zdCBjaGFyKikKIAogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAogdm9pZCB0ZXN0T2JqZWN0
aXZlQ0FQSSh2b2lkKTsKICNlbmRpZgogCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgIDo6U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAogICAgIHRlc3RPYmpl
Y3RpdmVDQVBJKCk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLm0JKHJldmlzaW9uIDEzODY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTcgKzEyNCwxMSBA
QCBzdGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpCiAKIHN0YXRpYyBib29s
IGJsb2NrU2lnbmF0dXJlQ29udGFpbnNDbGFzcygpCiB7Ci0gICAgZW51bSBDaGVja1Jlc3VsdCB7
Ci0gICAgICAgIENoZWNrUmVzdWx0RmFsc2UsCi0gICAgICAgIENoZWNrUmVzdWx0VHJ1ZSwKLSAg
ICAgICAgQ2hlY2tSZXN1bHRVbmtub3duCi0gICAgfTsKLSAgICBzdGF0aWMgZW51bSBDaGVja1Jl
c3VsdCBjaGVjayA9IENoZWNrUmVzdWx0VW5rbm93bjsKLSAgICBpZiAoY2hlY2sgPT0gQ2hlY2tS
ZXN1bHRVbmtub3duKSB7CisgICAgc3RhdGljIGJvb2wgY29udGFpbnNDbGFzcyA9IChib29sKV57
CiAgICAgICAgIGlkIGJsb2NrID0gXihOU1N0cmluZyAqc3RyaW5nKXsgcmV0dXJuIHN0cmluZzsg
fTsKLSAgICAgICAgY2hlY2sgPSBfQmxvY2tfaGFzX3NpZ25hdHVyZShibG9jaykgJiYgc3Ryc3Ry
KF9CbG9ja19zaWduYXR1cmUoYmxvY2spLCAiTlNTdHJpbmciKSA/IENoZWNrUmVzdWx0VHJ1ZSA6
IENoZWNrUmVzdWx0RmFsc2U7Ci0gICAgfQotICAgIHJldHVybiAoYm9vbCljaGVjazsKKyAgICAg
ICAgcmV0dXJuIF9CbG9ja19oYXNfc2lnbmF0dXJlKGJsb2NrKSAmJiBzdHJzdHIoX0Jsb2NrX3Np
Z25hdHVyZShibG9jayksICJOU1N0cmluZyIpOworICAgIH07CisgICAgcmV0dXJuIGNvbnRhaW5z
Q2xhc3M7CiB9CiAKIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQpAQCAtMTQ0LDcgKzEzOCw3IEBA
IHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCIyICsgMiJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIjIgKyAyIiwgW3Jlc3VsdCB0b0ludDMy
XSA9PSA0KTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIyICsgMiIsIFtyZXN1bHQgaXNOdW1iZXJd
ICYmIFtyZXN1bHQgdG9JbnQzMl0gPT0gNCk7CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CkBAIC0xNTcsMTIgKzE1MSwxMyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAg
ICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CiAgICAgICAgIGNvbnRleHRbQCJtZXNzYWdlIl0gPSBAIkhlbGxvIjsKICAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJtZXNzYWdlICsgJywg
V29ybGQhJyJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIkhlbGxvLCBXb3JsZCEiLCBbW3Jlc3Vs
dCB0b1N0cmluZ10gaXNFcXVhbDpAIkhlbGxvLCBXb3JsZCEiXSk7CisgICAgICAgIGNoZWNrUmVz
dWx0KEAiSGVsbG8sIFdvcmxkISIsIFtyZXN1bHQgaXNTdHJpbmddICYmIFtyZXN1bHQgaXNFcXVh
bFRvT2JqZWN0OkAiSGVsbG8sIFdvcmxkISJdKTsKICAgICB9CiAKICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiKHsgeDo0MiB9KSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIih7IHg6
NDIgfSkiLCBbcmVzdWx0IGlzT2JqZWN0XSAmJiBbcmVzdWx0W0AieCJdIGlzRXF1YWxUb09iamVj
dDpANDJdKTsKICAgICAgICAgaWQgb2JqID0gW3Jlc3VsdCB0b09iamVjdF07CiAgICAgICAgIGNo
ZWNrUmVzdWx0KEAiQ2hlY2sgZGljdGlvbmFyeSBsaXRlcmFsIiwgW29iaiBpc0tpbmRPZkNsYXNz
OltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CiAgICAgICAgIGlkIG51bSA9IChOU0RpY3Rpb25hcnkq
KW9ialtAIngiXTsKQEAgLTIxOCw3ICsyMTMsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkK
ICAgICAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJy
b3JGcm9tTWVzc2FnZTpAIlNvbWV0aGluZyB3ZW50IHdyb25nLiIgaW5Db250ZXh0OmNvbnRleHRd
OwogICAgICAgICB9OwogICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAInZhciByZXN1bHQ7IHRyeSB7IGNhbGxiYWNrKCk7IH0gY2F0Y2ggKGUpIHsgcmVz
dWx0ID0gJ0NhdWdodCBleGNlcHRpb24nOyB9Il07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiRXhw
bGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0IGJ5IEphdmFTY3JpcHQiLCBbW3Jl
c3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIkNhdWdodCBleGNlcHRpb24iXSk7CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSB3YXMgY2F1Z2h0IGJ5IEph
dmFTY3JpcHQiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIkNhdWdodCBleGNlcHRpb24iXSk7
CiAgICAgICAgIGNoZWNrUmVzdWx0KEAiRXhwbGljaXQgdGhyb3cgaW4gY2FsbGJhY2sgLSBub3Qg
dGhyb3duIHRvIE9iamVjdGl2ZS1DIiwgIWNvbnRleHQuZXhjZXB0aW9uKTsKICAgICB9CiAKQEAg
LTIyOSw3ICsyMjQsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAgICAgICAgIFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIUAjJCVeJiooKSBUSElTIElTIE5PVCBWQUxJRCBKQVZB
U0NSSVBUIFNZTlRBWCAhQCMkJV4mKigpIl07CiAgICAgICAgIH07CiAgICAgICAgIEpTVmFsdWUg
KnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdDsgdHJ5IHsgY2Fs
bGJhY2soKTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlvbic7IH0iXTsK
LSAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJvdyBpbiBjYWxsYmFjayAtIHdhcyBj
YXVnaHQgYnkgSmF2YVNjcmlwdCIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiQ2F1Z2h0
IGV4Y2VwdGlvbiJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNpdCB0aHJvdyBpbiBj
YWxsYmFjayAtIHdhcyBjYXVnaHQgYnkgSmF2YVNjcmlwdCIsIFtyZXN1bHQgaXNFcXVhbFRvT2Jq
ZWN0OkAiQ2F1Z2h0IGV4Y2VwdGlvbiJdKTsKICAgICAgICAgY2hlY2tSZXN1bHQoQCJJbXBsaWNp
dCB0aHJvdyBpbiBjYWxsYmFjayAtIG5vdCB0aHJvd24gdG8gT2JqZWN0aXZlLUMiLCAhY29udGV4
dC5leGNlcHRpb24pOwogICAgIH0KIApAQCAtMjU4LDcgKzI1Myw3IEBAIHZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IFwKICAgICAgICAgICAg
IH0pIl07CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFttdWxBZGRGdW5jdGlvbiBjYWxsV2l0
aEFyZ3VtZW50czpAWyBAWyBAMiwgQDQsIEA4IF0sIEB7IEAieCI6QDAuNSwgQCJ5IjpANDIgfSBd
XTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJtdWxBZGRGdW5jdGlvbiIsIFtbcmVzdWx0IHRvU3Ry
aW5nXSBpc0VxdWFsOkAiNDMsNDQsNDYiXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibXVsQWRk
RnVuY3Rpb24iLCBbcmVzdWx0IGlzT2JqZWN0XSAmJiBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVh
bDpAIjQzLDQ0LDQ2Il0pOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewpAQCAtMjg4
LDcgKzI4Myw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAInRlc3RYWVoudGVzdCgndGVzdCcpIl07CiAgICAgICAgIGNoZWNrUmVz
dWx0KEAiVGV4dFhZWiAtIHRlc3RYWVpUZXN0ZWQiLCB0ZXN0WFlaVGVzdGVkKTsKICAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0ZXN0WFlaLnggKyAn
LCcgKyB0ZXN0WFlaLnkgKyAnLCcgKyB0ZXN0WFlaLnoiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQo
QCJUZXh0WFlaIC0gcmVzdWx0IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCIxMyw0LHVu
ZGVmaW5lZCJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJUZXh0WFlaIC0gcmVzdWx0IiwgW3Jl
c3VsdCBpc0VxdWFsVG9PYmplY3Q6QCIxMyw0LHVuZGVmaW5lZCJdKTsKICAgICB9CiAKICAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKQEAgLTMyMSw4ICszMTYsOSBAQCB2b2lkIHRlc3RPYmplY3RpdmVD
QVBJKCkKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgICAgIGNvbnRl
eHRbQCJmb28iXSA9IEBZRVM7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiQFlFUyBpcyBib29sZWFu
IiwgW2NvbnRleHRbQCJmb28iXSBpc0Jvb2xlYW5dKTsKICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJ0eXBlb2YgZm9vIl07Ci0gICAgICAgIGNoZWNr
UmVzdWx0KEAiQFlFUyBpcyBib29sZWFuIiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJi
b29sZWFuIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIkBZRVMgaXMgYm9vbGVhbiIsIFtyZXN1
bHQgaXNFcXVhbFRvT2JqZWN0OkAiYm9vbGVhbiJdKTsKICAgICB9CiAKICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKQEAgLTMzMCw3ICszMjYsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAg
ICAgICAgVGVzdE9iamVjdCogdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwog
ICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsKICAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJTdHJpbmcodGVzdE9iamVj
dCkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcodGVzdE9iamVjdCkiLCBbW3Jlc3Vs
dCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdF0iXSk7CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCBpc0VxdWFsVG9PYmplY3Q6
QCJbb2JqZWN0IFRlc3RPYmplY3RdIl0pOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewpAQCAtMzM4LDE0ICszMzQsMTQgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAg
IFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKICAgICAg
ICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CiAgICAgICAgIEpTVmFsdWUg
KnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5nKHRlc3RPYmplY3QuX19w
cm90b19fKSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyh0ZXN0T2JqZWN0Ll9fcHJv
dG9fXykiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIltvYmplY3QgVGVzdE9iamVjdFBy
b3RvdHlwZV0iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKHRlc3RPYmplY3QuX19w
cm90b19fKSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiW29iamVjdCBUZXN0T2JqZWN0UHJv
dG90eXBlXSJdKTsKICAgICB9CiAKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
CiAgICAgICAgIGNvbnRleHRbQCJUZXN0T2JqZWN0Il0gPSBbVGVzdE9iamVjdCBjbGFzc107CiAg
ICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiU3RyaW5n
KFRlc3RPYmplY3QpIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKFRlc3RPYmplY3Qp
IiwgW1tyZXN1bHQgdG9TdHJpbmddIGlzRXF1YWw6QCJbb2JqZWN0IFRlc3RPYmplY3RDb25zdHJ1
Y3Rvcl0iXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU3RyaW5nKFRlc3RPYmplY3QpIiwgW3Jl
c3VsdCBpc0VxdWFsVG9PYmplY3Q6QCJbb2JqZWN0IFRlc3RPYmplY3RDb25zdHJ1Y3Rvcl0iXSk7
CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBAIC0zNjcsNyArMzYzLDcgQEAgdm9p
ZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0QSJdID0g
dGVzdE9iamVjdDsKICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3RCIl0gPSB0ZXN0T2JqZWN0
OwogICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInRl
c3RPYmplY3RBID09IHRlc3RPYmplY3RCIl07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAidGVzdE9i
amVjdEEgPT0gdGVzdE9iamVjdEIiLCBbcmVzdWx0IHRvQm9vbF0pOworICAgICAgICBjaGVja1Jl
c3VsdChAInRlc3RPYmplY3RBID09IHRlc3RPYmplY3RCIiwgW3Jlc3VsdCBpc0Jvb2xlYW5dICYm
IFtyZXN1bHQgdG9Cb29sXSk7CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBAIC0z
NzYsNyArMzcyLDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIGNvbnRleHRb
QCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwogICAgICAgICB0ZXN0T2JqZWN0LnBvaW50ID0g
KENHUG9pbnQpezMsNH07CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAidmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHRlc3RPYmplY3QucG9pbnQp
OyB0ZXN0T2JqZWN0LnBvaW50ID0ge3g6MTIseToxNH07IHJlc3VsdCJdOwotICAgICAgICBjaGVj
a1Jlc3VsdChAInRlc3RPYmplY3QucG9pbnQgLSByZXN1bHQiLCBbW3Jlc3VsdCB0b1N0cmluZ10g
aXNFcXVhbDpAIntcInhcIjozLFwieVwiOjR9Il0pOworICAgICAgICBjaGVja1Jlc3VsdChAInRl
c3RPYmplY3QucG9pbnQgLSByZXN1bHQiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIntcInhc
IjozLFwieVwiOjR9Il0pOwogICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QucG9pbnQg
LSB7eDoxMix5OjE0fSIsIHRlc3RPYmplY3QucG9pbnQueCA9PSAxMiAmJiB0ZXN0T2JqZWN0LnBv
aW50LnkgPT0gMTQpOwogICAgIH0KIApAQCAtMzg3LDcgKzM4Myw3IEBAIHZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQogICAgICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVzdE9iamVjdDsK
ICAgICAgICAgY29udGV4dFtAIm11bCJdID0gXihpbnQgeCwgaW50IHkpeyByZXR1cm4geCAqIHk7
IH07CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
bXVsKHRlc3RPYmplY3Quc2l4LCA3KSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIm11bCh0ZXN0
T2JqZWN0LnNpeCwgNykiLCBbcmVzdWx0IHRvSW50MzJdID09IDQyKTsKKyAgICAgICAgY2hlY2tS
ZXN1bHQoQCJtdWwodGVzdE9iamVjdC5zaXgsIDcpIiwgW3Jlc3VsdCBpc051bWJlcl0gJiYgW3Jl
c3VsdCB0b0ludDMyXSA9PSA0Mik7CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBA
IC00MDMsMTQgKzM5OSwxNCBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tbSlNDb250ZXh0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
CiAgICAgICAgIGNvbnRleHRbQCJwb2ludCJdID0gQHsgQCJ4IjpANiwgQCJ5IjpANyB9OwogICAg
ICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAInBvaW50Lngg
KyAnLCcgKyBwb2ludC55Il07Ci0gICAgICAgIGNoZWNrUmVzdWx0KEAicG9pbnQueCArICcsJyAr
IHBvaW50LnkiLCBbW3Jlc3VsdCB0b1N0cmluZ10gaXNFcXVhbDpAIjYsNyJdKTsKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJwb2ludC54ICsgJywnICsgcG9pbnQueSIsIFtyZXN1bHQgaXNFcXVhbFRv
T2JqZWN0OkAiNiw3Il0pOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKICAgICAgICAgY29udGV4dFtAInBvaW50Il0gPSBAeyBAIngiOkA2LCBAInkiOkA3IH07
CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAicG9p
bnQueCArICcsJyArIHBvaW50LnkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJwb2ludC54ICsg
JywnICsgcG9pbnQueSIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsOkAiNiw3Il0pOworICAg
ICAgICBjaGVja1Jlc3VsdChAInBvaW50LnggKyAnLCcgKyBwb2ludC55IiwgW3Jlc3VsdCBpc0Vx
dWFsVG9PYmplY3Q6QCI2LDciXSk7CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBA
IC00MTgsNyArNDE0LDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIFRlc3RP
YmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKICAgICAgICAgY29u
dGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CiAgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAidGVzdE9iamVjdC5nZXRTdHJpbmcoKSJdOwot
ICAgICAgICBjaGVja1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nKCkiLCBbcmVzdWx0IHRv
SW50MzJdID09IDQyKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0cmlu
ZygpIiwgW3Jlc3VsdCBpc1N0cmluZ10gJiYgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CiAgICAg
fQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBAIC00MzQsNyArNDMwLDcgQEAgdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIFRlc3RPYmplY3QqIHRlc3RPYmplY3QgPSBbVGVzdE9i
amVjdCB0ZXN0T2JqZWN0XTsKICAgICAgICAgY29udGV4dFtAInRlc3RPYmplY3QiXSA9IHRlc3RP
YmplY3Q7CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAidGVzdE9iamVjdC5nZXRTdHJpbmcuY2FsbCh0ZXN0T2JqZWN0KSJdOwotICAgICAgICBjaGVj
a1Jlc3VsdChAInRlc3RPYmplY3QuZ2V0U3RyaW5nLmNhbGwodGVzdE9iamVjdCkiLCBbcmVzdWx0
IHRvSW50MzJdID09IDQyKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXN0T2JqZWN0LmdldFN0
cmluZy5jYWxsKHRlc3RPYmplY3QpIiwgW3Jlc3VsdCBpc1N0cmluZ10gJiYgW3Jlc3VsdCB0b0lu
dDMyXSA9PSA0Mik7CiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CkBAIC00NTEsNyAr
NDQ3LDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIFRlc3RPYmplY3QqIHRl
c3RPYmplY3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKICAgICAgICAgY29udGV4dFtAInRl
c3RPYmplY3QiXSA9IHRlc3RPYmplY3Q7CiAgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAidmFyIHJlc3VsdCA9IDA7IHRlc3RPYmplY3QuY2FsbGJhY2so
ZnVuY3Rpb24oeCl7IHJlc3VsdCA9IHg7IH0pOyByZXN1bHQiXTsKLSAgICAgICAgY2hlY2tSZXN1
bHQoQCJ0ZXN0T2JqZWN0LmNhbGxiYWNrIiwgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAg
ICAgIGNoZWNrUmVzdWx0KEAidGVzdE9iamVjdC5jYWxsYmFjayIsIFtyZXN1bHQgaXNOdW1iZXJd
ICYmIFtyZXN1bHQgdG9JbnQzMl0gPT0gNDIpOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBv
b2wgewo=
</data>
<flag name="review"
          id="198572"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181117</attachid>
            <date>2013-01-02 17:26:19 -0800</date>
            <delta_ts>2013-01-02 17:35:47 -0800</delta_ts>
            <desc>Darin review feedback part 2</desc>
            <filename>105889.Darin.2.patch</filename>
            <type>text/plain</type>
            <size>67777</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBA
QAorMjAxMy0wMS0wMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGZvciBKYXZhU2NyaXB0Q29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXMgZm9yIG1vcmUgaXNz
dWVzIHJhaXNlZCBieSBEYXJpbi4KKworICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5tbToK
KyAgICAgICAgKEJsb2NrQXJndW1lbnQpOgorICAgICAgICAoQmxvY2tBcmd1bWVudFN0cnVjdDo6
QmxvY2tBcmd1bWVudFN0cnVjdCk6CisgICAgICAgIChCbG9ja0FyZ3VtZW50VHlwZURlbGVnYXRl
Ojp0eXBlU3RydWN0KToKKyAgICAgICAgKEJsb2NrUmVzdWx0KToKKyAgICAgICAgKEJsb2NrUmVz
dWx0U3RydWN0OjpCbG9ja1Jlc3VsdFN0cnVjdCk6CisgICAgICAgIChidWlsZEJsb2NrU2lnbmF0
dXJlKToKKyAgICAgICAgKC1bSlNCbG9ja0FkYXB0b3IgaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZy
b21Qcm90b2NvbDpdKToKKyAgICAgICAgKC1bSlNCbG9ja0FkYXB0b3IgYmxvY2tGcm9tVmFsdWU6
aW5Db250ZXh0OndpdGhFeGNlcHRpb246XSk6CisgICAgICAgICAgICAtIGZpeCAqIHBvc2l0aW9u
IGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgICAgIC0gZml4ICogcG9zaXRpb24gZm9yIE9iamVjdGl2ZS1DIHR5cGVzCisgICAgICAgICog
QVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlNDb250ZXh0IGluaXRXaXRoVmlydHVhbE1h
Y2hpbmU6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB2aXJ0dWFsTWFjaGluZV0pOgorICAgICAg
ICAoY29udGV4dEludGVybmFsQ29udGV4dCk6CisgICAgICAgICAgICAtIGZpeCAqIHBvc2l0aW9u
IGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAoLVtKU0NvbnRleHQgZGVhbGxvY10pOgor
ICAgICAgICAoLVtKU0NvbnRleHQgcHJvdGVjdDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHVu
cHJvdGVjdDpdKToKKyAgICAgICAgICAgIC0gSGFzaE1hcDxKU1ZhbHVlUmVmLCBzaXplX3Q+IC0+
IEhhc2hDb3VudGVkU2V0PEpTVmFsdWVSZWY+CisgICAgICAgICogQVBJL0pTQ29udGV4dEludGVy
bmFsLmg6CisgICAgICAgIChXZWFrQ29udGV4dFJlZik6CisgICAgICAgICAgICAtIGZpeCAqIHBv
c2l0aW9uIGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOgor
ICAgICAgICAodmFsdWVUb1N0cmluZyk6CisgICAgICAgICAgICAtIGZpeCAqIHBvc2l0aW9uIGZv
ciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAoaXNOU0Jvb2xlYW4pOgorICAgICAgICAgICAg
LSBBZGRlZCBoZWxwZXIgdG8gY2hlY2sgZm9yIGJvb2xlYW5zLgorICAgICAgICAob2JqZWN0VG9W
YWx1ZVdpdGhvdXRDb3B5KToKKyAgICAgICAgICAgIC0gQWRkZWQgY29udGV4dFJlZgorICAgICAg
ICAgICAgLSBmaXggKiBwb3NpdGlvbiBmb3IgT2JqZWN0aXZlLUMgdHlwZXMKKyAgICAgICAgICAg
IC0gUmVtb3ZlIEBZRVMsIEBOTyBsaXRlcmFsIHVzYWdlLCB1c2UgaXNOU0Jvb2xlYW4gaW5zdGVh
ZAorICAgICAgICAob2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICAgICAtIEFkZGVkIGNvbnRleHRS
ZWYKKyAgICAgICAgKCtbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTppbkNvbnRleHQ6XSk6CisgICAg
ICAgICgtW0pTVmFsdWUgaW5pdFdpdGhWYWx1ZTppbkNvbnRleHQ6XSk6CisgICAgICAgICAgICAt
IGZpeCAqIHBvc2l0aW9uIGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAoY3JlYXRlU3Ry
dWN0SGFuZGxlck1hcCk6CisgICAgICAgIChoYW5kZXJGb3JTdHJ1Y3RUYWcpOgorICAgICAgICAg
ICAgLSBnZXRTdHJ1Y3RUYWdIYW5kbGVyIC0+IGhhbmRlckZvclN0cnVjdFRhZworICAgICAgICAg
ICAgLSBTcGxpdCBvdXQgY3JlYXRlU3RydWN0SGFuZGxlck1hcAorICAgICAgICAgICAgLSBzdHJu
Y21wIC0+IG1lbWNtcAorICAgICAgICAgICAgLSBTdHJpbmcodHlwZSkuaW1wbCgpIC0+IFN0cmlu
Z0ltcGw6OmNyZWF0ZSh0eXBlKQorICAgICAgICAoK1tKU1ZhbHVlIHNlbGVjdG9yRm9yU3RydWN0
VG9WYWx1ZTpdKToKKyAgICAgICAgKCtbSlNWYWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6
XSk6CisgICAgICAgICAgICAtIGdldFN0cnVjdFRhZ0hhbmRsZXIgLT4gaGFuZGVyRm9yU3RydWN0
VGFnCisgICAgICAgICh0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IpOgorICAgICAgICAodmFsdWVU
b1R5cGVJbnZvY2F0aW9uRm9yKToKKyAgICAgICAgICAgIC0gZml4ICogcG9zaXRpb24gZm9yIE9i
amVjdGl2ZS1DIHR5cGVzCisgICAgICAgICogQVBJL0pTVmFsdWVJbnRlcm5hbC5oOgorICAgICAg
ICAgICAgLSBmaXggKiBwb3NpdGlvbiBmb3IgT2JqZWN0aXZlLUMgdHlwZXMKKyAgICAgICAgKiBB
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6CisgICAgICAgICAgICAtIGZpeCAqIHBvc2l0
aW9uIGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAqIEFQSS9KU1dyYXBwZXJNYXAuaDoK
KyAgICAgICAgICAgIC0gZml4ICogcG9zaXRpb24gZm9yIE9iamVjdGl2ZS1DIHR5cGVzCisgICAg
ICAgICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKHNlbGVjdG9yVG9Qcm9wZXJ0eU5h
bWUpOgorICAgICAgICAoY3JlYXRlT2JqZWN0V2l0aEN1c3RvbUJyYW5kKToKKyAgICAgICAgKGNy
ZWF0ZVJlbmFtZU1hcCk6CisgICAgICAgIChwdXROb25FbnVtZXJhYmxlKToKKyAgICAgICAgKGNv
cHlNZXRob2RzVG9PYmplY3QpOgorICAgICAgICAoY29weVByb3RvdHlwZVByb3BlcnRpZXMpOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0OmZvckNsYXNzOnN1cGVy
Q2xhc3NJbmZvOl0pOgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgaW5pdFdpdGhDb250ZXh0Ol0p
OgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgd3JhcHBlckZvck9iamVjdDpdKToKKyAgICAgICAg
KGdldEpTRXhwb3J0UHJvdG9jb2wpOgorICAgICAgICAgICAgLSBmaXggKiBwb3NpdGlvbiBmb3Ig
T2JqZWN0aXZlLUMgdHlwZXMKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaDoK
KyAgICAgICAgICAgIC0gZml4ICogcG9zaXRpb24gZm9yIE9iamVjdGl2ZS1DIHR5cGVzCisgICAg
ICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgorICAgICAgICAoQ2FsbGJhY2tBcmd1
bWVudCk6CisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50U3RydWN0OjpDYWxsYmFja0FyZ3VtZW50
U3RydWN0KToKKyAgICAgICAgICAgIC0gZml4ICogcG9zaXRpb24gZm9yIE9iamVjdGl2ZS1DIHR5
cGVzCisgICAgICAgIChDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjazo6Y3JlYXRlQWRvcHRp
bmdKU0Jsb2NrQWRhcHRvcik6CisgICAgICAgICAgICAtIEFkZGVkIHRvIG1ha2UgYWRvcHQgZXhw
bGljaXQKKyAgICAgICAgKENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKToKKyAgICAgICAg
KENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrOjpDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxs
YmFjayk6CisgICAgICAgIChBcmd1bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZUJsb2NrKToKKyAgICAg
ICAgICAgIC0gQ2FsbCBjcmVhdGVBZG9wdGluZ0pTQmxvY2tBZGFwdG9yCisgICAgICAgIChBcmd1
bWVudFR5cGVEZWxlZ2F0ZTo6dHlwZVN0cnVjdCk6CisgICAgICAgIChDYWxsYmFja1Jlc3VsdCk6
CisgICAgICAgIChDYWxsYmFja1Jlc3VsdFN0cnVjdDo6Q2FsbGJhY2tSZXN1bHRTdHJ1Y3QpOgor
ICAgICAgICAoUmVzdWx0VHlwZURlbGVnYXRlOjp0eXBlU3RydWN0KToKKyAgICAgICAgKE9iakND
YWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbik6CisgICAgICAgIChPYmpDQ2Fs
bGJhY2tGdW5jdGlvbjo6Y29udGV4dCk6CisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5jdGlvbkZv
ckludm9jYXRpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QpOgor
ICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayk6CisgICAgICAgICAgICAtIGZp
eCAqIHBvc2l0aW9uIGZvciBPYmplY3RpdmUtQyB0eXBlcworICAgICAgICAqIEFQSS9PYmpjUnVu
dGltZUV4dHJhcy5oOgorICAgICAgICAocHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2wpOgorICAg
ICAgICAoZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2wpOgorICAgICAgICAoZm9y
RWFjaE1ldGhvZEluUHJvdG9jb2wpOgorICAgICAgICAoZm9yRWFjaFByb3BlcnR5SW5Qcm90b2Nv
bCk6CisgICAgICAgICAgICAtIGZpeCAqIHBvc2l0aW9uIGZvciBPYmplY3RpdmUtQyB0eXBlcwor
ICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm06CisgICAgICAgICgtW1Rlc3RPYmplY3QgdGVz
dEFyZ3VtZW50VHlwZXNXaXRoSW50OmRvdWJsZTpib29sZWFuOnN0cmluZzpudW1iZXI6YXJyYXk6
ZGljdGlvbmFyeTpdKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgICAg
IC0gZml4ICogcG9zaXRpb24gZm9yIE9iamVjdGl2ZS1DIHR5cGVzCisKIDIwMTMtMDEtMDIgIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIHJlbmFtaW5n
IGluIHRoZSBDb2RlQ2FjaGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9j
a0FkYXB0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Js
b2NrQWRhcHRvci5tbQkocmV2aXNpb24gMTM4NjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBp
ZCBfX05TTWFrZVNwZWNpYWxGb3J3YXJkaW5nQ2FwdHVyZUJsb2NrCiBjbGFzcyBCbG9ja0FyZ3Vt
ZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5CbG9ja0FyZ3VtZW50KCk7Ci0gICAgdmlydHVh
bCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24qLCBOU0ludGVnZXIsIEpTQ29udGV4dCosIEpT
VmFsdWVSZWYqKSA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24g
KiwgTlNJbnRlZ2VyLCBKU0NvbnRleHQgKiwgSlNWYWx1ZVJlZiopID0gMDsKIAogICAgIE93blB0
cjxCbG9ja0FyZ3VtZW50PiBtX25leHQ7CiB9OwpAQCAtNTYsNyArNTYsNyBAQCBCbG9ja0FyZ3Vt
ZW50Ojp+QmxvY2tBcmd1bWVudCgpCiB9CiAKIGNsYXNzIEJsb2NrQXJndW1lbnRCb29sZWFuIDog
cHVibGljIEJsb2NrQXJndW1lbnQgewotICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiopIG92ZXJyaWRlCisgICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdl
dChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlND
b250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGJv
b2wgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4
OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgQmxvY2tBcmd1bWVudEJv
b2xlYW4gOiBwdWJsaWMgQmxvYwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgQmxvY2tB
cmd1bWVudE51bWVyaWMgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCBKU1Zh
bHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51
bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0
dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgVCB2YWx1ZTsKICAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6
JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwpAQCAtNzUsNyArNzUsNyBAQCBjbGFzcyBC
bG9ja0FyZ3VtZW50TnVtZXJpYyA6IHB1YmxpYyBCbG9jCiB9OwogCiBjbGFzcyBCbG9ja0FyZ3Vt
ZW50SWQgOiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlND
b250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIEpTVmFs
dWVSZWYgZ2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVt
YmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgaWQgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0aW9uIGdldEFyZ3VtZW50OiZ2YWx1ZSBh
dEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTg1LDE0ICs4NSwxNCBAQCBjbGFzcyBCbG9ja0Fy
Z3VtZW50SWQgOiBwdWJsaWMgQmxvY2tBcmd1CiAKIGNsYXNzIEJsb2NrQXJndW1lbnRTdHJ1Y3Qg
OiBwdWJsaWMgQmxvY2tBcmd1bWVudCB7CiBwdWJsaWM6Ci0gICAgQmxvY2tBcmd1bWVudFN0cnVj
dChOU0ludm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVk
VHlwZSkKKyAgICBCbG9ja0FyZ3VtZW50U3RydWN0KE5TSW52b2NhdGlvbiAqY29udmVyc2lvbklu
dm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQogICAgICAgICA6IG1fY29udmVyc2lv
bkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCiAgICAgICAgICwgbV9idWZmZXIoZW5j
b2RlZFR5cGUpCiAgICAgewogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBKU1Zh
bHVlUmVmIGdldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51
bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0
dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgW2ludm9jYXRpb24gZ2V0QXJndW1lbnQ6bV9idWZmZXIgYXRJbmRleDph
cmd1bWVudE51bWJlcl07CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICBb
bV9jb252ZXJzaW9uSW52b2NhdGlvbiBzZXRBcmd1bWVudDomY29udGV4dCBhdEluZGV4OjNdOwog
ICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBpbnZva2VXaXRoVGFyZ2V0OltKU1ZhbHVl
IGNsYXNzXV07CiAKLSAgICAgICAgSlNWYWx1ZSogdmFsdWU7CisgICAgICAgIEpTVmFsdWUgKnZh
bHVlOwogICAgICAgICBbbV9jb252ZXJzaW9uSW52b2NhdGlvbiBnZXRSZXR1cm5WYWx1ZTomdmFs
dWVdOwogICAgICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKTsKICAgICB9CkBA
IC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZXN1bHRUeXBlIHR5cGVTdHJ1
Y3QoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKICAgICB7CiAgICAgICAgIFN0
cmluZ1JhbmdlIGNvcHkoYmVnaW4sIGVuZCk7Ci0gICAgICAgIGlmIChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24gPSB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29weSkpCisgICAgICAgIGlmIChO
U0ludm9jYXRpb24gKmludm9jYXRpb24gPSB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29weSkp
CiAgICAgICAgICAgICByZXR1cm4gbmV3IEJsb2NrQXJndW1lbnRTdHJ1Y3QoaW52b2NhdGlvbiwg
Y29weSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE2NiwxOCArMTY2LDE4IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24q
LCBKU0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXQoTlNJbnZvY2F0aW9uICosIEpTQ29udGV4dCAqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVl
UmVmKikgPSAwOwogfTsKIAogY2xhc3MgQmxvY2tSZXN1bHRWb2lkIDogcHVibGljIEJsb2NrUmVz
dWx0IHsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4dCosIEpT
VmFsdWVSZWYsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJ
bnZvY2F0aW9uICosIEpTQ29udGV4dCAqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikgb3ZlcnJp
ZGUKICAgICB7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEJsb2Nr
UmVzdWx0SW50ZWdlciA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJl
ZiByZXN1bHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1Zh
bHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgVCB2YWx1ZSA9IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0LCBleGNlcHRpb24pKTsKICAgICAgICAgW2lu
dm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKQEAgLTE4Niw3ICsxODYsNyBAQCBjbGFz
cyBCbG9ja1Jlc3VsdEludGVnZXIgOiBwdWJsaWMgQmxvY2tSCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBjbGFzcyBCbG9ja1Jlc3VsdERvdWJsZSA6IHB1YmxpYyBCbG9ja1Jlc3VsdCB7Ci0gICAg
dmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCogY29u
dGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgSlNDb250ZXh0
ICpjb250ZXh0LCBKU1ZhbHVlUmVmIHJlc3VsdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgVCB2YWx1ZSA9IChUKUpTVmFsdWVUb051bWJlcihjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCByZXN1bHQsIGV4Y2VwdGlvbik7CiAgICAgICAgIFtp
bnZvY2F0aW9uIHNldFJldHVyblZhbHVlOiZ2YWx1ZV07CkBAIC0xOTQsNyArMTk0LDcgQEAgY2xh
c3MgQmxvY2tSZXN1bHREb3VibGUgOiBwdWJsaWMgQmxvY2tSZQogfTsKIAogY2xhc3MgQmxvY2tS
ZXN1bHRCb29sZWFuIDogcHVibGljIEJsb2NrUmVzdWx0IHsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHJlc3VsdCwgSlNWYWx1ZVJlZiopIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIHNldChOU0lu
dm9jYXRpb24gKmludm9jYXRpb24sIEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiByZXN1
bHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYm9vbCB2YWx1ZSA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgcmVzdWx0KTsK
ICAgICAgICAgW2ludm9jYXRpb24gc2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKQEAgLTIwMywxNiAr
MjAzLDE2IEBAIGNsYXNzIEJsb2NrUmVzdWx0Qm9vbGVhbiA6IHB1YmxpYyBCbG9ja1IKIAogY2xh
c3MgQmxvY2tSZXN1bHRTdHJ1Y3QgOiBwdWJsaWMgQmxvY2tSZXN1bHQgewogcHVibGljOgotICAg
IEJsb2NrUmVzdWx0U3RydWN0KE5TSW52b2NhdGlvbiogY29udmVyc2lvbkludm9jYXRpb24sIGNv
bnN0IGNoYXIqIGVuY29kZWRUeXBlKQorICAgIEJsb2NrUmVzdWx0U3RydWN0KE5TSW52b2NhdGlv
biAqY29udmVyc2lvbkludm9jYXRpb24sIGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQogICAgICAg
ICA6IG1fY29udmVyc2lvbkludm9jYXRpb24oY29udmVyc2lvbkludm9jYXRpb24pCiAgICAgICAg
ICwgbV9idWZmZXIoZW5jb2RlZFR5cGUpCiAgICAgewogICAgIH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiByZXN1bHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQorICAgIHZp
cnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWVSZWYgcmVzdWx0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29u
dGV4dDpjb250ZXh0XTsKKyAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdp
dGhWYWx1ZTpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOwogICAgICAgICBbbV9jb252ZXJzaW9u
SW52b2NhdGlvbiBpbnZva2VXaXRoVGFyZ2V0OnZhbHVlXTsKICAgICAgICAgW21fY29udmVyc2lv
bkludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6bV9idWZmZXJdOwogICAgICAgICBbaW52b2NhdGlv
biBzZXRSZXR1cm5WYWx1ZTomdmFsdWVdOwpAQCAtMjMxLDEwICsyMzEsMTAgQEAgcHJpdmF0ZToK
IH0KIAogLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBvZmZzZXQgaW5mb3JtYXRpb24gYmFjayBp
bnRvIGEgYmxvY2sgc2lnbmF0dXJlLgotc3RhdGljIE5TU3RyaW5nKiBidWlsZEJsb2NrU2lnbmF0
dXJlKE5TU3RyaW5nKiBwcmVmaXgsIGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQs
IHVuc2lnbmVkIGxvbmcgbG9uZyYgb2Zmc2V0LCBOU1N0cmluZyogcG9zdGZpeCkKK3N0YXRpYyBO
U1N0cmluZyAqYnVpbGRCbG9ja1NpZ25hdHVyZShOU1N0cmluZyAqcHJlZml4LCBjb25zdCBjaGFy
KiBiZWdpbiwgY29uc3QgY2hhciogZW5kLCB1bnNpZ25lZCBsb25nIGxvbmcmIG9mZnNldCwgTlNT
dHJpbmcgKnBvc3RmaXgpCiB7CiAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsKLSAg
ICBOU1N0cmluZyogcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVzJUAl
QCIsIHByZWZpeCwgY29weS5nZXQoKSwgQChvZmZzZXQpLCBwb3N0Zml4XTsKKyAgICBOU1N0cmlu
ZyAqcmVzdWx0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVzJUAlQCIsIHByZWZp
eCwgY29weS5nZXQoKSwgQChvZmZzZXQpLCBwb3N0Zml4XTsKICAgICBOU1VJbnRlZ2VyIHNpemU7
CiAgICAgTlNHZXRTaXplQW5kQWxpZ25tZW50KGNvcHksICZzaXplLCAwKTsKICAgICBpZiAoc2l6
ZSA8IDQpCkBAIC0yNjQsNyArMjY0LDcgQEAgLSAoaWQpaW5pdFdpdGhCbG9ja1NpZ25hdHVyZUZy
b21Qcm90b2NvbAogICAgIGVuY29kZWRUeXBlICs9IDI7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gYSBibG9jayBpcyB0aGUgYmxvY2sgaXRzZWxmLgotICAgIE5TU3RyaW5nKiBzaWdu
YXR1cmUgPSBAIkA/MCI7CisgICAgTlNTdHJpbmcgKnNpZ25hdHVyZSA9IEAiQD8wIjsKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsKIAogICAgIE93blB0cjxC
bG9ja0FyZ3VtZW50PiBhcmd1bWVudHM7CkBAIC0zMjIsNyArMzIyLDcgQEAgLSAoYm9vbClibG9j
a01hdGNoZXNTaWduYXR1cmU6KGlkKWJsb2NrCiAgICAgfQogfQogCi0tIChpZClibG9ja0Zyb21W
YWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVudCBpbkNvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dCB3
aXRoRXhjZXB0aW9uOihKU1ZhbHVlUmVmKilleGNlcHRpb24KKy0gKGlkKWJsb2NrRnJvbVZhbHVl
OihKU1ZhbHVlUmVmKWFyZ3VtZW50IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCB3aXRo
RXhjZXB0aW9uOihKU1ZhbHVlUmVmKilleGNlcHRpb24KIHsKICAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dFJlZiA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCk7CiAKQEAgLTM1
Miw4ICszNTIsOCBAQCAtIChpZClibG9ja0Zyb21WYWx1ZTooSlNWYWx1ZVJlZilhcmd1bWVuCiAg
ICAgfQogCiAgICAgLy8gQ2FwdHVyZWQgdmFyaWFibGVzLgotICAgIEpTQmxvY2tBZGFwdG9yKiBh
ZGFwdG9yID0gc2VsZjsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZh
bHVlOmZ1bmN0aW9uIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICBKU0Jsb2NrQWRhcHRvciAqYWRh
cHRvciA9IHNlbGY7CisgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1
ZTpmdW5jdGlvbiBpbkNvbnRleHQ6Y29udGV4dF07CiAKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NQogICAgIC8vIEN1cnJlbnRseSBv
bmx5IHN1cHBvcnRpbmcgdm9pZCBmdW5jdGlvbnMuCkBAIC0zNjMsNyArMzYzLDcgQEAgLSAoaWQp
YmxvY2tGcm9tVmFsdWU6KEpTVmFsdWVSZWYpYXJndW1lbgogICAgICAgICAvLyBhcHByb3ByaWF0
ZSB0byB1c2UgYSBuZXcgSlNDb250ZXh0IGluc3RhbmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNz
YXJ5KS4KICAgICAgICAgLy8gSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB0aHJvdyBhIEpT
IGV4Y2VwdGlvbiBoZXJlLCBidXQgd2l0aG91dCBhIGNvbnRleHQgd2UgaGF2ZQogICAgICAgICAv
LyBub3RoaW5nIHRvIHdvcmsgd2l0aC4KLSAgICAgICAgSlNDb250ZXh0KiBjb250ZXh0ID0gdmFs
dWUuY29udGV4dDsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gdmFsdWUuY29udGV4dDsK
ICAgICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJldmlzaW9uIDEz
ODY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDcgKzg5LDcgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIE5BKQogLy8g
b2NjdXJpbmcgd2l0aGluIGEgY2FsbGJhY2sgZnJvbSBKYXZhU2NyaXB0IHRvIGJlIHJldGhyb3du
IHVwb24gcmV0dXJuLgogLy8gU2V0dGluZyB0aGlzIHZhbHVlIHRvIG5pbCB3aWxsIHJlc3VsdCBp
biBhbGwgdW5jYXVnaHQgZXhjZXB0aW9ucyB0aHJvd24gZnJvbQogLy8gdGhlIEFQSSBiZWluZyBz
aWxlbnRseSBjb25zdW1lZC4KLUBwcm9wZXJ0eShjb3B5KSB2b2lkKF5leGNlcHRpb25IYW5kbGVy
KShKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbik7CitAcHJvcGVydHkoY29w
eSkgdm9pZCheZXhjZXB0aW9uSGFuZGxlcikoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpl
eGNlcHRpb24pOwogCiAvLyBBbGwgaW5zdGFuY2VzIG9mIEpTQ29udGV4dCBhcmUgYXNzb2NpYXRl
ZCB3aXRoIGEgc2luZ2xlIEpTVmlydHVhbE1hY2hpbmUuIFRoZQogLy8gdmlydHVhbCBtYWNoaW5l
IHByb3ZpZGVzIGFuICJvYmplY3Qgc3BhY2UiIG9yIHNldCBvZiBleGVjdXRpb24gcmVzb3VyY2Vz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDEz
ODY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMyArMzcsMTEgQEAKIAogI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKIAot
dHlwZWRlZiBIYXNoTWFwPEpTVmFsdWVSZWYsIHNpemVfdD4gUHJvdGVjdE1hcDsKLQogQGltcGxl
bWVudGF0aW9uIEpTQ29udGV4dCB7CiAgICAgSlNWaXJ0dWFsTWFjaGluZSAqbV92aXJ0dWFsTWFj
aGluZTsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250ZXh0OwogICAgIEpTV3JhcHBlck1h
cCAqbV93cmFwcGVyTWFwOwotICAgIFByb3RlY3RNYXAgbV9wcm90ZWN0Q291bnRzOworICAgIEhh
c2hDb3VudGVkU2V0PEpTVmFsdWVSZWY+IG1fcHJvdGVjdENvdW50czsKIH0KIAogQHN5bnRoZXNp
emUgZXhjZXB0aW9uOwpAQCAtNjUsNyArNjMsNyBAQCAtIChpZClpbml0V2l0aFZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNCiAgICAgbV93cmFwcGVyTWFwID0gW1tKU1dyYXBwZXJNYXAgYWxsb2Nd
IGluaXRXaXRoQ29udGV4dDpzZWxmXTsKIAogICAgIHNlbGYuZXhjZXB0aW9uID0gbmlsOwotICAg
IHNlbGYuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlICpl
eGNlcHRpb25WYWx1ZSkgeworICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlNDb250ZXh0
ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb25WYWx1ZSkgewogICAgICAgICBjb250ZXh0LmV4
Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogICAgIH07CiAKQEAgLTEyNiw3ICsxMjQsNyBAQCAr
IChOU0FycmF5ICopY3VycmVudEFyZ3VtZW50cwogICAgIHJldHVybiBlbnRyeS0+Y3VycmVudEFy
Z3VtZW50czsKIH0KIAotLSAoSlNWaXJ0dWFsTWFjaGluZSopdmlydHVhbE1hY2hpbmUKKy0gKEpT
VmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQogewogICAgIHJldHVybiBtX3ZpcnR1YWxN
YWNoaW5lOwogfQpAQCAtMTQ5LDcgKzE0Nyw3IEBAIC0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmpl
Y3QgZm9yS2V5ZWRTdWIKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChJbnRlcm5hbCkKIAot
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleHQoSlNDb250ZXh0KiBjb250
ZXh0KQorSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleHQoSlNDb250ZXh0
ICpjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHQ7CiB9CkBAIC0xNTgs
OCArMTU2LDggQEAgLSAodm9pZClkZWFsbG9jCiB7CiAgICAgdG9KUyhtX2NvbnRleHQpLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm1fYXBpRGF0YSA9IDA7CiAKLSAgICBQcm90ZWN0TWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdENvdW50cy5iZWdpbigpOwotICAgIFByb3RlY3RNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdENvdW50cy5lbmQoKTsKKyAgICBIYXNoQ291bnRlZFNl
dDxKU1ZhbHVlUmVmPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX3Byb3RlY3RDb3VudHMuYmVnaW4o
KTsKKyAgICBIYXNoQ291bnRlZFNldDxKU1ZhbHVlUmVmPjo6aXRlcmF0b3IgZW5kID0gbV9wcm90
ZWN0Q291bnRzLmVuZCgpOwogICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3Ip
CiAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBpdGVyYXRvci0+a2V5KTsKIApA
QCAtMjEyLDExICsyMTAsOCBAQCAtICh2b2lkKXByb3RlY3Q6KEpTVmFsdWVSZWYpdmFsdWUKICAg
ICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RDb3VudHMKICAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKHRvSlMobV9jb250ZXh0KSk7CiAKLSAgICBQcm90ZWN0TWFwOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9wcm90ZWN0Q291bnRzLmFkZCh2YWx1ZSwgMSk7Ci0gICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQorICAgIGlmIChtX3Byb3RlY3RDb3VudHMuYWRkKHZhbHVlKS5pc05ld0VudHJ5KQog
ICAgICAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIHZhbHVlKTsKLSAgICBlbHNlCi0gICAg
ICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogLSAodm9pZCl1bnByb3RlY3Q6KEpT
VmFsdWVSZWYpdmFsdWUKQEAgLTIyNCwxMiArMjE5LDggQEAgLSAodm9pZCl1bnByb3RlY3Q6KEpT
VmFsdWVSZWYpdmFsdWUKICAgICAvLyBMb2NrIGFjY2VzcyB0byBtX3Byb3RlY3RDb3VudHMKICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHRvSlMobV9jb250ZXh0KSk7CiAKLSAgICBQcm90ZWN0
TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fcHJvdGVjdENvdW50cy5maW5kKHZhbHVlKTsKLSAg
ICBpZiAoaXRlcmF0b3ItPnZhbHVlID09IDEpIHsKLSAgICAgICAgbV9wcm90ZWN0Q291bnRzLnJl
bW92ZSh2YWx1ZSk7CisgICAgaWYgKG1fcHJvdGVjdENvdW50cy5yZW1vdmUodmFsdWUpKQogICAg
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAg
ICAgICAtLWl0ZXJhdG9yLT52YWx1ZTsKIH0KIAogLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmpl
Y3Q6KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0SW50ZXJuYWwuaAkocmV2aXNpb24gMTM4NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTEg
QEAgc3RydWN0IENhbGxiYWNrRGF0YSB7CiAKIGNsYXNzIFdlYWtDb250ZXh0UmVmIHsKIHB1Ymxp
YzoKLSAgICBXZWFrQ29udGV4dFJlZihKU0NvbnRleHQqID0gbmlsKTsKKyAgICBXZWFrQ29udGV4
dFJlZihKU0NvbnRleHQgKiA9IG5pbCk7CiAgICAgfldlYWtDb250ZXh0UmVmKCk7CiAKICAgICBK
U0NvbnRleHQgKiBnZXQoKTsKLSAgICB2b2lkIHNldChKU0NvbnRleHQqKTsKKyAgICB2b2lkIHNl
dChKU0NvbnRleHQgKik7CiAKIHByaXZhdGU6CiAgICAgSlNDb250ZXh0ICptX3dlYWtDb250ZXh0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTM4NjY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC04MzMsNyArODMzLDcgQEAgaWQgdmFsdWVUb1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYg
Y29udAogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAotICAgIE5TU3RyaW5nKiBzdHJpbmdO
UyA9IFsoTlNTdHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBqc3N0cmluZykgYXV0b3JlbGVhc2VdOworICAgIE5TU3RyaW5nICpzdHJpbmdOUyA9IFsoTlNT
dHJpbmcgKilKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBqc3N0cmlu
ZykgYXV0b3JlbGVhc2VdOwogICAgIEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CiAgICAgcmV0
dXJuIHN0cmluZ05TOwogfQpAQCAtOTM0LDUwICs5MzQsNTYgQEAgT2JqY0NvbnRhaW5lckNvbnZl
cnRvcjo6VGFzayBPYmpjQ29udGFpbgogICAgIHJldHVybiBsYXN0OwogfQogCitpbmxpbmUgYm9v
bCBpc05TQm9vbGVhbihpZCBvYmplY3QpCit7CisgICAgQVNTRVJUKFtAWUVTIGNsYXNzXSA9PSBb
QE5PIGNsYXNzXSk7CisgICAgQVNTRVJUKFtAWUVTIGNsYXNzXSAhPSBbTlNOdW1iZXIgY2xhc3Nd
KTsKKyAgICBBU1NFUlQoW1tAWUVTIGNsYXNzXSBpc1N1YmNsYXNzT2ZDbGFzczpbTlNOdW1iZXIg
Y2xhc3NdXSk7CisgICAgcmV0dXJuIFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbQFlFUyBjbGFzc11d
OworfQorCiBzdGF0aWMgT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBvYmplY3RUb1ZhbHVl
V2l0aG91dENvcHkoSlNDb250ZXh0ICpjb250ZXh0LCBpZCBvYmplY3QpCiB7CisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQp
OworCiAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZl
cnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dEludGVybmFs
Q29udGV4dChjb250ZXh0KSksIENvbnRhaW5lck5vbmUgfTsKKyAgICAgICAgcmV0dXJuIChPYmpj
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0UmVmKSwgQ29udGFpbmVyTm9uZSB9OwogCiAgICAgaWYgKCFjbGFzc19jb25mb3Jtc1Rv
UHJvdG9jb2wob2JqZWN0X2dldENsYXNzKG9iamVjdCksIGdldEpTRXhwb3J0UHJvdG9jb2woKSkp
IHsKICAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQot
ICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0
LCBKU09iamVjdE1ha2VBcnJheShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCBO
VUxMLCAwKSwgQ29udGFpbmVyQXJyYXkgfTsKKyAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRh
aW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dFJl
ZiwgMCwgTlVMTCwgMCksIENvbnRhaW5lckFycmF5IH07CiAKICAgICAgICAgaWYgKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgICAgICByZXR1cm4g
KE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFrZShjb250
ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCAwLCAwKSwgQ29udGFpbmVyRGljdGlvbmFyeSB9
OworICAgICAgICAgICAgcmV0dXJuIChPYmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2Jq
ZWN0LCBKU09iamVjdE1ha2UoY29udGV4dFJlZiwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkg
fTsKIAogICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSkK
LSAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVj
dCwgSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpLCBDb250
YWluZXJOb25lIH07CisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6
OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlTnVsbChjb250ZXh0UmVmKSwgQ29udGFpbmVyTm9u
ZSB9OwogCiAgICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W0pTVmFsdWUgY2xhc3Nd
XSkKICAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9i
amVjdCwgKChKU1ZhbHVlICopb2JqZWN0KS0+bV92YWx1ZSwgQ29udGFpbmVyTm9uZSB9OwogCiAg
ICAgICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAg
ICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgTlVMTCwg
MCksIENvbnRhaW5lckFycmF5IH07CisgICAgICAgICAgICByZXR1cm4gKE9iamNDb250YWluZXJD
b252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHRSZWYsIDAs
IE5VTEwsIDApLCBDb250YWluZXJBcnJheSB9OwogCiAgICAgICAgIGlmIChbb2JqZWN0IGlzS2lu
ZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuIChPYmpj
Q29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCBKU09iamVjdE1ha2UoY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KSwgMCwgMCksIENvbnRhaW5lckRpY3Rpb25hcnkgfTsKKyAg
ICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwg
SlNPYmplY3RNYWtlKGNvbnRleHRSZWYsIDAsIDApLCBDb250YWluZXJEaWN0aW9uYXJ5IH07CiAK
ICAgICAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewog
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoKENGU3RyaW5nUmVmKW9iamVjdCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIGpzID0gSlNW
YWx1ZU1ha2VTdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWYganMgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0UmVm
LCBzdHJpbmcpOwogICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CiAgICAgICAg
ICAgICByZXR1cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIGpzLCBD
b250YWluZXJOb25lIH07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRP
ZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7Ci0gICAgICAgICAgICBpZCBsaXRlcmFsVHJ1ZSA9
IEBZRVM7Ci0gICAgICAgICAgICBpZiAob2JqZWN0ID09IGxpdGVyYWxUcnVlKQotICAgICAgICAg
ICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIHRydWUpLCBD
b250YWluZXJOb25lIH07Ci0gICAgICAgICAgICBpZCBsaXRlcmFsRmFsc2UgPSBATk87Ci0gICAg
ICAgICAgICBpZiAob2JqZWN0ID09IGxpdGVyYWxGYWxzZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gKE9iamNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBmYWxzZSksIENvbnRhaW5lck5v
bmUgfTsKLSAgICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7
IG9iamVjdCwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0
KSwgWyhOU051bWJlciopb2JqZWN0IGRvdWJsZVZhbHVlXSksIENvbnRhaW5lck5vbmUgfTsKKyAg
ICAgICAgICAgIGlmIChpc05TQm9vbGVhbihvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVy
biAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwgSlNWYWx1ZU1ha2VCb29s
ZWFuKGNvbnRleHRSZWYsIFtvYmplY3QgYm9vbFZhbHVlXSksIENvbnRhaW5lck5vbmUgfTsKKyAg
ICAgICAgICAgIHJldHVybiAoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayl7IG9iamVjdCwg
SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dFJlZiwgW29iamVjdCBkb3VibGVWYWx1ZV0pLCBDb250
YWluZXJOb25lIH07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNs
YXNzOltOU0RhdGUgY2xhc3NdXSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIFsoTlNE
YXRlICopb2JqZWN0IHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0pOwotICAgICAgICAgICAgSlNPYmpl
Y3RSZWYgcmVzdWx0ID0gSlNPYmplY3RNYWtlRGF0ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCAxLCAmYXJndW1lbnQsIDApOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVu
dCA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHRSZWYsIFtvYmplY3QgdGltZUludGVydmFsU2lu
Y2UxOTcwXSk7CisgICAgICAgICAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdE1ha2VE
YXRlKGNvbnRleHRSZWYsIDEsICZhcmd1bWVudCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gKE9i
amNDb250YWluZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHJlc3VsdCwgQ29udGFpbmVyTm9u
ZSB9OwogICAgICAgICB9CiAgICAgfQpAQCAtOTg3LDYgKzk5Myw4IEBAIHN0YXRpYyBPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrIG9iamUKIAogSlNWYWx1ZVJlZiBvYmplY3RUb1ZhbHVlKEpT
Q29udGV4dCAqY29udGV4dCwgaWQgb2JqZWN0KQogeworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KTsKKwogICAgIE9iamND
b250YWluZXJDb252ZXJ0b3I6OlRhc2sgdGFzayA9IG9iamVjdFRvVmFsdWVXaXRob3V0Q29weShj
b250ZXh0LCBvYmplY3QpOwogICAgIGlmICh0YXNrLnR5cGUgPT0gQ29udGFpbmVyTm9uZSkKICAg
ICAgICAgcmV0dXJuIHRhc2suanM7CkBAIC05OTcsMjMgKzEwMDUsMjMgQEAgSlNWYWx1ZVJlZiBv
YmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqY29udAogCiAgICAgZG8gewogICAgICAgICBPYmpjQ29u
dGFpbmVyQ29udmVydG9yOjpUYXNrIGN1cnJlbnQgPSBjb252ZXJ0b3IudGFrZSgpOwotICAgICAg
ICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCks
IGN1cnJlbnQuanMpKTsKLSAgICAgICAgSlNPYmplY3RSZWYganMgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgY3VycmVudC5qcywgMCk7CisgICAgICAg
IEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dFJlZiwgY3VycmVudC5qcykpOworICAgICAg
ICBKU09iamVjdFJlZiBqcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBjdXJyZW50Lmpz
LCAwKTsKIAogICAgICAgICBpZiAoY3VycmVudC50eXBlID09IENvbnRhaW5lckFycmF5KSB7CiAg
ICAgICAgICAgICBBU1NFUlQoW2N1cnJlbnQub2JqYyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pOwogICAgICAgICAgICAgTlNBcnJheSAqYXJyYXkgPSAoTlNBcnJheSAqKWN1cnJlbnQu
b2JqYzsKICAgICAgICAgICAgIE5TVUludGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOwogICAg
ICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRl
eCkKLSAgICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50
ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBqcywgaW5kZXgsIGNvbnZlcnRvci5jb252ZXJ0KFthcnJh
eSBvYmplY3RBdEluZGV4OmluZGV4XSksIDApOworICAgICAgICAgICAgICAgIEpTT2JqZWN0U2V0
UHJvcGVydHlBdEluZGV4KGNvbnRleHRSZWYsIGpzLCBpbmRleCwgY29udmVydG9yLmNvbnZlcnQo
W2FycmF5IG9iamVjdEF0SW5kZXg6aW5kZXhdKSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQoY3VycmVudC50eXBlID09IENvbnRhaW5lckRpY3Rpb25hcnkpOwogICAg
ICAgICAgICAgQVNTRVJUKFtjdXJyZW50Lm9iamMgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5
IGNsYXNzXV0pOwotICAgICAgICAgICAgTlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gKE5TRGlj
dGlvbmFyeSopY3VycmVudC5vYmpjOworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9u
YXJ5ID0gKE5TRGljdGlvbmFyeSAqKWN1cnJlbnQub2JqYzsKICAgICAgICAgICAgIGZvciAoaWQg
a2V5IGluIFtkaWN0aW9uYXJ5IGtleUVudW1lcmF0b3JdKSB7CiAgICAgICAgICAgICAgICAgaWYg
KFtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewogICAgICAgICAgICAgICAg
ICAgICBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBqcywgcHJvcGVydHlOYW1lLCBj
b252ZXJ0b3IuY29udmVydChbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XSksIDAsIDApOwor
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHRSZWYsIGpzLCBw
cm9wZXJ0eU5hbWUsIGNvbnZlcnRvci5jb252ZXJ0KFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpr
ZXldKSwgMCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShwcm9wZXJ0
eU5hbWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwMjksMTIgKzEw
MzcsMTIgQEAgSlNWYWx1ZVJlZiB2YWx1ZUludGVybmFsVmFsdWUoSlNWYWx1ZSAqIAogICAgIHJl
dHVybiB2YWx1ZS0+bV92YWx1ZTsKIH0KIAotKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihK
U1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXh0CisrIChKU1ZhbHVl
ICopdmFsdWVXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0CiB7CiAgICAgcmV0dXJuIFtbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6
dmFsdWUgaW5Db250ZXh0OmNvbnRleHRdIGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoSlNWYWx1ZSAq
KWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQqKWNv
bnRleHQKKy0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAg
ICAgaWYgKCFzZWxmKQpAQCAtMTA1MSw5MyArMTA1OSw5NyBAQCBzdHJ1Y3QgU3RydWN0VGFnSGFu
ZGxlciB7CiAgICAgU0VMIHR5cGVUb1ZhbHVlU0VMOwogICAgIFNFTCB2YWx1ZVRvVHlwZVNFTDsK
IH07Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJ1Y3RUYWdIYW5kbGVyPiBTdHJ1Y3RIYW5k
bGVyczsKIAotc3RhdGljIFN0cnVjdFRhZ0hhbmRsZXIqIGdldFN0cnVjdFRhZ0hhbmRsZXIoY29u
c3QgY2hhciogZW5jb2RlZFR5cGUpCitzdGF0aWMgU3RydWN0SGFuZGxlcnMqIGNyZWF0ZVN0cnVj
dEhhbmRsZXJNYXAoKQogewotICAgIHN0YXRpYyBTcGluTG9jayBnZXRTdHJ1Y3RUYWdIYW5kbGVy
TG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xk
ZXIoJmdldFN0cnVjdFRhZ0hhbmRsZXJMb2NrKTsKKyAgICBTdHJ1Y3RIYW5kbGVycyogc3RydWN0
SGFuZGxlcnMgPSBuZXcgU3RydWN0SGFuZGxlcnMoKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8U3RyaW5nSW1wbD4sIFN0cnVjdFRhZ0hhbmRsZXI+IFN0cnVjdEhhbmRsZXJzOwotICAg
IHN0YXRpYyBTdHJ1Y3RIYW5kbGVycyogc3RydWN0SGFuZGxlcnMgPSAwOworICAgIHNpemVfdCB2
YWx1ZVdpdGhYaW5Db250ZXh0TGVuZ3RoID0gc3RybGVuKCJ2YWx1ZVdpdGhYOmluQ29udGV4dDoi
KTsKKyAgICBzaXplX3QgdG9YTGVuZ3RoID0gc3RybGVuKCJ0b1giKTsKIAotICAgIGlmICghc3Ry
dWN0SGFuZGxlcnMpIHsKLSAgICAgICAgc3RydWN0SGFuZGxlcnMgPSBuZXcgU3RydWN0SGFuZGxl
cnMoKTsKLQotICAgICAgICAvLyBTdGVwIDE6IGZpbmQgYWxsIHZhbHVlV2l0aDxGb28+OmluQ29u
dGV4dDogY2xhc3MgbWV0aG9kcyBpbiBKU1ZhbHVlLgotICAgICAgICBzaXplX3QgdmFsdWVXaXRo
TWluTGVuZ3RoID0gc3RybGVuKCJ2YWx1ZVdpdGhYOmluQ29udGV4dDoiKTsKLSAgICAgICAgZm9y
RWFjaE1ldGhvZEluQ2xhc3Mob2JqZWN0X2dldENsYXNzKFtKU1ZhbHVlIGNsYXNzXSksIF4oTWV0
aG9kIG1ldGhvZCl7Ci0gICAgICAgICAgICBTRUwgc2VsZWN0b3IgPSBtZXRob2RfZ2V0TmFtZSht
ZXRob2QpOwotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbGVj
dG9yKTsKLSAgICAgICAgICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbHVlV2l0aDxGb28+OmNvbnRleHQ6Ci0gICAgICAgICAg
ICBpZiAobmFtZUxlbmd0aCA8IHZhbHVlV2l0aE1pbkxlbmd0aCB8fCBzdHJuY21wKG5hbWUsICJ2
YWx1ZVdpdGgiLCA5KSB8fCBzdHJuY21wKG5hbWUgKyBuYW1lTGVuZ3RoIC0gMTEsICI6aW5Db250
ZXh0OiIsIDExKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAvLyBDaGVj
ayBmb3IgWyBpZCwgU0VMLCA8dHlwZT4sIDxjb250ZXh0VHlwZT4gXQotICAgICAgICAgICAgaWYg
KG1ldGhvZF9nZXROdW1iZXJPZkFyZ3VtZW50cyhtZXRob2QpICE9IDQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgY2hhciBpZFR5cGVbM107Ci0gICAgICAgICAgICAvLyBD
aGVjayAybmQgYXJndW1lbnQgdHlwZSBpcyAiQCIKLSAgICAgICAgICAgIGNoYXIqIHNlY29uZFR5
cGUgPSBtZXRob2RfY29weUFyZ3VtZW50VHlwZShtZXRob2QsIDMpOwotICAgICAgICAgICAgaWYg
KHN0cmNtcChzZWNvbmRUeXBlLCAiQCIpKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShzZWNvbmRU
eXBlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgLy8gU3Rl
cCAxOiBmaW5kIGFsbCB2YWx1ZVdpdGg8Rm9vPjppbkNvbnRleHQ6IGNsYXNzIG1ldGhvZHMgaW4g
SlNWYWx1ZS4KKyAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhvYmplY3RfZ2V0Q2xhc3MoW0pTVmFs
dWUgY2xhc3NdKSwgXihNZXRob2QgbWV0aG9kKXsKKyAgICAgICAgU0VMIHNlbGVjdG9yID0gbWV0
aG9kX2dldE5hbWUobWV0aG9kKTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXRO
YW1lKHNlbGVjdG9yKTsKKyAgICAgICAgc2l6ZV90IG5hbWVMZW5ndGggPSBzdHJsZW4obmFtZSk7
CisgICAgICAgIC8vIENoZWNrIGZvciB2YWx1ZVdpdGg8Rm9vPjpjb250ZXh0OgorICAgICAgICBp
ZiAobmFtZUxlbmd0aCA8IHZhbHVlV2l0aFhpbkNvbnRleHRMZW5ndGggfHwgbWVtY21wKG5hbWUs
ICJ2YWx1ZVdpdGgiLCA5KSB8fCBtZW1jbXAobmFtZSArIG5hbWVMZW5ndGggLSAxMSwgIjppbkNv
bnRleHQ6IiwgMTEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBDaGVjayBmb3Ig
WyBpZCwgU0VMLCA8dHlwZT4sIDxjb250ZXh0VHlwZT4gXQorICAgICAgICBpZiAobWV0aG9kX2dl
dE51bWJlck9mQXJndW1lbnRzKG1ldGhvZCkgIT0gNCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2hhciBpZFR5cGVbM107CisgICAgICAgIC8vIENoZWNrIDJuZCBhcmd1bWVudCB0eXBl
IGlzICJAIgorICAgICAgICBjaGFyKiBzZWNvbmRUeXBlID0gbWV0aG9kX2NvcHlBcmd1bWVudFR5
cGUobWV0aG9kLCAzKTsKKyAgICAgICAgaWYgKHN0cmNtcChzZWNvbmRUeXBlLCAiQCIpICE9IDAp
IHsKICAgICAgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7Ci0gICAgICAgICAgICAvLyBDaGVjayBy
ZXN1bHQgdHlwZSBpcyBhbHNvICJAIgotICAgICAgICAgICAgbWV0aG9kX2dldFJldHVyblR5cGUo
bWV0aG9kLCBpZFR5cGUsIDMpOwotICAgICAgICAgICAgaWYgKHN0cmNtcChpZFR5cGUsICJAIikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhv
ZF9jb3B5QXJndW1lbnRUeXBlKG1ldGhvZCwgMik7Ci0gICAgICAgICAgICBzdHJ1Y3RIYW5kbGVy
cy0+YWRkKFN0cmluZyh0eXBlKS5pbXBsKCksIChTdHJ1Y3RUYWdIYW5kbGVyKXsgc2VsZWN0b3Is
IDAgfSk7Ci0gICAgICAgICAgICBmcmVlKHR5cGUpOwotICAgICAgICB9KTsKLQotICAgICAgICAv
LyBTdGVwIDI6IGZpbmQgYWxsIHRvPEZvbz4gaW5zdGFuY2UgbWV0aG9kcyBpbiBKU1ZhbHVlLgot
ICAgICAgICBzaXplX3QgbWluTGVuVmFsdWUgPSBzdHJsZW4oInRvWCIpOwotICAgICAgICBmb3JF
YWNoTWV0aG9kSW5DbGFzcyhbSlNWYWx1ZSBjbGFzc10sIF4oTWV0aG9kIG1ldGhvZCl7Ci0gICAg
ICAgICAgICBTRUwgc2VsZWN0b3IgPSBtZXRob2RfZ2V0TmFtZShtZXRob2QpOwotICAgICAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKLSAgICAgICAgICAg
IHNpemVfdCBuYW1lTGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIHRvPEZvbz4KLSAgICAgICAgICAgIGlmIChuYW1lTGVuZ3RoIDwgbWluTGVuVmFsdWUgfHwg
c3RybmNtcChuYW1lLCAidG8iLCAyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAvLyBDaGVjayBmb3IgWyBpZCwgU0VMIF0KLSAgICAgICAgICAgIGlmIChtZXRob2RfZ2V0
TnVtYmVyT2ZBcmd1bWVudHMobWV0aG9kKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIC8vIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdmFsdWVXaXRoPEZvbz46Y29u
dGV4dDogbWV0aG9kLgotICAgICAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5UmV0dXJu
VHlwZShtZXRob2QpOwotCi0gICAgICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRl
ciA9IHN0cnVjdEhhbmRsZXJzLT5maW5kKFN0cmluZyh0eXBlKS5pbXBsKCkpOwotICAgICAgICAg
ICAgZnJlZSh0eXBlKTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IHN0cnVjdEhhbmRsZXJzLT5l
bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBTdHJ1Y3RUYWdIYW5k
bGVyJiBoYW5kbGVyID0gaXRlci0+dmFsdWU7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQg
c3RybGVuKDxmb28+KSA9PSBzdHJsZW4oPEZvbz4pCi0gICAgICAgICAgICBjb25zdCBjaGFyKiB2
YWx1ZVdpdGhOYW1lID0gc2VsX2dldE5hbWUoaGFuZGxlci50eXBlVG9WYWx1ZVNFTCk7Ci0gICAg
ICAgICAgICBzaXplX3QgdmFsdWVXaXRoTGVuID0gc3RybGVuKHZhbHVlV2l0aE5hbWUpOwotICAg
ICAgICAgICAgaWYgKHZhbHVlV2l0aExlbiAtIHZhbHVlV2l0aE1pbkxlbmd0aCAhPSBuYW1lTGVu
Z3RoIC0gbWluTGVuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCA8Rm9vPiA9PSA8Rm9vPgotICAgICAgICAgICAgaWYgKHN0cm5jbXAodmFs
dWVXaXRoTmFtZSArIDksIG5hbWUgKyAyLCBuYW1lTGVuZ3RoIC0gbWluTGVuVmFsdWUgLSAxKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBoYW5kbGVyLnZhbHVlVG9UeXBl
U0VMID0gc2VsZWN0b3I7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIFN0ZXAgMzogY2xlYW4g
dXAgLSByZW1vdmUgZW50cmllcyB3aGVyZSB3ZSBmb3VuZCBwcm9zcGVjdGl2ZSB2YWx1ZVdpdGg8
Rm9vPjppbkNvbnRleHQ6IGNvbnZlcnNpb25zLCBidXQgbm8gbWF0Y2hpbmcgdG88Rm9vPiBtZXRo
b2RzLgotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+ID4gUmVtb3Zl
U2V0OwotICAgICAgICBSZW1vdmVTZXQgcmVtb3ZlU2V0OwotICAgICAgICBmb3IgKFN0cnVjdEhh
bmRsZXJzOjppdGVyYXRvciBpdGVyID0gc3RydWN0SGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0g
c3RydWN0SGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFN0cnVjdFRhZ0hh
bmRsZXImIGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgICAgIGlmICghaGFuZGxlci52
YWx1ZVRvVHlwZVNFTCkKLSAgICAgICAgICAgICAgICByZW1vdmVTZXQuYWRkKGl0ZXItPmtleSk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKFJlbW92ZVNl
dDo6aXRlcmF0b3IgaXRlciA9IHJlbW92ZVNldC5iZWdpbigpOyBpdGVyICE9IHJlbW92ZVNldC5l
bmQoKTsgKytpdGVyKQotICAgICAgICAgICAgc3RydWN0SGFuZGxlcnMtPnJlbW92ZSgqaXRlcik7
CisgICAgICAgIGZyZWUoc2Vjb25kVHlwZSk7CisgICAgICAgIC8vIENoZWNrIHJlc3VsdCB0eXBl
IGlzIGFsc28gIkAiCisgICAgICAgIG1ldGhvZF9nZXRSZXR1cm5UeXBlKG1ldGhvZCwgaWRUeXBl
LCAzKTsKKyAgICAgICAgaWYgKHN0cmNtcChpZFR5cGUsICJAIikgIT0gMCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2hhciogdHlwZSA9IG1ldGhvZF9jb3B5QXJndW1lbnRUeXBlKG1l
dGhvZCwgMik7CisgICAgICAgIHN0cnVjdEhhbmRsZXJzLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRl
KHR5cGUpLCAoU3RydWN0VGFnSGFuZGxlcil7IHNlbGVjdG9yLCAwIH0pOworICAgICAgICBmcmVl
KHR5cGUpOworICAgIH0pOworCisgICAgLy8gU3RlcCAyOiBmaW5kIGFsbCB0bzxGb28+IGluc3Rh
bmNlIG1ldGhvZHMgaW4gSlNWYWx1ZS4KKyAgICBmb3JFYWNoTWV0aG9kSW5DbGFzcyhbSlNWYWx1
ZSBjbGFzc10sIF4oTWV0aG9kIG1ldGhvZCl7CisgICAgICAgIFNFTCBzZWxlY3RvciA9IG1ldGhv
ZF9nZXROYW1lKG1ldGhvZCk7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFt
ZShzZWxlY3Rvcik7CisgICAgICAgIHNpemVfdCBuYW1lTGVuZ3RoID0gc3RybGVuKG5hbWUpOwor
ICAgICAgICAvLyBDaGVjayBmb3IgdG88Rm9vPgorICAgICAgICBpZiAobmFtZUxlbmd0aCA8IHRv
WExlbmd0aCB8fCBtZW1jbXAobmFtZSwgInRvIiwgMikpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vIENoZWNrIGZvciBbIGlkLCBTRUwgXQorICAgICAgICBpZiAobWV0aG9kX2dldE51
bWJlck9mQXJndW1lbnRzKG1ldGhvZCkgIT0gMikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgLy8gVHJ5IHRvIGZpbmQgYSBtYXRjaGluZyB2YWx1ZVdpdGg8Rm9vPjpjb250ZXh0OiBtZXRo
b2QuCisgICAgICAgIGNoYXIqIHR5cGUgPSBtZXRob2RfY29weVJldHVyblR5cGUobWV0aG9kKTsK
KworICAgICAgICBTdHJ1Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IHN0cnVjdEhhbmRsZXJz
LT5maW5kKHR5cGUpOworICAgICAgICBmcmVlKHR5cGUpOworICAgICAgICBpZiAoaXRlciA9PSBz
dHJ1Y3RIYW5kbGVycy0+ZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cnVj
dFRhZ0hhbmRsZXImIGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKKworICAgICAgICAvLyBjaGVjayB0
aGF0IHN0cmxlbig8Zm9vPikgPT0gc3RybGVuKDxGb28+KQorICAgICAgICBjb25zdCBjaGFyKiB2
YWx1ZVdpdGhOYW1lID0gc2VsX2dldE5hbWUoaGFuZGxlci50eXBlVG9WYWx1ZVNFTCk7CisgICAg
ICAgIHNpemVfdCB2YWx1ZVdpdGhMZW5ndGggPSBzdHJsZW4odmFsdWVXaXRoTmFtZSk7CisgICAg
ICAgIGlmICh2YWx1ZVdpdGhMZW5ndGggLSB2YWx1ZVdpdGhYaW5Db250ZXh0TGVuZ3RoICE9IG5h
bWVMZW5ndGggLSB0b1hMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIENo
ZWNrIHRoYXQgPEZvbz4gPT0gPEZvbz4KKyAgICAgICAgaWYgKG1lbWNtcCh2YWx1ZVdpdGhOYW1l
ICsgOSwgbmFtZSArIDIsIG5hbWVMZW5ndGggLSB0b1hMZW5ndGggLSAxKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaGFuZGxlci52YWx1ZVRvVHlwZVNFTCA9IHNlbGVjdG9yOworICAg
IH0pOworCisgICAgLy8gU3RlcCAzOiBjbGVhbiB1cCAtIHJlbW92ZSBlbnRyaWVzIHdoZXJlIHdl
IGZvdW5kIHByb3NwZWN0aXZlIHZhbHVlV2l0aDxGb28+OmluQ29udGV4dDogY29udmVyc2lvbnMs
IGJ1dCBubyBtYXRjaGluZyB0bzxGb28+IG1ldGhvZHMuCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0
cmluZz4gUmVtb3ZlU2V0OworICAgIFJlbW92ZVNldCByZW1vdmVTZXQ7CisgICAgZm9yIChTdHJ1
Y3RIYW5kbGVyczo6aXRlcmF0b3IgaXRlciA9IHN0cnVjdEhhbmRsZXJzLT5iZWdpbigpOyBpdGVy
ICE9IHN0cnVjdEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdFRhZ0hh
bmRsZXImIGhhbmRsZXIgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgaWYgKCFoYW5kbGVyLnZhbHVl
VG9UeXBlU0VMKQorICAgICAgICAgICAgcmVtb3ZlU2V0LmFkZChpdGVyLT5rZXkpOwogICAgIH0K
IAotICAgIFN0cnVjdEhhbmRsZXJzOjppdGVyYXRvciBpdGVyID0gc3RydWN0SGFuZGxlcnMtPmZp
bmQoU3RyaW5nKGVuY29kZWRUeXBlKS5pbXBsKCkpOworICAgIGZvciAoUmVtb3ZlU2V0OjppdGVy
YXRvciBpdGVyID0gcmVtb3ZlU2V0LmJlZ2luKCk7IGl0ZXIgIT0gcmVtb3ZlU2V0LmVuZCgpOyAr
K2l0ZXIpCisgICAgICAgIHN0cnVjdEhhbmRsZXJzLT5yZW1vdmUoKml0ZXIpOworCisgICAgcmV0
dXJuIHN0cnVjdEhhbmRsZXJzOworfQorCitzdGF0aWMgU3RydWN0VGFnSGFuZGxlciogaGFuZGVy
Rm9yU3RydWN0VGFnKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKQoreworICAgIHN0YXRpYyBTcGlu
TG9jayBoYW5kZXJGb3JTdHJ1Y3RUYWdMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CisgICAg
U3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmaGFuZGVyRm9yU3RydWN0VGFnTG9jayk7CisKKyAg
ICBzdGF0aWMgU3RydWN0SGFuZGxlcnMqIHN0cnVjdEhhbmRsZXJzID0gY3JlYXRlU3RydWN0SGFu
ZGxlck1hcCgpOworCisgICAgU3RydWN0SGFuZGxlcnM6Oml0ZXJhdG9yIGl0ZXIgPSBzdHJ1Y3RI
YW5kbGVycy0+ZmluZChlbmNvZGVkVHlwZSk7CiAgICAgaWYgKGl0ZXIgPT0gc3RydWN0SGFuZGxl
cnMtPmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gJml0ZXItPnZhbHVlOwpA
QCAtMTE0NSwxMyArMTE1NywxMyBAQCBzdGF0aWMgU3RydWN0VGFnSGFuZGxlciogZ2V0U3RydWN0
VGFnSGFuCiAKICsgKFNFTClzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6KGNvbnN0IGNoYXIgKilz
dHJ1Y3RUYWcKIHsKLSAgICBTdHJ1Y3RUYWdIYW5kbGVyKiBoYW5kbGVyID0gZ2V0U3RydWN0VGFn
SGFuZGxlcihzdHJ1Y3RUYWcpOworICAgIFN0cnVjdFRhZ0hhbmRsZXIqIGhhbmRsZXIgPSBoYW5k
ZXJGb3JTdHJ1Y3RUYWcoc3RydWN0VGFnKTsKICAgICByZXR1cm4gaGFuZGxlciA/IGhhbmRsZXIt
PnR5cGVUb1ZhbHVlU0VMIDogbmlsOwogfQogCiArIChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3Ry
dWN0Oihjb25zdCBjaGFyICopc3RydWN0VGFnCiB7Ci0gICAgU3RydWN0VGFnSGFuZGxlciogaGFu
ZGxlciA9IGdldFN0cnVjdFRhZ0hhbmRsZXIoc3RydWN0VGFnKTsKKyAgICBTdHJ1Y3RUYWdIYW5k
bGVyKiBoYW5kbGVyID0gaGFuZGVyRm9yU3RydWN0VGFnKHN0cnVjdFRhZyk7CiAgICAgcmV0dXJu
IGhhbmRsZXIgPyBoYW5kbGVyLT52YWx1ZVRvVHlwZVNFTCA6IG5pbDsKIH0KIApAQCAtMTE3NSwy
NiArMTE4NywyNiBAQCAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiAgICAgcmV0dXJuIFtzZWxm
IHRvU3RyaW5nXTsKIH0KIAotTlNJbnZvY2F0aW9uKiB0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3Io
Y29uc3QgY2hhciogZW5jb2RlZFR5cGUpCitOU0ludm9jYXRpb24gKnR5cGVUb1ZhbHVlSW52b2Nh
dGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKIHsKICAgICBTRUwgc2VsZWN0b3IgPSBb
SlNWYWx1ZSBzZWxlY3RvckZvclN0cnVjdFRvVmFsdWU6ZW5jb2RlZFR5cGVdOwogICAgIGlmICgh
c2VsZWN0b3IpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgY29uc3QgY2hhciogbWV0aG9kVHlw
ZXMgPSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldENsYXNzTWV0aG9kKFtKU1ZhbHVl
IGNsYXNzXSwgc2VsZWN0b3IpKTsKLSAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJ
bnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07CisgICAgTlNJbnZvY2F0aW9u
ICppbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVy
ZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11d
OwogICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVjdG9yXTsKICAgICByZXR1cm4gaW52
b2NhdGlvbjsKIH0KIAotTlNJbnZvY2F0aW9uKiB2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29u
c3QgY2hhciogZW5jb2RlZFR5cGUpCitOU0ludm9jYXRpb24gKnZhbHVlVG9UeXBlSW52b2NhdGlv
bkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKIHsKICAgICBTRUwgc2VsZWN0b3IgPSBbSlNW
YWx1ZSBzZWxlY3RvckZvclZhbHVlVG9TdHJ1Y3Q6ZW5jb2RlZFR5cGVdOwogICAgIGlmICghc2Vs
ZWN0b3IpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgY29uc3QgY2hhciogbWV0aG9kVHlwZXMg
PSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtKU1ZhbHVl
IGNsYXNzXSwgc2VsZWN0b3IpKTsKLSAgICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJ
bnZvY2F0aW9uIGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVzXV07CisgICAgTlNJbnZvY2F0aW9u
ICppbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVy
ZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczptZXRob2RUeXBlc11d
OwogICAgIFtpbnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbGVjdG9yXTsKICAgICByZXR1cm4gaW52
b2NhdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50
ZXJuYWwuaAkocmV2aXNpb24gMTM4NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZhbHVlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBAaW50
ZXJmYWNlIEpTVmFsdWUoSW50ZXJuYWwpCiAKLUpTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVl
KEpTVmFsdWUqKTsKK0pTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpTVmFsdWUgKik7CiAK
ICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1ZSBpbkNvbnRleHQ6
KEpTQ29udGV4dCAqKWNvbnRleHQ7CiAtIChKU1ZhbHVlICopaW5pdFdpdGhWYWx1ZTooSlNWYWx1
ZVJlZil2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CkBAIC00OCw3ICs0OCw3
IEBAIGlkIHZhbHVlVG9EaWN0aW9uYXJ5KEpTR2xvYmFsQ29udGV4dFJlZiwKIAogQGVuZAogCi1O
U0ludm9jYXRpb24qIHR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVk
VHlwZSk7Ci1OU0ludm9jYXRpb24qIHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb25zdCBjaGFy
KiBlbmNvZGVkVHlwZSk7CitOU0ludm9jYXRpb24gKnR5cGVUb1ZhbHVlSW52b2NhdGlvbkZvcihj
b25zdCBjaGFyKiBlbmNvZGVkVHlwZSk7CitOU0ludm9jYXRpb24gKnZhbHVlVG9UeXBlSW52b2Nh
dGlvbkZvcihjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSk7CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
CShyZXZpc2lvbiAxMzg2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIEBp
bnRlcmZhY2UgSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkKIAotSlNDb250ZXh0R3JvdXBSZWYg
Z2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSopOworSlNDb250ZXh0
R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqKTsK
IAogQGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJ
KHJldmlzaW9uIDEzODY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVy
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAogaWQgdHJ5VW53cmFwT2Jq
Y09iamVjdChKU0dsb2JhbENvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogCi1Qcm90b2NvbCogZ2V0
SlNFeHBvcnRQcm90b2NvbCgpOworUHJvdG9jb2wgKmdldEpTRXhwb3J0UHJvdG9jb2woKTsKIENs
YXNzIGdldE5TQmxvY2tDbGFzcygpOwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxMzg2NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsNyBAQCBzdGF0aWMgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKQogCiAvLyBEZWZhdWx0IGNv
bnZlcnNpb24gb2Ygc2VsZWN0b3JzIHRvIHByb3BlcnR5IG5hbWVzLgogLy8gQWxsIHNlbWljb2xv
bnMgYXJlIHJlbW92ZWQsIGxvd2VyY2FzZSBsZXR0ZXJzIGZvbGxvd2luZyBhIHNlbWljb2xvbiBh
cmUgY2FwaXRhbGl6ZWQuCi1zdGF0aWMgTlNTdHJpbmcqIHNlbGVjdG9yVG9Qcm9wZXJ0eU5hbWUo
Y29uc3QgY2hhciogc3RhcnQpCitzdGF0aWMgTlNTdHJpbmcgKnNlbGVjdG9yVG9Qcm9wZXJ0eU5h
bWUoY29uc3QgY2hhciogc3RhcnQpCiB7CiAgICAgLy8gVXNlICdpbmRleCcgdG8gY2hlY2sgZm9y
IGNvbG9ucywgaWYgdGhlcmUgYXJlIG5vbiwgdGhpcyBpcyBlYXN5IQogICAgIGNvbnN0IGNoYXIq
IGZpcnN0Q29sb24gPSBpbmRleChzdGFydCwgJzonKTsKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGlj
IE5TU3RyaW5nKiBzZWxlY3RvclRvUHJvcGVydHlOYW1lKAogICAgICAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgd2UndmUgY29uc3VtZWQgYSAnOicgLSB3YXNoLCByaW5zZSwgcmVwZWF0LgogICAgIH0K
IGRvbmU6Ci0gICAgTlNTdHJpbmcqIHJlc3VsdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpidWZmZXJdOworICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6YnVmZmVyXTsKICAgICBmcmVlKGJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBkb25lOgogLy8gTWFrZSBhbiBvYmplY3QgdGhhdCBp
cyBpbiBhbGwgd2F5cyBhcmUgY29tcGxldGVseSB2YW5pbGxhIEphdmFTY3JpcHQgb2JqZWN0LAog
Ly8gb3RoZXIgdGhhbiB0aGF0IGl0IGhhcyBhIG5hdGl2ZSBicmFuZCBzZXQgdGhhdCB3aWxsIGJl
IGRpc3BsYXllZCBieSB0aGUgZGVmYXVsdAogLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBj
b212ZXJzaW9uLgotc3RhdGljIEpTVmFsdWUqIGNyZWF0ZU9iamVjdFdpdGhDdXN0b21CcmFuZChK
U0NvbnRleHQqIGNvbnRleHQsIE5TU3RyaW5nKiBicmFuZCwgSlNDbGFzc1JlZiBwYXJlbnRDbGFz
cyA9IDAsIHZvaWQqIHByaXZhdGVEYXRhID0gMCkKK3N0YXRpYyBKU1ZhbHVlICpjcmVhdGVPYmpl
Y3RXaXRoQ3VzdG9tQnJhbmQoSlNDb250ZXh0ICpjb250ZXh0LCBOU1N0cmluZyAqYnJhbmQsIEpT
Q2xhc3NSZWYgcGFyZW50Q2xhc3MgPSAwLCB2b2lkKiBwcml2YXRlRGF0YSA9IDApCiB7CiAgICAg
SlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKICAgICBkZWZpbml0aW9uID0ga0pTQ2xhc3NE
ZWZpbml0aW9uRW1wdHk7CkBAIC0xMjAsMjYgKzEyMCwyNiBAQCBzdGF0aWMgSlNWYWx1ZSogY3Jl
YXRlT2JqZWN0V2l0aEN1c3RvbUJyCiAKIC8vIExvb2sgZm9yIEBvcHRpb25hbCBwcm9wZXJ0aWVz
IGluIHRoZSBwcm90b3R5cGUgY29udGFpbmluZyBhIHNlbGVjdG9yIHRvIHByb3BlcnR5CiAvLyBu
YW1lIG1hcHBpbmcsIHNlcGFyYXRlZCBieSBhIF9fSlNfRVhQT1JUX0FTX18gZGVsaW1pdGVyLgot
c3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkqIGNyZWF0ZVJlbmFtZU1hcChQcm90b2NvbCogcHJv
dG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCkKK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5
ICpjcmVhdGVSZW5hbWVNYXAoUHJvdG9jb2wgKnByb3RvY29sLCBCT09MIGlzSW5zdGFuY2VNZXRo
b2QpCiB7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVuYW1lTWFwID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZW5hbWVN
YXAgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogCiAgICAgZm9yRWFjaE1l
dGhvZEluUHJvdG9jb2wocHJvdG9jb2wsIE5PLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWws
IGNvbnN0IGNoYXIqKXsKLSAgICAgICAgTlNTdHJpbmcqIHJlbmFtZSA9IEAoc2VsX2dldE5hbWUo
c2VsKSk7CisgICAgICAgIE5TU3RyaW5nICpyZW5hbWUgPSBAKHNlbF9nZXROYW1lKHNlbCkpOwog
ICAgICAgICBOU1JhbmdlIHJhbmdlID0gW3JlbmFtZSByYW5nZU9mU3RyaW5nOkAiX19KU19FWFBP
UlRfQVNfXyJdOwogICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTlNTdHJpbmcqIHNlbGVjdG9yID0gW3JlbmFtZSBz
dWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9uXTsKKyAgICAgICAgTlNTdHJpbmcgKnNlbGVj
dG9yID0gW3JlbmFtZSBzdWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9uXTsKICAgICAgICAg
TlNVSW50ZWdlciBiZWdpbiA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOwogICAgICAg
ICBOU1VJbnRlZ2VyIGxlbmd0aCA9IFtyZW5hbWUgbGVuZ3RoXSAtIGJlZ2luIC0gMTsKLSAgICAg
ICAgTlNTdHJpbmcqIG5hbWUgPSBbcmVuYW1lIHN1YnN0cmluZ1dpdGhSYW5nZTooTlNSYW5nZSl7
IGJlZ2luLCBsZW5ndGggfV07CisgICAgICAgIE5TU3RyaW5nICpuYW1lID0gW3JlbmFtZSBzdWJz
dHJpbmdXaXRoUmFuZ2U6KE5TUmFuZ2UpeyBiZWdpbiwgbGVuZ3RoIH1dOwogICAgICAgICByZW5h
bWVNYXBbc2VsZWN0b3JdID0gbmFtZTsKICAgICB9KTsKIAogICAgIHJldHVybiByZW5hbWVNYXA7
CiB9CiAKLWlubGluZSB2b2lkIHB1dE5vbkVudW1lcmFibGUoSlNWYWx1ZSogYmFzZSwgTlNTdHJp
bmcqIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCitpbmxpbmUgdm9pZCBwdXROb25FbnVt
ZXJhYmxlKEpTVmFsdWUgKmJhc2UsIE5TU3RyaW5nICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZh
bHVlKQogewogICAgIFtiYXNlIGRlZmluZVByb3BlcnR5OnByb3BlcnR5TmFtZSBkZXNjcmlwdG9y
OkB7CiAgICAgICAgIEpTUHJvcGVydHlEZXNjcmlwdG9yVmFsdWVLZXk6IHZhbHVlLApAQCAtMTUz
LDEzICsxNTMsMTMgQEAgaW5saW5lIHZvaWQgcHV0Tm9uRW51bWVyYWJsZShKU1ZhbHVlKiBiYQog
Ly8gICogRGV0ZXJtaW5lIGEgcHJvcGVydHkgbmFtZSAoZWl0aGVyIHZpYSBhIHJlbmFtZU1hcCBv
ciBkZWZhdWx0IGNvbnZlcnNpb24pLgogLy8gICogSWYgYW4gYWNjZXNzb3JNYXAgaXMgcHJvdmlk
ZWQsIGFuZCBjb25hdGlucyBhIHRoaXMgbmFtZSwgc3RvcmUgdGhlIG1ldGhvZCBpbiB0aGUgbWFw
LgogLy8gICogT3RoZXJ3aXNlLCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgYWxyZWFkeSBjb25hdGlu
IGEgcHJvcGVydHkgd2l0aCBuYW1lLCBjcmVhdGUgaXQuCi1zdGF0aWMgdm9pZCBjb3B5TWV0aG9k
c1RvT2JqZWN0KEpTQ29udGV4dCogY29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2NvbCog
cHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgSlNWYWx1ZSogb2JqZWN0LCBOU011dGFi
bGVEaWN0aW9uYXJ5KiBhY2Nlc3Nvck1ldGhvZHMgPSBuaWwpCitzdGF0aWMgdm9pZCBjb3B5TWV0
aG9kc1RvT2JqZWN0KEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2Nv
bCAqcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgSlNWYWx1ZSAqb2JqZWN0LCBOU011
dGFibGVEaWN0aW9uYXJ5ICphY2Nlc3Nvck1ldGhvZHMgPSBuaWwpCiB7Ci0gICAgTlNNdXRhYmxl
RGljdGlvbmFyeSogcmVuYW1lTWFwID0gY3JlYXRlUmVuYW1lTWFwKHByb3RvY29sLCBpc0luc3Rh
bmNlTWV0aG9kKTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZW5hbWVNYXAgPSBjcmVhdGVS
ZW5hbWVNYXAocHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QpOwogCiAgICAgZm9yRWFjaE1ldGhv
ZEluUHJvdG9jb2wocHJvdG9jb2wsIFlFUywgaXNJbnN0YW5jZU1ldGhvZCwgXihTRUwgc2VsLCBj
b25zdCBjaGFyKiB0eXBlcyl7CiAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWVDU3RyID0gc2VsX2dl
dE5hbWUoc2VsKTsKLSAgICAgICAgTlNTdHJpbmcqIG5hbWUgPSBAKG5hbWVDU3RyKTsKKyAgICAg
ICAgTlNTdHJpbmcgKm5hbWUgPSBAKG5hbWVDU3RyKTsKICAgICAgICAgaWYgKGFjY2Vzc29yTWV0
aG9kcyAmJiBhY2Nlc3Nvck1ldGhvZHNbbmFtZV0pIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVm
IG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKGNvbnRleHQsIG9iamNDbGFz
cywgcHJvdG9jb2wsIGlzSW5zdGFuY2VNZXRob2QsIHNlbCwgdHlwZXMpOwogICAgICAgICAgICAg
aWYgKCFtZXRob2QpCkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIGNoYXIqIG1ha2VTZXR0ZXJO
YW1lKGNvbnN0IGNoYXIqIAogICAgIHJldHVybiBzZXR0ZXJOYW1lOwogfQogCi1zdGF0aWMgdm9p
ZCBjb3B5UHJvdG90eXBlUHJvcGVydGllcyhKU0NvbnRleHQqIGNvbnRleHQsIENsYXNzIG9iamND
bGFzcywgUHJvdG9jb2wqIHByb3RvY29sLCBKU1ZhbHVlKiBwcm90b3R5cGVWYWx1ZSkKK3N0YXRp
YyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3Mg
b2JqY0NsYXNzLCBQcm90b2NvbCAqcHJvdG9jb2wsIEpTVmFsdWUgKnByb3RvdHlwZVZhbHVlKQog
ewogICAgIC8vIEZpcnN0IGdhdGhlciBwcm9wcmV0aWVzIGludG8gdGhpcyBsaXN0LCB0aGVuIGhh
bmRsZSB0aGUgbWV0aG9kcyAoY2FwdHVyaW5nIHRoZSBhY2Nlc3NvciBtZXRob2RzKS4KICAgICBz
dHJ1Y3QgUHJvcGVydHkgewpAQCAtMjM0LDcgKzIzNCw3IEBAIHN0YXRpYyB2b2lkIGNvcHlQcm90
b3R5cGVQcm9wZXJ0aWVzKEpTQ28KICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphY2Nlc3Nvck1l
dGhvZHMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKIAogICAgIC8vIFVzZWZ1
bCB2YWx1ZS4KLSAgICBKU1ZhbHVlKiB1bmRlZmluZWQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRl
ZmluZWRJbkNvbnRleHQ6Y29udGV4dF07CisgICAgSlNWYWx1ZSAqdW5kZWZpbmVkID0gW0pTVmFs
dWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OmNvbnRleHRdOwogCiAgICAgZm9yRWFjaFBy
b3BlcnR5SW5Qcm90b2NvbChwcm90b2NvbCwgXihvYmpjX3Byb3BlcnR5X3QgcHJvcGVydHkpewog
ICAgICAgICBjaGFyKiBnZXR0ZXJOYW1lID0gMDsKQEAgLTI2MywxMSArMjYzLDExIEBAIHN0YXRp
YyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ28KICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb3BlcnR5TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBQcm9wZXJ0eSYgcHJv
cGVydHkgPSBwcm9wZXJ0eUxpc3RbaV07CiAKLSAgICAgICAgSlNWYWx1ZSogZ2V0dGVyID0gYWNj
ZXNzb3JNZXRob2RzW0AocHJvcGVydHkuZ2V0dGVyTmFtZSldOworICAgICAgICBKU1ZhbHVlICpn
ZXR0ZXIgPSBhY2Nlc3Nvck1ldGhvZHNbQChwcm9wZXJ0eS5nZXR0ZXJOYW1lKV07CiAgICAgICAg
IGZyZWUocHJvcGVydHkuZ2V0dGVyTmFtZSk7CiAgICAgICAgIEFTU0VSVCghW2dldHRlciBpc1Vu
ZGVmaW5lZF0pOwogCi0gICAgICAgIEpTVmFsdWUqIHNldHRlciA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgSlNWYWx1ZSAqc2V0dGVyID0gdW5kZWZpbmVkOwogICAgICAgICBpZiAocHJvcGVydHkuc2V0
dGVyTmFtZSkgewogICAgICAgICAgICAgc2V0dGVyID0gYWNjZXNzb3JNZXRob2RzW0AocHJvcGVy
dHkuc2V0dGVyTmFtZSldOwogICAgICAgICAgICAgZnJlZShwcm9wZXJ0eS5zZXR0ZXJOYW1lKTsK
QEAgLTI4NCwxNSArMjg0LDE1IEBAIHN0YXRpYyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVz
KEpTQ28KIH0KIAogQGludGVyZmFjZSBKU09iakNDbGFzc0luZm8gOiBOU09iamVjdCB7Ci0gICAg
SlNDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CiAgICAgQ2xh
c3MgbV9jbGFzczsKICAgICBib29sIG1fYmxvY2s7CiAgICAgSlNDbGFzc1JlZiBtX2NsYXNzUmVm
OwotICAgIEpTVmFsdWUqIG1fcHJvdG90eXBlOwotICAgIEpTVmFsdWUqIG1fY29uc3RydWN0b3I7
CisgICAgSlNWYWx1ZSAqbV9wcm90b3R5cGU7CisgICAgSlNWYWx1ZSAqbV9jb25zdHJ1Y3RvcjsK
IH0KIAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQqKWNvbnRleHQgZm9yQ2xhc3M6
KENsYXNzKWNscyBzdXBlckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5m
bzsKKy0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmb3JDbGFzczoo
Q2xhc3MpY2xzIHN1cGVyQ2xhc3NJbmZvOihKU09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZv
OwogLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKIC0gKEpTVmFsdWUg
Kiljb25zdHJ1Y3RvcjsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIC0gKEpTVmFsdWUgKiljb25zdHJ1
Y3RvcjsKIAogQGltcGxlbWVudGF0aW9uIEpTT2JqQ0NsYXNzSW5mbwogCi0tIChpZClpbml0V2l0
aENvbnRleHQ6KEpTQ29udGV4dCopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzIHN1cGVyQ2xh
c3NJbmZvOihKU09iakNDbGFzc0luZm8qKXN1cGVyQ2xhc3NJbmZvCistIChpZClpbml0V2l0aENv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yQ2xhc3M6KENsYXNzKWNscyBzdXBlckNsYXNz
SW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5mbwogewogICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtMzI3LDggKzMyNyw4IEBAIC0gKGlkKWluaXRX
aXRoQ29udGV4dDooSlNDb250ZXh0Kiljb250ZXgKICAgICAgICAgcHV0Tm9uRW51bWVyYWJsZSht
X3Byb3RvdHlwZSwgQCJjb25zdHJ1Y3RvciIsIG1fY29uc3RydWN0b3IpOwogICAgICAgICBwdXRO
b25FbnVtZXJhYmxlKG1fY29uc3RydWN0b3IsIEAicHJvdG90eXBlIiwgbV9wcm90b3R5cGUpOwog
Ci0gICAgICAgIFByb3RvY29sKiBleHBvcnRQcm90b2NvbCA9IGdldEpTRXhwb3J0UHJvdG9jb2wo
KTsKLSAgICAgICAgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG9jb2woY2xzLCBleHBv
cnRQcm90b2NvbCwgXihQcm90b2NvbCogcHJvdG9jb2wpeworICAgICAgICBQcm90b2NvbCAqZXhw
b3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7CisgICAgICAgIGZvckVhY2hQcm90
b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKGNscywgZXhwb3J0UHJvdG9jb2wsIF4oUHJvdG9jb2wg
KnByb3RvY29sKXsKICAgICAgICAgICAgIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKGNvbnRleHQs
IGNscywgcHJvdG9jb2wsIG1fcHJvdG90eXBlKTsKICAgICAgICAgICAgIGNvcHlNZXRob2RzVG9P
YmplY3QoY29udGV4dCwgY2xzLCBwcm90b2NvbCwgTk8sIG1fY29uc3RydWN0b3IpOwogICAgICAg
ICB9KTsKQEAgLTM3NSwxMCArMzc1LDEwIEBAIC0gKEpTVmFsdWUgKiljb25zdHJ1Y3RvcgogCiBA
aW1wbGVtZW50YXRpb24gSlNXcmFwcGVyTWFwIHsKICAgICBKU0NvbnRleHQgKm1fY29udGV4dDsK
LSAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBtX2NsYXNzTWFwOworICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKm1fY2xhc3NNYXA7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0
Kiljb250ZXh0CistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsK
ICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKQEAgLTQxMyw3ICs0MTMs
NyBAQCAtIChKU09iakNDbGFzc0luZm8qKWNsYXNzSW5mb0ZvckNsYXNzOihDCiAKIC0gKEpTVmFs
dWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QKIHsKLSAgICBKU1ZhbHVlKiB3cmFwcGVy
ID0gb2JqY19nZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0KTsKKyAgICBKU1Zh
bHVlICp3cmFwcGVyID0gb2JqY19nZXRBc3NvY2lhdGVkT2JqZWN0KG9iamVjdCwgbV9jb250ZXh0
KTsKICAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLmNvbnRleHQpCiAgICAgICAgIHJldHVybiB3
cmFwcGVyOwogCkBAIC00NDksOSArNDQ5LDkgQEAgaWQgdHJ5VW53cmFwT2JqY09iamVjdChKU0ds
b2JhbENvbnRleHRSZQogICAgIHJldHVybiBuaWw7CiB9CiAKLVByb3RvY29sKiBnZXRKU0V4cG9y
dFByb3RvY29sKCkKK1Byb3RvY29sICpnZXRKU0V4cG9ydFByb3RvY29sKCkKIHsKLSAgICBzdGF0
aWMgUHJvdG9jb2wqIHByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNFeHBvcnQiKTsKKyAg
ICBzdGF0aWMgUHJvdG9jb2wgKnByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNFeHBvcnQi
KTsKICAgICByZXR1cm4gcHJvdG9jb2w7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEzODY0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAogCi1K
U09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQqLCBDbGFz
cywgUHJvdG9jb2wqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwgY29uc3QgY2hhciogdHlw
ZXMpOwotSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhKU0NvbnRleHQq
LCBpZCk7CitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChKU0NvbnRl
eHQgKiwgQ2xhc3MsIFByb3RvY29sICosIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMLCBjb25z
dCBjaGFyKiB0eXBlcyk7CitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2Nr
KEpTQ29udGV4dCAqLCBpZCk7CiAKIGlkIHRyeVVud3JhcEJsb2NrKEpTR2xvYmFsQ29udGV4dFJl
ZiwgSlNPYmplY3RSZWYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakND
YWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDEzODY2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAKIGNsYXNzIENhbGxiYWNrQXJndW1lbnQgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkNhbGxiYWNrQXJndW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52
b2NhdGlvbiosIE5TSW50ZWdlciwgSlNDb250ZXh0KiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJlZiop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqLCBOU0ludGVnZXIsIEpT
Q29udGV4dCAqLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKikgPSAwOwogCiAgICAgT3duUHRyPENh
bGxiYWNrQXJndW1lbnQ+IG1fbmV4dDsKIH07CkBAIC01Myw3ICs1Myw3IEBAIENhbGxiYWNrQXJn
dW1lbnQ6On5DYWxsYmFja0FyZ3VtZW50KCkKIH0KIAogY2xhc3MgQ2FsbGJhY2tBcmd1bWVudEJv
b2xlYW4gOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCB2b2lkIHNldChO
U0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250
ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2Vy
IGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQs
IEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYm9vbCB2YWx1ZSA9IEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQpOwog
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51
bWJlcl07CkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIENhbGxiYWNrQXJndW1lbnRCb29sZWFuIDog
cHVibGljIEMKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIENhbGxiYWNrQXJndW1lbnRJ
bnRlZ2VyIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotICAgIHZpcnR1YWwgdm9pZCBzZXQo
TlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9u
LCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJl
ZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAgICAg
ICAgVCB2YWx1ZSA9IChUKUpTQzo6dG9JbnQzMihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbikpOwogICAgICAgICBbaW52
b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CkBAIC03
MSw3ICs3MSw3IEBAIGNsYXNzIENhbGxiYWNrQXJndW1lbnRJbnRlZ2VyIDogcHVibGljIEMKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIENhbGxiYWNrQXJndW1lbnREb3VibGUgOiBwdWJs
aWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24q
IGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCisg
ICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBh
cmd1bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBUIHZhbHVlID0g
KFQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIGFyZ3Vt
ZW50LCBleGNlcHRpb24pOwogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUg
YXRJbmRleDphcmd1bWVudE51bWJlcl07CkBAIC03OSwxNSArNzksMTUgQEAgY2xhc3MgQ2FsbGJh
Y2tBcmd1bWVudERvdWJsZSA6IHB1YmxpYyBDYQogfTsKIAogY2xhc3MgQ2FsbGJhY2tBcmd1bWVu
dEpTVmFsdWUgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlND
b250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKikgb3ZlcnJp
ZGUKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRl
Z2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1l
bnQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUg
PSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dF07Cisg
ICAgICAgIEpTVmFsdWUgKnZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6YXJndW1lbnQg
aW5Db250ZXh0OmNvbnRleHRdOwogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFs
dWUgYXRJbmRleDphcmd1bWVudE51bWJlcl07CiAgICAgfQogfTsKIAogY2xhc3MgQ2FsbGJhY2tB
cmd1bWVudElkIDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpT
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopIG92ZXJy
aWRlCisgICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50
ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlkIHZhbHVlID0gdmFs
dWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudCk7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFy
Z3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTEwOSw3ICsxMDksNyBA
QCBwcml2YXRlOgogICAgICAgICBbbV9jbGFzcyByZWxlYXNlXTsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50
TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlv
biAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVmID0gY29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KTsKIApAQCAtMTMyLDcgKzEzMiw3IEBAIHByaXZhdGU6CiB9
OwogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIgOiBwdWJsaWMgQ2FsbGJhY2tBcmd1
bWVudCB7Ci0gICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGludm9jYXRpb24sIE5T
SW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
Z3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lk
IHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwg
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZCB2YWx1ZSA9IHZhbHVlVG9OdW1iZXIo
Y29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CiAg
ICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVt
YmVyXTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNOdW1iZXIg
OiBwdWJsaWMgCiB9OwogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNTdHJpbmcgOiBwdWJsaWMg
Q2FsbGJhY2tBcmd1bWVudCB7Ci0gICAgdmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24qIGlu
dm9jYXRpb24sIE5TSW50ZWdlciBhcmd1bWVudE51bWJlciwgSlNDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCisgICAg
dmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZCB2YWx1ZSA9IHZh
bHVlVG9TdHJpbmcoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgYXJndW1lbnQsIGV4
Y2VwdGlvbik7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4
OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBjbGFzcyBDYWxsYmFja0FyZ3Vt
ZW50TlNTdHJpbmcgOiBwdWJsaWMgCiB9OwogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50TlNEYXRl
IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVy
cmlkZQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uLCBOU0lu
dGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1
bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWQg
dmFsdWUgPSB2YWx1ZVRvRGF0ZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1
bWVudCwgZXhjZXB0aW9uKTsKICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVl
IGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwpAQCAtMTU2LDcgKzE1Niw3IEBAIGNsYXNzIENhbGxi
YWNrQXJndW1lbnROU0RhdGUgOiBwdWJsaWMgQ2EKIH07CiAKIGNsYXNzIENhbGxiYWNrQXJndW1l
bnROU0FycmF5IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotICAgIHZpcnR1YWwgdm9pZCBz
ZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpT
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uICppbnZvY2F0
aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1
ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvQXJyYXkoY29udGV4dEludGVybmFsQ29udGV4dChjb250
ZXh0KSwgYXJndW1lbnQsIGV4Y2VwdGlvbik7CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3Vt
ZW50OiZ2YWx1ZSBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBj
bGFzcyBDYWxsYmFja0FyZ3VtZW50TlNBcnJheSA6IHB1YmxpYyBDCiB9OwogCiBjbGFzcyBDYWxs
YmFja0FyZ3VtZW50TlNEaWN0aW9uYXJ5IDogcHVibGljIENhbGxiYWNrQXJndW1lbnQgewotICAg
IHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJn
dW1lbnROdW1iZXIsIEpTQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZv
Y2F0aW9uICppbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWQgdmFsdWUgPSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0
SW50ZXJuYWxDb250ZXh0KGNvbnRleHQpLCBhcmd1bWVudCwgZXhjZXB0aW9uKTsKICAgICAgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6YXJndW1lbnROdW1iZXJdOwpA
QCAtMTczLDE2ICsxNzMsMTYgQEAgY2xhc3MgQ2FsbGJhY2tBcmd1bWVudE5TRGljdGlvbmFyeSA6
IHB1YgogCiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50U3RydWN0IDogcHVibGljIENhbGxiYWNrQXJn
dW1lbnQgewogcHVibGljOgotICAgIENhbGxiYWNrQXJndW1lbnRTdHJ1Y3QoTlNJbnZvY2F0aW9u
KiBjb252ZXJzaW9uSW52b2NhdGlvbiwgY29uc3QgY2hhciogZW5jb2RlZFR5cGUpCisgICAgQ2Fs
bGJhY2tBcmd1bWVudFN0cnVjdChOU0ludm9jYXRpb24gKmNvbnZlcnNpb25JbnZvY2F0aW9uLCBj
b25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKICAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZvY2F0aW9u
KGNvbnZlcnNpb25JbnZvY2F0aW9uKQogICAgICAgICAsIG1fYnVmZmVyKGVuY29kZWRUeXBlKQog
ICAgIHsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBzZXQoTlNJbnZv
Y2F0aW9uKiBpbnZvY2F0aW9uLCBOU0ludGVnZXIgYXJndW1lbnROdW1iZXIsIEpTQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcmd1bWVudCwgSlNWYWx1ZVJlZiopIG92ZXJyaWRlCisgICAg
dmlydHVhbCB2b2lkIHNldChOU0ludm9jYXRpb24gKmludm9jYXRpb24sIE5TSW50ZWdlciBhcmd1
bWVudE51bWJlciwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmIGFyZ3VtZW50LCBKU1Zh
bHVlUmVmKikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFs
dWUgdmFsdWVXaXRoVmFsdWU6YXJndW1lbnQgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBK
U1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmFyZ3VtZW50IGluQ29udGV4
dDpjb250ZXh0XTsKICAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRpb24gaW52b2tlV2l0aFRh
cmdldDp2YWx1ZV07CiAgICAgICAgIFttX2NvbnZlcnNpb25JbnZvY2F0aW9uIGdldFJldHVyblZh
bHVlOm1fYnVmZmVyXTsKICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6bV9idWZmZXIg
YXRJbmRleDphcmd1bWVudE51bWJlcl07CkBAIC0xOTQsMjQgKzE5NCwyOSBAQCBwcml2YXRlOgog
CiBjbGFzcyBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Fy
Z3VtZW50IHsKIHB1YmxpYzoKLSAgICBDYWxsYmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjayhKU0Js
b2NrQWRhcHRvciogYWRhcHRvcikKKyAgICBzdGF0aWMgQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2Fs
bGJhY2sqIGNyZWF0ZUFkb3B0aW5nSlNCbG9ja0FkYXB0b3IoSlNCbG9ja0FkYXB0b3IgKmFkYXB0
b3IpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxi
YWNrKGFkYXB0b3IpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWxsYmFja0FyZ3VtZW50Qmxv
Y2tDYWxsYmFjayhKU0Jsb2NrQWRhcHRvciAqYWRhcHRvcikKICAgICAgICAgOiBtX2FkYXB0b3Io
YWRhcHRvcikKICAgICB7CiAgICAgfQogICAgIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5DYWxs
YmFja0FyZ3VtZW50QmxvY2tDYWxsYmFjaygpCiAgICAgewogICAgICAgICBbbV9hZGFwdG9yIHJl
bGVhc2VdOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiog
aW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFyZ3VtZW50TnVtYmVyLCBKU0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYgYXJndW1lbnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgTlNJbnRlZ2VyIGFy
Z3VtZW50TnVtYmVyLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYgYXJndW1lbnQsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlkIGJsb2NrID0g
W21fYWRhcHRvciBibG9ja0Zyb21WYWx1ZTphcmd1bWVudCBpbkNvbnRleHQ6Y29udGV4dCB3aXRo
RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZi
bG9jayBhdEluZGV4OmFyZ3VtZW50TnVtYmVyXTsKICAgICB9CiAKLSAgICBKU0Jsb2NrQWRhcHRv
ciogbV9hZGFwdG9yOworICAgIEpTQmxvY2tBZGFwdG9yICptX2FkYXB0b3I7CiB9OwogCiBjbGFz
cyBBcmd1bWVudFR5cGVEZWxlZ2F0ZSB7CkBAIC0yNzIsMTMgKzI3NywxMyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlc3VsdFR5cGUgdHlwZUJsb2NrKGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBj
aGFyKiBlbmQpCiAgICAgewogICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2luLCBlbmQpOwot
ICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrQXJndW1lbnRCbG9ja0NhbGxiYWNrKFtbSlNCbG9j
a0FkYXB0b3IgYWxsb2NdIGluaXRXaXRoQmxvY2tTaWduYXR1cmVGcm9tUHJvdG9jb2w6Y29weV0p
OworICAgICAgICByZXR1cm4gQ2FsbGJhY2tBcmd1bWVudEJsb2NrQ2FsbGJhY2s6OmNyZWF0ZUFk
b3B0aW5nSlNCbG9ja0FkYXB0b3IoW1tKU0Jsb2NrQWRhcHRvciBhbGxvY10gaW5pdFdpdGhCbG9j
a1NpZ25hdHVyZUZyb21Qcm90b2NvbDpjb3B5XSk7CiAgICAgfQogCiAgICAgc3RhdGljIFJlc3Vs
dFR5cGUgdHlwZVN0cnVjdChjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kKQogICAg
IHsKICAgICAgICAgU3RyaW5nUmFuZ2UgY29weShiZWdpbiwgZW5kKTsKLSAgICAgICAgaWYgKE5T
SW52b2NhdGlvbiogaW52b2NhdGlvbiA9IHZhbHVlVG9UeXBlSW52b2NhdGlvbkZvcihjb3B5KSkK
KyAgICAgICAgaWYgKE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IHZhbHVlVG9UeXBlSW52b2Nh
dGlvbkZvcihjb3B5KSkKICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tBcmd1bWVudFN0
cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjkw
LDE4ICsyOTUsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIEpTVmFs
dWVSZWYgZ2V0KE5TSW52b2NhdGlvbiosIEpTQ29udGV4dCosIEpTVmFsdWVSZWYqKSA9IDA7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlUmVmIGdldChOU0ludm9jYXRpb24gKiwgSlNDb250ZXh0ICosIEpT
VmFsdWVSZWYqKSA9IDA7CiB9OwogCiBjbGFzcyBDYWxsYmFja1Jlc3VsdFZvaWQgOiBwdWJsaWMg
Q2FsbGJhY2tSZXN1bHQgewotICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9u
KiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFs
IEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiAqLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFs
dWVSZWYqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCkpOwogICAgIH0KIH07CiAKIGNsYXNz
IENhbGxiYWNrUmVzdWx0SWQgOiBwdWJsaWMgQ2FsbGJhY2tSZXN1bHQgewotICAgIHZpcnR1YWwg
SlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRl
eHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJ
bnZvY2F0aW9uICppbnZvY2F0aW9uLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYqKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWQgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0aW9uIGdl
dFJldHVyblZhbHVlOiZ2YWx1ZV07CkBAIC0zMTEsNyArMzE2LDcgQEAgY2xhc3MgQ2FsbGJhY2tS
ZXN1bHRJZCA6IHB1YmxpYyBDYWxsYmFjawogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3Mg
Q2FsbGJhY2tSZXN1bHROdW1lcmljIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKLSAgICB2aXJ0
dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBj
b250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0
KE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVm
Kikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIFQgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0aW9u
IGdldFJldHVyblZhbHVlOiZ2YWx1ZV07CkBAIC0zMjAsNyArMzI1LDcgQEAgY2xhc3MgQ2FsbGJh
Y2tSZXN1bHROdW1lcmljIDogcHVibGljIENhbAogfTsKIAogY2xhc3MgQ2FsbGJhY2tSZXN1bHRC
b29sZWFuIDogcHVibGljIENhbGxiYWNrUmVzdWx0IHsKLSAgICB2aXJ0dWFsIEpTVmFsdWVSZWYg
Z2V0KE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiwgSlNDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVl
UmVmKikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIEpTVmFsdWVSZWYgZ2V0KE5TSW52b2NhdGlvbiAq
aW52b2NhdGlvbiwgSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlUmVmKikgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGJvb2wgdmFsdWU7CiAgICAgICAgIFtpbnZvY2F0aW9uIGdldFJldHVyblZh
bHVlOiZ2YWx1ZV07CkBAIC0zMzAsMTQgKzMzNSwxNCBAQCBjbGFzcyBDYWxsYmFja1Jlc3VsdEJv
b2xlYW4gOiBwdWJsaWMgQ2FsCiAKIGNsYXNzIENhbGxiYWNrUmVzdWx0U3RydWN0IDogcHVibGlj
IENhbGxiYWNrUmVzdWx0IHsKIHB1YmxpYzoKLSAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0lu
dm9jYXRpb24qIGNvbnZlcnNpb25JbnZvY2F0aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkK
KyAgICBDYWxsYmFja1Jlc3VsdFN0cnVjdChOU0ludm9jYXRpb24gKmNvbnZlcnNpb25JbnZvY2F0
aW9uLCBjb25zdCBjaGFyKiBlbmNvZGVkVHlwZSkKICAgICAgICAgOiBtX2NvbnZlcnNpb25JbnZv
Y2F0aW9uKGNvbnZlcnNpb25JbnZvY2F0aW9uKQogICAgICAgICAsIG1fYnVmZmVyKGVuY29kZWRU
eXBlKQogICAgIHsKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZpcnR1YWwgSlNWYWx1ZVJl
ZiBnZXQoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBKU0NvbnRleHQqIGNvbnRleHQsIEpTVmFs
dWVSZWYqKSBvdmVycmlkZQorICAgIHZpcnR1YWwgSlNWYWx1ZVJlZiBnZXQoTlNJbnZvY2F0aW9u
ICppbnZvY2F0aW9uLCBKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYqKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgW2ludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6bV9idWZmZXJdOwogCkBA
IC0zNDUsNyArMzUwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgW21fY29udmVyc2lvbkludm9jYXRp
b24gc2V0QXJndW1lbnQ6JmNvbnRleHQgYXRJbmRleDozXTsKICAgICAgICAgW21fY29udmVyc2lv
bkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDpbSlNWYWx1ZSBjbGFzc11dOwogCi0gICAgICAg
IEpTVmFsdWUqIHZhbHVlOworICAgICAgICBKU1ZhbHVlICp2YWx1ZTsKICAgICAgICAgW21fY29u
dmVyc2lvbkludm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6JnZhbHVlXTsKICAgICAgICAgcmV0dXJu
IHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7CiAgICAgfQpAQCAtMzk4LDcgKzQwMyw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVzdWx0VHlwZSB0eXBlU3RydWN0KGNvbnN0IGNoYXIqIGJlZ2lu
LCBjb25zdCBjaGFyKiBlbmQpCiAgICAgewogICAgICAgICBTdHJpbmdSYW5nZSBjb3B5KGJlZ2lu
LCBlbmQpOwotICAgICAgICBpZiAoTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gdHlwZVRvVmFs
dWVJbnZvY2F0aW9uRm9yKGNvcHkpKQorICAgICAgICBpZiAoTlNJbnZvY2F0aW9uICppbnZvY2F0
aW9uID0gdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGNvcHkpKQogICAgICAgICAgICAgcmV0dXJu
IG5ldyBDYWxsYmFja1Jlc3VsdFN0cnVjdChpbnZvY2F0aW9uLCBjb3B5KTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtNDEyLDcgKzQxNyw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsKIAog
Y2xhc3MgT2JqQ0NhbGxiYWNrRnVuY3Rpb24gewogcHVibGljOgotICAgIE9iakNDYWxsYmFja0Z1
bmN0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBDYWxs
YmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFzcywgUGFzc093blB0cjxDYWxsYmFja0Fy
Z3VtZW50PiBhcmd1bWVudHMsIFBhc3NPd25QdHI8Q2FsbGJhY2tSZXN1bHQ+IHJlc3VsdCkKKyAg
ICBPYmpDQ2FsbGJhY2tGdW5jdGlvbihKU0NvbnRleHQgKmNvbnRleHQsIE5TSW52b2NhdGlvbiAq
aW52b2NhdGlvbiwgQ2FsbGJhY2tUeXBlIHR5cGUsIENsYXNzIGluc3RhbmNlQ2xhc3MsIFBhc3NP
d25QdHI8Q2FsbGJhY2tBcmd1bWVudD4gYXJndW1lbnRzLCBQYXNzT3duUHRyPENhbGxiYWNrUmVz
dWx0PiByZXN1bHQpCiAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV90
eXBlKHR5cGUpCiAgICAgICAgICwgbV9pbnN0YW5jZUNsYXNzKFtpbnN0YW5jZUNsYXNzIHJldGFp
bl0pCkBAIC00MzAsNyArNDM1LDcgQEAgcHVibGljOgogCiAgICAgSlNWYWx1ZVJlZiBjYWxsKEpT
Q29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKLSAgICBKU0NvbnRleHQqIGNvbnRleHQoKQorICAgIEpTQ29udGV4dCAqY29udGV4dCgp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogICAgIH0KQEAgLTU1Niw3
ICs1NjEsNyBAQCBpbmxpbmUgYm9vbCBza2lwTnVtYmVyKGNvbnN0IGNoYXIqJiBwb3NpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlv
bkZvckludm9jYXRpb24oSlNDb250ZXh0KiBjb250ZXh0LCBOU0ludm9jYXRpb24qIGludm9jYXRp
b24sIENhbGxiYWNrVHlwZSB0eXBlLCBDbGFzcyBpbnN0YW5jZUNsYXNzLCBjb25zdCBjaGFyKiBz
aWduYXR1cmVXaXRoT2JqY0NsYXNzZXMpCitzdGF0aWMgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNr
RnVuY3Rpb25Gb3JJbnZvY2F0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvY2F0aW9uICpp
bnZvY2F0aW9uLCBDYWxsYmFja1R5cGUgdHlwZSwgQ2xhc3MgaW5zdGFuY2VDbGFzcywgY29uc3Qg
Y2hhciogc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzKQogewogICAgIGNvbnN0IGNoYXIqIHBvc2l0
aW9uID0gc2lnbmF0dXJlV2l0aE9iamNDbGFzc2VzOwogCkBAIC01OTksNyArNjA0LDcgQEAgc3Rh
dGljIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRgogICAgIC8vIFBhdGNoIGluIHRo
ZSByaWdodCBsZW5ndGggJiBbUHJvdG90eXBlXSB2YWx1ZXMgZm9yIG5vdywgYnV0IHNob3VsZCBm
aXggdGhpcy4KICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgY3VycmVudGx5IGZh
aWxzLCBzaW5jZSB0aGlzIGlzIG5vdCB5ZXQgYSBzdWJjbGFzcyBvZiBmdW5jdG9uLCBidXQgY2Fs
bCAmIGFwcGx5IGRvIHdvcmsuCiAgICAgSlNPYmplY3RSZWYgZnVuY3Rpb25PYmplY3QgPSBKU09i
amVjdE1ha2UoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25DbGFzcygpLCBuZXcgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgaW52b2NhdGlv
biwgdHlwZSwgaW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVzdWx0LnJlbGVh
c2UoKSkpOwotICAgIEpTVmFsdWUqIHZhbHVlID0gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVu
Y3Rpb25PYmplY3QgaW5Db250ZXh0OmNvbnRleHRdOworICAgIEpTVmFsdWUgKnZhbHVlID0gW0pT
VmFsdWUgdmFsdWVXaXRoVmFsdWU6ZnVuY3Rpb25PYmplY3QgaW5Db250ZXh0OmNvbnRleHRdOwog
ICAgIHZhbHVlW0AibGVuZ3RoIl0gPSBAKGFyZ3VtZW50Q291bnQpOwogICAgIHZhbHVlW0AiX19w
cm90b19fIl0gPSBjb250ZXh0W0AiRnVuY3Rpb24iXVtAInByb3RvdHlwZSJdOwogICAgIHZhbHVl
W0AidG9TdHJpbmciXSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0aW9uKCl7IHJl
dHVybiAnIgpAQCAtNjEwLDIxICs2MTUsMjEgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG9iakNDYWxs
YmFja0Z1bmN0aW9uRgogICAgIHJldHVybiBmdW5jdGlvbk9iamVjdDsKIH0KIAotSlNPYmplY3RS
ZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlNDb250ZXh0KiBjb250ZXh0LCBDbGFz
cyBjbHMsIFByb3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCBTRUwgc2Vs
LCBjb25zdCBjaGFyKiB0eXBlcykKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9y
TWV0aG9kKEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3MgY2xzLCBQcm90b2NvbCAqcHJvdG9jb2ws
IEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMIHNlbCwgY29uc3QgY2hhciogdHlwZXMpCiB7Ci0g
ICAgTlNJbnZvY2F0aW9uKiBpbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0
aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBl
czp0eXBlc11dOworICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24g
aW52b2NhdGlvbldpdGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVy
ZVdpdGhPYmpDVHlwZXM6dHlwZXNdXTsKICAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3RvcjpzZWxd
OwogICAgIGlmICghaXNJbnN0YW5jZU1ldGhvZCkKICAgICAgICAgW2ludm9jYXRpb24gc2V0VGFy
Z2V0OmNsc107CiAgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbihj
b250ZXh0LCBpbnZvY2F0aW9uLCBpc0luc3RhbmNlTWV0aG9kID8gQ2FsbGJhY2tJbnN0YW5jZU1l
dGhvZCA6IENhbGxiYWNrQ2xhc3NNZXRob2QsIGlzSW5zdGFuY2VNZXRob2QgPyBjbHMgOiBuaWws
IF9wcm90b2NvbF9nZXRNZXRob2RUeXBlRW5jb2RpbmcocHJvdG9jb2wsIHNlbCwgWUVTLCBpc0lu
c3RhbmNlTWV0aG9kKSk7CiB9CiAKLUpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9y
QmxvY2soSlNDb250ZXh0KiBjb250ZXh0LCBpZCB0YXJnZXQpCitKU09iamVjdFJlZiBvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCAqY29udGV4dCwgaWQgdGFyZ2V0KQogewog
ICAgIGlmICghX0Jsb2NrX2hhc19zaWduYXR1cmUodGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgY29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2NrX3NpZ25hdHVyZSh0YXJnZXQpOwot
ICAgIE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlvbldp
dGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpDVHlw
ZXM6c2lnbmF0dXJlXV07CisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gW05TSW52b2Nh
dGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbTlNNZXRob2RTaWduYXR1cmUgc2ln
bmF0dXJlV2l0aE9iakNUeXBlczpzaWduYXR1cmVdXTsKICAgICBbaW52b2NhdGlvbiBzZXRUYXJn
ZXQ6dGFyZ2V0XTsKICAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9u
KGNvbnRleHQsIGludm9jYXRpb24sIENhbGxiYWNrQmxvY2ssIG5pbCwgc2lnbmF0dXJlKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqY1J1bnRpbWVFeHRyYXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iamNSdW50aW1lRXh0cmFzLmgJ
KHJldmlzaW9uIDEzODY2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqY1J1bnRp
bWVFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW1wb3J0IDx3
dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCi1pbmxpbmUgYm9vbCBwcm90
b2NvbEltcGxlbWVudHNQcm90b2NvbChQcm90b2NvbCogY2FuZGlkYXRlLCBQcm90b2NvbCogdGFy
Z2V0KQoraW5saW5lIGJvb2wgcHJvdG9jb2xJbXBsZW1lbnRzUHJvdG9jb2woUHJvdG9jb2wgKmNh
bmRpZGF0ZSwgUHJvdG9jb2wgKnRhcmdldCkKIHsKICAgICB1bnNpZ25lZCBwcm90b2NvbFByb3Rv
Y29sc0NvdW50OwotICAgIFByb3RvY29sKiogcHJvdG9jb2xQcm90b2NvbHMgPSBwcm90b2NvbF9j
b3B5UHJvdG9jb2xMaXN0KGNhbmRpZGF0ZSwgJnByb3RvY29sUHJvdG9jb2xzQ291bnQpOworICAg
IFByb3RvY29sICoqIHByb3RvY29sUHJvdG9jb2xzID0gcHJvdG9jb2xfY29weVByb3RvY29sTGlz
dChjYW5kaWRhdGUsICZwcm90b2NvbFByb3RvY29sc0NvdW50KTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvdG9jb2xQcm90b2NvbHNDb3VudDsgKytpKSB7CiAgICAgICAgIGlmIChw
cm90b2NvbF9pc0VxdWFsKHByb3RvY29sUHJvdG9jb2xzW2ldLCB0YXJnZXQpKSB7CiAgICAgICAg
ICAgICBmcmVlKHByb3RvY29sUHJvdG9jb2xzKTsKQEAgLTQxLDIyICs0MSwyMiBAQCBpbmxpbmUg
Ym9vbCBwcm90b2NvbEltcGxlbWVudHNQcm90b2NvbChQCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1pbmxpbmUgdm9pZCBmb3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChDbGFzcyBj
bHMsIFByb3RvY29sKiB0YXJnZXQsIHZvaWQgKF5jYWxsYmFjaykoUHJvdG9jb2wqKSkKK2lubGlu
ZSB2b2lkIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKENsYXNzIGNscywgUHJv
dG9jb2wgKnRhcmdldCwgdm9pZCAoXmNhbGxiYWNrKShQcm90b2NvbCAqKSkKIHsKICAgICBBU1NF
UlQoY2xzKTsKICAgICBBU1NFUlQodGFyZ2V0KTsKIAotICAgIFZlY3RvcjxQcm90b2NvbCo+IHdv
cmtsaXN0OworICAgIFZlY3RvcjxQcm90b2NvbCAqPiB3b3JrbGlzdDsKICAgICBIYXNoU2V0PHZv
aWQqPiB2aXNpdGVkOwogCiAgICAgLy8gSW5pdGlhbGx5IGZpbGwgdGhlIHdvcmtsaXN0IHdpdGgg
dGhlIENsYXNzJ3MgcHJvdG9jb2xzLgogICAgIHVuc2lnbmVkIHByb3RvY29sc0NvdW50OwotICAg
IFByb3RvY29sKiogcHJvdG9jb2xzID0gY2xhc3NfY29weVByb3RvY29sTGlzdChjbHMsICZwcm90
b2NvbHNDb3VudCk7CisgICAgUHJvdG9jb2wgKiogcHJvdG9jb2xzID0gY2xhc3NfY29weVByb3Rv
Y29sTGlzdChjbHMsICZwcm90b2NvbHNDb3VudCk7CiAgICAgd29ya2xpc3QuYXBwZW5kKHByb3Rv
Y29scywgcHJvdG9jb2xzQ291bnQpOwogICAgIGZyZWUocHJvdG9jb2xzKTsKIAogICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFByb3RvY29sKiBwcm90b2NvbCA9IHdv
cmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgUHJvdG9jb2wgKnByb3RvY29sID0gd29ya2xpc3QubGFz
dCgpOwogICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAKICAgICAgICAgLy8gQXJlIHdl
IGVuY291bnRlcmluZyB0aGlzIFByb3RvY29sIGZvciB0aGUgZmlyc3QgdGltZT8KQEAgLTgzLDcg
KzgzLDcgQEAgaW5saW5lIHZvaWQgZm9yRWFjaE1ldGhvZEluQ2xhc3MoQ2xhc3MgYwogICAgIGZy
ZWUobWV0aG9kcyk7CiB9CiAKLWlubGluZSB2b2lkIGZvckVhY2hNZXRob2RJblByb3RvY29sKFBy
b3RvY29sKiBwcm90b2NvbCwgQk9PTCBpc1JlcXVpcmVkTWV0aG9kLCBCT09MIGlzSW5zdGFuY2VN
ZXRob2QsIHZvaWQgKF5jYWxsYmFjaykoU0VMLCBjb25zdCBjaGFyKikpCitpbmxpbmUgdm9pZCBm
b3JFYWNoTWV0aG9kSW5Qcm90b2NvbChQcm90b2NvbCAqcHJvdG9jb2wsIEJPT0wgaXNSZXF1aXJl
ZE1ldGhvZCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kLCB2b2lkICheY2FsbGJhY2spKFNFTCwgY29u
c3QgY2hhciopKQogewogICAgIHVuc2lnbmVkIGNvdW50OwogICAgIHN0cnVjdCBvYmpjX21ldGhv
ZF9kZXNjcmlwdGlvbiogbWV0aG9kcyA9IHByb3RvY29sX2NvcHlNZXRob2REZXNjcmlwdGlvbkxp
c3QocHJvdG9jb2wsIGlzUmVxdWlyZWRNZXRob2QsIGlzSW5zdGFuY2VNZXRob2QsICZjb3VudCk7
CkBAIC05Miw3ICs5Miw3IEBAIGlubGluZSB2b2lkIGZvckVhY2hNZXRob2RJblByb3RvY29sKFBy
b3QKICAgICBmcmVlKG1ldGhvZHMpOwogfQogCi1pbmxpbmUgdm9pZCBmb3JFYWNoUHJvcGVydHlJ
blByb3RvY29sKFByb3RvY29sKiBwcm90b2NvbCwgdm9pZCAoXmNhbGxiYWNrKShvYmpjX3Byb3Bl
cnR5X3QpKQoraW5saW5lIHZvaWQgZm9yRWFjaFByb3BlcnR5SW5Qcm90b2NvbChQcm90b2NvbCAq
cHJvdG9jb2wsIHZvaWQgKF5jYWxsYmFjaykob2JqY19wcm9wZXJ0eV90KSkKIHsKICAgICB1bnNp
Z25lZCBjb3VudDsKICAgICBvYmpjX3Byb3BlcnR5X3QqIHByb3BlcnRpZXMgPSBwcm90b2NvbF9j
b3B5UHJvcGVydHlMaXN0KHByb3RvY29sLCAmY291bnQpOwpAQCAtMjIyLDYgKzIyMiw3IEBAIHR5
cGVuYW1lIERlbGVnYXRlVHlwZTo6UmVzdWx0VHlwZSBwYXJzZU8KIH0KIAogZXh0ZXJuICJDIiB7
CisgICAgLy8gRm9yd2FyZCBkZWNsYXJlIHNvbWUgT2JqZWN0aXZlLUMgcnVudGltZSBpbnRlcm5h
bCBtZXRob2RzIHRoYXQgYXJlIG5vdCBBUEkuCiAgICAgY29uc3QgY2hhciAqX3Byb3RvY29sX2dl
dE1ldGhvZFR5cGVFbmNvZGluZyhQcm90b2NvbCAqLCBTRUwsIEJPT0wgaXNSZXF1aXJlZE1ldGhv
ZCwgQk9PTCBpc0luc3RhbmNlTWV0aG9kKTsKICAgICBpZCBvYmpjX2luaXRXZWFrKGlkICosIGlk
KTsKICAgICB2b2lkIG9iamNfZGVzdHJveVdlYWsoaWQgKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubQkocmV2aXNpb24gMTM4NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm0JKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDcgQEAgKyAoTlNTdHJpbmcgKiljbGFzc1Rlc3Q7CiArIChOU1N0cmluZyAqKXBhcmVu
dFRlc3Q7CiAtIChOU1N0cmluZyAqKWdldFN0cmluZzsKIEpTRXhwb3J0QXModGVzdEFyZ3VtZW50
VHlwZXMsCi0tIChOU1N0cmluZyAqKXRlc3RBcmd1bWVudFR5cGVzV2l0aEludDooaW50KWkgZG91
YmxlOihkb3VibGUpZCBib29sZWFuOihCT09MKWIgc3RyaW5nOihOU1N0cmluZyopcyBudW1iZXI6
KE5TTnVtYmVyKiluIGFycmF5OihOU0FycmF5KilhIGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSop
bworLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBlc1dpdGhJbnQ6KGludClpIGRvdWJsZToo
ZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzooTlNTdHJpbmcgKilzIG51bWJlcjooTlNO
dW1iZXIgKiluIGFycmF5OihOU0FycmF5ICopYSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilv
CiApOwogLSAodm9pZCljYWxsYmFjazoodm9pZCheKShpbnQpKWJsb2NrOwogQGVuZApAQCAtODEs
NyArODEsNyBAQCAtIChOU1N0cmluZyAqKWdldFN0cmluZwogewogICAgIHJldHVybiBAIjQyIjsK
IH0KLS0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6
KGRvdWJsZSlkIGJvb2xlYW46KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nKilzIG51bWJlcjooTlNO
dW1iZXIqKW4gYXJyYXk6KE5TQXJyYXkqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5KilvCist
IChOU1N0cmluZyAqKXRlc3RBcmd1bWVudFR5cGVzV2l0aEludDooaW50KWkgZG91YmxlOihkb3Vi
bGUpZCBib29sZWFuOihCT09MKWIgc3RyaW5nOihOU1N0cmluZyAqKXMgbnVtYmVyOihOU051bWJl
ciAqKW4gYXJyYXk6KE5TQXJyYXkgKilhIGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKW8KIHsK
ICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCwlZywlZCwlQCwlZCwl
QCwlQCIsIGksIGQsIGI9PVlFUz90cnVlOmZhbHNlLHMsW24gaW50VmFsdWVdLGFbMV0sb1tAIngi
XV07CiB9CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAg
ICAgIGNoZWNrUmVzdWx0KEAiKHsgeDo0MiB9KSIsIFtyZXN1bHQgaXNPYmplY3RdICYmIFtyZXN1
bHRbQCJ4Il0gaXNFcXVhbFRvT2JqZWN0OkA0Ml0pOwogICAgICAgICBpZCBvYmogPSBbcmVzdWx0
IHRvT2JqZWN0XTsKICAgICAgICAgY2hlY2tSZXN1bHQoQCJDaGVjayBkaWN0aW9uYXJ5IGxpdGVy
YWwiLCBbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKLSAgICAgICAg
aWQgbnVtID0gKE5TRGljdGlvbmFyeSopb2JqW0AieCJdOworICAgICAgICBpZCBudW0gPSAoTlNE
aWN0aW9uYXJ5ICopb2JqW0AieCJdOwogICAgICAgICBjaGVja1Jlc3VsdChAIkNoZWNrIG51bWVy
aWMgbGl0ZXJhbCIsIFtudW0gaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CiAgICAg
fQogCg==
</data>
<flag name="review"
          id="198616"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>