<?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>80071</bug_id>
          
          <creation_ts>2012-03-01 16:52:00 -0800</creation_ts>
          <short_desc>Move WebCore/storage/IDB* files into WebCore/Modules/indexeddb</short_desc>
          <delta_ts>2012-03-01 20:23:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79327</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>569068</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 16:52:00 -0800</bug_when>
    <thetext>Move WebCore/storage/IDB* files into WebCore/Modules/indexeddb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569073</commentid>
    <comment_count>1</comment_count>
      <attachid>129775</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 16:56:07 -0800</bug_when>
    <thetext>Created attachment 129775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569085</commentid>
    <comment_count>2</comment_count>
      <attachid>129775</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 17:16:05 -0800</bug_when>
    <thetext>Comment on attachment 129775
Patch

Attachment 129775 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11769657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569090</commentid>
    <comment_count>3</comment_count>
      <attachid>129781</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 17:17:58 -0800</bug_when>
    <thetext>Created attachment 129781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569094</commentid>
    <comment_count>4</comment_count>
      <attachid>129775</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-01 17:26:47 -0800</bug_when>
    <thetext>Comment on attachment 129775
Patch

Attachment 129775 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11751623</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569106</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2012-03-01 17:41:18 -0800</bug_when>
    <thetext>Attachment 129781 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/IDBObjectStore.h:74:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:62:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:76:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h:51:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:514:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:1000:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h:62:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:285:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:69:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:79:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:92:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:98:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackendInterface.h:54:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:33:  &quot;EventQueue.h&quot; already included at Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:31  [build/include] [4]
Total errors found: 17 in 94 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>569109</commentid>
    <comment_count>6</comment_count>
      <attachid>129781</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-01 17:44:02 -0800</bug_when>
    <thetext>Comment on attachment 129781
Patch

Attachment 129781 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11751645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569110</commentid>
    <comment_count>7</comment_count>
      <attachid>129781</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 17:45:05 -0800</bug_when>
    <thetext>Comment on attachment 129781
Patch

Attachment 129781 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11776708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569114</commentid>
    <comment_count>8</comment_count>
      <attachid>129784</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 17:55:29 -0800</bug_when>
    <thetext>Created attachment 129784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569125</commentid>
    <comment_count>9</comment_count>
      <attachid>129784</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-03-01 18:06:51 -0800</bug_when>
    <thetext>Comment on attachment 129784
Patch

Attachment 129784 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11757703</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569132</commentid>
    <comment_count>10</comment_count>
      <attachid>129787</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 18:12:19 -0800</bug_when>
    <thetext>Created attachment 129787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569155</commentid>
    <comment_count>11</comment_count>
      <attachid>129787</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-01 18:45:54 -0800</bug_when>
    <thetext>Comment on attachment 129787
Patch

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

I assume you&apos;re just moving files and changing build systems?

&gt; Source/WebCore/ChangeLog:15


You might consider running s/Copied/Moved/

&gt; Source/WebCore/ChangeLog:105
&gt; +        * storage/IDBAny.cpp: Removed.
&gt; +        * storage/IDBAny.h: Removed.
&gt; +        * storage/IDBAny.idl: Removed.

These double-entries are lame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569156</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-01 18:46:12 -0800</bug_when>
    <thetext>The EWSes are the real reviewers of patches like this. :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569163</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 18:58:12 -0800</bug_when>
    <thetext>&gt; I assume you&apos;re just moving files and changing build systems?

Correct.

&gt; You might consider running s/Copied/Moved/

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569181</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 19:32:33 -0800</bug_when>
    <thetext>Attachment 129787 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/IDBObjectStore.h:74:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:62:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBBackingStore.h:76:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h:51:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:514:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:1000:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h:62:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:285:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:69:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:79:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:92:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:98:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBTransactionBackendInterface.h:54:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:33:  &quot;EventQueue.h&quot; already included at Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:31  [build/include] [4]
Total errors found: 17 in 97 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>569202</commentid>
    <comment_count>15</comment_count>
      <attachid>129787</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-01 20:20:01 -0800</bug_when>
    <thetext>Comment on attachment 129787
Patch

r=me. I guess you need to commit the patch manually to avoid style check errors. Please commit it after confirming the green face of the cr-linux ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569203</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 20:21:41 -0800</bug_when>
    <thetext>I&apos;ve confirmed cr-mac and apple-mac locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569205</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-01 20:23:34 -0800</bug_when>
    <thetext>Committed r109493: &lt;http://trac.webkit.org/changeset/109493&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129775</attachid>
            <date>2012-03-01 16:56:07 -0800</date>
            <delta_ts>2012-03-01 17:27:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80071-20120301165606.patch</filename>
            <type>text/plain</type>
            <size>1139325</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wMy0wMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgV2ViQ29yZS9zdG9yYWdl
L0lEQiogZmlsZXMgaW50byBXZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQg
YWxsIHRoZSBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgaWZkZWZzIGZyb20KKyAgICAgICAgV2Vi
Q29yZSBwcm9wZXIsIHdlIGNhbiBtb3ZlIEluZGV4ZWREQiBpbnRvIGl0cyBvd24gbW9kdWxlLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFr
ZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNh
bGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhW
YWx1ZS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFcnJvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RXZlbnREaXNwYXRjaGVyLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXkuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmguCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlJlcXVlc3QuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhY2luZy5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdl
RXZlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwuCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQkFueS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuaWRsOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUVycm9yLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJE
YXRhYmFzZUVycm9yLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJJbmRleC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGguY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5
UmFuZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVJhbmdlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQlRyYWNpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6IFJlbW92ZWQuCisK
IDIwMTItMDMtMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbmFtZSBMYXllckNocm9taXVtOjpuYW1lIHRvIGRlYnVnTmFtZSB0
byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBkZWJ1ZyBwcm9wZXJ0aWVzLCBtYWtlIHRo
cmVhZHNhZmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
NyBAQCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAKIFNFVChXZWJDb3JlX0lETF9J
TkNMVURFUwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24KKyAgICBNb2R1bGVzL2luZGV4ZWRkYgog
ICAgIE1vZHVsZXMvd2Vic29ja2V0cwogICAgIGJpbmRpbmdzL2dlbmVyaWMKICAgICBjc3MKQEAg
LTExNyw2ICsxMTgsMjQgQEAgU0VUKFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9kdWxlcy9nZW9s
b2NhdGlvbi9Qb3NpdGlvbkVycm9yLmlkbAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRp
b25FcnJvckNhbGxiYWNrLmlkbAogCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAor
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNw
cAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAorICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKyAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCisKICAgICBNb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5pZGwKICAg
ICBNb2R1bGVzL3dlYnNvY2tldHMvRE9NV2luZG93V2ViU29ja2V0LmlkbAogCkBAIC0xMzkyLDIz
ICsxNDExLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNr
LmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCiAgICAgc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwCi0gICAgc3RvcmFnZS9JREJBbnkuY3BwCi0gICAgc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHAKLSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCi0gICAgc3Rv
cmFnZS9JREJDdXJzb3IuY3BwCi0gICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAK
LSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAotICAgIHN0b3JhZ2UvSURCRXZl
bnREaXNwYXRjaGVyLmNwcAotICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwCi0gICAgc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAotICAgIHN0b3JhZ2UvSURCS2V5LmNwcAotICAgIHN0b3Jh
Z2UvSURCS2V5UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAotICAgIHN0b3Jh
Z2UvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHAKLSAgICBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhy
ZWFkLmNwcAogICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcApAQCAtMTUzNiwxOCAr
MTUzOCwxOCBAQCBFTkRJRiAoKQogCiBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKLSAgICAgICAgc3RvcmFnZS9JREJBbnkuaWRs
Ci0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFi
YXNlRXJyb3IuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCi0g
ICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9y
eS5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJJbmRleC5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJL
ZXkuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsCi0gICAgICAgIHN0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKLSAgICAg
ICAgc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCQW55LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaWRsCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAorICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKICAgICApCiBFTkRJRiAoKQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9nZW9sb2NhdGlvbiBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGlu
Z3MvZ2VuZXJpYyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC02MSw2ICs2Miwx
OCBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRp
b24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlv
bi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkFueS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJv
ci5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNl
cHRpb24uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rvcnku
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkKFdlYkNv
cmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBcCisgICAgJChXZWJDb3JlKS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
c29ja2V0cy9DbG9zZUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tl
dHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmlkbCBcCkBAIC0zNTUsMTggKzM2OCw2IEBAIEJJTkRJTkdfSURMUyA9
IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5pZGwgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZS9E
YXRhYmFzZVN5bmMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkN1cnNvci5pZGwgXAotICAgICQoV2ViQ29yZSkvc3Rv
cmFnZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9JREJEYXRhYmFz
ZUVycm9yLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURC
S2V5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbCBcCi0gICAg
JChXZWJDb3JlKS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJChXZWJDb3JlKS9z
dG9yYWdlL0lEQlJlcXVlc3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXJyb3IuaWRsIFwKICAgICAk
KFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9zdG9y
YWdlL1NRTFJlc3VsdFNldC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxOCBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQk
UFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQkUFdEL01vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbCBcCisgICAgJCRQV0QvTW9k
dWxlcy9pbmRleGVkZGIvSURCQW55LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VF
cnJvci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0
aW9uLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQkUFdE
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxl
cy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tl
dHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGwgXApAQCAtMzc4LDE4ICszOTAsNiBAQCBJRExfQklORElOR1MgKz0gXAog
ICAgICQkUFdEL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFi
YXNlQ2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAot
ICAgICQkUFdEL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJDdXJz
b3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLSAgICAk
JFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFn
ZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAot
ICAgICQkUFdEL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQktl
eS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsIFwKLSAgICAkJFBXRC9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdE
L3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUV2ZW50Lmlk
bCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mby5pZGwgXApAQCAtNjkzLDYgKzY5Myw3
IEBAIGdlbmVyYXRlQmluZGluZ3MuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VH1cIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1nZW5lcmF0b3IgJCRnZW5lcmF0
b3IgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVz
L2dlb2xvY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQ
V0QvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5j
bHVkZSAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0taW5jbHVkZSAkJFBXRC9kb20gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
aW5jbHVkZSAkJFBXRC9maWxlYXBpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtOTcwLDYgKzk3MCw2MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFj
ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9u
cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNr
cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVy
cm9yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VFeGNlcHRpb24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNw
YXRjaGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoQmFja2VuZEltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlSYW5nZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Mb2NhbE1lZGlhU3RyZWFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9Mb2NhbE1lZGlhU3RyZWFtLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwIFwKQEAgLTM4NzksNjIgKzM5MzUsNiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJBbnkuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JCYWNrZW5kSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVu
dERpc3BhdGNoZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0
Y2hlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4
QmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXku
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJh
bmdlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuY3BwIFwKQEAgLTQ3ODgsMTYgKzQ3ODgsMTYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rp
b24uaAogCiBkb21fYmluZGluZ19pZGxzICs9IFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55
LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBcCi0JJChXZWJDb3Jl
KS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRmFjdG9yeS5p
ZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJJbmRleC5pZGwgXAotCSQoV2ViQ29yZSkvc3Rv
cmFnZS9JREJLZXlSYW5nZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0JJChXZWJDb3Jl
KS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQW55LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKIAogIyAt
LS0tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI5ODYsMzEgKzI5ODYsMzEgQEAgY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX0lOREVYRURfREFUQUJBUwogICAgIH0KIAogICAgIEhFQURFUlMg
Kz0gXAotICAgICAgICBzdG9yYWdlL0lEQkFueS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJDYWxs
YmFja3MuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmggXAotICAgICAgICBzdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0gICAgICAg
IHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VF
cnJvci5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKLSAgICAg
ICAgc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFj
dG9yeS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3Jh
Z2UvSURCSW5kZXguaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmggXAotICAgICAgICBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCS2V5LmggXAotICAgICAgICBzdG9yYWdlL0lEQktleVJhbmdlLmggXAotICAgICAg
ICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmggXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlLmggXAotICAgICAgICBzdG9yYWdlL0lEQlJlcXVlc3QuaCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBc
CisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIFwKKyAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggXAorICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAogCiAg
ICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0zMDIwLDI0ICszMDIwLDI0IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVMKICAgICB9CiAKICAgICBTT1VS
Q0VTICs9IFwKLSAgICAgICAgc3RvcmFnZS9JREJBbnkuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9J
REJDdXJzb3IuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAg
XAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCi0g
ICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwIFwKLSAgICAgICAgc3Rv
cmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5LmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9J
REJPYmplY3RTdG9yZS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIFwKKyAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwK
KyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgXAorICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UmFuZ2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNw
cCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAogfQogCiBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDk0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMjEgQEAKICAgICAgICAgICAgICdN
b2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsJywKICAgICAgICAgICAgICdNb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9p
bnRlbnRzL0RPTVdpbmRvd0ludGVudHMuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3Vs
dENhbGxiYWNrLmlkbCcsCkBAIC0xMDQ3LDIxICsxMDYyLDYgQEAKICAgICAgICAgICAgICdzdG9y
YWdlL0RhdGFiYXNlLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNr
LmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAgICAgICAg
ICAgICdzdG9yYWdlL0lEQkFueS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29y
LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJEYXRhYmFzZS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0lEQktleS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCcsCi0gICAgICAgICAgICAnc3Rv
cmFnZS9JREJSZXF1ZXN0LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMRXJyb3IuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TEV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCcs
CkBAIC0xMjk2LDYgKzEyOTYsNzYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9u
L05hdmlnYXRvckdlb2xvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRi
L0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkNvZGluZy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJDb2RpbmcuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhY2luZy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVk
RGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAnLApAQCAtNDY1Miw3NiArNDcyMiw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQkFueS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQW55LmgnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3IuaCcsCi0gICAgICAgICAgICAnc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vy
c29yQmFja2VuZEltcGwuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
RGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaCcsCi0gICAgICAgICAgICAn
c3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VF
cnJvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKLSAgICAgICAg
ICAgICdzdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCRXZlbnREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9y
eS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5oJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguY3Bw
JywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4LmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCS2V5LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5j
cHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFu
Z2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJhbmdlLmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCTGV2ZWxEQkNvZGluZy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3Qu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaCcsCi0gICAgICAgICAgICAn
c3RvcmFnZS9JREJUcmFjaW5nLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKICAgICAgICAgICAgICdzdG9y
YWdlL1N0b3JhZ2VUYXNrLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5j
cHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNw
cDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2lu
Y2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6
Y3JlYXRlSW52YWxpZCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZU51bGwoKQoreworICAgIFJlZlB0
cjxJREJBbnk+IGlkYkFueSA9IGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7CisgICAgaWRiQW55LT5z
ZXROdWxsKCk7CisgICAgcmV0dXJuIGlkYkFueS5yZWxlYXNlKCk7Cit9CisKK0lEQkFueTo6SURC
QW55KCkKKyAgICA6IG1fdHlwZShVbmRlZmluZWRUeXBlKQoreworfQorCitJREJBbnk6On5JREJB
bnkoKQoreworfQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5n
TGlzdCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJpbmdMaXN0VHlwZSk7CisgICAg
cmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkFu
eTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvclR5cGUpOwor
ICAgIHJldHVybiBtX2lkYkN1cnNvcjsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFs
dWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1
ZTsKK30KKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJldHVybiBtX2lk
YkRhdGFiYXNlOworfQorCitQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9y
eSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJGYWN0b3J5VHlwZSk7CisgICAgcmV0dXJu
IG1faWRiRmFjdG9yeTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRl
eCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBt
X2lkYkluZGV4OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQW55OjppZGJLZXkoKQorewor
ICAgIEFTU0VSVChtX3R5cGUgPT0gSURCS2V5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiS2V5Owor
fQorCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVjdFN0b3JlKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJu
IG1faWRiT2JqZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFu
eTo6aWRiVHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rp
b25UeXBlKTsKKyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkFueTo6c2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKK3sK
KyAgICBBU1NFUlQobV90eXBlID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOworICAgIHJl
dHVybiBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK30KKwordm9pZCBJREJBbnk6OnNldE51bGwo
KQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0g
TnVsbFR5cGU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1f
dHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9IHZhbHVlOwor
fQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9
IElEQkN1cnNvcldpdGhWYWx1ZVR5cGU7CisgICAgbV9pZGJDdXJzb3JXaXRoVmFsdWUgPSB2YWx1
ZTsKK30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcj4gdmFsdWUpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJD
dXJzb3JUeXBlOworICAgIG1faWRiQ3Vyc29yID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55Ojpz
ZXQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJEYXRhYmFzZVR5cGU7CisgICAgbV9p
ZGJEYXRhYmFzZSA9IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURC
RmFjdG9yeT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsK
KyAgICBtX3R5cGUgPSBJREJGYWN0b3J5VHlwZTsKKyAgICBtX2lkYkZhY3RvcnkgPSB2YWx1ZTsK
K30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkluZGV4PiB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQkluZGV4
VHlwZTsKKyAgICBtX2lkYkluZGV4ID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxJREJLZXk+IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVk
VHlwZSk7CisgICAgbV90eXBlID0gSURCS2V5VHlwZTsKKyAgICBtX2lkYktleSA9IHZhbHVlOwor
fQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gSURC
VHJhbnNhY3Rpb25UeXBlOworICAgIG1faWRiVHJhbnNhY3Rpb24gPSB2YWx1ZTsKK30KKwordm9p
ZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQk9iamVjdFN0
b3JlVHlwZTsKKyAgICBtX2lkYk9iamVjdFN0b3JlID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlVHlwZTsKKyAgICBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHZhbHVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSURCQW55X2gKKyNkZWZpbmUgSURCQW55X2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vyc29yOworY2xh
c3MgSURCQ3Vyc29yV2l0aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0
b3J5OworY2xhc3MgSURCSW5kZXg7CitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJPYmplY3RTdG9y
ZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwor
CitjbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlkYk9iamVjdCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgp
OworICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVh
c2UoKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJBbnk+IGNyZWF0ZShQYXNzUmVmUHRyPFQ+IGlkYk9iamVjdCkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAg
ICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVhc2UoKTsKKyAg
ICB9CisgICAgfklEQkFueSgpOworCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5kZWZpbmVk
VHlwZSA9IDAsCisgICAgICAgIE51bGxUeXBlLAorICAgICAgICBET01TdHJpbmdMaXN0VHlwZSwK
KyAgICAgICAgSURCQ3Vyc29yVHlwZSwKKyAgICAgICAgSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSwK
KyAgICAgICAgSURCRGF0YWJhc2VUeXBlLAorICAgICAgICBJREJGYWN0b3J5VHlwZSwKKyAgICAg
ICAgSURCSW5kZXhUeXBlLAorICAgICAgICBJREJLZXlUeXBlLAorICAgICAgICBJREJPYmplY3RT
dG9yZVR5cGUsCisgICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKKyAgICAgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlVHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9m
IHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNhbGwuCisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBkb21TdHJpbmdMaXN0KCk7CisgICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNv
cigpOworICAgIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFs
dWUoKTsKKyAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpOworICAgIFBh
c3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOworICAgIFBhc3NSZWZQdHI8SURCSW5k
ZXg+IGlkYkluZGV4KCk7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgpOworICAgIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisKKyAgICAvLyBTZXQg
Y2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCisgICAgdm9pZCBzZXROdWxsKCk7CisgICAgdm9pZCBz
ZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4p
OworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKKyAgICB2b2lkIHNldChQ
YXNzUmVmUHRyPElEQkZhY3Rvcnk+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkluZGV4
Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lkIHNldChQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4pOworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Pik7CisKK3ByaXZhdGU6CisgICAgSURCQW55KCk7CisKKyAgICBUeXBlIG1fdHlwZTsKKworICAg
IC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFu
eSBnaXZlbiB0aW1lLgorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7
CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9pZGJDdXJzb3I7CisgICAgUmVmUHRyPElEQkN1cnNv
cldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7CisgICAgUmVmUHRyPElEQkRhdGFiYXNl
PiBtX2lkYkRhdGFiYXNlOworICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7Cisg
ICAgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4OworICAgIFJlZlB0cjxJREJLZXk+IG1faWRi
S2V5OworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9yZTsKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
I2VuZGlmIC8vIElEQkFueV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBbnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCisgICAgICAgIEN1c3RvbVRvSlNPYmplY3QKKyAgICBdIElEQkFueSB7
CisgICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgorICAg
IH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBJREJCYWNr
aW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJ
REJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5
OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgSURC
QmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
U3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RT
dG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisKKyAgICBjbGFzcyBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIoKSB7fQorICAgIH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBm
b3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3Jk
Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9
IDA7CisgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307Cisg
ICAgfTsKKyAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywg
VmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlF
bnRyeUZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0
X3QmIGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmlt
YXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZD
b3VudGVkPEN1cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gY2xvbmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0
aW9uKGNvbnN0IElEQktleSogPSAwKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IGlu
ZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworCisgICAgY2xhc3MgVHJhbnNh
Y3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGJl
Z2luKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxi
YWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNh
bGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNh
bGxiYWNrc19oCisjZGVmaW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJET01TdHJpbmdM
aXN0LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJy
b3IuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNzZXMgbmVlZCB0byBiZSBtYWRlIHRo
cmVhZHNhZmUuCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SURCQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aENvbnRpbnVhdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNoKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4g
PiYgcHJpbWFyeUtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiA+JiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxi
YWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCVHJh
Y2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJDdXJzb3I6OmNy
ZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJl
cXVlc3QqIHJlcXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3IoYmFja2VuZCwgcmVxdWVz
dCwgc291cmNlLCB0cmFuc2FjdGlvbikpOworfQorCitJREJDdXJzb3I6OklEQkN1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJlcXVlc3QqIHJl
cXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAg
OiBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9z
b3VyY2Uoc291cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1f
dHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKK3sKKyAgICBBU1NFUlQobV9i
YWNrZW5kKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBBU1NFUlQobV9zb3VyY2UtPnR5
cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6SURCSW5kZXhUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Cit9CisK
K0lEQkN1cnNvcjo6fklEQkN1cnNvcigpCit7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQkN1cnNv
cjo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6ZGlyZWN0
aW9uIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+ZGlyZWN0aW9uKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJD
dXJzb3I6OmtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmtleSgpOworfQorCitQYXNzUmVm
UHRyPElEQktleT4gSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvcjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPnByaW1h
cnlLZXkoKTsKK30KKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkN1cnNvcjo6dmFsdWUoKSBjb25z
dAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp2YWx1ZSIpOworICAgIHJldHVybiBJREJB
bnk6OmNyZWF0ZShtX2JhY2tlbmQtPnZhbHVlKCkpOworfQorCitJREJBbnkqIElEQkN1cnNvcjo6
c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Cisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFj
a2VuZC0+dXBkYXRlKHZhbHVlLCByZXF1ZXN0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpjb250aW51ZSIpOworICAgIGlmIChrZXkgJiYgKGtl
eS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJ
WE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBj
YWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjaworICAgIC8vICAgICAgICB3aWxsIGJlIG9u
IHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyBy
aWdodD8KKyAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5n
ZXQoKSkpIHsKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXRDdXJzb3IodGhpcyk7CisgICAgICAgIG1f
YmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOworICAgIH0gZWxz
ZQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkN1cnNvcjo6ZGVsZXRlIik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVx
dWVzdCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0
aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOworfQorCit2b2lkIElEQkN1cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKQor
eworICAgIG1fYmFja2VuZC0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKK30KKwordm9p
ZCBJREJDdXJzb3I6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBtX3Jl
cXVlc3QtPmZpbmlzaEN1cnNvcigpOworICAgIG1fcmVxdWVzdC5jbGVhcigpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQ3Vyc29y
X2gKKyNkZWZpbmUgSURCQ3Vyc29yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkFu
eTsKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7
CitjbGFzcyBJREJSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwor
Y2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7CitwdWJsaWM6
CisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgICBORVhUID0gMCwKKyAgICAgICAgTkVYVF9O
T19EVVBMSUNBVEUgPSAxLAorICAgICAgICBQUkVWID0gMiwKKyAgICAgICAgUFJFVl9OT19EVVBM
SUNBVEUgPSAzLAorICAgIH07CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElE
QkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfklEQkN1cnNvcigp
OworCisgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRo
aXMgaXMgdW5uZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9CisKKyAgICAvLyBJbXBsZW1lbnQgdGhl
IElETAorICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpIGNvbnN0OworICAgIElE
QkFueSogc291cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsb3Nl
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlv
biopOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBt
X2JhY2tlbmQ7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKKyAgICBSZWZQdHI8
SURCQW55PiBtX3NvdXJjZTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rp
b247CisgICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllciBtX3RyYW5zYWN0aW9u
Tm90aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5k
aWYgLy8gSURCQ3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkN1cnNvci5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBdIElEQkN1cnNvciB7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IE5FWFQgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBORVhUX05PX0RVUExJQ0FURSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBS
RVYgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RVUExJQ0FURSA9
IDM7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
bjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFyeUtleTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIElEQkFueSBzb3VyY2U7CisKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbSW1w
bGVtZW50ZWRBcz1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0g
SURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwor
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1k
ZWxldGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQorICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tl
bmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNy
b3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tl
bmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCisgICAgOiBtX2N1cnNvcihjdXJzb3IpCisgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAg
ICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX29iamVjdFN0b3JlKG9iamVj
dFN0b3JlKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1
cnNvckJhY2tlbmRJbXBsKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1
cnNvcih0aGlzKTsKKyAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQsIHRoZSBjdXJzb3JzIGhhdmUg
dG8gYmUgZGVzdHJ1Y3RlZCBiZWZvcmUgdGhlIG9iamVjdFN0b3JlLgorICAgIG1fY3Vyc29yLmNs
ZWFyKCk7CisgICAgbV9zYXZlZEN1cnNvci5jbGVhcigpOworCisgICAgbV9vYmplY3RTdG9yZS5j
bGVhcigpOworfQorCit1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGlyZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpkaXJl
Y3Rpb24iKTsKKyAgICByZXR1cm4gbV9kaXJlY3Rpb247Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5
PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjprZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPmtleSgpOwor
fQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlLZXko
KSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlL
ZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsKK30KKworUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNv
bnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUiKTsKKyAg
ICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKQorICAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUi
KTsKKyAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIG1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVXBkYXRlLCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKK30KKwordm9p
ZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktl
eT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250
aW51ZSIpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKworICAgIGlmIChtX2N1
cnNvciAmJiBrZXkpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAg
IGlmIChtX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgbV9kaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnNvci0+
a2V5KCktPmlzTGVzc1RoYW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgha2V5LT5pc0xl
c3NUaGFuKG1fY3Vyc29yLT5rZXkoKS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpj
b250aW51ZUZ1bmN0aW9uSW50ZXJuYWwsIHRoaXMsIGtleSwgcHJwQ2FsbGJhY2tzKSkpCisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
K30KKworLy8gSU1QT1JUQU5UOiBJZiB0aGlzIGV2ZXIgMSkgZmlyZXMgYW4gJ2Vycm9yJyBldmVu
dCBhbmQgMikgaXQncyBwb3NzaWJsZSB0byBmaXJlIGFub3RoZXIgZXZlbnQgYWZ0ZXJ3YXJkcywK
Ky8vICAgICAgICAgICAgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgd2lsbCBuZWVk
IHRvIGJlIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGlzISEhCit2b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUludGVybmFsIik7CisgICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisgICAgUmVm
UHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8
ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKKyAgICAg
ICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7Cit9CisKK3Zv
aWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFD
RSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICghbV9jdXJzb3IgfHwg
bV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCks
IHBycENhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworfQorCit2b2lkIElEQkN1
cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlIik7
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsLCB0aGlzLCBu
dW1iZXJUb0ZldGNoLCBwcnBDYWxsYmFja3MpKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJl
clRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURC
X1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsIik7
CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisK
KyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gPiBmb3VuZFZhbHVlczsKKworICAgIGlmIChjdXJzb3ItPm1fY3Vyc29y
KQorICAgICAgICBjdXJzb3ItPm1fc2F2ZWRDdXJzb3IgPSBjdXJzb3ItPm1fY3Vyc29yLT5jbG9u
ZSgpOworCisgICAgY29uc3Qgc2l6ZV90IGtNYXhTaXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAx
MDI0OworICAgIHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsKKyAgICAgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29y
IHx8ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7CisgICAgICAgICAg
ICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAg
ICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXko
KSk7CisKKyAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBw
ZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY3Vyc29yLT5tX2N1cnNv
ci0+dmFsdWUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBl
bmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7CisKKyAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAg
c2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGlt
YXRlKCk7CisgICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSAr
PSBjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKwor
ICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4ga01heFNpemVFc3RpbWF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN1cnNvci0+bV90cmFuc2FjdGlvbi0+YWRk
UGVuZGluZ0V2ZW50cyhmb3VuZEtleXMuc2l6ZSgpIC0gMSk7CisgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVl
cyk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQoaW50IHVz
ZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcykKK3sKKyAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7CisgICAgbV90cmFuc2FjdGlvbi0+
YWRkUGVuZGluZ0V2ZW50cygtdW51c2VkUHJlZmV0Y2hlcyk7CisgICAgbV9jdXJzb3IgPSBtX3Nh
dmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJzb3IgPSAwOworCisgICAgaWYgKG1fY2xvc2VkKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsraSkgeworICAgICAgICAgICAgYm9vbCBvayA9IG1f
Y3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6
OmNsb3NlKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIp
OworICAgIG1fY2xvc2VkID0gdHJ1ZTsKKyAgICBpZiAobV9jdXJzb3IpCisgICAgICAgIG1fY3Vy
c29yLT5jbG9zZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEltcGxf
aAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJREJJbmRleEJhY2tl
bmRJbXBsOworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIElE
QkN1cnNvckJhY2tlbmRJbXBsIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Ugewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlKiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNr
ZW5kSW1wbCgpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3Q7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lk
IHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGlu
dCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOworICAgIHZvaWQgY2xvc2Uo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisKK3ByaXZhdGU6CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIElEQkN1cnNvcjo6RGlyZWN0aW9u
LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBpbnQgbnVtYmVy
VG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBtX3NhdmVkQ3Vyc29yOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fZGlyZWN0
aW9uOworICAgIEN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9vYmplY3RTdG9yZTsKKyAgICAKKyAgICBib29sIG1f
Y2xvc2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55OworY2xhc3Mg
SURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCUmVxdWVzdDsKK2NsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSgpIHt9CisKKyAgICBlbnVtIEN1cnNvclR5cGUgeworICAg
ICAgICBJbnZhbGlkQ3Vyc29yVHlwZSA9IDAsCisgICAgICAgIEluZGV4Q3Vyc29yLAorICAgICAg
ICBJbmRleEtleUN1cnNvciwKKyAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKKyAgICB9OworCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0
Y2hlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAv
LyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1
ZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVx
dWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvcldpdGhWYWx1ZShiYWNrZW5k
LCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQ3Vy
c29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+IHBycEN1cnNvcikKK3sKKyAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBj
dXJzb3JXaXRoVmFsdWUoc3RhdGljX2Nhc3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29y
LmdldCgpKSk7CisgICAgcmV0dXJuIGN1cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7Cit9CisKK0lE
QkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IElEQkN1cnNvcihiYWNr
ZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQoreworfQorCitJREJDdXJzb3JXaXRo
VmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5o
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
V2l0aFZhbHVlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKyNkZWZpbmUgSURCQ3Vyc29yV2l0aFZh
bHVlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVl
IDogcHVibGljIElEQkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
Q3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gZnJvbUN1cnNvcihQYXNzUmVm
UHRyPElEQkN1cnNvcj4pOworICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1ZSgpOworCisg
ICAgLy8gVGhlIHZhbHVlIGF0dHJpYnV0ZSBkZWZpbmVkIGluIHRoZSBJREwgaXMgc2ltcGx5IGlt
cGxlbWVudGVkIGluIElEQkN1cnNvciAoYnV0IG5vdCBleHBvc2VkIHZpYQorICAgIC8vIGl0cyBJ
REwpLiBUaGlzIGlzIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG1vcmUgc2ltcGxlIHdoaWxl
IG1hdGNoaW5nIHdoYXQgdGhlIHNwZWMgc2F5cy4KKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JX
aXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVz
dCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkN1cnNvcldpdGhWYWx1ZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQkN1cnNv
cldpdGhWYWx1ZSA6IElEQkN1cnNvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJB
bnkgdmFsdWU7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2
ZW50UXVldWUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2lu
Y2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXgu
aCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
KyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNp
bmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJhc2UpCit7Cisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcgSURCRGF0YWJh
c2UoY29udGV4dCwgZGF0YWJhc2UpKSk7CisgICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRl
ZCgpOworICAgIHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Cit9CisKK0lEQkRhdGFiYXNl
OjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKKyAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisgICAgLCBtX2Ns
b3NlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCit7CisgICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisgICAgbV9kYXRhYmFzZUNh
bGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMpOworfQorCitJ
REJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKK3sKKyAgICBjbG9zZSgpOworICAgIG1fZGF0YWJh
c2VDYWxsYmFja3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZTo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKyAgICBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworfQorCit2b2lkIElEQkRh
dGFiYXNlOjpjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCit7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uID0gMDsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVj
dCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
QUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFN0cmluZyBrZXlQ
YXRoOworICAgIGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKCJrZXlQYXRoIiwga2V5UGF0aCk7CisgICAgaWYgKGtleVBhdGhFeGlzdHMgJiYg
IUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdldCgiYXV0b0lu
Y3JlbWVudCIsIGF1dG9JbmNyZW1lbnQpOworICAgIC8vIEZJWE1FOiBMb29rIHVwIGV2aWN0YWJs
ZSBhbmQgcGFzcyB0aGF0IG9uIGFzIHdlbGwuCisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9i
amVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkg
eworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZShvYmplY3RTdG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi5nZXQoKSk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZC0+ZGVsZXRl
T2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQo
bmFtZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkRhdGFi
YXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHZlcnNpb24uaXNO
dWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVO
VF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOworICAgIG1fYmFja2VuZC0+
c2V0VmVyc2lvbih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7Cisg
ICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRh
dGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKKyAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKKyAgICBy
ZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOworfQorCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBwcnBT
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFtZXM7CisgICAg
aWYgKCFzdG9yZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYg
KG1vZGUgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5P
Tl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fY2xv
c2VQZW5kaW5nKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBj
cmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVk
IGFzeW5jaHJvbm91c2x5LiBPcGVyYXRpb25zCisgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0
IHRoZSB0cmFuc2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcg
YXMgc29vbiBhcyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWly
ZWQuCisgICAgLy8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25k
cyB0byBleGFjdGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5k
LT50cmFuc2FjdGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7CisgICAgaWYgKCF0cmFu
c2FjdGlvbkJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVjKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhpcyk7CisgICAg
dHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0KCkpOworICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmNs
b3NlKCkKK3sKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VD
YWxsYmFja3MpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1
ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOworICAgIC8vIFJlbW92
ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0
aGlzCisgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5
IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZl
cnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZworICAgIC8vIGNsb3Nl
ZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHJlbW92ZWQgPSBldmVu
dFF1ZXVlLT5jYW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgaWYg
KG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRl
KHZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZTo6b3BlbigpCit7CisgICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0YWJhc2VDYWxs
YmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVl
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNl
dFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkp
OworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKworYm9vbCBJREJEYXRh
YmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQorICAgICAgICAgICAg
bV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CisgICAgfQorICAgIHJldHVybiBFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OnN0
b3AoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOworICAgIC8vIFN0b3AgZmlyZXMg
YXQgYSBkZXRlcm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4K
KyAgICBjbG9zZSgpOworCisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Cit9CisKK2NvbnN0
IEF0b21pY1N0cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Cit9CisKK1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXRE
YXRhKiBJREJEYXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4g
Jm1fZXZlbnRUYXJnZXREYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmg6MTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VfaAorI2RlZmluZSBJREJE
YXRhYmFzZV9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Owor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworY2xhc3MgSURCRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4s
IHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB+
SURCRGF0YWJhc2UoKTsKKworICAgIHZvaWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCBjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbiopOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOyB9CisgICAgU3RyaW5nIHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPnZlcnNpb24oKTsgfQorICAgIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZC0+b2JqZWN0U3RvcmVOYW1lcygpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBPcHRp
b25zT2JqZWN0KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiwgdW5z
aWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGNsb3NlKCk7CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFi
b3J0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHZlcnNpb25jaGFuZ2UpOworCisgICAgLy8g
SURCRGF0YWJhc2VDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNv
bnN0IFN0cmluZyYgcmVxdWVzdGVkVmVyc2lvbik7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QK
KyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOworCisgICAgLy8gRXZlbnRUYXJnZXQK
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OworCisgICAgdm9pZCBvcGVuKCk7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50KGV2ZW50LCBlYyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pik7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVm
OworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKKworcHJpdmF0ZToK
KyAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uOworCisgICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKKyAgICBib29sIG1f
Y29udGV4dFN0b3BwZWQ7CisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7
CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5n
IHRvIGJlIGZpcmVkIG9uIHRoaXMKKyAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5j
ZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgorICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+
ID4gbV9lbnF1ZXVlZEV2ZW50czsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGw+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBp
bnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAg
ICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJEYXRhYmFz
ZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOworCisgICAgICAgIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udmVyc2lvbmNo
YW5nZTsKKworICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9yZShpbiBET01T
dHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCisgICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0
YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJpbmcgdmVyc2lv
bikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oaW4gRE9NU3RyaW5nTGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5k
ZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRh
YmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9yZU5hbWVzLCBp
biBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBE
T01TdHJpbmcgc3RvcmVOYW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNp
Z25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRl
cmZhY2UKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2
ZW50IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRp
bmdPcGVuQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdPcGVu
Q2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFja3MpKTsK
KyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJu
IG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
ZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbCh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2Fs
bGJhY2tzKSk7CisgICAgfQorICAgIFN0cmluZyB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9u
OyB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1f
Y2FsbGJhY2tzOyB9CisgICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJh
c2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ1NldFZlcnNpb25DYWxsKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV92ZXJzaW9uKHZlcnNpb24pCisg
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxs
YmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBTdHJpbmcgbV92ZXJz
aW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK0lEQkRhdGFi
YXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorICAgICwgbV9pZChJbnZhbGlkSWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fdmVy
c2lvbigiIikKKyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQorICAgICwgbV9m
YWN0b3J5KGZhY3RvcnkpCisgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0
b3IpCit7CisgICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOworICAgIG9wZW5JbnRlcm5hbCgp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCit7Cisg
ICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEo
bV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9
IEludmFsaWRJZCkpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIGxvYWRPYmplY3RTdG9y
ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5j
cmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKSkKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5k
bGluZy4KK30KKworSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZElt
cGwoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRp
Zmllcik7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZTsKK30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
b2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoT2Jq
ZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCisgICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKKyAg
ICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb25Q
dHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgaWYg
KG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQs
IG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIEFTU0VSVChvYmplY3RTdG9yZS0+
bmFtZSgpID09IG5hbWUpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNy
ZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0
YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtX29i
amVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9y
ZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2Jq
ZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7CisK
KyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0
YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCks
IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb2Jq
ZWN0U3RvcmUtPnNldElkKG9iamVjdFN0b3JlSWQpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21w
bGV0ZVRhc2tFdmVudHMoKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIGlmICghb2Jq
ZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3Jl
LCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01h
cCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
b2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3Rv
cmUtPmlkKCkpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
ID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmNvbnRhaW5zKGRhdGFiYXNlQ2FsbGJhY2tzKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBQk9SVF9F
UlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2ZXJzaW9uIHRyYW5zYWN0aW9u
IHdhcyBjcmVhdGVkIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoRGF0YWJh
c2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1Nl
dC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICAoKml0KS0+
b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworICAgIH0KKyAgICAvLyBGSVhNRTogT25seSBmaXJl
IG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAv
LyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZp
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMw
CisgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25D
YWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0
ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZl
cnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJh
Y2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxs
cy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9y
ZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24s
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVy
c2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2
NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKKyAgICBkYXRhYmFzZS0+bV92ZXJzaW9u
ID0gdmVyc2lvbjsKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5v
dCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdl
LiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2Fj
dGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5j
bGVhcigpOworICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIC8v
IFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKKyAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CisgICAg
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ1NldFZlcnNpb25DYWxscyk7Cisg
ICAgd2hpbGUgKCFwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2Fs
bD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gcGVuZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmly
c3QoKTsKKyAgICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPnZlcnNpb24o
KSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1NldFZlcnNpb25D
YWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAg
IH0KKworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVu
ZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5n
RGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAgbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ0RlbGV0ZUNh
bGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRp
bmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBk
ZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KKwor
ICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2Fs
bCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rp
b24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hv
cnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKKyAgICAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90
IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KKyAgICByZXR1cm4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2FsbGJhY2tzKSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlz
RW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGlu
Z1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5h
cHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgp
OworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRl
KHBycENhbGxiYWNrcykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhNRTogT25seSBm
aXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAg
IC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTI5CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5vblZl
cnNpb25DaGFuZ2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRo
ZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25DaGFuZ2VF
dmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoIW1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNh
bGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFtZSkpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV92ZXJzaW9uID0gIiI7CisgICAgbV9pZCA9IEludmFsaWRJZDsKKyAgICBt
X29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxs
YmFja3MpKTsKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOwor
ICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaWRz
OworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhz
OworICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgbV9iYWNraW5nU3Rv
cmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBpZHMsIG5hbWVzLCBrZXlQYXRocywgYXV0b0luY3Jl
bWVudEZsYWdzKTsKKworICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Cisg
ICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoYXV0
b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQo
bmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9y
ZS5nZXQoKSwgbV9pZCwgaWRzW2ldLCBuYW1lc1tpXSwga2V5UGF0aHNbaV0sIGF1dG9JbmNyZW1l
bnRGbGFnc1tpXSkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9i
amVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlUHRyID0gb2JqZWN0U3Rv
cmU7CisgICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVQdHItPm5hbWUoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2Jq
ZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKQoreworICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNl
QmFja2VuZEltcGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKKworI2luY2x1
ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsKK2NsYXNzIElEQkRhdGFiYXNlOwor
Y2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgZGF0YWJhc2Us
IGNvb3JkaW5hdG9yLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7CisgICAgfQorICAgIHZp
cnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsKKworICAgIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2
NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7
IH0KKworICAgIC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2Ny
aXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCisgICAgdm9pZCBvcGVuKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5z
YWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4p
OworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4pOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5n
JiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkludGVybmFsKCk7CisgICAgdm9p
ZCBsb2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisK
KyAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgc2V0VmVy
c2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKwor
ICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFz
a3MuCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRPYmpl
Y3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsK
KyAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBpbnQ2
NCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmVyc2lvbjsKKworICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBh
IFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2Ug
Z3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KKyAg
ICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmpl
Y3RTdG9yZU1hcDsKKyAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxs
OworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0
VmVyc2lvbkNhbGxzOworCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAgIERlcXVlPFJl
ZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCisgICAgY2xhc3Mg
UGVuZGluZ0RlbGV0ZUNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CisgICAgRGF0YWJh
c2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBET01TdHJpbmdMaXN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBJREJDYWxsYmFja3M7CitjbGFz
cyBJREJEYXRhYmFzZUNhbGxiYWNrczsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKKwordHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKKworLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCRGF0YWJh
c2UgKGFzeW5jKSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KKy8vIFRoaXMgaXMgaW1wbGVt
ZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGlu
IG9yZGVyIHRvIHByb3h5CisvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBj
YWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCisvLyB0cmln
Z2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCitjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFja3NfaAorI2RlZmlu
ZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBv
blZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFj
a3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGw+IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbChkYXRhYmFzZSkpOworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbChJREJEYXRhYmFzZSogZGF0YWJhc2UpCisgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6
b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBpZiAobV9kYXRh
YmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFiYXNlKElEQkRh
dGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9kYXRhYmFzZSk7
CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bF9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFi
YXNlOworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgOiBwdWJsaWMgSURCRGF0YWJh
c2VDYWxsYmFja3MgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbD4gY3JlYXRlKElEQkRhdGFiYXNlKik7CisgICAgdmlydHVhbCB+SURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdl
KGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRGF0YWJhc2UoSURC
RGF0YWJhc2UqKTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoSURC
RGF0YWJhc2UqKTsKKworICAgIC8vIG1fZGF0YWJhc2UgaGFzIGEgUmVmUHRyIHRvIHRoaXMsIHNv
IHVzZSBhIHdlYWsgcG9pbnRlciB0byBhdm9pZCBhIGN5Y2xlLgorICAgIElEQkRhdGFiYXNlKiBt
X2RhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJy
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJE
YXRhYmFzZUVycm9yX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VFcnJvcl9oCisKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCRGF0YWJhc2VFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlRXJyb3I+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVh
dGUodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNvZGUgPj0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhj
ZXB0aW9uT2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCRGF0YWJhc2VFeGNlcHRpb25NYXgpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkRhdGFiYXNlRXJyb3IoY29kZSAtIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFz
ZUV4Y2VwdGlvbk9mZnNldCwgbWVzc2FnZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGNyZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWduZWQgc2hvcnQg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvZGUg
PCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkp
OworICAgIH0KKworICAgIH5JREJEYXRhYmFzZUVycm9yKCkgeyB9CisKKyAgICB1bnNpZ25lZCBz
aG9ydCBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgdm9pZCBzZXRDb2RlKHVu
c2lnbmVkIHNob3J0IHZhbHVlKSB7IG1fY29kZSA9IHZhbHVlOyB9CisgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9pZCBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9tZXNzYWdlID0gdmFsdWU7IH0KKworcHJpdmF0
ZToKKyAgICBJREJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlKSB7
IH0KKworICAgIHVuc2lnbmVkIHNob3J0IG1fY29kZTsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRh
dGFiYXNlRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFcnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0g
SURCRGF0YWJhc2VFcnJvciB7CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBjb2Rl
OworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CisgICAgfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGFy
cmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0geworICAgICJVTktOT1dOX0VS
UiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwKKyAgICAiTk9UX0ZPVU5EX0VSUiIsCisgICAg
IkNPTlNUUkFJTlRfRVJSIiwKKyAgICAiREFUQV9FUlIiLAorICAgICJOT1RfQUxMT1dFRF9FUlIi
LAorICAgICJUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIiLAorICAgICJBQk9SVF9FUlIiLAorICAg
ICJSRUFEX09OTFlfRVJSIiwKKyAgICAiVElNRU9VVF9FUlIiLAorICAgICJRVU9UQV9FUlIiLAor
ICAgICJWRVJfRVJSIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRl
c2NyaXB0aW9uc1tdID0geworICAgICJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdpdGhpbiBJ
bmRleGVkIERhdGFiYXNlLiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwgLy8gRklYTUU6IFdy
aXRlIGEgYmV0dGVyIG1lc3NhZ2UgaWYgaXQncyBldmVyIHBvc3NpYmxlIHRoaXMgaXMgdGhyb3du
LgorICAgICJUaGUgbmFtZSBzdXBwbGllZCBkb2VzIG5vdCBtYXRjaCBhbnkgZXhpc3RpbmcgaXRl
bS4iLAorICAgICJUaGUgcmVxdWVzdCBjYW5ub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIGZhaWxl
ZCBjb25zdHJhaW50LiIsCisgICAgIlRoZSBkYXRhIHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhl
IHJlcXVpcmVtZW50cyBvZiB0aGUgZnVuY3Rpb24uIiwKKyAgICAiVGhpcyBmdW5jdGlvbiBpcyBu
b3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgaW4gc3VjaCBhIGNvbnRleHQuIiwKKyAgICAiQSByZXF1
ZXN0IHdhcyBwbGFjZWQgYWdhaW5zdCBhIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGVpdGhlciBjdXJy
ZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIiwKKyAgICAiVGhlIHRyYW5z
YWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIs
CisgICAgIkEgd3JpdGUgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgaW4gYSByZWFkLW9ubHkgdHJh
bnNhY3Rpb24uIiwKKyAgICAiQSBsb2NrIGZvciB0aGUgdHJhbnNhY3Rpb24gY291bGQgbm90IGJl
IG9idGFpbmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVz
ZWQgeWV0LgorICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub3Qg
ZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMg
cmVhY2hlZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gZ2l2ZSBtb3JlIHNwYWNlIHRvIHRoZSBk
YXRhYmFzZS4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorICAgICJBbiBhdHRlbXB0
IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRhYmFzZSB1c2luZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0
aGUgZXhpc3RpbmcgdmVyc2lvbi4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorfTsK
KworQ09NUElMRV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25OYW1lcykgPT0gV1RG
X0FSUkFZX0xFTkdUSChleGNlcHRpb25EZXNjcmlwdGlvbnMpLCBJREJEYXRhYmFzZUV4Y2VwdGlv
blRhYmxlc011c3RNYXRjaCk7CisKK2Jvb2wgSURCRGF0YWJhc2VFeGNlcHRpb246OmluaXRpYWxp
emVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlIGVjLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24q
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChlYyA8IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0
IHx8IGVjID4gSURCRGF0YWJhc2VFeGNlcHRpb25NYXgpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGRlc2NyaXB0aW9uLT50eXBlTmFtZSA9ICJET00gSURCRGF0YWJhc2UiOworICAgIGRl
c2NyaXB0aW9uLT5jb2RlID0gZWMgLSBJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldDsKKyAgICBk
ZXNjcmlwdGlvbi0+dHlwZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZTsKKworICAgIHNpemVf
dCB0YWJsZVNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsKKyAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7CisKKyAgICBkZXNjcmlwdGlvbi0+bmFt
ZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0YWJsZUluZGV4XSA6
IDA7CisgICAgZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRleCA8IHRhYmxlU2l6
ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0
YWJhc2VFeGNlcHRpb25faAorI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlvbiA6IHB1Ymxp
YyBFeGNlcHRpb25CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNl
RXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk1heCA9IDEyOTk7CisKKyAgICBlbnVtIElEQkRhdGFiYXNlRXhj
ZXB0aW9uQ29kZSB7CisgICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0
LAorICAgICAgICBVTktOT1dOX0VSUiwKKyAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIsCisgICAg
ICAgIE5PVF9GT1VORF9FUlIsCisgICAgICAgIENPTlNUUkFJTlRfRVJSLAorICAgICAgICBEQVRB
X0VSUiwKKyAgICAgICAgTk9UX0FMTE9XRURfRVJSLAorICAgICAgICBUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlIsCisgICAgICAgIEFCT1JUX0VSUiwKKyAgICAgICAgUkVBRF9PTkxZX0VSUiwKKyAg
ICAgICAgVElNRU9VVF9FUlIsCisgICAgICAgIFFVT1RBX0VSUiwKKyAgICAgICAgVkVSX0VSUgor
ICAgIH07CisKKyAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgZXJy
b3JDb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFlcnJvckNvZGUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNl
cHRpb25Db2RlLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKKworcHJpdmF0ZToKKyAgICBJ
REJEYXRhYmFzZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQorICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cworICAgIF0gSURC
RGF0YWJhc2VFeGNlcHRpb24geworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCAgIGNvZGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1l
c3NhZ2U7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pB
VkFTQ1JJUFQKKyAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3ppbGxhIGNvbXBhdGlibGUgZm9y
bWF0CisgICAgICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKKyNlbmRp
ZgorCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VSUiA9IDA7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgTk9OX1RSQU5TSUVOVF9FUlIgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBOT1RfRk9VTkRfRVJSID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09O
U1RSQUlOVF9FUlIgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRBX0VSUiA9
IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9BTExPV0VEX0VSUiA9IDY7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiA9IDc7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VSUiA9IDg7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDEwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBRVU9UQV9FUlIgPSAxMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSX0VSUiA9
IDEyOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHA6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYgZXZlbnRUYXJn
ZXRzKQoreworICAgIHNpemVfdCBzaXplID0gZXZlbnRUYXJnZXRzLnNpemUoKTsKKyAgICBBU1NF
UlQoc2l6ZSk7CisKKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BI
QVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24ndCBk
byB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZl
bnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRM
aXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KQorICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CisgICAgfQorCisgICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQtPnNldEN1cnJlbnRU
YXJnZXQoZXZlbnRUYXJnZXRzWzBdLmdldCgpKTsKKyAgICBldmVudFRhcmdldHNbMF0tPmZpcmVF
dmVudExpc3RlbmVycyhldmVudCk7CisgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQo
KSB8fCAhZXZlbnQtPmJ1YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6
OkJVQkJMSU5HX1BIQVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkg
eyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJl
bnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ld
LT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgIGdvdG8g
ZG9uZURpc3BhdGNoaW5nOworICAgIH0KKworICAgIC8vIEZJWE1FOiAiLi4uSG93ZXZlciwgd2Ug
YWxzbyB3YW50ZWQgdG8gaW50ZWdyYXRlIHRoZSB3aW5kb3cub25lcnJvciBmZWF0dXJlIGluCisg
ICAgLy8gICAgICAgIEhUTUw1LiBTbyBhZnRlciB3ZSd2ZSBmaXJlZCBhbiAiZXJyb3IiIGV2ZW50
LCBpZiAucHJldmVudERlZmF1bHQoKSB3YXMKKyAgICAvLyAgICAgICAgbmV2ZXIgY2FsbGVkIG9u
IHRoZSBldmVudCwgd2UgZmlyZSBhbiBlcnJvciBldmVudCBvbiB0aGUgd2luZG93IChjYW4ndAor
ICAgIC8vICAgICAgICByZW1lbWJlciBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIG9yIGFmdGVyIHdl
IGFib3J0IHRoZSB0cmFuc2FjdGlvbikuCisgICAgLy8gICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0
ZSBldmVudCwgd2hpY2ggZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCBldmVuIGlmIHlvdQorICAgIC8v
ICAgICAgICBhdHRhY2ggYSBjYXB0dXJpbmcgImVycm9yIiBoYW5kbGVyIG9uIHdpbmRvdywgeW91
IHdvbid0IHNlZSBhbnkgZXZlbnRzCisgICAgLy8gICAgICAgIHVubGVzcyBhbiBlcnJvciByZWFs
bHkgd2VudCB1bmhhbmRsZWQuIEFuZCB5b3UgYWxzbyBjYW4ndCBjYWxsCisgICAgLy8gICAgICAg
IC5wcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXJyb3IgZXZlbnQgZmlyZWQgb24gdGhlIHdpbmRvdyBp
biBvcmRlciB0bworICAgIC8vICAgICAgICBwcmV2ZW50IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGJl
aW5nIGFib3J0ZWQuIEl0J3MgcHVyZWx5IHRoZXJlIGZvcgorICAgIC8vICAgICAgICBlcnJvciBy
ZXBvcnRpbmcgYW5kIGRpc3RpbmN0bHkgZGlmZmVyZW50IGZyb20gdGhlIGV2ZW50IHByb3BhZ2F0
aW5nIHRvCisgICAgLy8gICAgICAgIHRoZSB3aW5kb3cuCisgICAgLy8gICAgICAgIAorICAgIC8v
ICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93ICJlcnJvciIgZXZlbnRzIGFyZSBoYW5kbGVk
IGluIHdvcmtlcnMuCisgICAgLy8gICAgICAgIAorICAgIC8vICAgICAgICAoSSB0aGluayB0aGF0
IHNvIGZhciB3ZWJraXQgaGFzbid0IGltcGxlbWVudGVkIHRoZSB3aW5kb3cub25lcnJvcgorICAg
IC8vICAgICAgICBmZWF0dXJlIHlldCwgc28geW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gZmly
ZSB0aGUgc2VwYXJhdGUgZXJyb3IKKyAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKKworZG9u
ZURpc3BhdGNoaW5nOgorICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2ZW50
LT5zZXRFdmVudFBoYXNlKDApOworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5o
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnRE
aXNwYXRjaGVyLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSURCRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSURCRXZlbnREaXNwYXRjaGVyX2gK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBFdmVudDsKK2NsYXNzIEV2ZW50VGFyZ2V0OworCitjbGFzcyBJREJFdmVudERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50KiwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0cyBhbmNl
c3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgorCitwcml2YXRlOgorICAg
IElEQkV2ZW50RGlzcGF0Y2hlcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJFdmVudERp
c3BhdGNoZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRo
cmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkZhY3Rvcnk6OklEQkZhY3Rvcnko
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBtX2JhY2tlbmQoZmFj
dG9yeSkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9y
ZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30K
KworSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQoreworfQorCitQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAv
LyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsK
KyAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3Jv
dXAoKS5ncm91cFNldHRpbmdzKCk7CisgICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJl
cXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3Jv
dXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
ICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OworICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAgICAgIG1fYmFja2VuZC0+
b3BlbihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBmcmFt
ZSwgU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9CisjaWYgRU5BQkxF
KFdPUktFUlMpCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1fYmFja2VuZC0+
b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIHJlcXVlc3Q7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bh
c3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1
bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3Vt
ZW50LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3Vw
U2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAg
ICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERC
RGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9ydCBJREJGYWN0
b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vj
b25kLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoZmlyc3QpOworICAgIEFTU0VS
VChzZWNvbmQpOworCisgICAgaWYgKGZpcnN0LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlw
ZSB8fCBzZWNvbmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9ICAgIAorICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBh
cmUoc2Vjb25kLmdldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIElEQkZhY3RvcnlfaAorI2RlZmluZSBJREJGYWN0b3J5X2gKKworI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJL
ZXlSYW5nZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCit0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNv
dW50ZWQ8SURCRmFjdG9yeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZh
Y3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeShmYWN0b3J5KSk7CisgICAg
fQorICAgIH5JREJGYWN0b3J5KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzaG9ydCBjbXAoUGFzc1JlZlB0cjxJREJL
ZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJik7CisK
K3ByaXZhdGU6CisgICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOwor
CisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRmFjdG9y
eV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFCisgICAgXSBJREJGYWN0b3J5IHsKKyAgICAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0RGF0YWJhc2VOYW1lcygpOworCisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4o
aW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQorICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisKKyAgICAgICAgc2hvcnQgY21w
KGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKKyAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEltcGwuaCIKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIK
KyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtMZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAx
IjsKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsga0xl
dmVsREJGaWxlU3VmZml4OworfQorCitzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQor
eworICAgIHJldHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4pICsgbmFt
ZTsKK30KKworSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZEltcGwoKQor
ICAgIDogbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OmNyZWF0ZSgpKQoreworfQorCitJREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5QmFj
a2VuZEltcGwoKQoreworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURC
RGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUJhY2tlbmRNYXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOwor
ICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJp
bmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAg
ICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7Cisg
ICAgbV9iYWNraW5nU3RvcmVNYXAuc2V0KGZpbGVJZGVudGlmaWVyLCBiYWNraW5nU3RvcmUpOwor
fQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3Jl
TWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVNYXAucmVt
b3ZlKGZpbGVJZGVudGlmaWVyKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Omdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwor
ICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAi
SW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7CisgICAgYmFja2luZ1N0b3JlLT5nZXRE
YXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZm91bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgp
OyArK2l0KQorICAgICAgICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIG9wZW5JbnRlcm5hbChu
YW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKK30KKwordm9p
ZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBk
YXRhRGlyZWN0b3J5KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJ
ZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4u
Z2V0KCkpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0
YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkg
Y29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCisgICAgICAg
IC8vIGRhdGFiYXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFj
a3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcg
ZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0
eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdT
dG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmll
ciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURh
dGFiYXNlKGNhbGxiYWNrcyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3sKKyAg
ICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2Vj
dXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlOworICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5n
U3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdT
dG9yZU1hcC5lbmQoKSkKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAg
ZWxzZSB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3Rvcnks
IGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0
dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKKyAgICBj
b25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5h
bWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIp
OworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAv
LyBJZiBpdCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBl
bmRpbmcKKyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAg
aXQtPnNlY29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBk
b25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4oZGF0YWJh
c2VCYWNrZW5kLmdldCgpKS5yZWxlYXNlKCkpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNl
dCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisjZGVm
aW5lIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3MgSURCQmFja2lu
Z1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2VuZEltcGwoKSk7CisgICAgfQorICAgIHZpcnR1
YWwgfklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworCisgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9t
IHdlYWsgcG9pbnRlcnMuCisgICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3Qg
U3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lk
IHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2Vy
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
OworCitwcml2YXRlOgorICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworICAgIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVybmFsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElE
QkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIElEQkJhY2tpbmdTdG9yZSo+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAg
ICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOworCisgICAg
Ly8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBn
aXZlbiB0aW1lLgorICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlC
YWNrZW5kSW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNl
bmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3IgIkNocm9taXVtIHNo
b3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0cyBvd24gdmVy
c2lvbiBvZiB0aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMgdGhlIG11bHRpLXByb2Nlc3MgYm91
bmRyeS4iCisjZW5kaWYKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBJREJGYWN0
b3J5QmFja2VuZEltcGw6OmNyZWF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNz
IElEQkRhdGFiYXNlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXb3JrZXJDb250ZXh0
OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJl
ZCBieSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KKy8vIFRo
aXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5
IG90aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJp
ZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBh
bmQKKy8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4K
K2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOworICAgIHZp
cnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCSW5kZXgu
aCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisj
aW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgor
I2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKKwor
SURCSW5kZXg6OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbikKKyAgICA6IG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7CisgICAgQVNT
RVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uKTsKK30KKworSURCSW5kZXg6On5JREJJbmRleCgpCit7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJ
REJJbmRleDo6b3BlbkN1cnNvciIpOworICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpO
RVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVj
dGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9O
T19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVu
IHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0x
MTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IpOworICAgIG1fYmFja2VuZC0+b3BlbkN1cnNv
cihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3Vu
dChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RS
QUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7
Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgSURCX1RSQUNFKCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIGlmIChkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9
IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBu
ZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xMTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1
cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOworICAg
IG1fYmFja2VuZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVx
dWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJl
dHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Z2V0Iik7Cisg
ICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKKyAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlE
ZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKKyAgICBpZiAoa2V5
ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAg
IG1fYmFja2VuZC0+Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCSW5kZXhfaAor
I2RlZmluZSBJREJJbmRleF9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgSURCSW5k
ZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IGJhY2tlbmQsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJ
bmRleChiYWNrZW5kLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKKyAgICB9CisgICAgfklE
QkluZGV4KCk7CisKKyAgICAvLyBJbXBsZW1lbnQgdGhlIElETAorICAgIFN0cmluZyBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KKyAgICBJREJPYmplY3RTdG9yZSog
b2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisgICAg
U3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPmtleVBhdGgoKTsgfQor
ICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT51bmlxdWUoKTsgfQor
ICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bXVsdGlFbnRy
eSgpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Ig
c28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
b3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KKyAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjb3Vu
dChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0KKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQs
IGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJp
dmF0ZToKKyAgICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4s
IElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElE
QkluZGV4X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFCisgICAgXSBJREJJbmRleCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0
b3JlIG9iamVjdFN0b3JlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtl
eVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKKworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtP
cHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Cisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW5L
ZXlDdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgZ2V0S2V5KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkg
a2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisj
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3Jl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3Rv
cmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25h
bWUobmFtZSkKKyAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFtZSkKKyAgICAsIG1fa2V5UGF0aChr
ZXlQYXRoKQorICAgICwgbV91bmlxdWUodW5pcXVlKQorICAgICwgbV9tdWx0aUVudHJ5KG11bHRp
RW50cnkpCit7Cit9CisKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0
U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoSW52YWxpZElkKQor
ICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCisgICAgLCBt
X2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1fdW5pcXVlKHVuaXF1ZSkKKyAgICAsIG1fbXVsdGlF
bnRyeShtdWx0aUVudHJ5KQoreworfQorCitJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhC
YWNrZW5kSW1wbCgpCit7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
ckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQg
c2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7Cisg
ICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsK
KyAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVjdGlvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIHN3aXRjaCAoY3Vyc29y
VHlwZSkgeworICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3I6CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+
b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
Q3Vyc29yOgorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3Rv
cmUtPm9wZW5JbmRleEN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmpl
Y3RTdG9yZUN1cnNvcjoKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFs
aWRDdXJzb3JUeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IHRyYW5z
YWN0aW9uLT5vYmplY3RTdG9yZShpbmRleC0+bV9zdG9yZU5hbWUsIGVjKTsKKyAgICBBU1NFUlQo
b2JqZWN0U3RvcmUgJiYgIWVjKTsKKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1
cnNvci5nZXQoKSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2Jq
ZWN0U3RvcmUuZ2V0KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNl
KCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURC
X1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7CisgICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJw
S2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJh
Y2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJw
S2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJJ
bmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgdWludDMyX3QgY291bnQgPSAw
OworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+bV9k
YXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgp
LCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bWJlclZhbHVlKGNvdW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
byB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5j
b250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7Cisg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1
ZShjb3VudCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Omdl
dEludGVybmFsIik7CisgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVybmFsIGludG8gdHdvIGZ1
bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgorICAgIGlmIChnZXRPYmplY3Qp
IHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRPYmpl
Y3RWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUodmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBr
ZXlSZXN1bHQgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChp
bmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGlu
ZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKCFrZXlSZXN1bHQpIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlS
ZXN1bHQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQo
UGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXQiKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXksIHRydWUsIGNh
bGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5Iik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5LCBmYWxzZSwg
Y2FsbGJhY2tzKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdL
ZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtl
eSkKK3sKKyAgICBpZiAoIW1fdW5pcXVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJl
ZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICBib29sIGZvdW5kID0gbV9iYWNraW5n
U3RvcmUtPmtleUV4aXN0c0luSW5kZXgobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgbV9pZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgIGlmICghZm91
bmQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJp
bWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmg6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJJbmRleEJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJLZXk7
CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKKworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9y
ZUJhY2tlbmQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
dG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlF
bnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5k
SW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5h
bWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CisgICAgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCSW5kZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
QmFja2VuZCwgbmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOworCisgICAgaW50NjRf
dCBpZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOwor
ICAgICAgICByZXR1cm4gbV9pZDsKKyAgICB9CisgICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7
IG1faWQgPSBpZDsgfQorICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQg
IT0gSW52YWxpZElkOyB9OworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktl
eSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOworCisgICAgLy8gSW1w
bGVtZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCisgICAgdmlydHVhbCBTdHJpbmcgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHN0b3JlTmFtZSgpIHsg
cmV0dXJuIG1fc3RvcmVOYW1lOyB9CisgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0
dXJuIG1fa2V5UGF0aDsgfQorICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3Vu
aXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tdWx0aUVu
dHJ5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7CisKK3ByaXZhdGU6CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUq
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBp
bnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAg
IElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0
YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
Ym9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAgICBzdGF0aWMg
Y29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gbV9iYWNraW5nU3RvcmU7CisKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25z
dCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKKyAgICBp
bnQ2NF90IG1faWQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9zdG9yZU5hbWU7
CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBib29sIG1fdW5pcXVlOworICAgIGJvb2wgbV9t
dWx0aUVudHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIElEQkluZGV4QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmlu
ZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURC
S2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKwor
ICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc3RvcmVO
YW1lKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHVuaXF1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXku
aCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0lEQktleTo6SURCS2V5KCkKKyAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkKKyAgICAsIG1f
c2l6ZUVzdGltYXRlKGtPdmVyaGVhZFNpemUpCit7Cit9CisKK0lEQktleTo6fklEQktleSgpCit7
Cit9CisKK2ludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQob3RoZXIpOworICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1fdHlwZSkKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7CisKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5jb21wYXJlKG90
aGVyLT5tX2FycmF5W2ldLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5tX2FycmF5LnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgp
ID4gb3RoZXItPm1fYXJyYXkuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IHJldHVybiAwOworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIC1jb2RlUG9p
bnRDb21wYXJlKG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOworICAgIGNhc2UgRGF0ZVR5cGU6
CisgICAgICAgIHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6CisgICAgICAg
ICAgICAgICAgKG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7CisgICAgY2FzZSBOdW1i
ZXJUeXBlOgorICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVtYmVyKSA/IC0x
IDoKKyAgICAgICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVyKSA/IDEgOiAw
OworICAgIGNhc2UgSW52YWxpZFR5cGU6CisgICAgY2FzZSBNaW5UeXBlOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0xlc3NU
aGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG90aGVyKTsKKyAg
ICByZXR1cm4gY29tcGFyZShvdGhlcikgPT0gLTE7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0VxdWFs
KGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIElEQktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxJREJLZXk+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IEtleUFycmF5OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJbnZhbGlkKCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBlID0gSW52YWxp
ZFR5cGU7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlTnVtYmVyKGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkp
OworICAgICAgICBpZGJLZXktPm1fdHlwZSA9IE51bWJlclR5cGU7CisgICAgICAgIGlkYktleS0+
bV9udW1iZXIgPSBudW1iZXI7CisgICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc2l6
ZW9mKGRvdWJsZSk7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQorICAgIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYo
bmV3IElEQktleSgpKTsKKyAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBTdHJpbmdUeXBlOworICAg
ICAgICBpZGJLZXktPm1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBpZGJLZXktPm1fc2l6ZUVz
dGltYXRlICs9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHJldHVy
biBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gY3JlYXRlRGF0ZShkb3VibGUgZGF0ZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBl
ID0gRGF0ZVR5cGU7CisgICAgICAgIGlkYktleS0+bV9kYXRlID0gZGF0ZTsKKyAgICAgICAgaWRi
S2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGlk
YktleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBj
cmVhdGVBcnJheShjb25zdCBLZXlBcnJheSYgYXJyYXkpCisgICAgeworICAgICAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOworICAgICAgICBpZGJLZXkt
Pm1fdHlwZSA9IEFycmF5VHlwZTsKKyAgICAgICAgaWRiS2V5LT5tX2FycmF5ID0gYXJyYXk7CisK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRl
OworCisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIH5JREJL
ZXkoKTsKKworICAgIC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVj
ZWRlbnQgaW4gdGVybXMgb2Ygc29ydCBvcmRlci4KKyAgICBlbnVtIFR5cGUgeworICAgICAgICBJ
bnZhbGlkVHlwZSA9IDAsCisgICAgICAgIEFycmF5VHlwZSwKKyAgICAgICAgU3RyaW5nVHlwZSwK
KyAgICAgICAgRGF0ZVR5cGUsCisgICAgICAgIE51bWJlclR5cGUsCisgICAgICAgIE1pblR5cGUK
KyAgICB9OworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAg
Ym9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkVHlwZTsgfQorCisg
ICAgY29uc3QgS2V5QXJyYXkmIGFycmF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQXJyYXlUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fYXJyYXk7CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgIH0KKwor
ICAgIGRvdWJsZSBkYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
RGF0ZVR5cGUpOworICAgICAgICByZXR1cm4gbV9kYXRlOworICAgIH0KKworICAgIGRvdWJsZSBu
dW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBOdW1iZXJUeXBl
KTsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIH0KKworICAgIGludCBjb21wYXJlKGNv
bnN0IElEQktleSogb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNMZXNzVGhhbihjb25zdCBJREJL
ZXkqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoY29uc3QgSURCS2V5KiBvdGhlcikg
Y29uc3Q7CisKKyAgICBzaXplX3Qgc2l6ZUVzdGltYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
RXN0aW1hdGU7IH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZVR5cGVzKFR5cGUgYSwgVHlwZSBi
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGIgLSBhOworICAgIH0KKworICAgIHVzaW5nIFRocmVh
ZFNhZmVSZWZDb3VudGVkPElEQktleT46OnJlZjsKKyAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxJREJLZXk+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJLZXkoKTsKKworICAgIFR5
cGUgbV90eXBlOworICAgIEtleUFycmF5IG1fYXJyYXk7CisgICAgU3RyaW5nIG1fc3RyaW5nOwor
ICAgIGRvdWJsZSBtX2RhdGU7CisgICAgZG91YmxlIG1fbnVtYmVyOworCisgICAgc2l6ZV90IG1f
c2l6ZUVzdGltYXRlOworCisgICAgLy8gVmVyeSByb3VnaCBlc3RpbWF0ZSBvZiBtaW5pbXVtIGtl
eSBzaXplIG92ZXJoZWFkLgorICAgIGVudW0geyBrT3ZlcmhlYWRTaXplID0gMTYgfTsKK307CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURC
S2V5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmlk
bAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5p
ZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2Ug
eworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKKyAgICAgICAgQ3VzdG9tVG9KU09iamVjdAorICAgIF0gSURCS2V5IHsKKyAgICAgICAgLy8g
VGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuCisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5j
cHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuSWRlbnRpZmllciwK
KyAgICAgICAgVG9rZW5Eb3QsCisgICAgICAgIFRva2VuRW5kLAorICAgICAgICBUb2tlbkVycm9y
CisgICAgfTsKKworICAgIGV4cGxpY2l0IElEQktleVBhdGhMZXhlcihjb25zdCBTdHJpbmcmIHMp
CisgICAgICAgIDogbV9zdHJpbmcocykKKyAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkK
KyAgICAgICAgLCBtX2VuZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCisgICAgICAgICwg
bV9jdXJyZW50VG9rZW5UeXBlKFRva2VuRXJyb3IpCisgICAgeworICAgIH0KKworICAgIFRva2Vu
VHlwZSBjdXJyZW50VG9rZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBl
OyB9CisKKyAgICBUb2tlblR5cGUgbmV4dFRva2VuVHlwZSgpCisgICAgeworICAgICAgICBtX2N1
cnJlbnRUb2tlblR5cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRUb2tlblR5cGU7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBjdXJyZW50RWxl
bWVudCgpIHsgcmV0dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KKworcHJpdmF0ZToKKyAgICBUb2tl
blR5cGUgbGV4KFN0cmluZyYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKFN0cmluZyYp
OworICAgIFN0cmluZyBtX2N1cnJlbnRFbGVtZW50OworICAgIFN0cmluZyBtX3N0cmluZzsKKyAg
ICBjb25zdCBVQ2hhciogbV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIFRva2Vu
VHlwZSBtX2N1cnJlbnRUb2tlblR5cGU7Cit9OworCitJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSBJREJLZXlQYXRoTGV4ZXI6OmxleChTdHJpbmcmIGVsZW1lbnQpCit7CisgICAgaWYgKG1fcHRy
ID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FbmQ7CisgICAgQVNTRVJUKG1fcHRyIDwg
bV9lbmQpOworCisgICAgaWYgKCptX3B0ciA9PSAnLicpIHsKKyAgICAgICAgKyttX3B0cjsKKyAg
ICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIH0KKyAgICByZXR1cm4gbGV4SWRlbnRpZmllcihl
bGVtZW50KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENo
YXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0g
J18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRp
ZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmlj
KGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0aExleGVyOjpU
b2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKFN0cmluZyYgZWxlbWVudCkK
K3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIgPCBtX2Vu
ZCAmJiBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgKytt
X3B0cjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisgICAgd2hpbGUg
KG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9wdHIpKQorICAg
ICAgICArK21fcHRyOworCisgICAgZWxlbWVudCA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFy
dCk7CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworYm9vbCBJREJJc1ZhbGlkS2V5
UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ZXJyb3I7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICByZXR1cm4gZXJy
b3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lOworfQorCit2b2lkIElEQlBhcnNlS2V5UGF0
aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+JiBlbGVtZW50cywgSURCS2V5
UGF0aFBhcnNlRXJyb3ImIGVycm9yKQoreworICAgIC8vIElEQktleVBhdGggOjo9IEVNUFRZX1NU
UklORyB8IGlkZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSoKKyAgICAvLyBUaGUgYmFzaWMgc3Rh
dGUgbWFjaGluZSBpczoKKyAgICAvLyAgIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBFbmR9CisgICAg
Ly8gICBJZGVudGlmaWVyID0+IHtEb3QsIEVuZH0KKyAgICAvLyAgIERvdCA9PiB7SWRlbnRpZmll
cn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0
IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgorICAgIGVudW0g
UGFyc2VyU3RhdGUgeyBJZGVudGlmaWVyLCBEb3QsIEVuZCB9OworCisgICAgSURCS2V5UGF0aExl
eGVyIGxleGVyKGtleVBhdGgpOworICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2Vu
VHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICBQYXJzZXJTdGF0ZSBzdGF0ZTsKKyAg
ICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQorICAg
ICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktl
eVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgIHN0YXRlID0gRW5kOworICAgIGVsc2Ugewor
ICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6
VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIp
OworCisgICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7
CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAgICAgICAgIHRv
a2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5
cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IERvdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6
OlRva2VuRW5kKQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZp
ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIElEQktl
eVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUo
KTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tl
bkRvdCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsK
KyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50
aWZpZXIpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAgZXJyb3IgPSBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gKKyNkZWZpbmUgSURCS2V5UGF0aF9o
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworZW51bSBJREJLZXlQYXRoUGFyc2VFcnJvciB7CisgICAgSURCS2V5UGF0aFBhcnNlRXJy
b3JOb25lLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQsCisgICAgSURCS2V5UGF0aFBh
cnNlRXJyb3JJZGVudGlmaWVyLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yRG90LAorfTsKKwor
Ym9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmKTsKK3ZvaWQgSURCUGFyc2VLZXlQ
YXRoKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0aFBhcnNlRXJyb3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQktl
eVBhdGhfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCisKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyNlcnJvciAiQ2hyb21pdW0gc2hvdWxkIG5vdCBjb21waWxlIHRoaXMg
ZmlsZSBhbmQgaW5zdGVhZCBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMgZmFjdG9yeSB0
aGF0IG5hdmlnYXRlcyB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3ZvaWQgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3Ig
U2VyaWFsaXplZFNjcmlwdFZhbHVlLgorfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZh
bHVlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFs
aXplZFNjcmlwdFZhbHVlLgorICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOjEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QktleVBhdGhCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOworCitjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBh
dGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVz
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURC
S2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKK307CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5UGF0
aEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlSYW5nZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJLZXlSYW5nZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJREJLZXlSYW5nZTo6SURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQ
YXNzUmVmUHRyPElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJC
b3VuZFR5cGUgdXBwZXJUeXBlKQorICAgIDogbV9sb3dlcihsb3dlcikKKyAgICAsIG1fdXBwZXIo
dXBwZXIpCisgICAgLCBtX2xvd2VyVHlwZShsb3dlclR5cGUpCisgICAgLCBtX3VwcGVyVHlwZSh1
cHBlclR5cGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpv
bmx5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUo
KSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IElEQktleVJhbmdlOjpjcmVhdGUoa2V5LCBrZXksIExvd2VyQm91bmRDbG9zZWQsIFVwcGVyQm91
bmRDbG9zZWQpOworfQorCitQYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6bG93
ZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKGJvdW5kICYmIChib3VuZC0+dHlwZSgpID09IElEQktleTo6SW52
YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNy
ZWF0ZShib3VuZCwgMCwgb3BlbiA/IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3VuZENsb3NlZCwg
VXBwZXJCb3VuZENsb3NlZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJh
bmdlOjp1cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYm91bmQgJiYgKGJvdW5kLT50eXBlKCkgPT0gSURC
S2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlS
YW5nZTo6Y3JlYXRlKDAsIGJvdW5kLCBMb3dlckJvdW5kQ2xvc2VkLCBvcGVuID8gVXBwZXJCb3Vu
ZE9wZW4gOiBVcHBlckJvdW5kQ2xvc2VkKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
SURCS2V5UmFuZ2U6OmJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJ
REJLZXk+IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICgobG93ZXIgJiYgKGxvd2VyLT50eXBlKCkgPT0gSURCS2V5OjpJ
bnZhbGlkVHlwZSkpIHx8ICh1cHBlciAmJiAodXBwZXItPnR5cGUoKSA9PSBJREJLZXk6OkludmFs
aWRUeXBlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobG93ZXIgJiYgdXBwZXIgJiYgdXBw
ZXItPmlzTGVzc1RoYW4obG93ZXIuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGxv
d2VyICYmIHVwcGVyICYmIHVwcGVyLT5pc0VxdWFsKGxvd2VyLmdldCgpKSAmJiAobG93ZXJPcGVu
IHx8IHVwcGVyT3BlbikpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlSYW5n
ZTo6Y3JlYXRlKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuID8gTG93ZXJCb3VuZE9wZW4gOiBMb3dl
ckJvdW5kQ2xvc2VkLCB1cHBlck9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVyQm91bmRDbG9z
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQktleVJhbmdlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJLZXlSYW5nZV9oCisjZGVmaW5lIElEQktleVJhbmdlX2gKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVk
ZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPElEQktleVJhbmdlPiB7CitwdWJsaWM6CisgICAgZW51bSBMb3dlckJvdW5kVHlw
ZSB7CisgICAgICAgIExvd2VyQm91bmRPcGVuLAorICAgICAgICBMb3dlckJvdW5kQ2xvc2VkCisg
ICAgfTsKKyAgICBlbnVtIFVwcGVyQm91bmRUeXBlIHsKKyAgICAgICAgVXBwZXJCb3VuZE9wZW4s
CisgICAgICAgIFVwcGVyQm91bmRDbG9zZWQKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQ
dHI8SURCS2V5PiB1cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlw
ZSB1cHBlclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleVJh
bmdlKGxvd2VyLCB1cHBlciwgbG93ZXJUeXBlLCB1cHBlclR5cGUpKTsKKyAgICB9CisgICAgfklE
QktleVJhbmdlKCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gbG93ZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvd2VyOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyKCkgY29uc3Qg
eyByZXR1cm4gbV91cHBlcjsgfQorICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4g
bV9sb3dlclR5cGUgPT0gTG93ZXJCb3VuZE9wZW47IH0KKyAgICBib29sIHVwcGVyT3BlbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXBwZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gb25seShQYXNzUmVmUHRyPElEQktleT4gdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBs
b3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCisg
ICAgeworICAgICAgcmV0dXJuIGxvd2VyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7CisgICAgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5kKFBhc3NSZWZQdHI8
SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91
bmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgIHJldHVybiB1cHBlckJvdW5kKGJv
dW5kLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBh
c3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBFeGNlcHRp
b25Db2RlJiBlYykKKyAgICB7CisgICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVwcGVyLCBmYWxz
ZSwgZmFsc2UsIGVjKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVy
LCBib29sIGxvd2VyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgcmV0dXJu
IGJvdW5kKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxv
d2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBib29sIHVwcGVy
T3BlbiwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIElEQktleVJhbmdlKFBhc3NS
ZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5k
VHlwZSBsb3dlclR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSk7CisKKyAgICBSZWZQdHI8
SURCS2V5PiBtX2xvd2VyOworICAgIFJlZlB0cjxJREJLZXk+IG1fdXBwZXI7CisgICAgTG93ZXJC
b3VuZFR5cGUgbV9sb3dlclR5cGU7CisgICAgVXBwZXJCb3VuZFR5cGUgbV91cHBlclR5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCS2V5
UmFuZ2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVJhbmdlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQktleVJhbmdlIHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIElEQktleSBsb3dlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IElEQktleSB1cHBlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbG93ZXJP
cGVuOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9wZW47CisKKyAg
ICAgICAgc3RhdGljIElEQktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQorICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHN0YXRpYyBJREJLZXlS
YW5nZSBsb3dlckJvdW5kKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9w
ZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAg
c3RhdGljIElEQktleVJhbmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gb3BlbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOworICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5IGxvd2VyLCBp
biBJREJLZXkgdXBwZXIsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4sIGluIFtPcHRp
b25hbF0gYm9vbGVhbiB1cHBlck9wZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUz
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVW
RUxEQikKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCisjaW5jbHVkZSAiTGV2ZWxEQkNv
bXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZXZl
bERCSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlICJMZXZl
bERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nOworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZElu
dCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghZGItPmdldChrZXksIHJl
c3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvdW5kSW50ID0gZGVjb2RlSW50
KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0SW50KERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlSW50KHZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRTdHJpbmco
REJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91
bmRTdHJpbmcpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIWRiLT5nZXQo
a2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZFN0cmluZyA9
IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBi
b29sIHB1dFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXksIGVuY29kZVN0
cmluZyh2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBpbnQgY29tcGFyZUtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBM
ZXZlbERCU2xpY2UmIGIpCit7CisgICAgcmV0dXJuIGNvbXBhcmUoYSwgYik7Cit9CisKK3N0YXRp
YyBpbnQgY29tcGFyZUluZGV4S2V5cyhjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVs
REJTbGljZSYgYikKK3sKKyAgICByZXR1cm4gY29tcGFyZShhLCBiLCB0cnVlKTsKK30KKworY2xh
c3MgQ29tcGFyYXRvciA6IHB1YmxpYyBMZXZlbERCQ29tcGFyYXRvciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBpbnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJT
bGljZSYgYikgY29uc3QgeyByZXR1cm4gSURCTGV2ZWxEQkNvZGluZzo6Y29tcGFyZShhLCBiKTsg
fQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuICJpZGJfY21w
MSI7IH0KK307CisKK3N0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBk
YikKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hlbWFWZXJzaW9u
S2V5OjplbmNvZGUoKTsKKworICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CisgICAgaWYg
KCFnZXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgeworICAgICAgICBzY2hl
bWFWZXJzaW9uID0gMDsKKyAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hl
bWFWZXJzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBG
SVhNRTogRXZlbnR1YWxseSwgd2UnbGwgbmVlZCB0byBiZSBhYmxlIHRvIHRyYW5zaXRpb24gYmV0
d2VlbiBzY2hlbWFzLgorICAgIGlmIChzY2hlbWFWZXJzaW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMgdmVyc2lvbi4KKworICAgIHJl
dHVybiB0cnVlOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCisgICAgOiBtX2lkZW50aWZp
ZXIoaWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV9kYihkYikK
K3sKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsK
K30KKworSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUoKQor
eworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRpZmllcik7CisK
KyAgICAvLyBtX2RiJ3MgZGVzdHJ1Y3RvciB1c2VzIG1fY29tcGFyYXRvci4gVGhlIG9yZGVyIG9m
IGRlc3RydWN0aW9uIGlzIGltcG9ydGFudC4KKyAgICBtX2RiLmNsZWFyKCk7CisgICAgbV9jb21w
YXJhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQoreworICAgIFN0cmluZyBwYXRoQmFzZSA9IHBh
dGhCYXNlQXJnOworCisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0g
YWRvcHRQdHIobmV3IENvbXBhcmF0b3IoKSk7CisgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4g
ZGI7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICBkYiA9IExldmVsREJE
YXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAg
ICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBh
dGhCYXNlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPigpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMu
CisgICAgICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNl
LCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZl
bGRiIik7CisKKyAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFy
YXRvci5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKCFkYikKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJh
dG9yIG5hbWUgY2hhbmdlcy4KKworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkxldmVsREJCYWNraW5nU3RvcmUoZmlsZUlkZW50
aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBiYWNraW5nU3RvcmUtPm1fY29t
cGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOworCisgICAgaWYgKCFzZXRVcE1ldGFkYXRh
KGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4oKTsKKworICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwor
fQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5
ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2Rl
U3RvcEtleUZvck9yaWdpbihtX2lkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGZvdW5kTmFtZXMu
aXNFbXB0eSgpKTsKKworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQo
KSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewor
ICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0
IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIERhdGFiYXNlTmFtZUtl
eSBkYXRhYmFzZU5hbWVLZXk7CisgICAgICAgIHAgPSBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShw
LCBsaW1pdCwgJmRhdGFiYXNlTmFtZUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAg
ICBmb3VuZE5hbWVzLmFwcGVuZChkYXRhYmFzZU5hbWVLZXkuZGF0YWJhc2VOYW1lKCkpOworICAg
IH0KK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZv
dW5kSWQpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6
ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CisKKyAgICBib29sIG9rID0gZ2V0SW50KG1fZGIu
Z2V0KCksIGtleSwgZm91bmRJZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiksIGZvdW5k
VmVyc2lvbik7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRh
dGFiYXNlKiBkYikKK3sKKyAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsKKyAgICBpZiAo
IWdldEludChkYiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQpKQor
ICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKKworICAgIEFTU0VSVChtYXhEYXRhYmFzZUlkID49
IDApOworCisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbWF4RGF0YWJhc2VJZCArIDE7CisgICAg
aWYgKCFwdXRJbnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBkYXRhYmFzZUlkKSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGRhdGFiYXNlSWQ7Cit9CisKK2Jvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCit7Cisg
ICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOworICAgIGlmIChyb3dJZCA8
IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkg
PSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworICAgIGlmICgh
cHV0SW50KG1fZGIuZ2V0KCksIGtleSwgcm93SWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlv
bik7CisgICAgaWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJW
ZXJzaW9uKSwgdmVyc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGVuZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgp
ICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
ID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKKyAg
ICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZDsKKyAgICBT
dHJpbmcgdmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVy
c2lvbiwgZGF0YWJhc2VJZCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFy
dEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkg
PSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCArIDEsIERhdGFiYXNlTWV0
YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSkpIHsKKyAgICAgICAgdHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25z
dCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVy
LCBuYW1lKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7CisKKyAgICB0
cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBp
dCwgY29uc3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbWV0YURhdGFUeXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJl
S2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciog
cCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQt
PmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkpOworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7Cisg
ICAgaWYgKG1ldGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSAhPSBvYmplY3RTdG9yZUlkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9
IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBm
b3VuZEF1dG9JbmNyZW1lbnRGbGFncykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRL
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7Cisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpl
bmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CisKKyAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEtl
eVBhdGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmlz
RW1wdHkoKSk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0
ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsoc3RhcnRLZXkpOworICAgIHdoaWxlIChpdC0+aXNW
YWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CisgICAgICAg
IGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hhciAq
bGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eSBtZXRhRGF0YUtleTsKKyAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29k
ZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworICAgICAgICBp
ZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFEYXRhS2V5Lm9iamVj
dFN0b3JlSWQoKTsKKyAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IGRlY29kZVN0cmlu
ZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaXQt
Pm5leHQoKTsKKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0
LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAxKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1
ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgYm9vbCBoYXNLZXlQYXRo
ID0gdHJ1ZTsKKworICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICBpZiAoIWNoZWNrT2JqZWN0
U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDIp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBl
bmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgIGJvb2wgYXV0b0luY3Jl
bWVudCA9ICppdC0+dmFsdWUoKS5iZWdpbigpOworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIElz
IGV2aWNhdGJsZS4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBl
KGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAzKSkgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2ZXJzaW9uLgorICAg
ICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BL
ZXksIG9iamVjdFN0b3JlSWQsIDQpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpdW0gaW5kZXggaWQgYWxsb2NhdGVkLgorICAgICAg
ICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXks
IG9iamVjdFN0b3JlSWQsIDUpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIGhhcyBrZXkgcGF0aCAoaXMgbm90IG51bGwp
CisgICAgICAgIGlmIChjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCA2KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBl
bmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgICAgICBoYXNLZXlQYXRo
ID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYg
IWtleVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBmb3Vu
ZElkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKG9i
amVjdFN0b3JlTmFtZSk7CisgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGhhc0tleVBhdGgg
PyBrZXlQYXRoIDogU3RyaW5nKCkpOworICAgICAgICBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5h
cHBlbmQoYXV0b0luY3JlbWVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50NjRfdCBnZXROZXdP
YmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCkKK3sKKyAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKKyAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1h
eE9iamVjdFN0b3JlSWQpKQorICAgICAgICBtYXhPYmplY3RTdG9yZUlkID0gMDsKKworICAgIEFT
U0VSVChtYXhPYmplY3RTdG9yZUlkID49IDApOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlk
ID0gbWF4T2JqZWN0U3RvcmVJZCArIDE7CisgICAgaWYgKCFwdXRJbnQodHJhbnNhY3Rpb24sIG1h
eE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpKQorICAgICAgICByZXR1cm4gLTE7CisK
KyAgICByZXR1cm4gb2JqZWN0U3RvcmVJZDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3Qm
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQpOworICAgIGlmIChvYmplY3RTdG9y
ZUlkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG5hbWVLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMSk7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGF1dG9JbmNyZW1lbnRLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMik7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGV2aWN0YWJsZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAzKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4
SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgNSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tleVBhdGhLZXkgID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDYp
OworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lc0tleSA9IE9iamVjdFN0b3JlTmFtZXNLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBuYW1lKTsKKworICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGlmICghb2spIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBtYXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKCFvaykgewor
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhc3NpZ25lZE9iamVjdFN0b3JlSWQgPSBvYmpl
Y3RTdG9yZUlkOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAg
IFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCksIG9iamVjdFN0b3JlTmFtZSk7CisKKyAgICBpZiAoIWRlbGV0ZVJhbmdl
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgICAgIHJldHVy
bjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KKworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5y
ZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
TmFtZSkpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAp
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCkpKQorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgaWYgKCFk
ZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAgICAgICByZXR1
cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisKKyAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQpOworfQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
ZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwga2V5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxl
dmVsZGJLZXksIGRhdGEpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpbnQ2NF90
IHZlcnNpb247CisgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCksIHZlcnNpb24pOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICh2b2lkKSB2ZXJzaW9uOworCisgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBk
YXRhLmVuZCgpKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIExldmVsREJSZWNvcmRJZGVudGlm
aWVyIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmll
cj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9u
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIocHJpbWFyeUtl
eSwgdmVyc2lvbikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50
aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRp
ZmllcigpKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9CisgICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2b2lkIHNldFByaW1hcnlLZXkoY29u
c3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7
IH0KKyAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAg
ICB2b2lkIHNldFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247
IH0KKworcHJpdmF0ZToKKyAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8
Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFy
eUtleSksIG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkp
OyB9CisgICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3Zl
cnNpb24oLTEpIHt9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTog
TWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2Yg
dGhlIGtleS4KKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307Cit9CisKK3N0YXRpYyBpbnQ2NF90
IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDQpOworCisgICAgaW50NjRfdCBsYXN0VmVyc2lv
biA9IC0xOworICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFz
dFZlcnNpb24pKQorICAgICAgICBsYXN0VmVyc2lvbiA9IDA7CisKKyAgICBBU1NFUlQobGFzdFZl
cnNpb24gPj0gMCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVyc2lvbiArIDE7Cisg
ICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIHZlcnNpb24p
OworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKworICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFz
dFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRo
ZSBvdmVyZmxvdyBzY2VuYXJpby4KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCitib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVy
KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJz
aW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0
b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChlbmNv
ZGVWYXJJbnQodmVyc2lvbikpOworICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwor
CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwg
dikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlz
dHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwga2V5KTsKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50
cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRp
Y19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CisgICAg
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkp
OworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2Rl
KCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOworCisgICAgZGVsZXRlUmFuZ2UobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKK30KKworUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQoreworICAg
IHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOworICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3Jk
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4o
cmVjb3JkSWRlbnRpZmllcik7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVE
YXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgbV9jdXJy
ZW50VHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOworCisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtl
eSgpKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsK
K30KKworZG91YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVt
YmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgbWluSURCS2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5
KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKworICAgIGludCBtYXhOdW1lcmljS2V5ID0gMDsKKwor
ICAgIC8vIEZJWE1FOiBCZSBtb3JlIGVmZmljaWVudDogc2VlayB0byBzb21ldGhpbmcgYWZ0ZXIg
dGhlIG9iamVjdCBzdG9yZSBkYXRhLCB0aGVuIHJldmVyc2UuCisKKyAgICBmb3IgKGl0LT5zZWVr
KHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BL
ZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgp
LmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwor
CisgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJU
KHApOworCisgICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElEQktleTo6
TnVtYmVyVHlwZSkgeworICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJlcigpKTsKKyAgICAgICAgICAgIGlmIChuID4gbWF4
TnVtZXJpY0tleSkKKyAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBtYXhOdW1lcmljS2V5ICsgMTsKK30KKworYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5z
YWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCksIHZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMZXZl
bERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2Fz
dDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisgICAg
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkp
OworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5J
REJLZXkoKSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxp
ZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29u
c3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisgICAgICAgIE9iamVjdFN0b3JlRGF0
YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwg
bGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAgICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBkYXRhS2V5LnVzZXJLZXkoKTsKKworICAgICAgICBpbnQ2NF90
IHZlcnNpb247CisgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVl
KCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgICAgICBpZiAoIXEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPExldmVsREJSZWNv
cmRJZGVudGlmaWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2Rl
SURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lvbik7CisgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9
IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaWYgKCFjYWxs
YmFjay5jYWxsYmFjayhyaS5nZXQoKSwgaWRiVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjaGVja0lu
ZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9y
PGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEluZGV4TWV0YURh
dGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0YURhdGFLZXk6
OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkp
OworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7CisgICAgaWYgKG1ldGFEYXRhS2V5LmluZGV4SWQo
KSAhPSBpbmRleElkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5
Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZl
Y3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpCit7CisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIDAsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsK
KworICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE5hbWVz
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE11bHRp
RW50cnlGbGFncy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQg
PSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKKyAgICB3
aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwg
MCkgeworICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAg
IGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIEluZGV4TWV0
YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNv
ZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAg
ICBpbnQ2NF90IGluZGV4SWQgPSBtZXRhRGF0YUtleS5pbmRleElkKCk7CisgICAgICAgIEFTU0VS
VCghbWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpOworCisgICAgICAgIFN0cmluZyBpbmRleE5h
bWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkp
OworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCisgICAgICAgIGlmICghY2hl
Y2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCAxKSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2Rl
L2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgorICAgICAgICBib29sIGluZGV4VW5pcXVlID0g
Kml0LT52YWx1ZSgpLmJlZ2luKCk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8ga2V5UGF0aAor
ICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwg
aW5kZXhJZCwgMikpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJp
bmcga2V5UGF0aCA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUo
KS5lbmQoKSk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBtdWx0aUVudHJ5
IGZsYWcKKyAgICAgICAgYm9vbCBpbmRleE11bHRpRW50cnkgPSBmYWxzZTsKKyAgICAgICAgaWYg
KGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgMykp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9y
IGJvb2xzLgorICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gKml0LT52YWx1ZSgpLmJlZ2lu
KCk7CisgICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgZm91bmRJ
ZHMuYXBwZW5kKGluZGV4SWQpOworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChpbmRleE5hbWUp
OworICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChrZXlQYXRoKTsKKyAgICAgICAgZm91bmRV
bmlxdWVGbGFncy5hcHBlbmQoaW5kZXhVbmlxdWUpOworICAgICAgICBmb3VuZE11bHRpRW50cnlG
bGFncy5hcHBlbmQoaW5kZXhNdWx0aUVudHJ5KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQ2NF90
IGdldE5ld0luZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgaW50NjRfdCBtYXhJbmRl
eElkID0gLTE7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7Cisg
ICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQpKQor
ICAgICAgICBtYXhJbmRleElkID0ga01pbmltdW1JbmRleElkOworCisgICAgQVNTRVJUKG1heElu
ZGV4SWQgPj0gMCk7CisKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtYXhJbmRleElkICsgMTsKKyAg
ICBpZiAoIXB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCkpCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBpbmRleElkOworfQorCitib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5k
ZXhJZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgaWYgKGluZGV4SWQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIDEpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIDIpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDMp
OworCisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
bmFtZUtleSwgbmFtZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgdW5pcXVlS2V5LCBp
c1VuaXF1ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBv
ayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5
UGF0aCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9
IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbXVsdGlFbnRyeUtleSwgaXNNdWx0
aUVudHJ5KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiB1bmlx
dWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgMSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBJbmRl
eE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
Mik7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUobmFtZUtleSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZSh1
bmlxdWVLZXkpKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0
aW9uLT5yZW1vdmUoa2V5UGF0aEtleSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGluZGV4RGF0YVN0YXJ0ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGluZGV4RGF0YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0YUVuZCkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4
RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpbmRleElkID49
IGtNaW5pbXVtSW5kZXhJZCk7CisgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlE
QktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKworICAg
IFZlY3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERC
UmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CisgICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisKKyAgICByZXR1cm4gbV9jdXJyZW50VHJh
bnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOworfQorCitzdGF0aWMgYm9vbCBmaW5k
R3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCit7
CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBpdC0+c2Vlayh0YXJnZXQpOworCisgICAgaWYgKCFpdC0+aXNWYWxpZCgp
KSB7CisgICAgICAgIGl0LT5zZWVrVG9MYXN0KCk7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aGlsZSAoY29tcGFy
ZUluZGV4S2V5cyhpdC0+a2V5KCksIHRhcmdldCkgPiAwKSB7CisgICAgICAgIGl0LT5wcmV2KCk7
CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGZvdW5kS2V5LmNsZWFyKCk7CisgICAgICAgIGZv
dW5kS2V5LmFwcGVuZChpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpIC0gaXQtPmtl
eSgpLmJlZ2luKCkpOworCisgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzZXZlcmFsIGluZGV4IGtl
eXMgdGhhdCBjb21wYXJlIGVxdWFsLiBXZSB3YW50IHRoZSBsYXN0IG9uZS4KKyAgICAgICAgaXQt
Pm5leHQoKTsKKyAgICB9IHdoaWxlIChpdC0+aXNWYWxpZCgpICYmICFjb21wYXJlSW5kZXhLZXlz
KGl0LT5rZXkoKSwgdGFyZ2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwgaW50
NjRfdCwgaW50NjRfdCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0ZSBpbmRleCBk
YXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgorICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiBrZXkpCit7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGdl
dFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXkpOworICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
ICpwcmltYXJ5S2V5KTsKK30KKworc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmlt
YXJ5S2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKKyAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRh
dGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEu
YmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKK30KKworc3RhdGljIGJvb2wgZmluZEtl
eUluSW5kZXgoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKK3sKKyAgICBBU1NF
UlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOworCisgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsobGV2ZWxkYktl
eSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMoaXQtPmtl
eSgpLCBsZXZlbGRiS2V5KSA+IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaW50NjRfdCB2ZXJzaW9uOworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKKyAgICAg
ICAgaWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3VuZEVuY29k
ZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOworCisgICAgICAg
IGlmICghdmVyc2lvbkV4aXN0cyh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgICAgIC8vIERl
bGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIGl0LT5uZXh0KCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQo
bV9jdXJyZW50VHJhbnNhY3Rpb24pOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXk7CisgICAgaWYgKGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXkpKSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7CisgICAg
ICAgIGRlY29kZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5j
b2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOworICAgICAgICByZXR1cm4gcHJpbWFy
eUtleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQoreworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFy
eUtleTsKKyAgICBpZiAoIWZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpbmRleEtleSwgZm91bmRFbmNv
ZGVkUHJpbWFyeUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlY29kZUlEQktl
eShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXku
ZW5kKCksIGZvdW5kUHJpbWFyeUtleSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFj
ZSB7CisKK3N0cnVjdCBDdXJzb3JPcHRpb25zIHsKKyAgICBWZWN0b3I8Y2hhcj4gbG93S2V5Owor
ICAgIGJvb2wgbG93T3BlbjsKKyAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAgICBib29sIGhp
Z2hPcGVuOworICAgIGJvb2wgZm9yd2FyZDsKKyAgICBib29sIHVuaXF1ZTsKK307CisKK2NsYXNz
IEN1cnNvckltcGxDb21tb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgeworcHVi
bGljOgorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBib29sIGNv
bnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3Vy
cmVudFJvdygpID0gMDsKKyAgICBib29sIGZpcnN0U2VlaygpOworCitwcm90ZWN0ZWQ6CisgICAg
Q3Vyc29ySW1wbENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBD
dXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCisgICAg
eworICAgIH0KKworICAgIEN1cnNvckltcGxDb21tb24oY29uc3QgQ3Vyc29ySW1wbENvbW1vbiog
b3RoZXIpCisgICAgICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKKyAg
ICAgICAgLCBtX2N1cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykKKyAgICAgICAg
LCBtX2N1cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKKyAgICB7CisgICAgICAgIGlmIChv
dGhlci0+bV9pdGVyYXRvcikgeworICAgICAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRv
ci0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+
bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5p
c1ZhbGlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVh
bCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9CisKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJh
bnNhY3Rpb247CisgICAgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7CisgICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJl
bnRLZXk7Cit9OworCitib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCit7CisgICAg
bV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICBpZiAo
bV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCisgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9jdXJz
b3JPcHRpb25zLmxvd0tleSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1f
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCFt
X2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMu
aGlnaEtleSkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1f
Y3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29t
cGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkp
ID4gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2N1cnNvck9w
dGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3
YXJkICYmICFtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1f
Y3Vyc29yT3B0aW9ucy5sb3dPcGVuKSB7CisgICAgICAgICAgICAvLyBsb3dLZXkgbm90IGluY2x1
ZGVkIGluIHRoZSByYW5nZS4KKyAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKSB7CisgICAgICAgICAg
ICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndh
cmQgJiYgbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuKSB7CisgICAgICAgICAgICAvLyBoaWdoS2V5
IG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UuCisgICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIHsK
KyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxvYWRDdXJy
ZW50Um93KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKKyAg
ICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ3Vyc29y
SW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSkKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBzaGFyZXMgYSBsb3Qgb2YgY29kZSB3aXRoIGZpcnN0U2Vlay4KKyAgICBS
ZWZQdHI8SURCS2V5PiBwcmV2aW91c0tleSA9IG1fY3VycmVudEtleTsKKworICAgIGZvciAoOzsp
IHsKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgbV9p
dGVyYXRvci0+bmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2l0ZXJhdG9yLT5w
cmV2KCk7CisKKyAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IHRyYXNoOworICAgICAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gpKQorICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAm
JiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9y
LT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIC8vIGhpZ2gga2V5IG5vdCBp
bmNsdWRlZCBpbiByYW5nZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBj
b21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtl
eSkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29y
T3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJbmRl
eEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDApIC8v
IGxvdyBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9u
cy5sb3dPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29y
T3B0aW9ucy5sb3dLZXkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoIWxvYWRDdXJyZW50Um93KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoa2V5KSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtleSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtleS5nZXQoKSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy51bmlxdWUgJiYgbV9jdXJyZW50S2V5LT5pc0VxdWFsKHBy
ZXZpb3VzS2V5LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBPYmplY3RTdG9yZUN1cnNv
ckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0aGlzKSk7CisgICAgfQorCisgICAg
Ly8gQ3Vyc29ySW1wbENvbW1vbgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4g
bV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cigpIE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0K
KyAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitwcml2
YXRlOgorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IEN1
cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0K
KworICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUN1cnNvckltcGwq
IG90aGVyKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgICwgbV9j
dXJyZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBT
dHJpbmcgbV9jdXJyZW50VmFsdWU7CisgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVy
PiBtX2lkZW50aWZpZXI7Cit9OworCitib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdp
bigpOworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7
CisKKyAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OworICAgIHAgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtl
eSk7CisgICAgQVNTRVJUKHApOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKKworICAg
IGludDY0X3QgdmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRl
cmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lv
bik7CisgICAgQVNTRVJUKHEpOworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRy
eSBhbmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworCisgICAg
bV9jdXJyZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQo
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDog
cHVibGljIEN1cnNvckltcGxDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29y
T3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bmRleEtleUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIEN1cnNvckltcGxDb21t
b24KKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToK
KyAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bmRleEtleUN1cnNvckltcGwoY29uc3QgSW5kZXhLZXlDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAg
ICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhl
ci0+bV9wcmltYXJ5S2V5KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBtX3By
aW1hcnlLZXk7Cit9OworCitib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3co
KQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOworICAg
IGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisgICAgSW5k
ZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUocCwg
a2V5TGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0gaW5kZXhEYXRh
S2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKKyAgICBjb25z
dCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9p
dGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHEp
OworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcSA9IGRlY29kZUlE
QktleShxLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOworICAgIEFT
U0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rv
cjxjaGFyPiBwcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGlu
ZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICpt
X3ByaW1hcnlLZXkpOworCisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmdldChwcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0
IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5k
ZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRv
ci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0
ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1
cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMpKTsKKyAgICB9
CisKKyAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gMDsgfQorICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToKKyAgICBJ
bmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleEN1cnNv
ckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5
KQorICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAgICAgICwgbV9wcmltYXJ5
TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5OworICAgIFN0cmluZyBtX3ZhbHVlOworICAg
IFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OworfTsKKworYm9vbCBJbmRleEN1cnNv
ckltcGw6OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyICpwID0gbV9pdGVyYXRv
ci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyICpsaW1pdCA9IG1faXRlcmF0b3ItPmtl
eSgpLmVuZCgpOworCisgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5k
ZXhEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJy
ZW50S2V5ID0gaW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGNvbnN0IGNoYXIgKnEgPSBt
X2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciAqdmFsdWVMaW1pdCA9
IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCk7CisKKyAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNp
b247CisgICAgcSA9IGRlY29kZVZhckludChxLCB2YWx1ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9u
KTsKKyAgICBBU1NFUlQocSk7CisgICAgaWYgKCFxKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcSA9IGRlY29kZUlEQktleShxLCB2YWx1ZUxpbWl0LCBtX3ByaW1hcnlLZXkpOworICAgIEFT
U0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcHJp
bWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXku
ZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5
KTsKKworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5n
ZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHQg
PSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVE
YXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVy
c2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV92YWx1ZSA9IGRlY29kZVN0
cmluZyh0LCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK1Bhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JP
cHRpb25zIGN1cnNvck9wdGlvbnM7CisKKyAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+bG93ZXIoKTsKKyAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBw
ZXIoKTsKKyAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Cisg
ICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9O
T19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUp
OworCisgICAgaWYgKCFsb3dlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bWluSURCS2V5KCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSB0cnVlOyAvLyBO
b3QgaW5jbHVkZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAq
cmFuZ2UtPmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+
bG93ZXJPcGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1
cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBpZiAoY3Vyc29yT3B0
aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHRydWU7
IC8vIE5vdCBpbmNsdWRlZC4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVk
IGEga2V5IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNz
VGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGln
aEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5nZS0+dXBwZXIo
KSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7
CisKKyAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAgICAgICAgIC8v
IEZvciByZXZlcnNlIGN1cnNvcnMsIHdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OworICAgICAgICAgICAgaWYgKCFmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRl
IHRoYXQuCisgICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJl
SW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAg
ICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOworCisgICAgICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9y
ZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0
aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JP
cHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPmxvd2VyKCk7CisgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVy
KCk7CisgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOworICAg
IGN1cnNvck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsK
KworICAgIGlmICghbG93ZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9
IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsgLy8gSW5jbHVk
ZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2Ut
Pmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJP
cGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9w
dGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0g
ZmFsc2U7IC8vIEluY2x1ZGVkLgorCisgICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJk
KSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgKnJhbmdlLT51cHBlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJh
bmdlLT51cHBlck9wZW4oKTsKKworICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5Owor
ICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBT
ZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAg
ICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNo
b3VsZCBpbmNsdWRlIHRoYXQuCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYm
IGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwg
MCkKKyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKworICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgfQorCisgICAgUmVm
UHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVh
dGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIGlmICgh
Y3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3Vy
c29yLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25z
OworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJv
b2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOworICAgIGN1cnNvck9wdGlv
bnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8
fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKKyAgICBjdXJzb3JPcHRpb25zLnVuaXF1
ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7CisKKyAgICBpZiAoIWxvd2VyQm91
bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29k
ZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAgICAgICAgY3Vy
c29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsKKyAgICAgICAg
Y3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOworICAgIH0KKworICAg
IGlmICghdXBwZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRl
eERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
KTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4K
KworICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5
IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9y
RXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7
CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisK
KyAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKKyAgICAgICAgaWYgKCFmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtl
eSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJldHVybiAwOwor
CisgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1
dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0Lgor
ICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKGZv
dW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAgICAgICAgICBjdXJz
b3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7CisKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
S2V5ID0gZm91bmRIaWdoS2V5OworICAgIH0KKworICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+
IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRl
KHRoaXMpOworfQorCitQYXNzUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkxldmVs
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkpOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQoreworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCit7CisgICAgQVNT
RVJUKCFtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2lu
Z1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50
VHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFu
c2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5j
bGVhcigpOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4
aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcGF0aEJhc2VBcmcpCit7CisgICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VB
cmc7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBzYW1lIExldmVs
REIgZGF0YWJhc2UgZm9yIGFsbCBvcmlnaW5zLgorICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CisKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBj
aGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgdGhlIGRvbWFpbiwgbm90IHRoZSBkYXRhYmFzZSBpdHNl
bGYKKyAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxE
QikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKK2Ns
YXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2NsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJh
c2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCop
OworICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZs
YWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0
QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKworICAgIHZpcnR1
YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRV
bmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7CisgICAgdmly
dHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBp
c1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2Jq
ZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
PiBjcmVhdGVUcmFuc2FjdGlvbigpOworCisgICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhp
c3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBh
dGhCYXNlKTsKKworcHJpdmF0ZToKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZl
bERCRGF0YWJhc2U+KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElE
QkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxMZXZlbERCRGF0YWJh
c2U+IG1fZGI7CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Cisg
ICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAg
ICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW4oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcm9sbGJhY2soKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxl
dmVsREJCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9i
YWNraW5nU3RvcmU7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisj
ZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNlbmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNv
ZGluZy5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQorCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCisvLyBMZXZlbERCIHN0b3JlcyBrZXkvdmFsdWUgcGFpcnMu
IEtleXMgYW5kIHZhbHVlcyBhcmUgc3RyaW5ncyBvZiBieXRlcywgbm9ybWFsbHkgb2YgdHlwZSBW
ZWN0b3I8Y2hhcj4uCisvLworLy8gVGhlIGtleXMgaW4gdGhlIGJhY2tpbmcgc3RvcmUgYXJlIHZh
cmlhYmxlLWxlbmd0aCB0dXBsZXMgd2l0aCBkaWZmZXJlbnQgdHlwZXMKKy8vIG9mIGZpZWxkcy4g
RWFjaCBrZXkgaW4gdGhlIGJhY2tpbmcgc3RvcmUgc3RhcnRzIHdpdGggYSB0ZXJuYXJ5IHByZWZp
eDogKGRhdGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkKS4gRm9yIGVhY2gsIDAg
aXMgcmVzZXJ2ZWQgZm9yIG1ldGEtZGF0YS4KKy8vIFRoZSBwcmVmaXggbWFrZXMgc3VyZSB0aGF0
IGRhdGEgZm9yIGEgc3BlY2lmaWMgZGF0YWJhc2UsIG9iamVjdCBzdG9yZSwgYW5kIGluZGV4IGFy
ZSBncm91cGVkIHRvZ2V0aGVyLiBUaGUgbG9jYWxpdHkgaXMgaW1wb3J0YW50IGZvciBwZXJmb3Jt
YW5jZTogY29tbW9uCisvLyBvcGVyYXRpb25zIHNob3VsZCBvbmx5IG5lZWQgYSBtaW5pbWFsIG51
bWJlciBvZiBzZWVrIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBhbGwgdGhlIG1ldGEtZGF0YSBm
b3IgYSBkYXRhYmFzZSBpcyBncm91cGVkIHRvZ2V0aGVyIHNvIHRoYXQgcmVhZGluZyB0aGF0Cisv
LyBtZXRhLWRhdGEgb25seSByZXF1aXJlcyBvbmUgc2Vlay4KKy8vCisvLyBFYWNoIGtleSB0eXBl
IGhhcyBhIGNsYXNzIChpbiBzcXVhcmUgYnJhY2tldHMgYmVsb3cpIHdoaWNoIGtub3dzIGhvdyB0
byBlbmNvZGUsIGRlY29kZSwgYW5kIGNvbXBhcmUgdGhhdCBrZXkgdHlwZS4KKy8vCisvLyBHbG9i
YWwgbWV0YS1kYXRhIGhhdmUga2V5cyB3aXRoIHByZWZpeCAoMCwwLDApLCBmb2xsb3dlZCBieSBh
IHR5cGUgYnl0ZToKKy8vCisvLyAgICAgPDAsIDAsIDAsIDA+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0+IEluZGV4ZWREQi9MZXZlbERCIHNjaGVtYSB2ZXJzaW9u
ICgwIGZvciBub3cpIFtTY2hlbWFWZXJzaW9uS2V5XQorLy8gICAgIDwwLCAwLCAwLCAxPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUaGUgbWF4aW11bSBkYXRh
YmFzZSBpZCBldmVyIGFsbG9jYXRlZCBbTWF4RGF0YWJhc2VJZEtleV0KKy8vICAgICA8MCwgMCwg
MCwgMTAwLCBkYXRhYmFzZSBpZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gRXhpc3Rl
bmNlIGltcGxpZXMgdGhlIGRhdGFiYXNlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW0RhdGFiYXNl
RnJlZUxpc3RLZXldCisvLyAgICAgPDAsIDAsIDAsIDIwMSwgdXRmMTYgb3JpZ2luIG5hbWUsIHV0
ZjE2IGRhdGFiYXNlIG5hbWU+ID0+IERhdGFiYXNlIGlkIFtEYXRhYmFzZU5hbWVLZXldCisvLwor
Ly8KKy8vIERhdGFiYXNlIG1ldGEtZGF0YToKKy8vCisvLyAgICAgQWdhaW4sIHRoZSBwcmVmaXgg
aXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgMD4gPT4gdXRmMTYgb3JpZ2luIG5hbWUgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCAxPiA9PiB1dGYxNiBkYXRhYmFzZSBuYW1lIFtEYXRhYmFzZU1l
dGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMj4gPT4gdXRmMTYgdXNlciB2
ZXJzaW9uIGRhdGEgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCAzPiA9PiBtYXhpbXVtIG9iamVjdCBzdG9yZSBpZCBldmVyIGFsbG9jYXRlZCBbRGF0YWJh
c2VNZXRhRGF0YUtleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIG1ldGEtZGF0YToKKy8vCisv
LyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiBhIHZhcmlh
YmxlLWxlbmd0aCBpbnRlZ2VyLCBhbmQgdGhlbiBhbm90aGVyIHZhcmlhYmxlLWxlbmd0aCBpbnRl
Z2VyIChGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBieXRlKS4KKy8vCisvLyAgICAgPGRhdGFiYXNl
IGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAwPiA9PiB1dGYxNiBvYmplY3Qgc3RvcmUg
bmFtZSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAs
IDUwLCBvYmplY3Qgc3RvcmUgaWQsIDE+ID0+IHV0ZjE2IGtleSBwYXRoIFtPYmplY3RTdG9yZU1l
dGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBp
ZCwgMj4gPT4gaGFzIGF1dG8gaW5jcmVtZW50IFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8g
ICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMz4gPT4gaXMgZXZp
Y3RhYmxlIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgND4gPT4gbGFzdCAidmVyc2lvbiIgbnVtYmVyIFtPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVj
dCBzdG9yZSBpZCwgNT4gPT4gbWF4aW11bSBpbmRleCBpZCBldmVyIGFsbG9jYXRlZCBbT2JqZWN0
U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qg
c3RvcmUgaWQsIDY+ID0+IGhhcyBrZXkgcGF0aCAodnMuIG51bGwpIFtPYmplY3RTdG9yZU1ldGFE
YXRhS2V5XQorLy8KKy8vCisvLyBJbmRleCBtZXRhLWRhdGE6CisvLworLy8gICAgIFRoZSBwcmVm
aXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gdHdvIHZhcmlhYmxlLWxlbmd0aCBp
bnRlZ2VycywgYW5kIHRoZW4gYW5vdGhlciB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFz
ZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAwPiA9PiB1dGYxNiBp
bmRleCBuYW1lIFtJbmRleE1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwg
MTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAxPiA9PiBhcmUgaW5kZXgga2V5cyB1bmlx
dWUgW0luZGV4TWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9i
amVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDI+ID0+IHV0ZjE2IGtleSBwYXRoIFtJbmRleE1ldGFE
YXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQs
IGluZGV4IGlkLCAzPiA9PiBpcyBpbmRleCBtdWx0aS1lbnRyeSBbSW5kZXhNZXRhRGF0YUtleV0K
Ky8vCisvLworLy8gT3RoZXIgb2JqZWN0IHN0b3JlIGFuZCBpbmRleCBtZXRhLWRhdGE6CisvLwor
Ly8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSBvYmplY3Qg
c3RvcmUgYW5kIGluZGV4IGlkIGFyZSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlcnMsIHRoZSB1dGYx
NiBzdHJpbmdzIGFyZSB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncy4KKy8vCisvLyAgICAgPGRhdGFi
YXNlIGlkLCAwLCAwLCAxNTAsIG9iamVjdCBzdG9yZSBpZD4gICAgICAgICAgICAgICAgICAgPT4g
ZXhpc3RlbmNlIGltcGxpZXMgdGhlIG9iamVjdCBzdG9yZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0
IFtPYmplY3RTdG9yZUZyZWVMaXN0S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTUx
LCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkPiAgICAgICAgID0+IGV4aXN0ZW5jZSBpbXBsaWVz
IHRoZSBpbmRleCBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtJbmRleEZyZWVMaXN0S2V5XQorLy8g
ICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMjAwLCB1dGYxNiBvYmplY3Qgc3RvcmUgbmFtZT4gICAg
ICAgICAgID0+IG9iamVjdCBzdG9yZSBpZCBbT2JqZWN0U3RvcmVOYW1lc0tleV0KKy8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDIwMSwgb2JqZWN0IHN0b3JlIGlkLCB1dGYxNiBpbmRleCBuYW1l
PiA9PiBpbmRleCBpZCBbSW5kZXhOYW1lc0tleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIGRh
dGE6CisvLworLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRo
ZSB1c2VyIGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlk
LCBvYmplY3Qgc3RvcmUgaWQsIDEsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIsIHNlcmlhbGl6ZWQg
c2NyaXB0IHZhbHVlIFtPYmplY3RTdG9yZURhdGFLZXldCisvLworLy8KKy8vICJFeGlzdHMiIGVu
dHJ5OgorLy8KKy8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBU
aGUgdXNlciBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCisvLworLy8gICAgIDxkYXRhYmFzZSBp
ZCwgb2JqZWN0IHN0b3JlIGlkLCAyLCB1c2VyIGtleT4gPT4gInZlcnNpb24iIFtFeGlzdHNFbnRy
eUtleV0KKy8vCisvLworLy8gSW5kZXggZGF0YToKKy8vCisvLyAgICAgVGhlIHByZWZpeCBpcyBm
b2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIGluZGV4IGtleSBpcyBhbiBlbmNvZGVkIElEQktl
eS4gVGhlIHNlcXVlbmNlIG51bWJlciBpcyBhIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VyLgorLy8g
ICAgIFRoZSBwcmltYXJ5IGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRh
dGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCBpbmRleCBrZXksIHNlcXVlbmNl
IG51bWJlciwgcHJpbWFyeSBrZXk+ID0+ICJ2ZXJzaW9uIiwgcHJpbWFyeSBrZXkgW0luZGV4RGF0
YUtleV0KKy8vCisvLyAgICAgKFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgb2Jzb2xldGU7IGl0IHdh
cyB1c2VkIHRvIGFsbG93IHR3byBlbnRyaWVzIHdpdGgKKy8vICAgICB0aGUgc2FtZSB1c2VyIChp
bmRleCkga2V5IGluIG5vbi11bmlxdWUgaW5kZXhlcyBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9m
CisvLyAgICAgdGhlIHByaW1hcnkga2V5IGluIHRoZSBkYXRhLiBUaGUgInZlcnNpb24iIGZpZWxk
IGlzIHVzZWQgdG8gd2VlZCBvdXQgc3RhbGUKKy8vICAgICBpbmRleCBkYXRhLiBXaGVuZXZlciBu
ZXcgb2JqZWN0IHN0b3JlIGRhdGEgaXMgaW5zZXJ0ZWQsIGl0IGdldHMgYSBuZXcKKy8vICAgICAi
dmVyc2lvbiIgbnVtYmVyLCBhbmQgbmV3IGluZGV4IGRhdGEgaXMgd3JpdHRlbiB3aXRoIHRoaXMg
bnVtYmVyLiBXaGVuCisvLyAgICAgdGhlIGluZGV4IGlzIHVzZWQgZm9yIGxvb2stdXBzLCBlbnRy
aWVzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUKKy8vICAgICAiZXhpc3RzIiBlbnRyaWVzLCBh
bmQgcmVjb3JkcyB3aXRoIG9sZCAidmVyc2lvbiIgbnVtYmVycyBhcmUgZGVsZXRlZAorLy8gICAg
IHdoZW4gdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LAorLy8g
ICAgIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3csIGFuZCBJbmRleEtleUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KS4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElE
QkxldmVsREJDb2RpbmcgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TnVs
bFR5cGVCeXRlID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlTdHJpbmdU
eXBlQnl0ZSA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5RGF0ZVR5cGVC
eXRlID0gMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlOdW1iZXJUeXBlQnl0
ZSA9IDM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5QXJyYXlUeXBlQnl0ZSA9
IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TWluS2V5VHlwZUJ5dGUgPSA1
OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCA9
IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRXhpc3RzRW50cnlJbmRleElkID0gMjsK
Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga1NjaGVtYVZlcnNpb25UeXBlQnl0ZSA9IDA7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrTWF4RGF0YWJhc2VJZFR5cGVCeXRlID0gMTsK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZUZyZWVMaXN0VHlwZUJ5dGUgPSAx
MDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRGF0YWJhc2VOYW1lVHlwZUJ5dGUgPSAy
MDE7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZU1ldGFEYXRhVHlw
ZUJ5dGUgPSA1MDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleE1ldGFEYXRhVHlw
ZUJ5dGUgPSAxMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVGcmVl
TGlzdFR5cGVCeXRlID0gMTUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4RnJl
ZUxpc3RUeXBlQnl0ZSA9IDE1MTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RT
dG9yZU5hbWVzVHlwZUJ5dGUgPSAyMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5k
ZXhOYW1lc0tleVR5cGVCeXRlID0gMjAxOworCisjaWZuZGVmIElOVDY0X01BWAorI2RlZmluZSBJ
TlQ2NF9NQVggMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgK
KyNkZWZpbmUgSU5UMzJfTUFYIDB4N2ZmZmZmZmZMCisjZW5kaWYKKworCitWZWN0b3I8Y2hhcj4g
ZW5jb2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAg
di5hcHBlbmQoYyk7CisgICAgcmV0dXJuIHY7Cit9CisKK1ZlY3RvcjxjaGFyPiBtYXhJREJLZXko
KQoreworICAgIHJldHVybiBlbmNvZGVCeXRlKGtJREJLZXlOdWxsVHlwZUJ5dGUpOworfQorCitW
ZWN0b3I8Y2hhcj4gbWluSURCS2V5KCkKK3sKKyAgICByZXR1cm4gZW5jb2RlQnl0ZShrSURCS2V5
TWluS2V5VHlwZUJ5dGUpOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlSW50KGludDY0X3QgbikK
K3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTog
U2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFy
IGMgPSBuOworICAgICAgICByZXQuYXBwZW5kKGMpOworICAgICAgICBuID4+PSA4OworICAgIH0g
d2hpbGUgKG4pOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50NjRfdCBkZWNvZGVJbnQoY29u
c3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBBU1NFUlQoYmVnaW4gPD0g
ZW5kKTsKKyAgICBpbnQ2NF90IHJldCA9IDA7CisKKyAgICBpbnQgc2hpZnQgPSAwOworICAgIHdo
aWxlIChiZWdpbiA8IGVuZCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnaW4rKzsK
KyAgICAgICAgcmV0IHw9IHN0YXRpY19jYXN0PGludDY0X3Q+KGMpIDw8IHNoaWZ0OworICAgICAg
ICBzaGlmdCArPSA4OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg
Y29tcGFyZUludHMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgQVNTRVJUKGEgPj0gMCk7
CisgICAgQVNTRVJUKGIgPj0gMCk7CisKKyAgICBpbnQ2NF90IGRpZmYgPSBhIC0gYjsKKyAgICBp
ZiAoZGlmZiA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZGlmZiA+IDApCisgICAg
ICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlVmFy
SW50KGludDY0X3QgbikKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTogU2l6ZSB0
aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBu
ICYgMHg3ZjsKKyAgICAgICAgbiA+Pj0gNzsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBj
IHw9IDB4ODA7CisgICAgICAgIHJldC5hcHBlbmQoYyk7CisgICAgfSB3aGlsZSAobik7CisKKyAg
ICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyKiBkZWNvZGVWYXJJbnQoY29uc3QgY2hhciAq
cCwgY29uc3QgY2hhciogbGltaXQsIGludDY0X3QmIGZvdW5kSW50KQoreworICAgIEFTU0VSVChs
aW1pdCA+PSBwKTsKKyAgICBmb3VuZEludCA9IDA7CisgICAgaW50IHNoaWZ0ID0gMDsKKworICAg
IGRvIHsKKyAgICAgICAgaWYgKHAgPj0gbGltaXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqcDsKKyAgICAgICAgZm91bmRJbnQgfD0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oYyAmIDB4N2YpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSA3Owor
ICAgIH0gd2hpbGUgKCpwKysgJiAweDgwKTsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNo
YXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit7CisgICAgVmVjdG9yPGNoYXI+IHJl
dDsgLy8gRklYTUU6IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4KKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgdSA9IHNbaV07Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSB1ID4+IDg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
bG8gPSB1OworICAgICAgICByZXQuYXBwZW5kKGhpKTsKKyAgICAgICAgcmV0LmFwcGVuZChsbyk7
CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworU3RyaW5nIGRlY29kZVN0cmluZyhjb25z
dCBjaGFyKiBwLCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgQVNTRVJUKGVuZCA+PSBwKTsKKyAg
ICBBU1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7CisKKyAgICBzaXplX3QgbGVuID0gKGVuZCAtIHAp
IC8gMjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KGxlbik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgaGkgPSAqcCsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0g
KnArKzsKKworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoaGkgPDwg
OCkgfCBsbykpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwor
VmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIFZlY3RvcjxjaGFyPiByZXQgPSBlbmNvZGVWYXJJbnQocy5sZW5ndGgoKSk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVTdHJpbmcocykpOworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNo
YXIqIGRlY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGlt
aXQsIFN0cmluZyYgZm91bmRTdHJpbmcpCit7CisgICAgQVNTRVJUKGxpbWl0ID49IHApOworICAg
IGludDY0X3QgbGVuOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbik7CisgICAg
aWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocCArIGxlbiAqIDIgPiBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0cmluZyhwLCBw
ICsgbGVuICogMik7CisgICAgcCArPSBsZW4gKiAyOworICAgIHJldHVybiBwOworfQorCitpbnQg
Y29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hh
ciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKQoreworICAgIEFT
U0VSVCgmcCAhPSAmcSk7CisgICAgQVNTRVJUKGxpbWl0UCA+PSBwKTsKKyAgICBBU1NFUlQobGlt
aXRRID49IHEpOworICAgIGludDY0X3QgbGVuUCwgbGVuUTsKKyAgICBwID0gZGVjb2RlVmFySW50
KHAsIGxpbWl0UCwgbGVuUCk7CisgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1pdFEsIGxlblEp
OworICAgIEFTU0VSVChwICYmIHEpOworICAgIEFTU0VSVChsZW5QID49IDApOworICAgIEFTU0VS
VChsZW5RID49IDApOworICAgIEFTU0VSVChwICsgbGVuUCAqIDIgPD0gbGltaXRQKTsKKyAgICBB
U1NFUlQocSArIGxlblEgKiAyIDw9IGxpbWl0USk7CisKKyAgICBjb25zdCBjaGFyKiBzdGFydFAg
PSBwOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0USA9IHE7CisgICAgcCArPSBsZW5QICogMjsKKyAg
ICBxICs9IGxlblEgKiAyOworCisgICAgaWYgKHAgPiBsaW1pdFAgfHwgcSA+IGxpbWl0USkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBzaXplX3QgbG1pbiA9IHN0YXRpY19jYXN0PHNp
emVfdD4obGVuUCA8IGxlblEgPyBsZW5QIDogbGVuUSk7CisgICAgaWYgKGludCB4ID0gbWVtY21w
KHN0YXJ0UCwgc3RhcnRRLCBsbWluICogMikpCisgICAgICAgIHJldHVybiB4OworCisgICAgaWYg
KGxlblAgPT0gbGVuUSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKGxlblAgPiBs
ZW5RKSA/IDEgOiAtMTsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZURvdWJsZShkb3VibGUgeCkK
K3sKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBiZSBieXRlIG9y
ZGVyIGluZGVwZW5kZW50LgorICAgIGNvbnN0IGNoYXIqIHAgPSByZWludGVycHJldF9jYXN0PGNo
YXIqPigmeCk7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQocCwgc2l6ZW9mKHgp
KTsKKyAgICBBU1NFUlQodi5zaXplKCkgPT0gc2l6ZW9mKHgpKTsKKyAgICByZXR1cm4gdjsKK30K
KworY29uc3QgY2hhciogZGVjb2RlRG91YmxlKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxp
bWl0LCBkb3VibGUqIGQpCit7CisgICAgaWYgKHAgKyBzaXplb2YoKmQpID4gbGltaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgY2hhciogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGQp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCpkKTsgKytpKQorICAgICAgICAq
eCsrID0gKnArKzsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktl
eShjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OworICAgIGVuY29k
ZUlEQktleShrZXksIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBlbmNvZGVJREJL
ZXkoY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgaW50bykKK3sKKyAgICBzaXplX3Qg
cHJldmlvdXNTaXplID0gaW50by5zaXplKCk7CisgICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Cisg
ICAgY2FzZSBJREJLZXk6OkludmFsaWRUeXBlOgorICAgIGNhc2UgSURCS2V5OjpNaW5UeXBlOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2Rl
Qnl0ZShrSURCS2V5TnVsbFR5cGVCeXRlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElE
QktleTo6QXJyYXlUeXBlOgorICAgICAgICB7CisgICAgICAgICAgICBpbnRvLmFwcGVuZChlbmNv
ZGVCeXRlKGtJREJLZXlBcnJheVR5cGVCeXRlKSk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0ga2V5LmFycmF5KCkuc2l6ZSgpOworICAgICAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlVmFy
SW50KGxlbmd0aCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgICAgICAgICBlbmNvZGVJREJLZXkoKmtleS5hcnJheSgpW2ldLCBpbnRv
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSA+
IHByZXZpb3VzU2l6ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURC
S2V5U3RyaW5nVHlwZUJ5dGUpKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlU3RyaW5nV2l0
aExlbmd0aChrZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1Np
emUsIGludG8uc2l6ZSgpID4gcHJldmlvdXNTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSURCS2V5OjpEYXRlVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURC
S2V5RGF0ZVR5cGVCeXRlKSk7CisgICAgICAgIGludG8uYXBwZW5kKGVuY29kZURvdWJsZShrZXku
ZGF0ZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUo
KSAtIHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSURCS2V5
OjpOdW1iZXJUeXBlOgorICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJREJLZXlOdW1i
ZXJUeXBlQnl0ZSkpOworICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUoa2V5Lm51bWJl
cigpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSAt
IHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2NvbnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBj
aGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5KQorewor
ICAgIEFTU0VSVChsaW1pdCA+PSBwKTsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgICAgICBmb3VuZEtleSA9
IElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAgICByZXR1cm4gcDsKKworICAgIGNhc2Ug
a0lEQktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDY0X3QgbGVu
Z3RoOworICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
SURCS2V5OjpLZXlBcnJheSBhcnJheTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICAgICAgICAgICAgICBwID0g
ZGVjb2RlSURCS2V5KHAsIGxpbWl0LCBrZXkpOworICAgICAgICAgICAgICAgIGlmICghcCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5k
KGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3Jl
YXRlQXJyYXkoYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICBj
YXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5n
IHM7CisgICAgICAgICAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcyk7
CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHMpOworICAgICAgICAgICAgcmV0
dXJuIHA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgcCA9IGRlY29kZURvdWJsZShw
LCBsaW1pdCwgJmQpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUoZCk7CisgICAg
ICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVC
eXRlOgorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgIHAgPSBk
ZWNvZGVEb3VibGUocCwgbGltaXQsICZkKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVO
dW1iZXIoZCk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyKiBl
eHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQs
IFZlY3RvcjxjaGFyPiogcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOworICAgIGNvbnN0
IGNoYXIqIHAgPSBzdGFydDsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgIGNhc2Uga0lEQktleU1pbktleVR5
cGVCeXRlOgorICAgICAgICAqcmVzdWx0ID0gZW5jb2RlQnl0ZSh0eXBlKTsKKyAgICAgICAgcmV0
dXJuIHA7CisgICAgY2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50NjRfdCBsZW5ndGg7CisgICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxp
bWl0LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChzdGFydCwgcCAtIHN0YXJ0KTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBzdWJrZXk7CisgICAgICAgICAgICAgICAgcCA9
IGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGxpbWl0LCAmc3Via2V5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKKyAgICAgICAgICAgIHAgPSBkZWNvZGVW
YXJJbnQocCwgbGltaXQsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAocCArIGxlbmd0aCAqIDIgPiBsaW1pdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0YXJ0LCBwIC0gc3RhcnQgKyBsZW5ndGggKiAy
KTsKKyAgICAgICAgICAgIHJldHVybiBwICsgbGVuZ3RoICogMjsKKyAgICAgICAgfQorICAgIGNh
c2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToK
KyAgICAgICAgaWYgKHAgKyBzaXplb2YoZG91YmxlKSA+IGxpbWl0KQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQo
c3RhcnQsIDEgKyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHJldHVybiBwICsgc2l6ZW9mKGRv
dWJsZSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgSURCS2V5OjpUeXBlIGtleVR5cGVCeXRlVG9LZXlUeXBlKHVuc2lnbmVkIGNo
YXIgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtJREJLZXlOdWxsVHlw
ZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworICAgIGNhc2Uga0lE
QktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkFycmF5VHlwZTsKKyAg
ICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgcmV0dXJuIElEQktleTo6U3Ry
aW5nVHlwZTsKKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJ
REJLZXk6OkRhdGVUeXBlOworICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgorICAgICAg
ICByZXR1cm4gSURCS2V5OjpOdW1iZXJUeXBlOworICAgIGNhc2Uga0lEQktleU1pbktleVR5cGVC
eXRlOgorICAgICAgICByZXR1cm4gSURCS2V5OjpNaW5UeXBlOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworfQorCitp
bnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBsaW1p
dEEsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdEIpCit7CisgICAgQVNTRVJUKCZw
ICE9ICZxKTsKKyAgICBBU1NFUlQocCA8IGxpbWl0QSk7CisgICAgQVNTRVJUKHEgPCBsaW1pdEIp
OworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUEgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlw
ZUIgPSAqcSsrOworCisgICAgaWYgKGludCB4ID0gSURCS2V5Ojpjb21wYXJlVHlwZXMoa2V5VHlw
ZUJ5dGVUb0tleVR5cGUodHlwZUEpLCBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh0eXBlQikpKQorICAg
ICAgICByZXR1cm4geDsKKworICAgIHN3aXRjaCAodHlwZUEpIHsKKyAgICBjYXNlIGtJREJLZXlO
dWxsVHlwZUJ5dGU6CisgICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5dGU6CisgICAgICAgIC8v
IE51bGwgdHlwZSBvciBtYXggdHlwZTsgbm8gcGF5bG9hZCB0byBjb21wYXJlLgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQ2NF90IGxlbmd0aEEsIGxlbmd0aEI7CisgICAgICAgICAgICBwID0gZGVjb2Rl
VmFySW50KHAsIGxpbWl0QSwgbGVuZ3RoQSk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBxID0gZGVjb2RlVmFySW50KHEsIGxpbWl0
QiwgbGVuZ3RoQik7CisgICAgICAgICAgICBpZiAoIXEpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBpZiAobGVuZ3RoQSA8IDAgfHwgbGVuZ3RoQiA8IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCBs
ZW5ndGhBICYmIGkgPCBsZW5ndGhCOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IGNt
cCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwLCBsaW1pdEEsIHEsIGxpbWl0QikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjbXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bGVuZ3RoQSA8IGxlbmd0aEIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgaWYgKGxlbmd0aEEgPiBsZW5ndGhCKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBl
Qnl0ZToKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkU3RyaW5nc1dpdGhMZW5ndGgocCwg
bGltaXRBLCBxLCBsaW1pdEIpOworICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBj
YXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgZG91Ymxl
IGQsIGU7CisgICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxpbWl0QSwgJmQpOworICAg
ICAgICAgICAgQVNTRVJUKHApOworICAgICAgICAgICAgcSA9IGRlY29kZURvdWJsZShxLCBsaW1p
dEIsICZlKTsKKyAgICAgICAgICAgIEFTU0VSVChxKTsKKyAgICAgICAgICAgIGlmIChkIDwgZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoZCA+IGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitp
bnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5QSwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBrZXlCKQoreworICAgIEFTU0VSVChrZXlBLnNpemUoKSA+PSAxKTsKKyAg
ICBBU1NFUlQoa2V5Qi5zaXplKCkgPj0gMSk7CisKKyAgICBjb25zdCBjaGFyKiBwID0ga2V5QS5k
YXRhKCk7CisgICAgY29uc3QgY2hhciogbGltaXRBID0gcCArIGtleUEuc2l6ZSgpOworICAgIGNv
bnN0IGNoYXIqIHEgPSBrZXlCLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBsaW1pdEIgPSBxICsg
a2V5Qi5zaXplKCk7CisKKyAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKHAsIGxpbWl0
QSwgcSwgbGltaXRCKTsKK30KKworbmFtZXNwYWNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5
cGU+CitpbnQgZGVjb2RlQW5kQ29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExl
dmVsREJTbGljZSYgYikKK3sKKyAgICBLZXlUeXBlIGtleUE7CisgICAgS2V5VHlwZSBrZXlCOwor
CisgICAgY29uc3QgY2hhciogcHRyQSA9IEtleVR5cGU6OmRlY29kZShhLmJlZ2luKCksIGEuZW5k
KCksICZrZXlBKTsKKyAgICBBU1NFUlRfVU5VU0VEKHB0ckEsIHB0ckEpOworICAgIGNvbnN0IGNo
YXIqIHB0ckIgPSBLZXlUeXBlOjpkZWNvZGUoYi5iZWdpbigpLCBiLmVuZCgpLCAma2V5Qik7Cisg
ICAgQVNTRVJUX1VOVVNFRChwdHJCLCBwdHJCKTsKKworICAgIHJldHVybiBrZXlBLmNvbXBhcmUo
a2V5Qik7Cit9Cit9CisKK2ludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3Qg
TGV2ZWxEQlNsaWNlJiBiLCBib29sIGluZGV4S2V5cykKK3sKKyAgICBjb25zdCBjaGFyKiBwdHJB
ID0gYS5iZWdpbigpOworICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBiLmJlZ2luKCk7CisgICAgY29u
c3QgY2hhciogZW5kQSA9IGEuZW5kKCk7CisgICAgY29uc3QgY2hhciogZW5kQiA9IGIuZW5kKCk7
CisKKyAgICBLZXlQcmVmaXggcHJlZml4QTsKKyAgICBLZXlQcmVmaXggcHJlZml4QjsKKworICAg
IHB0ckEgPSBLZXlQcmVmaXg6OmRlY29kZShwdHJBLCBlbmRBLCAmcHJlZml4QSk7CisgICAgcHRy
QiA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckIsIGVuZEIsICZwcmVmaXhCKTsKKyAgICBBU1NFUlQo
cHRyQSk7CisgICAgQVNTRVJUKHB0ckIpOworCisgICAgaWYgKGludCB4ID0gcHJlZml4QS5jb21w
YXJlKHByZWZpeEIpKQorICAgICAgICByZXR1cm4geDsKKworICAgIGlmIChwcmVmaXhBLnR5cGUo
KSA9PSBLZXlQcmVmaXg6OmtHbG9iYWxNZXRhRGF0YSkgeworICAgICAgICBBU1NFUlQocHRyQSAh
PSBlbmRBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7CisKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciB0eXBlQnl0ZUEgPSAqcHRyQSsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlQiA9ICpwdHJCKys7CisKKyAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVBIC0gdHlwZUJ5
dGVCKQorICAgICAgICAgICAgcmV0dXJuIHg7CisKKyAgICAgICAgaWYgKHR5cGVCeXRlQSA8PSAx
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga0RhdGFi
YXNlRnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJl
PERhdGFiYXNlRnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtE
YXRhYmFzZU5hbWVUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJl
PERhdGFiYXNlTmFtZUtleT4oYSwgYik7CisgICAgfQorCisgICAgaWYgKHByZWZpeEEudHlwZSgp
ID09IEtleVByZWZpeDo6a0RhdGFiYXNlTWV0YURhdGEpIHsKKyAgICAgICAgQVNTRVJUKHB0ckEg
IT0gZW5kQSk7CisgICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOworCisgICAgICAgIHVuc2ln
bmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckErKzsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0eXBl
Qnl0ZUIgPSAqcHRyQisrOworCisgICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVC
eXRlQikKKyAgICAgICAgICAgIHJldHVybiB4OworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPD0g
MykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga09i
amVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
b21wYXJlPE9iamVjdFN0b3JlTWV0YURhdGFLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5
dGVBID09IGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ29tcGFyZTxJbmRleE1ldGFEYXRhS2V5PihhLCBiKTsKKyAgICAgICAgaWYgKHR5cGVCeXRl
QSA9PSBrT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKQorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVGcmVlTGlzdEtleT4oYSwgYik7CisgICAgICAgIGlm
ICh0eXBlQnl0ZUEgPT0ga0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDb21wYXJlPEluZGV4RnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAo
dHlwZUJ5dGVBID09IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9yZU5hbWVzS2V5PihhLCBiKTsKKyAgICAgICAg
aWYgKHR5cGVCeXRlQSA9PSBrSW5kZXhOYW1lc0tleVR5cGVCeXRlKQorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENvbXBhcmU8SW5kZXhOYW1lc0tleT4oYSwgYik7CisKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChw
cmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtPYmplY3RTdG9yZURhdGEpIHsKKyAgICAgICAg
aWYgKHB0ckEgPT0gZW5kQSAmJiBwdHJCID09IGVuZEIpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgaWYgKHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhp
cyBjYXNlIG9mIG5vbi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhh
bmRsZWQgdGhpcyB3YXkuCisKKyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8T2JqZWN0
U3RvcmVEYXRhS2V5PihhLCBiKTsKKyAgICB9CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtl
eVByZWZpeDo6a0V4aXN0c0VudHJ5KSB7CisgICAgICAgIGlmIChwdHJBID09IGVuZEEgJiYgcHRy
QiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChwdHJBID09IGVu
ZEEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChwdHJCID09IGVuZEIpCisg
ICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRoaXMgY2FzZSBvZiBub24tZXhpc3Rpbmcg
dXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5LgorCisgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPEV4aXN0c0VudHJ5S2V5PihhLCBiKTsKKyAgICB9
CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6a0luZGV4RGF0YSkgeworICAg
ICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1F
OiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8g
YmUgaGFuZGxlZCB0aGlzIHdheS4KKworICAgICAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5
QTsKKyAgICAgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleUI7CisKKyAgICAgICAgcHRyQSA9
IEluZGV4RGF0YUtleTo6ZGVjb2RlKGEuYmVnaW4oKSwgZW5kQSwgJmluZGV4RGF0YUtleUEpOwor
ICAgICAgICBwdHJCID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoYi5iZWdpbigpLCBlbmRCLCAmaW5k
ZXhEYXRhS2V5Qik7CisgICAgICAgIEFTU0VSVChwdHJBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIp
OworCisgICAgICAgIGJvb2wgaWdub3JlRHVwbGljYXRlcyA9IGluZGV4S2V5czsKKyAgICAgICAg
cmV0dXJuIGluZGV4RGF0YUtleUEuY29tcGFyZShpbmRleERhdGFLZXlCLCBpZ25vcmVEdXBsaWNh
dGVzKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworCitLZXlQcmVmaXg6OktleVByZWZpeCgpCisgICAgOiBtX2RhdGFiYXNlSWQoa0ludmFs
aWRUeXBlKQorICAgICwgbV9vYmplY3RTdG9yZUlkKGtJbnZhbGlkVHlwZSkKKyAgICAsIG1faW5k
ZXhJZChrSW52YWxpZFR5cGUpCit7Cit9CisKK0tleVByZWZpeDo6S2V5UHJlZml4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAg
OiBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQorICAgICwgbV9pbmRleElkKGluZGV4SWQpCit7Cit9CisKK2NvbnN0IGNoYXIqIEtl
eVByZWZpeDo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgS2V5
UHJlZml4KiByZXN1bHQpCit7CisgICAgaWYgKHN0YXJ0ID09IGxpbWl0KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKnN0YXJ0Kys7CisKKyAgICBp
bnQgZGF0YWJhc2VJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gNSkgJiAweDcpICsgMTsKKyAgICBp
bnQgb2JqZWN0U3RvcmVJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gMikgJiAweDcpICsgMTsKKyAg
ICBpbnQgaW5kZXhJZEJ5dGVzID0gKGZpcnN0Qnl0ZSAmIDB4MykgKyAxOworCisgICAgaWYgKHN0
YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzICsgb2JqZWN0U3RvcmVJZEJ5dGVzICsgaW5kZXhJZEJ5dGVz
ID4gbGltaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzdWx0LT5tX2RhdGFiYXNlSWQg
PSBkZWNvZGVJbnQoc3RhcnQsIHN0YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzKTsKKyAgICBzdGFydCAr
PSBkYXRhYmFzZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBkZWNvZGVJ
bnQoc3RhcnQsIHN0YXJ0ICsgb2JqZWN0U3RvcmVJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBvYmpl
Y3RTdG9yZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX2luZGV4SWQgPSBkZWNvZGVJbnQoc3RhcnQs
IHN0YXJ0ICsgaW5kZXhJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBpbmRleElkQnl0ZXM7CisKKyAg
ICByZXR1cm4gc3RhcnQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlQcmVmaXg6OmVuY29kZSgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElkKTsKKyAgICBBU1NF
UlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VSVChtX2luZGV4SWQg
IT0ga0ludmFsaWRJZCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YWJhc2VJZFN0cmluZyA9IGVu
Y29kZUludChtX2RhdGFiYXNlSWQpOworICAgIFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZUlkU3Ry
aW5nID0gZW5jb2RlSW50KG1fb2JqZWN0U3RvcmVJZCk7CisgICAgVmVjdG9yPGNoYXI+IGluZGV4
SWRTdHJpbmcgPSBlbmNvZGVJbnQobV9pbmRleElkKTsKKworICAgIEFTU0VSVChkYXRhYmFzZUlk
U3RyaW5nLnNpemUoKSA8PSA4KTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZFN0cmluZy5zaXpl
KCkgPD0gOCk7CisgICAgQVNTRVJUKGluZGV4SWRTdHJpbmcuc2l6ZSgpIDw9IDQpOworCisKKyAg
ICB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSA9IChkYXRhYmFzZUlkU3RyaW5nLnNpemUoKSAtIDEp
IDw8IDUgfCAob2JqZWN0U3RvcmVJZFN0cmluZy5zaXplKCkgLSAxKSA8PCAyIHwgKGluZGV4SWRT
dHJpbmcuc2l6ZSgpIC0gMSk7CisgICAgVmVjdG9yPGNoYXI+IHJldDsKKyAgICByZXQuYXBwZW5k
KGZpcnN0Qnl0ZSk7CisgICAgcmV0LmFwcGVuZChkYXRhYmFzZUlkU3RyaW5nKTsKKyAgICByZXQu
YXBwZW5kKG9iamVjdFN0b3JlSWRTdHJpbmcpOworICAgIHJldC5hcHBlbmQoaW5kZXhJZFN0cmlu
Zyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgS2V5UHJlZml4Ojpjb21wYXJlKGNvbnN0
IEtleVByZWZpeCYgb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBr
SW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOwor
ICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZUlkICE9IG90aGVyLm1fZGF0YWJhc2VJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1f
ZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKKyAgICBpZiAobV9vYmplY3RTdG9yZUlk
ICE9IG90aGVyLm1fb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1f
b2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAobV9pbmRleElk
ICE9IG90aGVyLm1faW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1faW5kZXhJ
ZCwgb3RoZXIubV9pbmRleElkKTsKKyAgICByZXR1cm4gMDsKK30KKworS2V5UHJlZml4OjpUeXBl
IEtleVByZWZpeDo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBr
SW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOwor
ICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAoIW1fZGF0YWJh
c2VJZCkKKyAgICAgICAgcmV0dXJuIGtHbG9iYWxNZXRhRGF0YTsKKyAgICBpZiAoIW1fb2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGtEYXRhYmFzZU1ldGFEYXRhOworICAgIGlmIChtX2lu
ZGV4SWQgPT0ga09iamVjdFN0b3JlRGF0YUluZGV4SWQpCisgICAgICAgIHJldHVybiBrT2JqZWN0
U3RvcmVEYXRhOworICAgIGlmIChtX2luZGV4SWQgPT0ga0V4aXN0c0VudHJ5SW5kZXhJZCkKKyAg
ICAgICAgcmV0dXJuIGtFeGlzdHNFbnRyeTsKKyAgICBpZiAobV9pbmRleElkID49IGtNaW5pbXVt
SW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGtJbmRleERhdGE7CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4ga0ludmFsaWRUeXBlOworfQorCitWZWN0b3I8Y2hhcj4gU2No
ZW1hVmVyc2lvbktleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDAp
OworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVu
ZChlbmNvZGVCeXRlKGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUpKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCitWZWN0b3I8Y2hhcj4gTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQ
cmVmaXggcHJlZml4KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5j
b2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtNYXhEYXRhYmFzZUlkVHlwZUJ5dGUp
KTsKKyAgICByZXR1cm4gcmV0OworfQorCitEYXRhYmFzZUZyZWVMaXN0S2V5OjpEYXRhYmFzZUZy
ZWVMaXN0S2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgtMSkKK3sKK30KKworY29uc3QgY2hhciog
RGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgRGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtleVByZWZpeCBw
cmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1p
dCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQo
IXByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJ
ZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7Cisg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0RhdGFiYXNlRnJlZUxpc3RU
eXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZUlkKTsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4g
cmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrRGF0YWJh
c2VGcmVlTGlzdFR5cGVCeXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQoZGF0YWJh
c2VJZCkpOworICAgIHJldHVybiByZXQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZUZyZWVM
aXN0S2V5OjplbmNvZGVNYXhLZXkoKQoreworICAgIHJldHVybiBlbmNvZGUoSU5UNjRfTUFYKTsK
K30KKworaW50NjRfdCBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDApOworICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7
Cit9CisKK2ludCBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJl
ZUxpc3RLZXkmIG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7
CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlk
KTsKK30KKworY29uc3QgY2hhciogRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUoY29uc3QgY2hhciog
c3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3VsdCkKK3sKKyAg
ICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29k
ZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIHA7
CisgICAgQVNTRVJUKCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5t
X29iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CisgICAgaWYg
KHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5
dGUgPSAqcCsrOworICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtEYXRh
YmFzZU5hbWVUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAw
OworICAgIHAgPSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fb3Jp
Z2luKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVT
dHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VOYW1lKTsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAs
IDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSkpOworICAgIHJldC5hcHBl
bmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChvcmlnaW4pKTsKKyAgICByZXQuYXBwZW5kKGVuY29k
ZVN0cmluZ1dpdGhMZW5ndGgoZGF0YWJhc2VOYW1lKSk7CisgICAgcmV0dXJuIHJldDsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9CisK
K1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4gaW4gY29sbGF0
aW9uIG9yZGVyCisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmlnaW4gKyAiXHgw
MSIpOworfQorCitpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFt
ZUtleSYgb3RoZXIpCit7CisgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFyZShtX29yaWdp
biwgb3RoZXIubV9vcmlnaW4pKQorICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBv
aW50Q29tcGFyZShtX2RhdGFiYXNlTmFtZSwgb3RoZXIubV9kYXRhYmFzZU5hbWUpOworfQorCitW
ZWN0b3I8Y2hhcj4gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgTWV0YURhdGFUeXBlIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRh
dGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7
CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlwZSkpOworICAgIHJldHVybiBy
ZXQ7Cit9CisKK09iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXko
KQorICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQorICAgICwgbV9tZXRhRGF0YVR5cGUoLTEpCit7
Cit9CisKK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBj
aGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJl
c3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQ
cmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VS
VCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElk
KTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQg
Y2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5
dGUgPT0ga09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQp
CisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3Vs
dC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAg
IEFTU0VSVChyZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKHAgPT0gbGltaXQpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3Vs
dC0+bV9tZXRhRGF0YVR5cGUpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQs
IDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICBy
ZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQobWV0YURhdGFUeXBlKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9y
PGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFi
YXNlSWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgsIElOVDY0
X01BWCk7Cit9CisKK1ZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVN
YXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAg
cmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgpOworfQor
CitpbnQ2NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJuIG1fb2JqZWN0
U3RvcmVJZDsKK30KK2ludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7CisgICAgcmV0dXJu
IG1fbWV0YURhdGFUeXBlOworfQorCitpbnQgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6Y29tcGFy
ZShjb25zdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlkID49IDApOworICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+PSAwKTsKKyAg
ICBpZiAoaW50IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0
U3RvcmVJZCkpCisgICAgICAgIHJldHVybiB4OworICAgIHJldHVybiBtX21ldGFEYXRhVHlwZSAt
IG90aGVyLm1fbWV0YURhdGFUeXBlOworfQorCitJbmRleE1ldGFEYXRhS2V5OjpJbmRleE1ldGFE
YXRhS2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkK
KyAgICAsIG1fbWV0YURhdGFUeXBlKDApCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4TWV0YURh
dGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4
TWV0YURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0
IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAg
IGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNl
SWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFw
cmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0
eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAg
PT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGlt
aXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVy
biAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsK
KyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwID09IGxpbWl0KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXN1bHQtPm1fbWV0YURhdGFUeXBlID0gKnArKzsKKyAgICBy
ZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1
bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFi
YXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICBy
ZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQoaW5kZXhJZCkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0
YVR5cGUpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5U
NjRfTUFYLCAyNTUpOworfQorCitpbnQgSW5kZXhNZXRhRGF0YUtleTo6Y29tcGFyZShjb25zdCBJ
bmRleE1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49
IDApOworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisKKyAgICBpZiAoaW50IHggPSBjb21w
YXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAg
IHJldHVybiB4OworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIu
bV9pbmRleElkKSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIG1fbWV0YURhdGFUeXBl
IC0gb3RoZXIubV9tZXRhRGF0YVR5cGU7Cit9CisKK2ludDY0X3QgSW5kZXhNZXRhRGF0YUtleTo6
aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICByZXR1
cm4gbV9pbmRleElkOworfQorCitPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpPYmplY3RTdG9yZUZy
ZWVMaXN0S2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKK3sKK30KKworY29uc3QgY2hh
ciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25z
dCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtl
eVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0
YXJ0LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09
IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0g
KnArKzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrT2JqZWN0U3Rv
cmVGcmVlTGlzdFR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0
b3JlSWQpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEtleVBy
ZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHBy
ZWZpeC5lbmNvZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlRnJl
ZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3Jl
SWQpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVl
TGlzdEtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAgICByZXR1cm4g
ZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCk7Cit9CisKK2ludDY0X3QgT2JqZWN0U3RvcmVG
cmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0
U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQgT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5
JiBvdGhlcikKK3sKKyAgICAvLyBGSVhNRTogSXQgbWF5IHNlZW0gc3RyYW5nZSB0aGF0IHdlJ3Jl
IG5vdCBjb21wYXJpbmcgZGF0YWJhc2UgaWQncywKKyAgICAvLyBidXQgdGhhdCBjb21wYXJpc29u
IHdpbGwgaGF2ZSBiZWVuIG1hZGUgZWFybGllci4KKyAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkg
bWFrZSB0aGlzIG1vcmUgY2xlYXIsIHRob3VnaC4uLgorICAgIEFTU0VSVChtX29iamVjdFN0b3Jl
SWQgPj0gMCk7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIu
bV9vYmplY3RTdG9yZUlkKTsKK30KKworSW5kZXhGcmVlTGlzdEtleTo6SW5kZXhGcmVlTGlzdEtl
eSgpCisgICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCisgICAgLCBtX2luZGV4SWQoLTEpCit7Cit9
CisKK2NvbnN0IGNoYXIqIEluZGV4RnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCkKK3sKKyAgICBL
ZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShz
dGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9
PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4RnJl
ZUxpc3RUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsK
KyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQo
cCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RnJl
ZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwg
MCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKKyAgICByZXQu
YXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBl
bmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZh
ckludChpbmRleElkKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4
RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3sKKyAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIElOVDY0X01BWCk7Cit9CisKK2ludCBJbmRleEZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0
IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQg
Pj0gMCk7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICBpZiAoaW50IHggPSBjb21w
YXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAg
IHJldHVybiB4OworICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVyLm1faW5k
ZXhJZCk7Cit9CisKK2ludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9v
YmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6OmluZGV4SWQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisgICAgcmV0dXJuIG1faW5kZXhJ
ZDsKK30KKworLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0
b3JlIGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKy8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFiYXNl
QmFja2VuZEltcGwuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUgdW5yZWxpYWJsZT8KKy8vIENhbiB3
ZSByZW1vdmUgdGhpcz8KK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTmFtZXNLZXkq
IHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBL
ZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFT
U0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRl
eElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWdu
ZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlw
ZUJ5dGUgPT0ga09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CisgICAgcmV0dXJuIGRlY29kZVN0
cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOworfQor
CitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCit7CisgICAgS2V5UHJlZml4IHBy
ZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVu
Y29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVOYW1lc1R5cGVC
eXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9iamVjdFN0b3Jl
TmFtZSkpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBPYmplY3RTdG9yZU5hbWVzS2V5Ojpj
b21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKQoreworICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlKG1fb2JqZWN0U3RvcmVOYW1lLCBvdGhlci5tX29iamVjdFN0b3JlTmFt
ZSk7Cit9CisKK0luZGV4TmFtZXNLZXk6OkluZGV4TmFtZXNLZXkoKQorICAgIDogbV9vYmplY3RT
dG9yZUlkKC0xKQoreworfQorCisvLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1
cCBpbmRleCBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCisvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxl
dmVsLgorY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW1lc0tleSogcmVzdWx0KQoreworICAgIEtleVBy
ZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0
LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBB
U1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RT
dG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09IGxp
bWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnAr
KzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhOYW1lc0tl
eVR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOworICAg
IGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhM
ZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleE5hbWUpOworfQorCitWZWN0b3I8Y2hhcj4g
SW5kZXhOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4
KGRhdGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2Rl
KCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUpKTsK
KyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFw
cGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGluZGV4TmFtZSkpOworICAgIHJldHVybiByZXQ7
Cit9CisKK2ludCBJbmRleE5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4TmFtZXNLZXkmIG90
aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgaWYgKGludCB4
ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQor
ICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShtX2luZGV4TmFt
ZSwgb3RoZXIubV9pbmRleE5hbWUpOworfQorCitjb25zdCBjaGFyKiBPYmplY3RTdG9yZURhdGFL
ZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9y
ZURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNo
YXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJlZml4KTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsK
KyAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5t
X2luZGV4SWQgPT0ga1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgaWYgKHAgPT0gZW5kKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgZW5kLCAm
cmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworVmVjdG9yPGNoYXI+IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBWZWN0b3I8Y2hhcj4gZW5jb2RlZFVzZXJLZXkpCit7CisgICAgS2V5UHJlZml4IHBy
ZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrU3BlY2lhbEluZGV4TnVtYmVyKTsKKyAg
ICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5j
b2RlZFVzZXJLZXkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOworfQorCitpbnQg
T2JqZWN0U3RvcmVEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRGF0YUtleSYgb3Ro
ZXIpCit7CisgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRVc2VyS2V5
LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IE9iamVj
dFN0b3JlRGF0YUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4ga2V5
OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVz
ZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRfdCBP
YmplY3RTdG9yZURhdGFLZXk6OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrT2JqZWN0U3RvcmVEYXRh
SW5kZXhJZDsKKworY29uc3QgY2hhciogRXhpc3RzRW50cnlLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0KQoreworICAg
IEtleVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2Rl
KHN0YXJ0LCBlbmQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVChwcmVmaXgubV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA9PSBrU3BlY2lhbEluZGV4
TnVtYmVyKTsKKyAgICBpZiAocCA9PSBlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBleHRyYWN0RW5jb2RlZElEQktleShwLCBlbmQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkp
OworfQorCitWZWN0b3I8Y2hhcj4gRXhpc3RzRW50cnlLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVk
S2V5KQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
a1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNv
ZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRLZXkpOworICAgIHJldHVybiByZXQ7Cit9CisK
K1ZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0
dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktl
eSkpOworfQorCitpbnQgRXhpc3RzRW50cnlLZXk6OmNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlL
ZXkmIG90aGVyKQoreworICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVk
VXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5
PiBFeGlzdHNFbnRyeUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4g
a2V5OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2Rl
ZFVzZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRf
dCBFeGlzdHNFbnRyeUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtFeGlzdHNFbnRyeUluZGV4
SWQ7CisKK0luZGV4RGF0YUtleTo6SW5kZXhEYXRhS2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgt
MSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkKKyAgICAs
IG1fc2VxdWVuY2VOdW1iZXIoLTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4RGF0YUtleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5
KiByZXN1bHQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeDsKKyAgICBjb25zdCBjaGFyKiBwID0g
S2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBB
U1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5tX2luZGV4
SWQgPj0ga01pbmltdW1JbmRleElkKTsKKyAgICByZXN1bHQtPm1fZGF0YWJhc2VJZCA9IHByZWZp
eC5tX2RhdGFiYXNlSWQ7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBwcmVmaXgubV9v
YmplY3RTdG9yZUlkOworICAgIHJlc3VsdC0+bV9pbmRleElkID0gcHJlZml4Lm1faW5kZXhJZDsK
KyAgICByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIgPSAtMTsKKyAgICByZXN1bHQtPm1fZW5jb2Rl
ZFByaW1hcnlLZXkgPSBtaW5JREJLZXkoKTsKKworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktl
eShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7CisgICAgaWYgKCFwKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIFtvcHRpb25hbF0gc2VxdWVuY2UgbnVtYmVyCisgICAg
aWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSAgZGVjb2RlVmFySW50
KHAsIGxpbWl0LCByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIpOworICAgIGlmICghcCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBbb3B0aW9uYWxdIHByaW1hcnkga2V5CisgICAgaWYgKHAg
PT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktl
eShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkUHJpbWFyeUtleSk7CisgICAgaWYgKCFwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwOworfQorCitWZWN0b3I8Y2hhcj4gSW5k
ZXhEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkVXNlcktleSwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCBzZXF1ZW5jZU51
bWJlcikKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAg
cmV0LmFwcGVuZChlbmNvZGVkVXNlcktleSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQo
c2VxdWVuY2VOdW1iZXIpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRQcmltYXJ5S2V5KTsKKyAg
ICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiB1c2VyS2V5KQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpLCBtaW5JREJLZXko
KSk7Cit9CisKK1ZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorewor
ICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgbWlu
SURCS2V5KCksIG1pbklEQktleSgpKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6
ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBtYXhJREJLZXkoKSwgbWF4SURCS2V5KCksIElOVDY0X01BWCk7Cit9
CisKK2ludCBJbmRleERhdGFLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhEYXRhS2V5JiBvdGhlciwg
Ym9vbCBpZ25vcmVEdXBsaWNhdGVzKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7
CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICBBU1NFUlQobV9pbmRleElk
ID49IDApOworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRV
c2VyS2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAg
aWYgKGlnbm9yZUR1cGxpY2F0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChpbnQgeCA9
IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRQcmltYXJ5S2V5LCBvdGhlci5tX2VuY29k
ZWRQcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRz
KG1fc2VxdWVuY2VOdW1iZXIsIG90aGVyLm1fc2VxdWVuY2VOdW1iZXIpOworfQorCitpbnQ2NF90
IEluZGV4RGF0YUtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUlkOworfQorCitpbnQ2NF90IEluZGV4
RGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3Rv
cmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IElu
ZGV4RGF0YUtleTo6aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAw
KTsKKyAgICByZXR1cm4gbV9pbmRleElkOworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5kZXhE
YXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAg
ZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVkVXNlcktleS5l
bmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5k
ZXhEYXRhS2V5OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7
CisgICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgbV9lbmNvZGVk
UHJpbWFyeUtleS5lbmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCit9IC8vIG5hbWVz
cGFjZSBJREJMZXZlbERCQ29kaW5nCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29k
aW5nLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJMZXZlbERCQ29kaW5nX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkNvZGlu
Z19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxEQikKKwor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCS2V5OworY2xhc3MgTGV2ZWxEQlNsaWNlOworCituYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGlu
ZyB7CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIga01pbmltdW1JbmRleElkID0gMzA7CisKK1ZlY3Rv
cjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworVmVjdG9yPGNoYXI+IG1heElEQktl
eSgpOworVmVjdG9yPGNoYXI+IG1pbklEQktleSgpOworVmVjdG9yPGNoYXI+IGVuY29kZUludChp
bnQ2NF90KTsKK2ludDY0X3QgZGVjb2RlSW50KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFy
KiBlbmQpOworVmVjdG9yPGNoYXI+IGVuY29kZVZhckludChpbnQ2NF90KTsKK2NvbnN0IGNoYXIq
IGRlY29kZVZhckludChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYg
Zm91bmRJbnQpOworVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKK1N0
cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogZW5kKTsKK1ZlY3Rv
cjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYpOworY29uc3QgY2hh
ciogZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1p
dCwgU3RyaW5nJiBmb3VuZFN0cmluZyk7CitpbnQgY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExl
bmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwg
Y29uc3QgY2hhciogbGltaXRRKTsKK1ZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlKTsK
K2NvbnN0IGNoYXIqIGRlY29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1p
dCwgZG91YmxlKik7Cit2b2lkIGVuY29kZUlEQktleShjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hh
cj4mIGludG8pOworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktleShjb25zdCBJREJLZXkmKTsKK2Nv
bnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwg
UmVmUHRyPElEQktleT4mIGZvdW5kS2V5KTsKK2NvbnN0IGNoYXIqIGV4dHJhY3RFbmNvZGVkSURC
S2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVjdG9yPGNoYXI+KiBy
ZXN1bHQpOworaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBj
b25zdCBWZWN0b3I8Y2hhcj4mKTsKKworaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiwg
Y29uc3QgTGV2ZWxEQlNsaWNlJiwgYm9vbCBpbmRleEtleXMgPSBmYWxzZSk7CisKK2NsYXNzIEtl
eVByZWZpeCB7CitwdWJsaWM6CisgICAgS2V5UHJlZml4KCk7CisgICAgS2V5UHJlZml4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3Qg
Y2hhciogbGltaXQsIEtleVByZWZpeCogcmVzdWx0KTsKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2Rl
KCkgY29uc3Q7CisgICAgaW50IGNvbXBhcmUoY29uc3QgS2V5UHJlZml4JiBvdGhlcikgY29uc3Q7
CisKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBrR2xvYmFsTWV0YURhdGEsCisgICAgICAgIGtE
YXRhYmFzZU1ldGFEYXRhLAorICAgICAgICBrT2JqZWN0U3RvcmVEYXRhLAorICAgICAgICBrRXhp
c3RzRW50cnksCisgICAgICAgIGtJbmRleERhdGEsCisgICAgICAgIGtJbnZhbGlkVHlwZQorICAg
IH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGludDY0X3QgbV9kYXRhYmFzZUlk
OworICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGludDY0X3QgbV9pbmRleElkOwor
CisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga0ludmFsaWRJZCA9IC0xOworfTsKKworY2xhc3Mg
U2NoZW1hVmVyc2lvbktleSB7CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoKTsKK307CisKK2NsYXNzIE1heERhdGFiYXNlSWRLZXkgeworcHVibGljOgorICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUZyZWVMaXN0S2V5
IHsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZUZyZWVMaXN0S2V5KCk7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFi
YXNlRnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtl
eSgpOworICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNv
bnN0IERhdGFiYXNlRnJlZUxpc3RLZXkmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKK307CisKK2NsYXNzIERhdGFiYXNlTmFtZUtleSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29u
c3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0
b3BLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOworICAgIFN0cmluZyBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQorICAgIGludCBjb21wYXJlKGNvbnN0IERh
dGFiYXNlTmFtZUtleSYgb3RoZXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX29yaWdpbjsg
Ly8gRklYTUU6IFN0b3JlIGVuY29kZWQgc3RyaW5ncywgb3IganVzdCBwb2ludGVycy4KKyAgICBT
dHJpbmcgbV9kYXRhYmFzZU5hbWU7Cit9OworCitjbGFzcyBEYXRhYmFzZU1ldGFEYXRhS2V5IHsK
K3B1YmxpYzoKKyAgICBlbnVtIE1ldGFEYXRhVHlwZSB7CisgICAgICAgIGtPcmlnaW5OYW1lID0g
MCwKKyAgICAgICAga0RhdGFiYXNlTmFtZSA9IDEsCisgICAgICAgIGtVc2VyVmVyc2lvbiA9IDIs
CisgICAgICAgIGtNYXhPYmplY3RTdG9yZUlkID0gMworICAgIH07CisKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSk7Cit9Owor
CitjbGFzcyBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IHsKK3B1YmxpYzoKKyAgICBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJlc3Vs
dCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOworICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKKyAgICBp
bnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVj
dFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1fbWV0YURhdGFUeXBlOyAvLyBGSVhNRTogTWFrZSB0
aGlzIGEgYnl0ZS4KK307CisKK2NsYXNzIEluZGV4TWV0YURhdGFLZXkgeworcHVibGljOgorICAg
IEluZGV4TWV0YURhdGFLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0
IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtleSogcmVzdWx0
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFE
YXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJlKGNvbnN0
IEluZGV4TWV0YURhdGFLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YURh
dGFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAg
aW50NjRfdCBtX2luZGV4SWQ7CisgICAgdW5zaWduZWQgY2hhciBtX21ldGFEYXRhVHlwZTsKK307
CisKK2NsYXNzIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkgeworcHVibGljOgorICAgIE9iamVjdFN0
b3JlRnJlZUxpc3RLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVz
dWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVN
YXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBj
b25zdDsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhl
cik7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Cit9OworCitjbGFz
cyBJbmRleEZyZWVMaXN0S2V5IHsKK3B1YmxpYzoKKyAgICBJbmRleEZyZWVMaXN0S2V5KCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJl
KGNvbnN0IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKK307CisK
K2NsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBXZSBu
ZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBw
aW5nCisgICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRo
ZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8K
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBj
aGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZU5hbWVzS2V5JiBv
dGhlcik7CisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1l
OyAvLyBGSVhNRTogU3RvcmUgdGhlIGVuY29kZWQgc3RyaW5nLCBvciBqdXN0IHBvaW50ZXJzIHRv
IGl0LgorfTsKKworY2xhc3MgSW5kZXhOYW1lc0tleSB7CitwdWJsaWM6CisgICAgSW5kZXhOYW1l
c0tleSgpOworICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIGluZGV4
IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKyAgICAvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVs
LgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpOworICAgIHN0YXRpYyBWZWN0b3I8
Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhOYW1l
c0tleSYgb3RoZXIpOworICAgIFN0cmluZyBpbmRleE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4TmFtZTsgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IFN0cmluZyBtX2luZGV4TmFtZTsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlRGF0YUtleSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCk7CisgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSk7CisgICAgc3RhdGljIFZl
Y3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0
U3RvcmVEYXRhS2V5JiBvdGhlcik7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBj
b25zdDsKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrU3BlY2lhbEluZGV4TnVtYmVyOworCitw
cml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OworfTsKKworY2xhc3Mg
RXhpc3RzRW50cnlLZXkgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3Vs
dCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZEtleSk7Cisg
ICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUo
Y29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVyKTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gdXNl
cktleSgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga1NwZWNpYWxJbmRleE51
bWJlcjsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKK307
CisKK2NsYXNzIEluZGV4RGF0YUtleSB7CitwdWJsaWM6CisgICAgSW5kZXhEYXRhS2V5KCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIEluZGV4RGF0YUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVtYmVyID0gMCk7
CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1pbktleShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBJbmRl
eERhdGFLZXkmIG90aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMpOworICAgIGludDY0X3QgZGF0
YWJhc2VJZCgpIGNvbnN0OworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OworICAg
IGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNv
ZGVkVXNlcktleTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJpbWFyeUtleTsKKyAgICBp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJREJMZXZlbERC
Q29kaW5nCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMRVZFTERC
KQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCTGV2
ZWxEQkNvZGluZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
REJPYmplY3RTdG9yZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgor
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOworCitJREJPYmplY3RTdG9y
ZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBt
X2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsK
KyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworU3RyaW5n
IElEQk9iamVjdFN0b3JlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpuYW1lIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOworfQorCitTdHJp
bmcgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmU6OmtleVBhdGgiKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXlQYXRoKCk7
Cit9CisKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFt
ZXMoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMi
KTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5pbmRleE5hbWVzKCk7Cit9CisKK0lEQlRyYW5zYWN0
aW9uKiBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uIik7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rp
b24uZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpn
ZXQiKTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBl
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVx
dWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOworICAg
IGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30K
KworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7CisgICAgaWYgKGtleSAmJiAoa2V5LT50
eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQt
PnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBk
YXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIp
OworICAgIGlmICgha2V5UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1
bmN0aW9uKGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRl
Iik7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFj
a2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0
LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
cmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCIpOworICAg
IGlmICghSURCSXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQoInVuaXF1ZSIs
IHVuaXF1ZSk7CisKKyAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dCgibXVsdGlFbnRyeSIsIG11bHRpRW50cnkpOworCisgICAgLy8gRklYTUU6IFdoZW4gQXJyYXkt
dHlwZSBrZXlQYXRocyBhcmUgc3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBp
cyBBcnJheSBhbmQgbXVsdGlFbnRyeSBpcyB0cnVlLgorCisgICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJbmRleChuYW1l
LCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2Vu
ZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOworfQorCitQYXNz
UmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpp
bmRleCIpOworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5m
aW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQorICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIEFTU0VSVCghaW5k
ZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYg
KCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwor
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6OmRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
bV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7CisgICAgaWYgKGRp
cmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVY
VF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgeworICAgICAgICAvLyBGSVhNRTog
TWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9Q
dWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+
c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNv
cik7CisgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBy
ZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2Uo
KSwgZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkK
K3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7CisKKyAgICAvLyBCcmVh
ayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSURCT2JqZWN0U3RvcmVfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZV9oCisK
KyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFzcyBJ
REJBbnk7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2Jq
ZWN0U3RvcmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJP
YmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShpZGJPYmplY3RTdG9yZSwgdHJhbnNh
Y3Rpb24pKTsKKyAgICB9CisgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CisKKyAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OworICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBh
ZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29u
dGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIE9wdGlvbnNPYmpl
Y3QoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfSAKKworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVj
dCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7IAor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKworcHJpdmF0ZToKKyAgICBJREJP
YmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElE
QlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZyb21QZW5kaW5nTGlz
dCgpOworCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNr
ZW5kOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4gPiBJREJJbmRleE1hcDsKKyAg
ICBJREJJbmRleE1hcCBtX2luZGV4TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKKwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVY
RURfREFUQUJBU0UKKyAgICBdIElEQk9iamVjdFN0b3JlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBuYW1lOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVs
bF0gRE9NU3RyaW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmdMaXN0IGluZGV4TmFtZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbjsKKworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBb
T3B0aW9uYWxdIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJ
REJLZXkga2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Cisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRl
bGV0ZUZ1bmN0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZSBrZXlSYW5nZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlv
bl0gSURCUmVxdWVzdCBkZWxldGUoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCBjbGVhcigpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdl
LCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKKyAgICAgICAgICAgIHJh
aXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRl
eChpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0g
T3B0aW9uc09iamVjdCBvcHRpb25zKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7CisgICAgICAgIElEQkluZGV4IGluZGV4KGluIERPTVN0cmluZyBuYW1lKQorICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZGVs
ZXRlSW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkKKyAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkga2V5KQor
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQktleS5o
IgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZElt
cGwuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIK
KyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQoreworfQor
CitJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElE
QkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkK
KyAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNy
ZW1lbnQpCisgICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCit7CisgICAgbG9hZEluZGV4
ZXMoKTsKK30KKworSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9kYXRh
YmFzZUlkKGRhdGFiYXNlSWQpCisgICAgLCBtX2lkKEludmFsaWRJZCkKKyAgICAsIG1fbmFtZShu
YW1lKQorICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0
b0luY3JlbWVudCkKKyAgICAsIG1fYXV0b0luY3JlbWVudE51bWJlcigtMSkKK3sKK30KKworUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5h
bWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERP
TVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKKyAg
ICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAgaW5kZXhOYW1lcy0+c29y
dCgpOworICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCBrZXksIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOworICAgIFN0cmlu
ZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkp
OworICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOworfQorCitzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOworICAgIFZlY3RvcjxSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKKyAgICB2YWx1ZXMuYXBwZW5kKHZhbHVl
KTsKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgIElEQktleVBhdGhCYWNr
ZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1
ZXMsIGtleVBhdGgsIGtleXMpOworICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOworICAgIHJldHVybiBrZXlzWzBd
LnJlbGVhc2UoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluamVjdEtleUludG9L
ZXlQYXRoIik7CisgICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKK30KKwordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgaWYgKHRy
YW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0
cjsKKworICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgeworICAgICAgICBjb25zdCBi
b29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOworICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKKworICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKKyAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVudCAmJiAha2V5
KSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewor
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBh
dGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYg
KGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWF1dG9JbmNyZW1lbnQgJiYgIWtl
eVBhdGhLZXkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoLTEpOworICAg
ICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmpl
Y3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwgdmFsdWUsIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikg
eworICAgICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5ICYmICFrZXktPnZhbGlkKCkpIHsK
KyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewor
ICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5
RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOworICAgICAgICAgICAg
aWYgKGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VS
VChrZXkpOworICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1f
a2V5UGF0aC5pc051bGwoKTsKKyAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdl
dCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgLy8gRklY
TUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5
IGEgY2FjaGUgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9i
amVjdFN0b3JlKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgb2Jq
ZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Cit9CisKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCIpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFs
dWU7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKHB1dE1vZGUg
IT0gQ3Vyc29yVXBkYXRlKSB7CisgICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9i
amVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0
aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOworICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVj
dFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkpCisgICAgICAg
ICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0b0lu
Y3JlbWVudCkgeworICAgICAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXko
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5q
ZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBh
dGgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMg
c2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2Vz
IG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGlu
c2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRlIGdlbmVyYXRvciBzdGF0ZSBz
aG91bGQgZ28gaGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2FuLgorICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGtleSAmJiBrZXktPnZhbGlkKCkpOwor
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYg
b2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVj
dFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKSkgeworICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFk
eSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleXM7CisgICAgZm9yIChJbmRl
eE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgp
LCBpbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKCFpbmRleEtleSkgeworICAgICAgICAg
ICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGluZGV4S2V5LT52YWxpZCgpKTsKKwor
ICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBlKCkgIT0g
SURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5n
ZXQoKSwga2V5LmdldCgpKSkgeworICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwg
Ik9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRv
ZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleC0+bXVsdGlFbnRyeSgp
ICYmIGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXktPmFy
cmF5KClbal0uZ2V0KCksIGtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5
UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyBy
ZXF1aXJlbWVudHMuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhLZXlzLmFw
cGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBv
aW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0
aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKworICAgIGlmICghb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRh
YmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Ig
d3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaSA9IDA7CisgICAg
Zm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkgeworICAg
ICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgY29udGludWU7IC8v
IFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGlu
IHRoZSBkYXRhYmFzZSB5ZXQuCisKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5n
U3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlk
LCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNh
dGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMu
CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0
byBzdGFibGUgc3RvcmFnZS4iKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5kZXhLZXlz
W2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gaW5kZXhLZXlzW2ldOworCisgICAgICAgIGlmICghaW5kZXgtPm11bHRpRW50cnkoKSB8
fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAgICAgICAgICBp
ZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG9i
amVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSwg
KmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUg
YW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KKyAgICAgICAgICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKSk7CisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKGluZGV4LT5tdWx0aUVudHJ5KCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4
LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVj
aWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVy
cm9ycy4KKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBwcnBLZXk7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6
b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0
ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwg
ZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAg
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNr
cykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50
aWZpZXI7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7
CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdT
dG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBk
b2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgorCisgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFG
b3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0
LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpOworCisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9z
ZSgpOworICAgIH0KKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwor
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBvYmplY3RTdG9yZS0+bV9iYWNr
aW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBQb3B1
bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFj
a2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOworICAgICAgICBSZWZQdHI8SURCS2V5
PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1faW5k
ZXgtPmtleVBhdGgoKSk7CisKKyAgICAgICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGlmICghbV9pbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4
S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAgIGlmICghbV9p
bmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERh
dGFGb3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCks
ICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXgtPm11bHRp
RW50cnkoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6
OkFycmF5VHlwZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4S2V5
LT5hcnJheSgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5h
ZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUucHV0SW5kZXhE
YXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgp
LCAqaW5kZXhLZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIElEQkJhY2tpbmdTdG9yZSYgbV9i
YWNraW5nU3RvcmU7CisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Cit9
OworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorewor
ICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5mb3JFYWNo
T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2spKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5hbWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIHRoaXMs
IG5hbWUsIG1fbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBBU1NFUlQo
aW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rp
b25QdHIpLAorICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBpZDsKKyAgICBpZiAoIW9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4
LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5kZXgtPnNldElk
KGlkKTsKKworICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgp
KSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOworfQorCitQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFt
ZSk7CisgICAgaWYgKCFpbmRleCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICh0cmFuc2FjdGlv
bi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KG5hbWUpOworICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25Q
dHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisg
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbmRleGVzLnJlbW92ZShuYW1l
KTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit7CisgICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwor
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKwordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSA9IHBycFJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0
aW9uUHRyKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOworICAgIH0KK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih0bXBEaXJl
Y3Rpb24pOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2Uu
Z2V0KCksIGRpcmVjdGlvbik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5n
U3RvcmVDdXJzb3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0
KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOworfQorCit2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNr
cywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAg
dWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlk
KCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRvIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3It
PmNvbnRpbnVlRnVuY3Rpb24oMCkpOworCisgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgp
OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVy
VmFsdWUoY291bnQpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcygpCit7CisgICAgVmVjdG9yPGludDY0X3Q+IGlkczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBuYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4g
dW5pcXVlRmxhZ3M7CisgICAgVmVjdG9yPGJvb2w+IG11bHRpRW50cnlGbGFnczsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywgbmFtZXMsIGtl
eVBhdGhzLCB1bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsKKworICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBp
ZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkp
OworICAgIEFTU0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1faW5k
ZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUs
IGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRyeUZsYWdzW2ldKSk7Cit9CisK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorewor
ICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkp
KTsKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQoreworICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OworICAgIEFTU0VS
VCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Cisg
ICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIp
OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
QXV0b0luY3JlbWVudEtleSgpCit7CisgICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDAp
CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1i
ZXIrKyk7CisKKyAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
YmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihtX2RhdGFiYXNlSWQsIGlkKCkp
KTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVy
KyspOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAorCisj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJC
YWNraW5nU3RvcmU7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgSURCSW5k
ZXhCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0
b0luY3JlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIGlkLCBuYW1lLCBrZXlQ
YXRoLCBhdXRvSW5jcmVtZW50KSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
ZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJ
bnZhbGlkSWQgPSAwOworICAgIGludDY0X3QgaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1faWQgIT0gSW52YWxpZElkKTsKKyAgICAgICAgcmV0dXJuIG1faWQ7CisgICAgfQorICAg
IHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICBpbnQ2NF90IGRhdGFi
YXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWQ7IH0KKworICAgIHZpcnR1YWwgU3Ry
aW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBr
ZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
YXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3JlbWVudDsgfQorCisgICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVh
bCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4pOworCitwcml2YXRlOgorICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsK
KyAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2b2lkIGxvYWRJbmRleGVzKCk7CisgICAgUGFzc1Jl
ZlB0cjxJREJLZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICB2b2lkIHJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQorCisgICAg
c3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworICAgIHN0YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVJbmRleEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisKKyAgICAvLyBU
aGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgorICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkSW5kZXhUb01hcChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0QXV0
b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOworCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRf
dCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBi
b29sIG1fYXV0b0luY3JlbWVudDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOworICAgIEluZGV4TWFwIG1faW5kZXhl
czsKKyAgICBpbnQgbV9hdXRvSW5jcmVtZW50TnVtYmVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorI2Rl
ZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdM
aXN0OworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
OworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisK
KyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBBZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25s
eSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8v
IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgorI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgorCit1c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOworCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGhyZWFkU3BlY2lm
aWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9u
cygpCit7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAorICAgIC8vIHRocmVhZC1sb2NhbCBzdG9yYWdl
LgorICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxWZWN0b3I8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0aW9ucyA9IG5ldyBU
aHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPik7
CisgICAgcmV0dXJuICp0cmFuc2FjdGlvbnM7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgdHJhbnNhY3Rpb25zKCktPmFwcGVuZCh0cmFu
c2FjdGlvbik7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3Zl
UGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24pCit7CisgICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9ucygpOworICAgIHNp
emVfdCBwb3MgPSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24pOworICAgIGlmIChw
b3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uTGlzdC0+
cmVtb3ZlKHBvcyk7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWJv
cnRQZW5kaW5nVHJhbnNhY3Rpb25zKCkKK3sKKyAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJhbnNh
Y3Rpb25zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbnMoKS0+c2l6
ZSgpOyArK2kpCisgICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFib3J0KCk7CisgICAg
Ly8gRklYTUU6IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEgbGF5b3V0IHRlc3Qu
CisgICAgdHJhbnNhY3Rpb25MaXN0LT5jbGVhcigpOworfQorCit9OworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAko
cmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cl9oCisjZGVmaW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOworCisvLyBUaGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9m
IHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKKy8vIEphdmFzY3Jp
cHQgZXhlY3V0aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rpb24gaXMgJ3BlbmRpbmcnIGlmIG5vIGFz
eW5jaHJvbm91cworLy8gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBxdWV1ZWQgZm9yIGl0IChlLmcu
IGFuIElEQk9iamVjdFN0b3JlOjpwdXQoKSBvciBzaW1pbGFyKS4KKy8vIEFsbCBwZW5kaW5nIHRy
YW5zYWN0aW9ucyBhcmUgYWJvcnRlZCBhcyBzb29uIGFzIGV4ZWN1dGlvbiByZXR1cm5zIGZyb20K
Ky8vIHRoZSBzY3JpcHQgZW5naW5lLgorCitjbGFzcyBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGVu
ZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHN0
YXRpYyB2b2lkIGFib3J0UGVuZGluZ1RyYW5zYWN0aW9ucygpOworCitwcml2YXRlOgorICAgIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlJlcXVl
c3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXZlbnRF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRo
VmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlz
cGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKyNp
bmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlJl
cXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCB0
cmFuc2FjdGlvbikpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCisgICAgLCBtX2Vycm9yQ29kZSgwKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5H
KQorICAgICwgbV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2N1cnNvckZpbmlzaGVk
KGZhbHNlKQorICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKKyAgICAsIG1fY3Vyc29yVHlw
ZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKKyAgICAsIG1f
Y3Vyc29yKDApCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV90cmFuc2Fj
dGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2Vu
ZCgpKTsKKyAgICB9Cit9CisKK0lEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5RGVhdGggfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworfQorCitQYXNzUmVm
UHRyPElEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
eworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gbV9yZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVy
cm9yQ29kZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IERPTkUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9X
RURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JDb2Rl
OworfQorCitTdHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworfQorCitQ
YXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zb3VyY2U7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6
OnRyYW5zYWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKK30KKwor
dW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om1hcmtFYXJseURl
YXRoKCkKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOworICAgIG1fcmVh
ZHlTdGF0ZSA9IEVhcmx5RGVhdGg7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0
YXRlKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVz
dEZpbmlzaGVkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBB
U1NFUlQodHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSAhPSBET05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3JlYWR5U3RhdGUgPSBM
T0FESU5HOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgbV9lcnJvckNvZGUgPSAwOworICAg
IG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CisKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitJREJBbnkqIElEQlJlcXVlc3Q6OnNvdXJjZSgp
Cit7CisgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmFi
b3J0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IExPQURJ
TkcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gZXZl
bnRRdWV1ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorICAgIG1fZW5xdWV1ZWRF
dmVudHMuY2xlYXIoKTsKKworICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICBtX2Vycm9yTWVzc2Fn
ZSA9IFN0cmluZygpOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgb25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIlRoZSB0
cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJlIGZ1bGZpbGxl
ZC4iKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQVNTRVJUKG1fY3Vy
c29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7
CisgICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojpz
ZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKK3sKKyAgICBBU1NFUlQoIW1f
Y3Vyc29yKTsKKyAgICBtX2N1cnNvciA9IGN1cnNvcjsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojpm
aW5pc2hDdXJzb3IoKQoreworICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOworICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gTE9BRElORykKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVl
OworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvcikKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdl
LmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgp
OworICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKKyAgICBtX2N1cnNvci5j
bGVhcigpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVh
dGVTdWNjZXNzRXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIpOworICAgIEFT
U0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0
KTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOworICAgIGVu
cXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Cisg
ICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9y
ZXN1bHQpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOworICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsK
KyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5Q3Vyc29yKQorICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0
aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBt
X3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisKKyAgICBzZXRSZXN1bHRDdXJz
b3IoY3Vyc29yLCBtX2N1cnNvclR5cGUpOworCisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nl
c3NFdmVudCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCit7CisgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7CisgICAgQVNTRVJUKCFtX2Vycm9y
Q29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGlmICht
X2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJREJEYXRhYmFz
ZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7CisgICAgaWRiRGF0
YWJhc2UtPm9wZW4oKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJh
c2UucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwor
fQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5
KQoreworICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKKyAg
ICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jl
c3VsdCk7CisgICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCisgICAgICAgIG1fcmVz
dWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5KTsKKyAgICBlbHNlCisgICAgICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgp
KTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIElE
QlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gcHJwQmFja2VuZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhJREJUcmFuc2FjdGlvbikiKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JN
ZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgIGJhY2tl
bmQtPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAg
ICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rp
b24gPSBmcm9udGVuZDsKKworICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6
SURCRGF0YWJhc2VUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisgICAgbV9zb3VyY2UtPmlkYkRhdGFiYXNl
KCktPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7CisKKyAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
ZnJvbnRlbmQucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50
KCkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQoreworICAgIElEQl9UUkFDRSgi
SURCUmVxdWVzdDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsKKyAgICBBU1NF
UlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7
CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpOwor
ICAgIG1fY3Vyc29yLmNsZWFyKCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVu
dCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24i
KTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYm
ICFtX3Jlc3VsdCk7CisgICAgQVNTRVJUKG1fY3Vyc29yKTsKKyAgICBzZXRSZXN1bHRDdXJzb3Io
bV9jdXJzb3IsIG1fY3Vyc29yVHlwZSk7CisgICAgbV9jdXJzb3IuY2xlYXIoKTsKKyAgICBlbnF1
ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCitib29sIElEQlJlcXVlc3Q6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdv
cmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2Fu
CisgICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBsaXN0
ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCisgICAgLy8gICAgICAgIHVzZXIgZ2VuZXJh
dGVkIGV2ZW50cyBwcm9wZXJseS4KKyAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8IEFj
dGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK3ZvaWQgSURCUmVxdWVz
dDo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAgaWYgKG1fY29u
dGV4dFN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dFN0b3BwZWQgPSB0
cnVlOworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKKyAgICAgICAgbWFya0Vhcmx5
RGVhdGgoKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIElEQlJlcXVlc3Q6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9ySURCUmVxdWVzdDsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9i
amVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCitib29sIElEQlJlcXVlc3Q6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hl
ZCk7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQobV9lbnF1ZXVl
ZEV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwor
ICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAl
ZCIsIERPTkUsIG1fcmVhZHlTdGF0ZSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnRO
YW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOworICAgIH0KKworICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFwcGVuZCh0aGlz
KTsKKyAgICBpZiAobV90cmFuc2FjdGlvbikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3Ry
YW5zYWN0aW9uKTsKKyAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJl
IGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0IGRvIG5vdCBo
YXZlIGEgdHJhbnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCisg
ICAgICAgIC8vIHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhl
IGRhdGFiYXNlICh0byBlbnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgorICAgICAg
ICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCQ3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBpZiAobV9yZXN1bHQpIHsKKyAgICAg
ICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQorICAgICAg
ICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7CisgICAgICAgIGVs
c2UgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBl
KQorICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZh
bHVlKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50
IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCisgICAgQVNT
RVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCk7CisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKworICAg
IC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tlZCBl
dmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZp
bmlzaGVkKSkKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOworCisgICAgaWYgKGN1
cnNvclRvTm90aWZ5KQorICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nlc3NIYW5kbGVy
Q2FsbGJhY2soKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CisgICAgICAgIC8vIElmIGFu
IGVycm9yIGV2ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCisgICAgICAg
IGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKS0+YWJvcnQo
KTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBJ
REJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAo
bV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgp
OworfQorCit2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKKworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKworICAgIEV2ZW50UXVldWUq
IGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworCisgICAgaWYgKGV2ZW50UXVldWUtPmVucXVldWVF
dmVudChldmVudC5nZXQoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50
KTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQor
eworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSog
SURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZl
bnRUYXJnZXREYXRhOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpD
dXJzb3JUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlDdXJzb3IpIHsKKyAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZShwcnBDdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXN1bHQgPSBJ
REJBbnk6OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJwQ3Vyc29yKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAxMDk0NjEp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oOjEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUmVxdWVzdF9oCisjZGVmaW5lIElEQlJl
cXVlc3RfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZl
bnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVk
ZSAiSURCQ2FsbGJhY2tzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJh
bnNhY3Rpb247CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQlJlcXVl
c3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJj
ZSwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7CisKKyAgICBQ
YXNzUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFN0cmluZyB3
ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
SURCQW55PiBzb3VyY2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbigpIGNvbnN0OworCisgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCisgICAgZW51
bSBSZWFkeVN0YXRlIHsKKyAgICAgICAgTE9BRElORyA9IDEsCisgICAgICAgIERPTkUgPSAyLAor
ICAgICAgICBFYXJseURlYXRoID0gMworICAgIH07CisgICAgdW5zaWduZWQgc2hvcnQgcmVhZHlT
dGF0ZSgpIGNvbnN0OworCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNj
ZXNzKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAg
IHZvaWQgbWFya0Vhcmx5RGVhdGgoKTsKKyAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFu
c2FjdGlvbiopOworICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlKTsKKyAgICB2b2lkIHNldEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNv
cj4pOworICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgSURCQW55KiBzb3VyY2UoKTsKKyAg
ICB2b2lkIGFib3J0KCk7CisKKyAgICAvLyBJREJDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQg
b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKyAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGlu
dWF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBW
ZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+
ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gPiYgdmFsdWVzKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIE5vdCBpbXBsZW1lbnRl
ZC4gQ2FsbGJhY2sgc2hvdWxkIG5vdCByZWFjaCB0aGUgcmVuZGVyZXIgc2lkZS4KKyAgICB2aXJ0
dWFsIHZvaWQgb25CbG9ja2VkKCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSBPVkVSUklERTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CisKKyAg
ICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7CisgICAgdXNp
bmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKKyAgICB1bnNp
Z25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKK3By
aXZhdGU6CisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJn
ZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRl
cmVmKCk7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7
CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwor
CisgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+LCBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKworICAgIFJlZlB0cjxJREJBbnk+IG1f
c291cmNlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9yZXF1ZXN0RmluaXNoZWQ7IC8v
IElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHM/IElmIG5vdCwg
d2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOworICAgIGJvb2wgbV9j
b250ZXh0U3RvcHBlZDsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5xdWV1ZWRFdmVu
dHM7CisKKyAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJz
b3IuCisgICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5
cGU7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7CisKKyAgICBFdmVudFRhcmdldERh
dGEgbV9ldmVudFRhcmdldERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlJlcXVlc3Rf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJS
ZXF1ZXN0LmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9y
YWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRXZlbnRUYXJnZXQKKyAg
ICBdIElEQlJlcXVlc3QgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJlc3Vs
dAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlCisgICAgICAg
ICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERPTVN0
cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3Vy
Y2U7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bjsKKworICAgICAgICAvLyBTdGF0ZXMKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9B
RElORyA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAyOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKKworICAgICAg
ICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdWNjZXNzOwor
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9N
U3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFs
XSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIo
aW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBF
dmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3Bh
dGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9u
KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhY2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYWNpbmcuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYWNpbmcuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIElEQlRyYWNpbmdfaAorI2RlZmluZSBJREJUcmFjaW5nX2gKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisKKyNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCisjZGVmaW5lIElEQl9UUkFDRShhKSBUUkFDRV9FVkVOVDAoIkluZGV4ZWREQiIs
IChhKSk7CisKKyNlbHNlCisKKyNkZWZpbmUgSURCX1RSQUNFKGEpICgodm9pZCkwKQorCisjZW5k
aWYgLy8gIFBMQVRGT1JNKENIUk9NSVVNKQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFjaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHA6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZl
bnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRl
ICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCit7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNh
Y3Rpb24oY29udGV4dCwgYmFja2VuZCwgZGIpKSk7CisgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJ
Zk5lZWRlZCgpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK0lEQlRy
YW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURC
RGF0YWJhc2UqIGRiKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAg
LCBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fZGF0YWJhc2UoZGIpCisgICAgLCBtX21vZGUo
bV9iYWNrZW5kLT5tb2RlKCkpCisgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2UpCisg
ICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
ICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFuc2FjdGlvbiht
X2JhY2tlbmQuZ2V0KCkpOworfQorCitJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkK
K3sKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2FjdGlvbjo6
YmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKK30KKworYm9v
bCBJREJUcmFuc2FjdGlvbjo6ZmluaXNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5z
YWN0aW9uRmluaXNoZWQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlRyYW5zYWN0aW9uOjptb2Rl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb2RlOworfQorCitJREJEYXRhYmFzZSogSURCVHJh
bnNhY3Rpb246OmRiKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKK30K
KworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fdHJh
bnNhY3Rpb25GaW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIElEQk9iamVj
dFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBp
ZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9
IElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBv
YmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RT
dG9yZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3Jl
YXRlZChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBtX29i
amVjdFN0b3JlTWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNT
RVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3Zl
KG5hbWUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCit7CisgICAgaWYgKG1f
dHJhbnNhY3Rpb25GaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7CisgICAgaWYgKG1fYmFja2VuZCkKKyAgICAgICAgbV9i
YWNrZW5kLT5hYm9ydCgpOworfQorCitJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVy
OjpPcGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24sIElEQkN1cnNvciogY3Vyc29yKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiks
CisgICAgICBtX2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJP
cGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKworSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3Rp
Zmllcjo6fk9wZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdp
c3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5h
ZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAg
SGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJz
b3JzKTsKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkgPSBjdXJzb3Jz
LmJlZ2luKCk7IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT5jbG9zZSgp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBtX2NoaWxkUmVxdWVzdHMuYWRkKHJlcXVlc3QpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIC8vIElmIHdlIGFib3J0ZWQgdGhlIHJlcXVlc3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZl
IGJlZW4gcmVtb3ZlZC4KKyAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb25GaW5pc2hlZCk7CisgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3RzLmJlZ2luKCk7
CisgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAgICAgIHJlcXVl
c3QtPmFib3J0KCk7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRl
KCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAgaWYgKG1fbW9k
ZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNv
cnMoKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBJ
REJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFu
eW9uZSBoYXMgYSBvciBjYW4KKyAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFu
eSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKKyAgICAvLyAgICAg
ICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5l
cmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAgIHJldHVybiAhbV90cmFuc2FjdGlvbkZpbmlzaGVk
IHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK2NvbnN0IEF0
b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVHJhbnNhY3Rpb247Cit9CisKK1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbjo6
ZGlzcGF0Y2hFdmVudCIpOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAg
ICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoZXZlbnQtPnRh
cmdldCgpID09IHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25GaW5pc2hlZCA9IHRydWU7CisKKyAg
ICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0
b3JlTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworCisgICAgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOworICAg
IHRhcmdldHMuYXBwZW5kKGRiKCkpOworCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3Vz
dG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2Uu
CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgcmV0dXJu
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworfQor
Citib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0IGlz
IHNjaGVkdWxlCisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0aGUgY29tcGxldGUvYWJvcnQgZXZl
bnQgaXMgZW5xdWV1ZWQuCisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9w
KCk7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAgICBhYm9ydCgpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV90cmFuc2FjdGlvbkZpbmlzaGVkLCAiQSBm
aW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUgJXMu
IiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1
ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQpOworfQorCitFdmVudFRhcmdldERhdGEqIElEQlRyYW5z
YWN0aW9uOjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERh
dGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0
aW9uX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25DYWxsYmFja3MuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vy
c29yOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3Mg
SURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25DYWxsYmFja3MsIHB1YmxpYyBF
dmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFz
ZSopOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uKCk7CisKKyAgICBlbnVtIE1vZGUgewor
ICAgICAgICBSRUFEX09OTFkgPSAwLAorICAgICAgICBSRUFEX1dSSVRFID0gMSwKKyAgICAgICAg
VkVSU0lPTl9DSEFOR0UgPSAyCisgICAgfTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OworICAgIGJvb2wgZmluaXNoZWQoKSBjb25zdDsKKwor
ICAgIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZSogZGIoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICBj
bGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3BlbkN1cnNv
ck5vdGlmaWVyKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+LCBJREJDdXJzb3IqKTsKKyAgICAg
ICAgfk9wZW5DdXJzb3JOb3RpZmllcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICAgICAgSURCQ3Vyc29yKiBtX2N1cnNv
cjsKKyAgICB9OworCisgICAgdm9pZCByZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAg
IHZvaWQgdW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAgIHZvaWQgb2JqZWN0U3Rv
cmVDcmVhdGVkKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+KTsKKyAg
ICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmKTsKKworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY29tcGxldGUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoZXJyb3IpOworCisgICAgLy8gSURCVHJhbnNhY3Rpb25DYWxsYmFja3MKKyAgICB2aXJ0dWFs
IHZvaWQgb25BYm9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7CisKKyAgICAv
LyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZp
cnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCkgT1ZFUlJJREU7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzPjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFj
a3M+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJEYXRhYmFzZSopOworCisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoSURCQ3Vyc29yKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJz
b3IqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBk
ZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgp
OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsK
KworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsK
KyAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgc2hvcnQg
bV9tb2RlOworICAgIGJvb2wgbV90cmFuc2FjdGlvbkZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJs
ZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzIG9yIGFsbG93IGFueSBuZXcgcmVxdWVz
dHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOwor
CisgICAgTGlzdEhhc2hTZXQ8SURCUmVxdWVzdCo+IG1fY2hpbGRSZXF1ZXN0czsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gPiBJREJPYmplY3RT
dG9yZU1hcDsKKyAgICBJREJPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlTWFwOworCisgICAg
SGFzaFNldDxJREJDdXJzb3IqPiBtX29wZW5DdXJzb3JzOworCisgICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlv
bl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3Qs
CisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJUcmFuc2FjdGlvbiB7CisgICAgICAgIC8v
IE1vZGVzCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9IDA7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAxOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7CisKKyAgICAgICAgLy8gUHJvcGVydGll
cworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgbW9kZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOworICAgICAgICAvLyBNZXRob2Rz
CisgICAgICAgIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChpbiBET01TdHJpbmcgbmFtZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICB2b2lk
IGFib3J0ICgpOworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25hYm9ydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0
ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgLy8g
RXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlz
cGF0Y2hFdmVudChpbiBFdmVudCBldnQpIAorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0
aW9uKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlz
aW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBs
LmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRh
dGFiYXNlKSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3Rv
cmVOYW1lcyhvYmplY3RTdG9yZXMpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fc3RhdGUo
VW51c2VkKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24o
ZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVUcmFuc2FjdGlvbigpKQorICAgICwgbV90
YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVk
KQorICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6dGFza0V2ZW50VGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQoreworICAg
IEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOworICAgIEFTU0VSVChtX21vZGUgPT0gSURCVHJh
bnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlzRW1wdHko
KSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVU
cmFuc2FjdGlvbih0aGlzKTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJs
ZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxl
dGUgb3IgYWJvcnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Cit9CisKK1Bh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8gRG9lcyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxk
bid0IGJlIHRoYXQgc2xvdyBpbiBwcmFjdGljZS4KKyAgICBpZiAobV9tb2RlICE9IElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhu
YW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5h
bWUpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0IG5vdyBiZWFj
dXNlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdzCisgICAgLy8g
ICAgICAgIGJldHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNrIG9jY3Vycykg
YW5kIHRoZSAub2JqZWN0U3RvcmUgY2FsbC4KKyAgICAvLyAgICAgICAgVGhlcmUncyBhIGJ1ZyB0
byBtYWtlIHRoaXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtlIGl0IGltcG9z
c2libGUgaGVyZSwgd2UKKyAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgorICAg
IGlmICghb2JqZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvYmpl
Y3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spCit7
CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoYWJvcnRUYXNrKQorICAgICAg
ICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlmIChtX3N0YXRl
ID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0Iik7CisgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3Rh
dGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBhYm9ydCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKworICAgIG1fc3RhdGUg
PSBGaW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisgICAgbV90YXNrRXZlbnRUaW1l
ci5zdG9wKCk7CisKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgaWYgKHdhc1J1bm5pbmcp
CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBSdW4gdGhlIGFi
b3J0IHRhc2tzLCBpZiBhbnkuCisgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzayht
X2Fib3J0VGFza1F1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgbV9hYm9ydFRhc2tR
dWV1ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICB9
CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7
CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFu
c2FjdGlvbih0aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmlu
aXNoZWQodGhpcyk7CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBj
dXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNr
ZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWRkUGVuZGluZ0V2ZW50cyhpbnQg
bikKK3sKKyAgICBtX3BlbmRpbmdFdmVudHMgKz0gbjsKKyAgICBBU1NFUlQobV9wZW5kaW5nRXZl
bnRzID49IDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRpZENvbXBs
ZXRlVGFza0V2ZW50cygpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOworICAgIEFTU0VSVCht
X3BlbmRpbmdFdmVudHMpOworICAgIG1fcGVuZGluZ0V2ZW50cy0tOworCisgICAgaWYgKCFtX3Rh
c2tFdmVudFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGFza0V2ZW50VGltZXIuc3RhcnRP
bmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJ1bigpCit7
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmlu
Zyk7CisgICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAgIG1fdGFza1Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3Rh
dGUgPSBTdGFydFBlbmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uU3RhcnRlZCh0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQoKQoreworICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29t
bWl0Iik7CisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSBy
ZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4g
V2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAg
IC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBS
dW5uaW5nKTsKKyAgICBBU1NFUlQobV90YXNrUXVldWUuaXNFbXB0eSgpKTsKKworICAgIG1fc3Rh
dGUgPSBGaW5pc2hlZDsKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlv
bi0+Y29tbWl0KCk7CisgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMp
OworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisgICAgbV9kYXRh
YmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKQoreworICAgIElEQl9UUkFD
RSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQiKTsKKyAgICBBU1NF
UlQoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBl
bmRpbmcpIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV9zdGF0
ZSA9IFJ1bm5pbmc7CisgICAgfQorCisgICAgVGFza1F1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3
YXAobV90YXNrUXVldWUpOworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpICYmIG1fc3RhdGUg
IT0gRmluaXNoZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAg
ICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHF1ZXVlLmZpcnN0
KCkucmVsZWFzZSgpKTsKKyAgICAgICAgcXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgbV9w
ZW5kaW5nRXZlbnRzKys7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgIH0KK30K
Kwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkKFRp
bWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQiKTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBSdW5uaW5nKTsKKworICAgIGlmICghbV9wZW5kaW5nRXZlbnRzICYmIG1fdGFz
a1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgbGFzdCB0YXNrIGV2ZW50IGhhcyBj
b21wbGV0ZWQgYW5kIHRoZSB0YXNrCisgICAgICAgIC8vIHF1ZXVlIGlzIGVtcHR5LiBDb21taXQg
dGhlIHRyYW5zYWN0aW9uLgorICAgICAgICBjb21taXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBvdGhlciBldmVudHMgdG8gY29t
cGxldGUuIEhvd2V2ZXIsCisgICAgLy8gdGhlIHRhc2sgcXVldWUgaXMgbm9uLWVtcHR5IGFuZCB0
aGUgdGltZXIgaXMgaW5hY3RpdmUuCisgICAgLy8gV2UgY2FuIHRoZXJmb3JlIHNjaGVkdWxlIHRo
ZSB0aW1lciBhZ2Fpbi4KKyAgICBpZiAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSAmJiAhbV90YXNr
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3NlT3BlbkN1cnNvcnMoKQor
eworICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+OjppdGVyYXRvciBpID0g
bV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKKyAg
ICAgICAgKCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Cit9CisKK307
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiBhYm9ydFRhc2spOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fs
bGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3Mg
PSBjYWxsYmFja3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1
cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVu
dHMoaW50KTsKKworICAgIHZvaWQgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0
IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKworICAgIGVudW0gU3RhdGUgeworICAg
ICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFN0YXJ0
UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHll
dCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRl
ZCBidXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9y
dGVkIG9yIGNvbW1pdHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQg
Y29tbWl0KCk7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+Kik7CisgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisK
KyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOworICAgIHVuc2ln
bmVkIHNob3J0IG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3Rh
c2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworCisgICAgLy8gRklY
TUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KKyAgICBU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKKyAgICBUaW1lcjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOworICAgIGludCBtX3Bl
bmRpbmdFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVu
Q3Vyc29yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisj
ZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
REJDdXJzb3JCYWNrZW5kSW1wbDsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzOworCit0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJUcmFuc2FjdGlvbiAoYXN5
bmMpIGFuZCBJREJUcmFuc2FjdGlvblN5bmMgKHN5bmMpLgorLy8gVGhpcyBpcyBpbXBsZW1lbnRl
ZCBieSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4g
b3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNh
bGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKKy8vIHRyaWdn
ZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2NsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNo
b3J0IG1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3MqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFkZFBlbmRpbmdFdmVudHMoaW50KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmg6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNh
bGxiYWNrc19oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25D
YWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBvbkNvbXBsZXRlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6MTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkpOworfQorCitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
KSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIG1fc3RhcnRlZFRyYW5z
YWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25z
KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBpZiAobV9z
dGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NF
UlQoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAg
ICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2Ug
aWYgKG1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAg
IG1fcnVubmluZ1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFu
c2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNh
Y3Rpb25zKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25z
aXN0aWVuY3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29s
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBpZiAo
bV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgZm91
bmQgPSB0cnVlOworICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgfQorICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbikpOworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZgorCit2b2lkIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKK3sKKyAgICAv
LyBGSVhNRTogRm9yIG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rpb24gdG8gcnVuIGF0
IGEgdGltZS4KKyAgICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9ICptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICBtX3N0YXJ0ZWRUcmFu
c2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICBtX3J1bm5pbmdUcmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uKTsKKyAgICB0cmFuc2FjdGlvbi0+cnVuKCk7Cit9CisKK307CisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Jf
aAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxs
YmFja3M7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworCisvLyBUcmFuc2FjdGlvbnMg
YXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgorY2xhc3MgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCk7CisKKyAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQg
YW5kIGZpbmlzaC4KKyAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworCisgICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5z
YWN0aW9ucygpOworCisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3YXkgdG8ga2Vl
cCByZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCisgICAgSGFzaE1hcDxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+ID4gbV90
cmFuc2FjdGlvbnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBzdGF0ZXMgYXJl
IGdyb3VwZWQgYmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8v
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gSURCVmVyc2lvbkNoYW5nZUV2ZW50
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudCh2
ZXJzaW9uLCBldmVudFR5cGUpKTsKK30KKworSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJz
aW9uQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSkKKyAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypjYW5CdWJibGUqLywg
ZmFsc2UgLypjYW5jZWxhYmxlKi8pCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKwor
SURCVmVyc2lvbkNoYW5nZUV2ZW50Ojp+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCkKK3sKK30KKwor
U3RyaW5nIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6dmVyc2lvbigpCit7CisgICAgcmV0dXJuIG1f
dmVyc2lvbjsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9ySURCVmVyc2lvbkNoYW5nZUV2ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnRfaAorI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55Owor
CitjbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgdmVyc2lvbiA9IFN0cmluZygpLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSA9IEF0b21pY1N0cmluZygpKTsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZlbnQo
KTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKTsKKworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSURC
VmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOworCisgICAgU3RyaW5nIG1fdmVyc2lvbjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmlk
bAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSURCVmVyc2lvbkNoYW5nZUV2
ZW50IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNp
b247CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q+IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKQoreworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdChhZG9w
dFJlZihuZXcgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoY29udGV4dCwgc291cmNlLCB2ZXJzaW9u
KSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiByZXF1ZXN0
LnJlbGVhc2UoKTsKKworfQorCitJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6SURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorICAgIDogSURCUmVxdWVzdChj
b250ZXh0LCBzb3VyY2UsIDApCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKworSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q6On5JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpCit7Cit9CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmludGVyZmFjZU5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6Om9u
QmxvY2tlZCgpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5p
c051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdl
RXZlbnQ6OmNyZWF0ZShtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdF9oCisjZGVm
aW5lIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogcHVibGljIElEQlJlcXVlc3QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCB+SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QoKTsKKworICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKKworICAgIC8vIEV2ZW50VGFy
Z2V0CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tlZCk7CisKK3By
aXZhdGU6CisgICAgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisK
KyAgICBTdHJpbmcgbV92ZXJzaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJSZXF1ZXN0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVE
X0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0
CisgICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgeworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CisgICAgfTsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjQxMTAsNiArMjQxMTAsMTY2IEBACiAJCQkJPC9GaWxlPgogCQkJPC9G
aWx0ZXI+CiAJCQk8RmlsdGVyCisJCQkJTmFtZT0iaW5kZXhlZGRiIgorCQkJCT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkFueS5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJBbnkuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkNhbGxiYWNrcy5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVk
ZGJcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5k
ZXhlZGRiXElEQkRhdGFiYXNlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
aW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
SURCRGF0YWJhc2VFcnJvci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnkuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFj
dG9yeS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
aW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4LmNwcCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhl
ZGRiXElEQkluZGV4LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJJbmRleEJhY2tlbmRJbXBsLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkluZGV4QmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5LmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcaW5kZXhlZGRiXElEQktleS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0
b3JlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlLmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRk
YlxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCUmVxdWVzdC5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJSZXF1ZXN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
PC9GaWx0ZXI+CisJCQk8RmlsdGVyCiAJCQkJTmFtZT0id2Vic29ja2V0cyIKIAkJCQk+CiAJCQkJ
PEZpbGUKQEAgLTcwNzM0LDE2MiArNzA4OTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkFueS5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQW55Lmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCQ2FsbGJhY2tzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3IuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2UuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlRXJyb3IuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnkuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3Rvcnku
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXElEQkluZGV4LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxJREJLZXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQktleS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQktleVJhbmdlLmNwcCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJ
REJLZXlSYW5nZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJPYmplY3RTdG9yZS5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdl
XElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJSZXF1ZXN0LmNw
cCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxJREJSZXF1ZXN0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCVHJhbnNhY3Rpb24uY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQlRyYW5zYWN0aW9u
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU3RvcmFnZVRhc2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTkzMCwxNCArMTkzMCw5IEBACiAJCTgwOUREMUUwMTMw
REUyQUQwMENBRTNFRCAvKiBDU1NTdHlsZUFwcGx5UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwOUREMURFMTMwREUyQUQwMENBRTNFRCAv
KiBDU1NTdHlsZUFwcGx5UHJvcGVydHkuaCAqLzsgfTsKIAkJODEwMkM1ODgxMzI1QkIxMTAwRERF
NjdBIC8qIFN0cmluZ0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMDJDNTg3MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFj
ay5jcHAgKi87IH07CiAJCTgxNUU2MTY3MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJ
dGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgx
NUU2MTY2MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmNwcCAqLzsgfTsKLQkJ
ODFBNzMyNUUxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8q
IElEQkN1cnNvci5oICovOyB9OwotCQk4MUE3MzI2MDEyMTAxOEE0MDBGQzBEOUUgLyogSURCQ3Vy
c29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgx
QTczMjVGMTIxMDE4QTQwMEZDMEQ5RSAvKiBJREJDdXJzb3IuY3BwICovOyB9OwotCQk4MUE3MzI3
ODEyMTAxOUUxMDBGQzBEOUUgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQTczMjc3MTIxMDE5RTEwMEZDMEQ5
RSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovOyB9OwogCQk4MUFDNTk5OTEzMTYzNkU2MDAw
OUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODFBQzU5OTcxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zl
ckl0ZW0uaCAqLzsgfTsKIAkJODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MUFDNTk5ODEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaCAqLzsg
fTsKIAkJODFBQzZDMzYxMzFDNTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUFDNkMzNTEzMUM1N0Qz
MDAwOUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaCAqLzsgfTsKLQkJODFCRTIwOTgxMUY0QUI4RDAw
OTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAv
KiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk4MUJFMjBEMjExRjRCQzMyMDA5MTVERkEgLyog
SlNJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODFCRTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLzsgfTsK
IAkJODFCRTIwRDMxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBODExRjRCNjZGMDA5MTVE
RkEgLyogSlNJREJDdXJzb3IuaCAqLzsgfTsKIAkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJEIC8q
IERyYWdTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODFGNjVGRjUxMzc4OEZBQTAwRkY2RjJEIC8qIERyYWdTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzA1LDYgKzMzMDAsNzkgQEAK
IAkJOTcwQjcyQTYxNDUwMDhFQjAwRjAwQTM3IC8qIEV2ZW50SGVhZGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwQjcyQTUxNDUwMDhFQjAwRjAw
QTM3IC8qIEV2ZW50SGVhZGVycy5oICovOyB9OwogCQk5NzExNDYwMzE0RUYwMDlBMDA2NzRGRDkg
LyogTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMTQ2MDAxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdl
b2xvY2F0aW9uLmNwcCAqLzsgfTsKIAkJOTcxMTQ2MDQxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmln
YXRvckdlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzExNDYwMTE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24u
aCAqLzsgfTsKKwkJOTcxMkE1QUQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU1NDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNw
cCAqLzsgfTsKKwkJOTcxMkE1QUUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICov
OyB9OworCQk5NzEyQTVCMDE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU3MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJBbnkuY3BwICovOyB9OworCQk5NzEyQTVCMTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi87IH07CisJCTk3MTJBNUIzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJC
YWNraW5nU3RvcmUuaCAqLzsgfTsKKwkJOTcxMkE1QjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNh
bGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovOyB9OworCQk5NzEy
QTVCNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3IuY3BwICovOyB9OworCQk5NzEyQTVCNjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi87IH07CisJCTk3MTJBNUI4MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVCOTE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3JCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVCQTE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1NjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCAqLzsgfTsKKwkJOTcxMkE1QkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1
cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU2MjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCAqLzsgfTsKKwkJOTcxMkE1QkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovOyB9OworCQk5NzEy
QTVCRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlLmNwcCAqLzsgfTsKKwkJOTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU2NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLzsgfTsKKwkJOTcx
MkE1QzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjgxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVD
MjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1QzMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVDNDE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oICovOyB9OworCQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwICovOyB9OworCQk5NzEyQTVDNjE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2RDE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmggKi87IH07CisJCTk3MTJBNUM3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU2RTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFcnJvci5oICov
OyB9OworCQk5NzEyQTVDOTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NzAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLzsgfTsKKwkJ
OTcxMkE1Q0ExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLzsgfTsKKwkJOTcxMkE1Q0MxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MzE1MDA0RURBMDA0OEFGMTAgLyog
SURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLzsgfTsKKwkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0
Y2hlci5oICovOyB9OworCQk5NzEyQTVDRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3
NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgKi87IH07CisJCTk3MTJBNUNGMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9y
eS5oICovOyB9OworCQk5NzEyQTVEMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTc4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICov
OyB9OworCQk5NzEyQTVEMjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3
OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi87IH07CisJCTk3
MTJBNUQzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovOyB9Owor
CQk5NzEyQTVENDE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdC
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovOyB9Owor
CQk5NzEyQTVENTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0MxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4LmNwcCAqLzsgfTsKKwkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLzsgfTsKKwkJOTcxMkE1RDgx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0YxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVEOTE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
QmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVEQjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgy
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovOyB9OworCQk5NzEyQTVEQzE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi87IH07CisJ
CTk3MTJBNURFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg1MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlQYXRoLmNwcCAqLzsgfTsKKwkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTg2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi87IH07CisJCTk3
MTJBNUUwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODcxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUUx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg4MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1RTIxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5j
cHAgKi87IH07CisJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi87IH07CisJCTk3MTJBNUU1MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCAqLzsgfTsKKwkJOTcxMkE1RTYxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZl
bERCQmFja2luZ1N0b3JlLmggKi87IH07CisJCTk3MTJBNUU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNw
cCAqLzsgfTsKKwkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rpbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThG
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi87IH07CisJCTk3MTJBNUU5
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyog
SURCT2JqZWN0U3RvcmUuY3BwICovOyB9OworCQk5NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyog
SURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9
OworCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87
IH07CisJCTk3MTJBNUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU5NDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9
OworCQk5NzEyQTVFRTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU5NTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmggKi87IH07CisJCTk3MTJBNUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTk2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmNwcCAqLzsgfTsKKwkJOTcxMkE1RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRp
bmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmggKi87IH07CisJCTk3MTJBNUYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJS
ZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTk4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJOTcx
MkE1RjIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk5MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJSZXF1ZXN0LmggKi87IH07CisJCTk3MTJBNUY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFj
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU5QjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhY2luZy5oICovOyB9OworCQk5NzEyQTVGNTE1
MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKKwkJOTcxMkE1RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsK
KwkJOTcxMkE1RjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwICovOyB9
OworCQk5NzEyQTVGOTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLzsgfTsK
KwkJOTcxMkE1RkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1QTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
ICovOyB9OworCQk5NzEyQTVGQjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNUEyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oICovOyB9
OworCQk5NzEyQTVGQzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTVBMzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87
IH07CisJCTk3MTJBNUZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTVBNDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9
OworCQk5NzEyQTVGRTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE1
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovOyB9OworCQk5
NzEyQTVGRjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBNjE1MDA0RURB
MDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi87IH07CisJCTk3MTJBNjAxMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBODE1MDA0RURBMDA0OEFG
MTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwICovOyB9OworCQk5NzEyQTYwMjE1MDA0
RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE5MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oICovOyB9OworCQk5NzEyQTYwNDE1MDA0RURBMDA0
OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQ
YWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwICovOyB9OworCQk5NzEyQTYwNTE1MDA0RURBMDA0
OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBQzE1MDA0RURBMDA0OEFGMTAgLyogUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlLmggKi87IH07CiAJCTk3MjA1QUFGMTIzOTI4Q0EwMEIxNzM4
MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzIwNUFBRDEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0
b3J5RG9jdW1lbnQuY3BwICovOyB9OwogCQk5NzIwNUFCMDEyMzkyOENBMDBCMTczODAgLyogRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MjA1QUFFMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVu
dC5oICovOyB9OwogCQk5NzIwNUFCNTEyMzkyOTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzIwNUFC
MTEyMzkyOTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgKi87IH07CkBAIC0zNDE5LDcg
KzM0ODcsNiBAQAogCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc3RTJFMEMxMkYw
RkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCAqLzsgfTsKIAkJOTc4QUQ2NzQxNDEzMEE4RDAw
QzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhBRDY3MTE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5F
bGVtZW50LmNwcCAqLzsgfTsKIAkJOTc4QUQ2NzUxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFu
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTc4QUQ2NzIxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5oICovOyB9OwotCQk5
NzhEMDdCMjE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4RDA3QjExNDVBMEVC
RDAwOTY5MDhEIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJOTc4RDA3QjQx
NDVBMEVDRDAwOTY5MDhEIC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCMzE0NUEwRUNEMDA5NjkwOEQgLyogU1FM
RXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJOTc4RDA3QjYxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVF
eGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTc4RDA3QjUxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRpb24uY3BwICovOyB9Owog
CQk5NzhEMDdCODE0NUEwRjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhE
MDdCNzE0NUEwRjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAg
Ki87IH07CkBAIC01MDAzLDEzICs1MDcwLDggQEAKIAkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0
IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI1RDMxREY4MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxs
YmFjay5jcHAgKi87IH07CiAJCUI1RDMxREZCMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggKi87IH07CiAJ
CUI1RDM2MDFBMTEyRjhCNTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQzNjAxOTExMkY4QjU2MDA0
OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oICovOyB9OwotCQlCNjE3NjI1NDEyMDMzNzRGMDBF
RjkxMTQgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjE3NjI1MzEyMDMzNzRGMDBFRjkxMTQgLyog
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07Ci0JCUI2MTc2MjYyMTIwMzQ5MDgw
MEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjE3NjI2MTEyMDM0OTA4MDBFRjkxMTQgLyogSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oICovOyB9OwotCQlCNjU2NjI2QTEyMEIxMTVBMDA2RUE4NUMg
LyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNw
cCAqLzsgfTsKLQkJQjY1NjYyNkIxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2ODEy
MEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKIAkJQjY1NjYyNzAxMjBC
MTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lE
QlRyYW5zYWN0aW9uLmggKi87IH07CiAJCUI2NTY2MjcxMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lE
QlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAq
LzsgfTsKLQkJQjY5MUMxRjkxMjA2RDRBMDAwMjVEOTgwIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkEzMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07CiAJCUI3MUZFNkRGMTEwOTFDQjMw
MERBRUY3NyAvKiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNzM0
QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjczNEIxODAxMTlCOTkxMTAwNjU4N0JE
IC8qIEZvbnRUcmFuc2NvZGVyLmNwcCAqLzsgfTsKIAkJQjczNEIxODMxMTlCOTkxRDAwNjU4N0JE
IC8qIEZvbnRUcmFuc2NvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNzM0QjE4MjExOUI5OTFEMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCAq
LzsgfTsKQEAgLTU1NDgsMTEgKzU2MTAsNiBAQAogCQlDNTU2MTBGMTExQTcwNEVCMDBCODJEMjcg
LyogRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAg
Ki87IH07CiAJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4
QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IH07CiAJCUM1
NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVE
MDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwotCQlDNTcyRUUwQTEy
MDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MkVFMDQxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4
LmNwcCAqLzsgfTsKLQkJQzU3MkVFMEIxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNTEyMDFD
NzM2MDA3RDhGODIgLyogSURCSW5kZXguaCAqLzsgfTsKLQkJQzU3MkVFMEQxMjAxQzczNjAwN0Q4
RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MkVFMDcxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4
QmFja2VuZEltcGwuY3BwICovOyB9OwotCQlDNTcyRUUwRTEyMDFDNzM2MDA3RDhGODIgLyogSURC
SW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU3MkVFMDgxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwu
aCAqLzsgfTsKLQkJQzU3MkVFMEYxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU3MkVFMDkxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oICov
OyB9OwogCQlDNTcyRUUxRTEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUxQzEyMDFDOUJD
MDA3RDhGODIgLyogSlNJREJJbmRleC5jcHAgKi87IH07CiAJCUM1NzJFRTFGMTIwMUM5QkMwMDdE
OEY4MiAvKiBKU0lEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovOyB9
OwogCQlDNTdGRURFMTEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTdGRURFMDEyMTJFRTlDMDA5
N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi87IH07CkBAIC01NTc4LDMwICs1NjM1LDYgQEAKIAkJ
QzU4NUE2OTExMUQ0RkIwODAwNEMzRTRCIC8qIEpTSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2NzkxMUQ0RkIwNzAwNEMzRTRC
IC8qIEpTSURCUmVxdWVzdC5oICovOyB9OwogCQlDNTg1QTY5NjExRDRGQjEzMDA0QzNFNEIgLyog
SlNJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNjk0MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuY3BwICovOyB9
OwogCQlDNTg1QTY5NzExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY5NTExRDRGQjEzMDA0
QzNFNEIgLyogSlNJREJGYWN0b3J5LmggKi87IH07Ci0JCUM1ODVBNkNDMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU4NUE2OTgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgKi87IH07Ci0JCUM1
ODVBNkNEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJB
bnkuaCAqLzsgfTsKLQkJQzU4NUE2Q0YxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkNhbGxiYWNrcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OUIx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkNhbGxiYWNrcy5oICovOyB9OwotCQlDNTg1QTZEMTExRDRG
QjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OUQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRh
dGFiYXNlRXJyb3IuaCAqLzsgfTsKLQkJQzU4NUE2RDMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRh
dGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNTg1QTY5RjExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
aCAqLzsgfTsKLQkJQzU4NUE2RDUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU4NUE2QTExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICov
OyB9OwotCQlDNTg1QTZEODExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkE0MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJEYXRhYmFzZS5oICovOyB9OwotCQlDNTg1QTZFNjExRDRGQjNEMDA0QzNF
NEIgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwICovOyB9OwotCQlD
NTg1QTZFNzExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCMzExRDRGQjNEMDA0QzNFNEIgLyogSURC
S2V5LmggKi87IH07Ci0JCUM1ODVBNkU5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZC
NTExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuY3BwICovOyB9OwotCQlDNTg1QTZFQTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkI2MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlS
YW5nZS5oICovOyB9OwotCQlDNTg1QTZFRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3Rv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVB
NkI5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9OwotCQlDNTg1QTZF
RTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCQTExRDRGQjNE
MDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCUM1ODVB
NkVGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCQjExRDRGQjNE
MDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9OwotCQlDNTg1QTZG
MDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKLQkJQzU4NUE2RjExMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QkQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oICovOyB9OwotCQlDNTg1QTZGMzExRDRGQjNEMDA0
QzNFNEIgLyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTg1QTZCRjExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5jcHAg
Ki87IH07Ci0JCUM1ODVBNkY0MTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDMDExRDRGQjNE
MDA0QzNFNEIgLyogSURCUmVxdWVzdC5oICovOyB9OwotCQlDNTg1QTZGOTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QzUxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLzsgfTsKLQkJQzU4NUE2RkExMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDNjExRDRGQjNEMDA0QzNFNEIgLyog
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKLQkJQzU4NUE2RkIxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDNzExRDRGQjNEMDA0QzNFNEIgLyogSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJQzU4NUE2RkMxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QzgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oICovOyB9OwotCQlDNTg1QTZGRDExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFj
dG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTg1QTZDOTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5jcHAgKi87IH07Ci0JCUM1ODVB
NkZFMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDQTExRDRGQjNEMDA0QzNFNEIgLyogSURC
RmFjdG9yeS5oICovOyB9OwogCQlDNTk4OTAyRTE0RTlCMEY4MDBFOEQxOEIgLyogUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzVGNzY1QkExNEUxRUNGNDAwNkM4OTlCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5t
bSAqLzsgfTsKIAkJQzU5ODkwNTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVn
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVGNzY1
QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM1OTg5MDU4MTRFOUMyOTkwMEU4
RDE4QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1QkFDMTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBh
c3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNTkwMCw3ICs1OTMzLDYgQEAKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJl
bmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsgfTsKIAkJRTRE
Njg3NzcwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3NjBFRDdBRTNEMDA2
RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLzsgfTsKIAkJRTRENjg3NzkwRUQ3QUU0
RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJs
ZUJ1ZmZlci5oICovOyB9OwotCQlFQjQ5REI4RjE0RjQ2RThCMDAyMjk5RDkgLyogSURCVHJhY2lu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI0OURC
OEUxNEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRyYWNpbmcuaCAqLzsgfTsKIAkJRUQyQkE4M0MwOUEy
NEI5MTAwNkMwQUM0IC8qIERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDJCQTgzQjA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1l
bnRNYXJrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFRDUwMURDNjBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1MDFEQzUwQjI0OUYyOTAwQUUx
OEQ5IC8qIEVkaXRvck1hYy5tbSAqLzsgfTsKIAkJRURFM0E1MDAwQzdBNDMwNjAwOTU2QTM3IC8q
IENvbG9yTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODg0NSwxOCArODg3NywxMiBAQAog
CQk4MDlERDFERTEzMERFMkFEMDBDQUUzRUQgLyogQ1NTU3R5bGVBcHBseVByb3BlcnR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1N0eWxlQXBwbHlQcm9wZXJ0eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MTAyQzU4NzEzMjVCQjExMDBEREU2N0EgLyog
U3RyaW5nQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RyaW5nQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MTVFNjE2
NjEzMjU4N0FBMDBCNjIyQjAgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8qIElEQkN1cnNv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI3NzEyMTAxOUUxMDBGQzBEOUUg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCQ3Vyc29yQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODFBQzU5OTcxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MUFDNTk5ODEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVy
SXRlbUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVRyYW5zZmVy
SXRlbUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFBQzVBRTgxMzE2Mzky
RTAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IERhdGFUcmFuc2Zlckl0ZW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUFD
NUFFOTEzMTYzOTJFMDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IERhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODFBQzZDMzQxMzFDNTdDMjAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNr
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTdHJpbmdDYWxsYmFjay5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQUM2QzM1MTMxQzU3RDMwMDA5QTdFMCAvKiBTdHJpbmdD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDYWxsYmFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUJFMjA5MzExRjRBQjhEMDA5MTVE
RkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgxQkUyMDlDMTFG
NEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElE
QkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMEE3MTFGNEI2
NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MUY2NUZGNTEzNzg4RkFBMDBGRjZGMkQgLyogRHJhZ1N0YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAxNzUsNiArMTAyMDEsOTUgQEAKIAkJOTcxMTQ2MDAxNEVGMDA5QTAwNjc0
RkQ5IC8qIE5hdmlnYXRvckdlb2xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE5hdmlnYXRvckdlb2xvY2F0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvZ2Vv
bG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzExNDYwMTE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmF2aWdhdG9yR2VvbG9jYXRpb24u
aDsgcGF0aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMTQ2MDIxNEVGMDA5QTAwNjc0RkQ5IC8qIE5h
dmlnYXRvckdlb2xvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBOYXZpZ2F0b3JH
ZW9sb2NhdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xv
Y2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NTQxNTAwNEVE
QTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
T01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU1NjE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJBbnkuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1NTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJBbnkuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkFueS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1OTE1MDA0RURBMDA0
OEFGMTAgLyogSURCQW55LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJBbnkuaWRsOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkNhbGxiYWNrcy5oOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yLmNwcDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUUxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQ3Vyc29y
LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTYwMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1NjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2MjE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3MTJBNTY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5pZGw7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRGF0YWJhc2Uu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2UuaDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2OTE1MDA0RURBMDA0OEFGMTAgLyog
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5j
cHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2RDE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlRXJyb3IuaDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1NkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlRXJyb3IuaWRsOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTcwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTcxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1NzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTczMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRXZlbnREaXNwYXRj
aGVyLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCRXZlbnREaXNwYXRjaGVyLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERp
c3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzUxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCRmFjdG9yeS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzYxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCRmFjdG9yeS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3NzE1MDA0RURBMDA0OEFGMTAgLyogSURC
RmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRmFjdG9yeS5pZGw7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzkxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU3QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3QjE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJ
bmRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJbmRleC5j
cHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleC5oOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBJREJJbmRleC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IElEQkluZGV4QmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4QmFja2VuZEltcGwuaDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4MjE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IElEQktleS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURC
S2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleS5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTg0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IElEQktleS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4NTE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJL
ZXlQYXRoLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4NjE1MDA0RURBMDA0OEFGMTAgLyogSURC
S2V5UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXlQYXRoLmg7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3MTJBNTg3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2Vu
ZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNr
ZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg4MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQktleVJhbmdlLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleVJhbmdlLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU4QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IElEQktleVJhbmdlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJh
bmdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OEMxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNr
aW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RTE1MDA0RURBMDA0
OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5nLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJDb2RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU4RjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5nLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTkwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5jcHA7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5pZGw7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk0MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU5NjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJQ
ZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU5NzE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk4MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IElEQlJlcXVlc3QuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IElEQlJlcXVlc3QuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OUExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlJlcXVlc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQlJlcXVlc3QuaWRsOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYWNpbmcuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1OUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NzEyQTU5RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTAxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBMTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNUEyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxi
YWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNh
bGxiYWNrcy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFj
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTVBNTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBNjE1MDA0RURBMDA0OEFGMTAgLyogSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QlZlcnNpb25DaGFuZ2VFdmVudC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTVBODE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBOTE1MDA0RURB
MDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNUFBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
aWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBQjE1MDA0RURBMDA0OEFGMTAg
LyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHA7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTVBQzE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBhZ2VHcm91cElu
ZGV4ZWREYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MjA1QUFEMTIzOTI4
Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3MjA1QUFFMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3Rv
cnlEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGVFBEaXJlY3Rv
cnlEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzIwNUFCMTEyMzky
OTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZURvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwMzAzLDcgKzEwNDE4LDYgQEAKIAkJOTc4QUQ2NzExNDEzMEE4RDAwQzdDQUUzIC8q
IEhUTUxTcGFuRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVE1MU3BhbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhB
RDY3MjE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxTcGFuRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzhBRDY3MzE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MU3BhbkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5NzhEMDdCMTE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJh
c2VFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhE
MDdCMzE0NUEwRUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3OEQwN0I1MTQ1QTBGMDMwMDk2OTA4RCAvKiBGaWxlRXhjZXB0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVFeGNlcHRpb24uY3Bw
OyBwYXRoID0gZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTc4RDA3QjcxNDVBMEYxQjAwOTY5MDhEIC8qIE9wZXJhdGlvbk5vdEFsbG93ZWRF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlcmF0
aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHA7IHBhdGggPSBmaWxlYXBpL09wZXJhdGlvbk5vdEFs
bG93ZWRFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE5NDcs
MTIgKzEyMDYxLDYgQEAKIAkJQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNh
bGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFjdGl2ZURP
TUNhbGxiYWNrLmNwcDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0
aXZlRE9NQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWN0aXZl
RE9NQ2FsbGJhY2suaDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFi
YXNlQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VD
YWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNjE3NjI1MzEyMDMzNzRG
MDBFRjkxMTQgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCNjE3NjI2MTEyMDM0OTA4MDBFRjkxMTQgLyogSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NTY2
MjY3MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUI2NTY2MjY4MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNjU2NjI2OTEyMEIxMTVBMDA2RUE4NUMgLyog
SURCVHJhbnNhY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQlRyYW5zYWN0aW9u
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYyNkQxMjBCMTE2QjAwNkVB
ODVDIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjY1NjYyNkUxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURC
VHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJUcmFu
c2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjU2NjI2RjEyMEIxMjI3
MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZvbnRUcmFuc2NvZGVyLmNwcDsg
cGF0aCA9IHRyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI1MzAsMTIgKzEyNjM4LDYgQEAKIAkJQzU1NjEwRjAxMUE3MDRFQjAwQjgy
RDI3IC8qIERPTVN0cmluZ0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRE9NU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1
NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NTcyRUUwNDEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNTcyRUUwNTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzU3MkVFMDYxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBJREJJbmRleC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM1NzJFRTA3MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4QmFja2VuZEltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTcyRUUwODEyMDFDNzM2MDA3RDhG
ODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJJbmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUM1NzJFRTA5MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzJFRTFDMTIwMUM5QkMwMDdEOEY4
MiAvKiBKU0lEQkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTcyRUUxRDEy
MDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1N0ZF
REUwMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTI1NjEsNDAgKzEyNjYzLDYgQEAKIAkJQzU4NUE2NzkxMUQ0RkIwNzAwNEMzRTRC
IC8qIEpTSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lE
QlJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2OTQxMUQ0RkIx
MzAwNEMzRTRCIC8qIEpTSURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0lEQkZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTg1QTY5NTExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDNTg1QTY5ODExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkFueS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM1ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1ODVBNjlBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IElEQkFueS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM1ODVBNjlCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJDYWxsYmFja3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1ODVBNjlEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUUxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkRhdGFiYXNlRXJyb3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNl
RXJyb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTY5RjExRDRGQjNE
MDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSURCRGF0YWJhc2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzU4NUE2QTAxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9u
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkExMTFENEZCM0QwMDRDM0U0QiAvKiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNTg1QTZBMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZBNDExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0
YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QTUxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkRhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJEYXRhYmFzZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCS2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjMxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQktleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjQxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQktleS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCS2V5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktl
eVJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQktleVJh
bmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjYxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkI3MTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
SURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCOTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzU4NUE2QkExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkJCMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9i
amVjdFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9i
amVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkQxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkUxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJPYmplY3RT
dG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkJGMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1
QTZDMDExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUM1ODVBNkMxMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBJREJSZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzU4NUE2QzUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzYxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkM3MTFENEZCM0QwMDRDM0U0QiAvKiBJREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzU4NUE2QzgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzkxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkNBMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2Q0Ix
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IElEQkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUJBQzE2RjE0
RTMwRTQ3MDAwMDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoTWV0cmljc01hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyOTUyLDcgKzEzMDIwLDYgQEAKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc2MEVEN0FFM0QwMDZF
QTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXJnZWFibGVCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRUI0OURCOEUxNEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRy
YWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhY2luZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFRDJCQTgzQjA5QTI0QjkxMDA2QzBBQzQgLyog
RG9jdW1lbnRNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1l
bnRNYXJrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQ1MDFEQzUwQjI0OUYy
OTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBFZGl0b3JNYWMubW07IHBhdGggPSBtYWMvRWRpdG9yTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JNYWMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTE2LDYwICsxMzk4Myw2IEBACiAJCQkJQThGNDU3
OUQxNEJDMTNFQzAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCAqLywKIAkJCQlB
OEY0NTc5RTE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaCAqLywKIAkJ
CQlBOEY0NTc5RjE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsICov
LAotCQkJCUM1ODVBNjk4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuY3BwICovLAotCQkJCUM1
ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLywKLQkJCQlDNTg1QTY5QTExRDRG
QjNEMDA0QzNFNEIgLyogSURCQW55LmlkbCAqLywKLQkJCQlDNTg1QTY5QjExRDRGQjNEMDA0QzNF
NEIgLyogSURCQ2FsbGJhY2tzLmggKi8sCi0JCQkJODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8q
IElEQkN1cnNvci5jcHAgKi8sCi0JCQkJODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1
cnNvci5oICovLAotCQkJCTgxQkUyMDlDMTFGNEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRs
ICovLAotCQkJCTgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHAgKi8sCi0JCQkJODFBNzMyNzcxMjEwMTlFMTAwRkMwRDlFIC8qIElEQkN1cnNvckJhY2tl
bmRJbXBsLmggKi8sCi0JCQkJODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlDNTg1QTZBMzExRDRGQjNEMDA0QzNFNEIgLyogSURC
RGF0YWJhc2UuY3BwICovLAotCQkJCUM1ODVBNkE0MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRh
YmFzZS5oICovLAotCQkJCUM1ODVBNkE1MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5p
ZGwgKi8sCi0JCQkJQzU4NUE2QTExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwICovLAotCQkJCUI2MTc2MjYxMTIwMzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmggKi8sCi0JCQkJQjYxNzYyNTMxMjAzMzc0RjAwRUY5MTE0IC8qIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovLAotCQkJCUM1ODVBNjlEMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJEYXRhYmFzZUVycm9yLmggKi8sCi0JCQkJQzU4NUE2OUUxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQkRhdGFiYXNlRXJyb3IuaWRsICovLAotCQkJCTk3OEQwN0IxMTQ1QTBFQkQwMDk2OTA4
RCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8sCi0JCQkJQzU4NUE2OUYxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi8sCi0JCQkJQzU4NUE2QTAxMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLywKLQkJCQlDNTg1QTZDOTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5jcHAgKi8sCi0JCQkJQzU4NUE2Q0ExMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCAqLywKLQkJCQlDNTg1QTZDQjExRDRGQjNEMDA0QzNF
NEIgLyogSURCRmFjdG9yeS5pZGwgKi8sCi0JCQkJQzU4NUE2QzcxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJQzU4NUE2QzgxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1ODVBNkM1MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi8sCi0JCQkJQzU4NUE2
QzYxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi8sCi0J
CQkJQzU3MkVFMDQxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmNwcCAqLywKLQkJCQlDNTcy
RUUwNTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguaCAqLywKLQkJCQlDNTcyRUUwNjEyMDFD
NzM2MDA3RDhGODIgLyogSURCSW5kZXguaWRsICovLAotCQkJCUM1NzJFRTA3MTIwMUM3MzYwMDdE
OEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQlDNTcyRUUwODEyMDFDNzM2
MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1NzJFRTA5MTIwMUM3
MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlDNTg1QTZC
MjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmNwcCAqLywKLQkJCQlDNTg1QTZCMzExRDRGQjNE
MDA0QzNFNEIgLyogSURCS2V5LmggKi8sCi0JCQkJQzU4NUE2QjQxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQktleS5pZGwgKi8sCi0JCQkJQzU4NUE2QjUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJh
bmdlLmNwcCAqLywKLQkJCQlDNTg1QTZCNjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2Uu
aCAqLywKLQkJCQlDNTg1QTZCNzExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaWRsICov
LAotCQkJCUM1ODVBNkJDMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8s
Ci0JCQkJQzU4NUE2QjkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmggKi8sCi0J
CQkJQzU4NUE2QkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLywKLQkJ
CQlDNTg1QTZCQTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAgKi8sCi0JCQkJQzU4NUE2QkIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCAqLywKLQkJCQlDNTg1QTZCRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8sCi0JCQkJQzU4NUE2QkYxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQlJlcXVlc3QuY3BwICovLAotCQkJCUM1ODVBNkMwMTFENEZCM0QwMDRDM0U0QiAvKiBJ
REJSZXF1ZXN0LmggKi8sCi0JCQkJQzU4NUE2QzExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVl
c3QuaWRsICovLAotCQkJCUVCNDlEQjhFMTRGNDZFOEIwMDIyOTlEOSAvKiBJREJUcmFjaW5nLmgg
Ki8sCi0JCQkJQjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAq
LywKLQkJCQlCNjU2NjI2ODEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCAqLywK
LQkJCQlCNjU2NjI2OTEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaWRsICovLAot
CQkJCUI2NTY2MjZEMTIwQjExNkIwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UuaCAqLywKIAkJCQk1MUE5MjY3ODBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFN
YW5hZ2VyLmNwcCAqLywKIAkJCQk1MUE5MjY3OTBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVv
dGFNYW5hZ2VyLmggKi8sCiAJCQkJNTFBOTI2N0EwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVz
YWdlUmVjb3JkLmNwcCAqLywKQEAgLTE3MDY0LDYgKzE3MDc3LDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJOTcxMTQ1RkYxNEVGMDA3OTAwNjc0RkQ5IC8qIGdl
b2xvY2F0aW9uICovLAorCQkJCTk3MTJBNTUzMTUwMDRFM0MwMDQ4QUYxMCAvKiBpbmRleGVkZGIg
Ki8sCiAJCQkJOTdBQUJDRjcxNEZBMDlCNTAwNzQ1N0FFIC8qIHdlYnNvY2tldHMgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IE1vZHVsZXM7CkBAIC0xNzA5NSw2ICsxNzEwOSwxMDIgQEAKIAkJCW5hbWUg
PSBnZW9sb2NhdGlvbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTk3MTJB
NTUzMTUwMDRFM0MwMDQ4QUYxMCAvKiBpbmRleGVkZGIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwICovLAorCQkJCTk3MTJBNTU1MTUwMDRFREEwMDQ4QUYx
MCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCAqLywKKwkJCQk5NzEyQTU1NjE1MDA0RURB
MDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLywKKwkJCQk5NzEyQTU1
NzE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCAqLywKKwkJCQk5NzEyQTU1ODE1MDA0RURB
MDA0OEFGMTAgLyogSURCQW55LmggKi8sCisJCQkJOTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkFueS5pZGwgKi8sCisJCQkJOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tp
bmdTdG9yZS5oICovLAorCQkJCTk3MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFj
a3MuaCAqLywKKwkJCQk5NzEyQTU1QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCAq
LywKKwkJCQk5NzEyQTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi8sCisJCQkJ
OTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5pZGwgKi8sCisJCQkJOTcxMkE1
NUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5
NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLywKKwkJ
CQk5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
ICovLAorCQkJCTk3MTJBNTYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUu
Y3BwICovLAorCQkJCTk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuaCAqLywKKwkJCQk5NzEyQTU2NDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZh
bHVlLmlkbCAqLywKKwkJCQk5NzEyQTU2NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2Uu
Y3BwICovLAorCQkJCTk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICov
LAorCQkJCTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCisJ
CQkJOTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
ICovLAorCQkJCTk3MTJBNTY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmggKi8sCisJCQkJOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oICovLAorCQkJCTk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrcy5oICovLAorCQkJCTk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovLAorCQkJCTk3MTJBNTZEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLywKKwkJCQk5NzEyQTU2RTE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFcnJvci5oICovLAorCQkJCTk3MTJBNTZGMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9yLmlkbCAqLywKKwkJCQk5NzEyQTU3MDE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovLAorCQkJCTk3MTJBNTcx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovLAorCQkJCTk3MTJB
NTcyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwgKi8sCisJCQkJ
OTcxMkE1NzMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJ
CQkJOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovLAor
CQkJCTk3MTJBNTc1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmNwcCAqLywKKwkJCQk5
NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovLAorCQkJCTk3MTJBNTc3
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAqLywKKwkJCQk5NzEyQTU3ODE1MDA0
RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU3
OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcx
MkE1N0ExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAq
LywKKwkJCQk5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCAqLywKKwkJCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3Bw
ICovLAorCQkJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovLAorCQkJ
CTk3MTJBNTdFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5pZGwgKi8sCisJCQkJOTcxMkE1
N0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3
MTJBNTgwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8sCisJCQkJ
OTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oICov
LAorCQkJCTk3MTJBNTgyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovLAorCQkJCTk3
MTJBNTgzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCAqLywKKwkJCQk5NzEyQTU4NDE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5LmlkbCAqLywKKwkJCQk5NzEyQTU4NTE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UGF0aC5jcHAgKi8sCisJCQkJOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleVBhdGguaCAqLywKKwkJCQk5NzEyQTU4NzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UGF0aEJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU4ODE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UGF0aEJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleVJhbmdlLmNwcCAqLywKKwkJCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UmFuZ2UuaCAqLywKKwkJCQk5NzEyQTU4QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UmFuZ2UuaWRsICovLAorCQkJCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcCAqLywKKwkJCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oICovLAorCQkJCTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLywKKwkJCQk5NzEyQTU4RjE1MDA0RURBMDA0OEFGMTAg
LyogSURCTGV2ZWxEQkNvZGluZy5oICovLAorCQkJCTk3MTJBNTkwMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJPYmplY3RTdG9yZS5jcHAgKi8sCisJCQkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlLmggKi8sCisJCQkJOTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElE
Qk9iamVjdFN0b3JlLmlkbCAqLywKKwkJCQk5NzEyQTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8sCisJCQkJOTcxMkE1OTQxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU5NTE1MDA0
RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJ
OTcxMkE1OTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
Y3BwICovLAorCQkJCTk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmggKi8sCisJCQkJOTcxMkE1OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJl
cXVlc3QuY3BwICovLAorCQkJCTk3MTJBNTk5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0
LmggKi8sCisJCQkJOTcxMkE1OUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaWRsICov
LAorCQkJCTk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8sCisJCQkJ
OTcxMkE1OUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk5
NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLywKKwkJCQk5NzEy
QTU5RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICovLAorCQkJCTk3MTJB
NTlGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCAqLywK
KwkJCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oICovLAorCQkJCTk3MTJBNUExMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCAqLywKKwkJCQk5NzEyQTVBMjE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25DYWxsYmFja3MuaCAqLywKKwkJCQk5NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJOTcxMkE1QTQxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk5NzEyQTVB
NTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKKwkJCQk5
NzEyQTVBNjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJ
CQkJOTcxMkE1QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwg
Ki8sCisJCQkJOTcxMkE1QTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0LmNwcCAqLywKKwkJCQk5NzEyQTVBOTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaCAqLywKKwkJCQk5NzEyQTVBQTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuaWRsICovLAorCQkJCTk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAv
KiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwICovLAorCQkJCTk3MTJBNUFDMTUwMDRFREEw
MDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCAqLywKKwkJCSk7CisJCQluYW1l
ID0gaW5kZXhlZGRiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJOTc2RDZD
NTcxMjJCOEExODAwMUZEMUY3IC8qIGZpbGVhcGkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMTk5NDEsOCArMjAwNTEsOCBAQAogCQkJCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEw
MEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQkwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEg
LyogU2Nyb2xsYmFyVGhlbWUuY3BwICovLAotCQkJCUM2OTE2MTQ3MTRGNkVCQTcwMDQ2Mzc1QyAv
KiBTY3JvbGxiYXJUaGVtZUNsaWVudC5oICovLAogCQkJCUJDOEI4NTRBMEU3QzdGNTYwMEFCNjk4
NCAvKiBTY3JvbGxiYXJUaGVtZS5oICovLAorCQkJCUM2OTE2MTQ3MTRGNkVCQTcwMDQ2Mzc1QyAv
KiBTY3JvbGxiYXJUaGVtZUNsaWVudC5oICovLAogCQkJCUJDMTQwMjg4MEU4MzY4MDgwMDMxOTcx
NyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgKi8sCiAJCQkJQkMxNDAyODkwRTgzNjgw
ODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi8sCiAJCQkJOTNDMDlDODUw
QjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggKi8sCkBAIC0yMjIyMiw2ICsyMjMzMiw3
IEBACiAJCQkJODVDN0Y1RTcwQUFGQkFGQjAwNDAxNEREIC8qIERPTVdoZWVsRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1OTg5REQxMEFDQzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAv
KiBET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUFFMTUwMDRFREEwMDQ4QUYx
MCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RDJB
RDA0MTRCODIzQTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThGNDU3QTExNEJDMUE5NDAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGMzVBRTVBQzE0OTI1RjVCMDA0RDU3NzYgLyogRE9NV3JhcHBl
clZpc2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjI1OTUsMzEgKzIyNzA2LDQ3IEBACiAJCQkJ
NTEzRjE0NTQwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzU4NUE2Q0QxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzU4NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkNGMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTgxQTczMjVFMTIxMDE4OUIwMEZD
MEQ5RSAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTgxQTczMjc4MTIxMDE5RTEw
MEZDMEQ5RSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODFC
RTIwOTkxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUM1ODVBNkQ4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQjYxNzYyNjIxMjAzNDkwODAwRUY5MTE0IC8qIElEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUI2MTc2MjU0MTIwMzM3NEYwMEVG
OTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUM1ODVBNkQxMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlDNTg1QTZEMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRp
b24uaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkZFMTFENEZCM0QwMDRDM0U0QiAvKiBJREJG
YWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGQzExRDRGQjNEMDA0QzNFNEIgLyog
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGQTExRDRG
QjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCUM1NzJFRTBCMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzU3MkVFMEUxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwu
aCBpbiBIZWFkZXJzICovLAotCQkJCUM1NzJFRTBGMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkU3MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkVBMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RUQxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1
QTZFRjExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQzU4NUE2RjExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RjQxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUVCNDlEQjhGMTRGNDZF
OEIwMDIyOTlEOSAvKiBJREJUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNjU2NjI2QjEy
MEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCTk3MTJBNUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk3MTJBNUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUJDMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJB
NUJGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1QzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk3MTJBNUMzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUM0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1
QzYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTcxMkE1QzcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUNBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0Yx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJB
NUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVEOTE1MDA0RURBMDA0OEFGMTAg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1REExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3MTJBNUUxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZElt
cGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUU4MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk3MTJBNUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVFRTE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVG
MDE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTcxMkE1RjIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTk3MTJBNUY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5n
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGNjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUY5MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVG
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5NzEyQTVGQjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rp
b25DYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUZEMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEy
QTVGRjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5NzEyQTYwMjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzFENTdDMEYzMzgxOTAwMEY5Q0U0RSAvKiBJ
ZGVudGlmaWVyUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTEzQTI0MjEzRDQ5RUJBMDBGNUIw
NUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTFDNTBF
Rjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMjM0MTgsNiArMjM1NDUsNyBAQAogCQkJCUYzODIwODkzMTQ3RDM1RjkwMDEwQkMw
NiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJERDEzNDM2
MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
MDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3MTJBNjA1MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBNjc0QkRDMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBM
b2FkRGVmZXJyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODk1MTQ3RDM1RjkwMDEwQkMw
NiAvKiBQYWdlUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJFNTEzNDM2
MzNDMDA1MzFCQzIgLyogUGFnZVNjcmlwdERlYnVnU2VydmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzE3LDggKzIzODQ1LDggQEAKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Ny
b2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QjgwODI0
NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzZCMzFCMkUx
NEY4NDFGQjAwODlGMjNGIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUM2QjMxQjJFMTRGODQxRkIwMDg5RjIzRiAvKiBTY3JvbGxiYXJUaGVtZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODUzRTBFN0M3
RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtMjUzMzcsNiArMjU0NjUsNyBAQAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZF
NSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3
RjVFODBBQUZCQUZCMDA0MDE0REQgLyogRE9NV2hlZWxFdmVudC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTE0MDNCOTk4MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1QUQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0QyQUQwMzE0QjgyM0E2MDA5M0RGMzIgLyog
RE9NV2luZG93UHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThGNDU3QTAxNEJDMUE4
ODAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNTNEQTQ4MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNTY1NywyNCArMjU3ODYsMzYgQEAKIAkJCQlCMjc1MzU4RTBCMDUzQTY2MDAy
Q0U2NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQw
MERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MDk5QzQxMTM3
MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkND
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1
QjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1
QTY2MjExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk4MUE3MzI2MDEyMTAxOEE0MDBGQzBEOUUgLyogSURCQ3Vyc29yLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTgxQkUyMDk4MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNjkxQzFGOTEyMDZENEEwMDAyNUQ5ODAg
LyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RDUxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTc4RDA3QjIxNDVBMEVCRDAwOTY5MDhEIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUM1ODVBNkZEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkZCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RjkxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUM1NzJFRTBBMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlDNTcyRUUwRDEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZFNjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkU5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJL
ZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZGMDExRDRGQjNEMDA0QzNFNEIg
LyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RUUxMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzU4NUE2RjMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQjY1NjYyNkExMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUI1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUJCMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTcxMkE1QkUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTk3MTJBNUMxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUM1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QzkxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTk3MTJBNUNDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1Q0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rvcnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVEMzE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOTcxMkE1RDUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTk3MTJBNUQ4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBs
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNURCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1REUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTAxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVF
MjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJD
b2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUVDMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTk3MTJBNUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUY1MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVGODE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5NzEyQTVGQzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVGRTE1MDA0RURBMDA0OEFGMTAgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNjAxMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTcxRDU3QjBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1OTEzQTI0MTEzRDQ5RUJBMDBGNUIwNUMgLyogSWRlbnRpZmllcnNG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTZGMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NTYxLDYgKzI2NzAyLDcgQEAKIAkJCQlG
MzgyMDg5MjE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGMzQ3NDJEQzEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTYwNDE1MDA0RURBMDA0OEFGMTAgLyog
UGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNjc0QkRC
MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjM4MjA4OTQxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VSdW50aW1lQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSURCQW55LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkFueT4gSURCQW55OjpjcmVhdGVJ
bnZhbGlkKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueSgpKTsKLX0KLQotUGFz
c1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRlTnVsbCgpCi17Ci0gICAgUmVmUHRyPElEQkFu
eT4gaWRiQW55ID0gYWRvcHRSZWYobmV3IElEQkFueSgpKTsKLSAgICBpZGJBbnktPnNldE51bGwo
KTsKLSAgICByZXR1cm4gaWRiQW55LnJlbGVhc2UoKTsKLX0KLQotSURCQW55OjpJREJBbnkoKQot
ICAgIDogbV90eXBlKFVuZGVmaW5lZFR5cGUpCi17Ci19Ci0KLUlEQkFueTo6fklEQkFueSgpCi17
Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkK
LXsKLSAgICBBU1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBlKTsKLSAgICByZXR1cm4g
bV9kb21TdHJpbmdMaXN0OwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcj4gSURCQW55OjppZGJD
dXJzb3IoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQ3Vyc29yVHlwZSk7Ci0gICAgcmV0
dXJuIG1faWRiQ3Vyc29yOwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURC
QW55OjppZGJDdXJzb3JXaXRoVmFsdWUoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQ3Vy
c29yV2l0aFZhbHVlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiQ3Vyc29yV2l0aFZhbHVlOwotfQot
Ci1QYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBJREJBbnk6OmlkYkRhdGFiYXNlKCkKLXsKLSAgICBB
U1NFUlQobV90eXBlID09IElEQkRhdGFiYXNlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiRGF0YWJh
c2U7Ci19Ci0KLVBhc3NSZWZQdHI8SURCRmFjdG9yeT4gSURCQW55OjppZGJGYWN0b3J5KCkKLXsK
LSAgICBBU1NFUlQobV90eXBlID09IElEQkZhY3RvcnlUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJG
YWN0b3J5OwotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4PiBJREJBbnk6OmlkYkluZGV4KCkKLXsK
LSAgICBBU1NFUlQobV90eXBlID09IElEQkluZGV4VHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiSW5k
ZXg7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJBbnk6OmlkYktleSgpCi17Ci0gICAgQVNT
RVJUKG1fdHlwZSA9PSBJREJLZXlUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJLZXk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQotewotICAg
IEFTU0VSVChtX3R5cGUgPT0gSURCT2JqZWN0U3RvcmVUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJP
YmplY3RTdG9yZTsKLX0KLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCQW55OjppZGJU
cmFuc2FjdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJUcmFuc2FjdGlvblR5cGUp
OwotICAgIHJldHVybiBtX2lkYlRyYW5zYWN0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gSURCQW55OjpzZXJpYWxpemVkU2NyaXB0VmFsdWUoKQotewotICAgIEFT
U0VSVChtX3R5cGUgPT0gU2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZSk7Ci0gICAgcmV0dXJuIG1f
c2VyaWFsaXplZFNjcmlwdFZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0TnVsbCgpCi17Ci0g
ICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBOdWxsVHlw
ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVl
KQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0g
RE9NU3RyaW5nTGlzdFR5cGU7Ci0gICAgbV9kb21TdHJpbmdMaXN0ID0gdmFsdWU7Ci19Ci0KLXZv
aWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IHZhbHVlKQotewot
ICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCQ3Vy
c29yV2l0aFZhbHVlVHlwZTsKLSAgICBtX2lkYkN1cnNvcldpdGhWYWx1ZSA9IHZhbHVlOwotfQot
Ci12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQkN1cnNvclR5
cGU7Ci0gICAgbV9pZGJDdXJzb3IgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVm
aW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQkRhdGFiYXNlVHlwZTsKLSAgICBtX2lkYkRhdGFi
YXNlID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJGYWN0b3J5
PiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1f
dHlwZSA9IElEQkZhY3RvcnlUeXBlOwotICAgIG1faWRiRmFjdG9yeSA9IHZhbHVlOwotfQotCi12
b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCSW5kZXg+IHZhbHVlKQotewotICAgIEFTU0VS
VChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCSW5kZXhUeXBlOwot
ICAgIG1faWRiSW5kZXggPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRy
PElEQktleT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsK
LSAgICBtX3R5cGUgPSBJREJLZXlUeXBlOwotICAgIG1faWRiS2V5ID0gdmFsdWU7Ci19Ci0KLXZv
aWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdmFsdWUpCi17Ci0gICAg
QVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJUcmFuc2Fj
dGlvblR5cGU7Ci0gICAgbV9pZGJUcmFuc2FjdGlvbiA9IHZhbHVlOwotfQotCi12b2lkIElEQkFu
eTo6c2V0KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHZhbHVlKQotewotICAgIEFTU0VSVCht
X3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCT2JqZWN0U3RvcmVUeXBl
OwotICAgIG1faWRiT2JqZWN0U3RvcmUgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWVUeXBlOwotICAgIG1fc2VyaWFsaXplZFNjcmlwdFZhbHVlID0gdmFsdWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkFueS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkFueV9oCi0j
ZGVmaW5lIElEQkFueV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3Ry
aW5nTGlzdDsKLWNsYXNzIElEQkN1cnNvcjsKLWNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZTsKLWNs
YXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRmFjdG9yeTsKLWNsYXNzIElEQkluZGV4OwotY2xh
c3MgSURCS2V5OwotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsK
LWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCQW55IDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCQW55PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55
PiBjcmVhdGVJbnZhbGlkKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGVO
dWxsKCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJBbnk+IGNyZWF0ZShUKiBpZGJPYmplY3QpCi0gICAgewotICAgICAgICBSZWZQdHI8SURCQW55
PiBhbnkgPSBJREJBbnk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICAgICAgYW55LT5zZXQoaWRiT2Jq
ZWN0KTsKLSAgICAgICAgcmV0dXJuIGFueS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxUPiBpZGJPYmplY3QpCi0gICAgewotICAgICAgICBSZWZQdHI8SURCQW55PiBhbnkgPSBJ
REJBbnk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICAgICAgYW55LT5zZXQoaWRiT2JqZWN0KTsKLSAg
ICAgICAgcmV0dXJuIGFueS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIH5JREJBbnkoKTsKLQotICAg
IGVudW0gVHlwZSB7Ci0gICAgICAgIFVuZGVmaW5lZFR5cGUgPSAwLAotICAgICAgICBOdWxsVHlw
ZSwKLSAgICAgICAgRE9NU3RyaW5nTGlzdFR5cGUsCi0gICAgICAgIElEQkN1cnNvclR5cGUsCi0g
ICAgICAgIElEQkN1cnNvcldpdGhWYWx1ZVR5cGUsCi0gICAgICAgIElEQkRhdGFiYXNlVHlwZSwK
LSAgICAgICAgSURCRmFjdG9yeVR5cGUsCi0gICAgICAgIElEQkluZGV4VHlwZSwKLSAgICAgICAg
SURCS2V5VHlwZSwKLSAgICAgICAgSURCT2JqZWN0U3RvcmVUeXBlLAotICAgICAgICBJREJUcmFu
c2FjdGlvblR5cGUsCi0gICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUKLSAgICB9Owot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgLy8gVXNlIHR5
cGUoKSB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBvZiB0aGVzZSB5b3UncmUgYWxsb3dlZCB0byBj
YWxsLgotICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpOwotICAg
IFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBpZGJDdXJzb3IoKTsKLSAgICBQYXNzUmVmUHRyPElEQkN1
cnNvcldpdGhWYWx1ZT4gaWRiQ3Vyc29yV2l0aFZhbHVlKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZT4gaWRiRGF0YWJhc2UoKTsKLSAgICBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGlkYkZh
Y3RvcnkoKTsKLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCgpOwotICAgIFBhc3NS
ZWZQdHI8SURCS2V5PiBpZGJLZXkoKTsKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBp
ZGJPYmplY3RTdG9yZSgpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5z
YWN0aW9uKCk7Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSgpOwotCi0gICAgLy8gU2V0IGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLgot
ICAgIHZvaWQgc2V0TnVsbCgpOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAgdm9pZCBzZXQo
UGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlPik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJGYWN0b3J5Pik7Ci0g
ICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJJbmRleD4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQ
dHI8SURCS2V5Pik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pOwot
ICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+KTsKLSAgICB2b2lkIHNldChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwotCi1wcml2YXRlOgotICAgIElEQkFu
eSgpOwotCi0gICAgVHlwZSBtX3R5cGU7Ci0KLSAgICAvLyBPbmx5IG9uZSBvZiB0aGUgZm9sbG93
aW5nIHNob3VsZCBldmVyIGJlIGluIHVzZSBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gbV9kb21TdHJpbmdMaXN0OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1f
aWRiQ3Vyc29yOwotICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IG1faWRiQ3Vyc29yV2l0
aFZhbHVlOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9pZGJEYXRhYmFzZTsKLSAgICBSZWZQ
dHI8SURCRmFjdG9yeT4gbV9pZGJGYWN0b3J5OwotICAgIFJlZlB0cjxJREJJbmRleD4gbV9pZGJJ
bmRleDsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2lkYktleTsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG1faWRiT2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX2lk
YlRyYW5zYWN0aW9uOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFs
aXplZFNjcmlwdFZhbHVlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJBbnlfaApJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQW55LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBDdXN0b21Ub0pTT2JqZWN0Ci0gICAg
XSBJREJBbnkgewotICAgICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBi
bGFuay4KLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5n
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdT
dG9yZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJh
Y2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJCYWNraW5nU3RvcmVfaAotI2RlZmluZSBJREJCYWNraW5nU3RvcmVfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNs
dWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFi
YXNlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFu
Z2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
SURCQmFja2luZ1N0b3JlKCkge307Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwg
aW50NjRfdCYgcm93SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZs
YWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0KLSAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwot
ICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7fQotICAgIH07
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3Jl
YXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVh
bCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZp
ZXIpID0gMDsKLQotICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewotICAgIHB1
YmxpYzoKLSAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0gICAgICAgICB2aXJ0
dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307Ci0gICAgfTsKLSAgICB2aXJ0dWFs
IGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3Vu
ZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3Vu
ZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
dXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFG
b3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGlu
dDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkp
ID0gMDsKLQotICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSog
PSAwKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsK
LSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpID0gMDsKLSAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllcigpID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgfkN1cnNv
cigpIHsgfTsKLSAgICB9OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9i
amVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbikgPSAwOwotCi0gICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxUcmFuc2FjdGlvbj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+VHJh
bnNhY3Rpb24oKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJh
Y2soKSA9IDA7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNy
ZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKLQotI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSURCQ2FsbGJhY2tzX2gKLSNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKLQotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBBbGwgY2hpbGQgY2xhc3NlcyBuZWVk
IHRvIGJlIG1hZGUgdGhyZWFkc2FmZS4KLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5J
REJDYWxsYmFja3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NX
aXRoQ29udGludWF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJl
ZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+JiBwcmltYXJ5S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2Nr
ZWQoKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gSURCQ2FsbGJhY2tzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vy
c29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5j
cHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgi
Ci0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktl
eS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0j
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkN1cnNvcjo6Y3JlYXRlKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVx
dWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvcihiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2Us
IHRyYW5zYWN0aW9uKSk7Ci19Ci0KLUlEQkN1cnNvcjo6SURCQ3Vyc29yKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURC
QW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IG1fYmFja2Vu
ZChiYWNrZW5kKQotICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV90cmFuc2FjdGlv
bk5vdGlmaWVyKHRyYW5zYWN0aW9uLCB0aGlzKQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwot
ICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElE
QkFueTo6SURCT2JqZWN0U3RvcmVUeXBlIHx8IG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJ
REJJbmRleFR5cGUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLX0KLQotSURCQ3Vyc29y
Ojp+SURCQ3Vyc29yKCkKLXsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCQ3Vyc29yOjpkaXJlY3Rp
b24oKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpkaXJlY3Rpb24iKTsKLSAg
ICByZXR1cm4gbV9iYWNrZW5kLT5kaXJlY3Rpb24oKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+
IElEQkN1cnNvcjo6a2V5KCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6a2V5
Iik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+a2V5KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5
PiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yOjpwcmltYXJ5S2V5Iik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+cHJpbWFyeUtleSgpOwot
fQotCi1QYXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAg
SURCX1RSQUNFKCJJREJDdXJzb3I6OnZhbHVlIik7Ci0gICAgcmV0dXJuIElEQkFueTo6Y3JlYXRl
KG1fYmFja2VuZC0+dmFsdWUoKSk7Ci19Ci0KLUlEQkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKSBj
b25zdAotewotICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp1cGRhdGUiKTsKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT51cGRh
dGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+
bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBy
ZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJDdXJzb3I6OmNvbnRpbnVlIik7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkg
PT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVx
dWVzdCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFdlJ3Jl
IG5vdCB1c2luZyB0aGUgY29udGV4dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hp
Y2ggbWVhbnMgdGhlIGNhbGxiYWNrCi0gICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdp
bmFsIGNvbnRleHQgb3BlbkN1cnNvciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAg
IGlmIChtX3JlcXVlc3QtPnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0aW9uLmdldCgpKSkgewot
ICAgICAgICBtX3JlcXVlc3QtPnNldEN1cnNvcih0aGlzKTsKLSAgICAgICAgbV9iYWNrZW5kLT5j
b250aW51ZUZ1bmN0aW9uKGtleSwgbV9yZXF1ZXN0LCBlYyk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgi
SURCQ3Vyc29yOjpkZWxldGUiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVGdW5jdGlvbihyZXF1ZXN0LCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgSURCQ3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpCi17Ci0gICAgbV9i
YWNrZW5kLT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwotfQotCi12b2lkIElEQkN1cnNv
cjo6Y2xvc2UoKQotewotICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIG1fcmVxdWVzdC0+Zmlu
aXNoQ3Vyc29yKCk7Ci0gICAgbV9yZXF1ZXN0LmNsZWFyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIElEQkN1cnNvcl9oCi0jZGVmaW5lIElEQkN1cnNvcl9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJREJBbnk7Ci1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCUmVxdWVzdDsKLWNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci0KLXR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkN1cnNvciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQkN1cnNvcj4gewotcHVibGljOgotICAgIGVudW0gRGlyZWN0aW9uIHsKLSAgICAgICAg
TkVYVCA9IDAsCi0gICAgICAgIE5FWFRfTk9fRFVQTElDQVRFID0gMSwKLSAgICAgICAgUFJFViA9
IDIsCi0gICAgICAgIFBSRVZfTk9fRFVQTElDQVRFID0gMywKLSAgICB9OwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsK
LSAgICB2aXJ0dWFsIH5JREJDdXJzb3IoKTsKLQotICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5
IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgotICAgIHZvaWQgY29udGlu
dWVGdW5jdGlvbihFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9uKDAsIGVjKTsg
fQotCi0gICAgLy8gSW1wbGVtZW50IHRoZSBJREwKLSAgICB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24oKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQkFu
eT4gdmFsdWUoKSBjb25zdDsKLSAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwotCi0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNh
bGxiYWNrKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCQ3Vyc29y
KFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJREJB
bnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBtX3JlcXVlc3Q7Ci0gICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIElEQlRyYW5zYWN0aW9uOjpPcGVuQ3Vy
c29yTm90aWZpZXIgbV90cmFuc2FjdGlvbk5vdGlmaWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkN1cnNvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgXSBJREJDdXJzb3IgewotICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBORVhUID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgTkVYVF9OT19EVVBMSUNBVEUgPSAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQ
UkVWID0gMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUFJFVl9OT19EVVBMSUNBVEUg
PSAzOwotCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b247Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkga2V5OwotICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgSURCS2V5IHByaW1hcnlLZXk7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBJREJBbnkgc291cmNlOwotCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJSZXF1ZXN0IHVwZGF0ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUp
Ci0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0lt
cGxlbWVudGVkQXM9Y29udGludWVGdW5jdGlvbl0gdm9pZCBjb250aW51ZShpbiBbT3B0aW9uYWxd
IElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
LSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9
ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKCkKLSAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiSURCQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgi
Ci0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJDdXJzb3JCYWNr
ZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
biwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKiBvYmplY3RTdG9yZSkKLSAgICA6IG1f
Y3Vyc29yKGN1cnNvcikKLSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fY3Vy
c29yVHlwZShjdXJzb3JUeXBlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAg
ICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgLCBtX2Nsb3NlZChmYWxzZSkKLXsK
LSAgICBtX3RyYW5zYWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Ci19Ci0KLUlEQkN1
cnNvckJhY2tlbmRJbXBsOjp+SURCQ3Vyc29yQmFja2VuZEltcGwoKQotewotICAgIG1fdHJhbnNh
Y3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotICAgIC8vIE9yZGVyIGlzIGltcG9y
dGFudCwgdGhlIGN1cnNvcnMgaGF2ZSB0byBiZSBkZXN0cnVjdGVkIGJlZm9yZSB0aGUgb2JqZWN0
U3RvcmUuCi0gICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7
Ci0KLSAgICBtX29iamVjdFN0b3JlLmNsZWFyKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQkN1
cnNvckJhY2tlbmRJbXBsOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURC
Q3Vyc29yQmFja2VuZEltcGw6OmRpcmVjdGlvbiIpOwotICAgIHJldHVybiBtX2RpcmVjdGlvbjsK
LX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJhY2tlbmRJbXBsOjprZXkoKSBjb25z
dAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSIpOwotICAgIHJl
dHVybiBtX2N1cnNvci0+a2V5KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6cHJpbWFyeUtleSIpOwotICAgIHJldHVybiBtX2N1cnNvci0+cHJpbWFy
eUtleSgpOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29y
QmFja2VuZEltcGw6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjp2YWx1ZSIpOwotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJz
b3IpCi0gICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKLSAg
ICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtX2N1cnNvci0+
dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yQmFja2VuZEltcGw6OnVwZGF0ZSIpOwotICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JU
eXBlID09IEluZGV4S2V5Q3Vyc29yKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2Jq
ZWN0U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlv
bi5nZXQoKSwgZWMpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1
bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURC
Q3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0g
cHJwS2V5OwotCi0gICAgaWYgKG1fY3Vyc29yICYmIGtleSkgewotICAgICAgICBBU1NFUlQobV9j
dXJzb3ItPmtleSgpKTsKLSAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVY
VCB8fCBtX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fY3Vyc29yLT5rZXkoKS0+aXNMZXNzVGhhbihrZXkuZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKCFrZXktPmlzTGVzc1RoYW4obV9jdXJzb3ItPmtleSgpLmdldCgpKSkgewot
ICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbCwgdGhpcywga2V5
LCBwcnBDYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi0vLyBJTVBPUlRBTlQ6IElmIHRoaXMgZXZlciAx
KSBmaXJlcyBhbiAnZXJyb3InIGV2ZW50IGFuZCAyKSBpdCdzIHBvc3NpYmxlIHRvIGZpcmUgYW5v
dGhlciBldmVudCBhZnRlcndhcmRzLAotLy8gICAgICAgICAgICBJREJSZXF1ZXN0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSB3aWxsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gaGFuZGxlIHRoaXMhISEK
LXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJw
Q3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmNv
bnRpbnVlSW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciA9IHBycEN1cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0KLSAgICBp
ZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rp
b24oa2V5LmdldCgpKSkgewotICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKLSAgICAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhD
b250aW51YXRpb24oKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlIik7
Ci0gICAgaWYgKCFtX2N1cnNvciB8fCBtX2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJzb3IpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlRnVuY3Rpb24o
bV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgcHJwQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uLmdldCgp
LCBlYyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUo
aW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZElt
cGw6OnByZWZldGNoQ29udGludWUiKTsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENv
bnRpbnVlSW50ZXJuYWwsIHRoaXMsIG51bWJlclRvRmV0Y2gsIHBycENhbGxiYWNrcykpKQotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWVJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1w
bD4gcHJwQ3Vyc29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVm
ZXRjaENvbnRpbnVlSW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciA9IHBycEN1cnNvcjsKLQotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGZvdW5k
S2V5czsKLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZFByaW1hcnlLZXlzOwotICAg
IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IGZvdW5kVmFsdWVzOwotCi0g
ICAgaWYgKGN1cnNvci0+bV9jdXJzb3IpCi0gICAgICAgIGN1cnNvci0+bV9zYXZlZEN1cnNvciA9
IGN1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7Ci0KLSAgICBjb25zdCBzaXplX3Qga01heFNpemVF
c3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7Ci0gICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlclRvRmV0Y2g7ICsraSkgewotICAgICAg
ICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVu
Y3Rpb24oMCkpIHsKLSAgICAgICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3VuZEtleXMuYXBwZW5kKGN1cnNvci0+
bV9jdXJzb3ItPmtleSgpKTsKLSAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQoY3Vyc29y
LT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKLQotICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNv
clR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAg
ICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZShjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgp
KTsKLQotICAgICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+a2V5KCktPnNp
emVFc3RpbWF0ZSgpOwotICAgICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+
cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKLSAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJz
b3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQotICAg
ICAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpOwotCi0gICAgICAgIGlmIChzaXplRXN0aW1hdGUgPiBrTWF4U2l6
ZUVzdGltYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEtl
eXMuc2l6ZSgpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3Vy
c29yLT5tX3RyYW5zYWN0aW9uLT5hZGRQZW5kaW5nRXZlbnRzKGZvdW5kS2V5cy5zaXplKCkgLSAx
KTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5k
UHJpbWFyeUtleXMsIGZvdW5kVmFsdWVzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQcmVmZXRjaGVz
KQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQi
KTsKLSAgICBtX3RyYW5zYWN0aW9uLT5hZGRQZW5kaW5nRXZlbnRzKC11bnVzZWRQcmVmZXRjaGVz
KTsKLSAgICBtX2N1cnNvciA9IG1fc2F2ZWRDdXJzb3I7Ci0gICAgbV9zYXZlZEN1cnNvciA9IDA7
Ci0KLSAgICBpZiAobV9jbG9zZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJzb3Ip
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkUHJlZmV0Y2hlczsgKytpKSB7Ci0g
ICAgICAgICAgICBib29sIG9rID0gbV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oKTsKLSAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UoKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yQmFja2VuZEltcGw6OmNsb3NlIik7Ci0gICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIGlmICht
X2N1cnNvcikKLSAgICAgICAgbV9jdXJzb3ItPmNsb3NlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgSURCQ3Vy
c29yQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgot
I2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw7Ci1j
bGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTsK
LWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCQ3Vyc29yQmFj
a2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbiwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIG9i
amVjdFN0b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JC
YWNrZW5kSW1wbChjdXJzb3IsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5j
dGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hD
b250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVm
ZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZp
cnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KLQotcHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIEN1cnNvclR5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZSopOwotCi0gICAgc3RhdGljIHZvaWQgY29udGludWVGdW5jdGlvbkludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0
YXRpYyB2b2lkIHByZWZldGNoQ29udGludWVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIGludCBudW1iZXJUb0ZldGNoLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBtX2N1cnNvcjsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1f
c2F2ZWRDdXJzb3I7Ci0gICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAg
Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlOwotICAgIAotICAgIGJvb2wgbV9jbG9zZWQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCShy
ZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQW55
OwotY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCUmVxdWVzdDsK
LWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKLQotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSgpIHt9Ci0KLSAgICBlbnVtIEN1cnNvclR5
cGUgewotICAgICAgICBJbnZhbGlkQ3Vyc29yVHlwZSA9IDAsCi0gICAgICAgIEluZGV4Q3Vyc29y
LAotICAgICAgICBJbmRleEtleUN1cnNvciwKLSAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKLSAg
ICB9OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25D
b2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJU
b0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51
c2VkUHJlZmV0Y2hlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
SURCS2V5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJDdXJzb3JX
aXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkN1cnNvcldpdGhWYWx1ZShiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5z
YWN0aW9uKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JX
aXRoVmFsdWU6OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHBycEN1cnNvcikKLXsK
LSAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjdXJzb3JXaXRoVmFsdWUoc3RhdGljX2Nh
c3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29yLmdldCgpKSk7Ci0gICAgcmV0dXJuIGN1
cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7Ci19Ci0KLUlEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vy
c29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKLSAgICA6IElEQkN1cnNvcihiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRy
YW5zYWN0aW9uKQotewotfQotCi1JREJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFs
dWUoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
V2l0aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JXaXRoVmFsdWUuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJDdXJzb3JXaXRoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBJREJDdXJzb3JXaXRoVmFsdWVfaAotI2RlZmluZSBJREJDdXJzb3JXaXRo
VmFsdWVfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJD
dXJzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3JXaXRoVmFs
dWUgOiBwdWJsaWMgSURCQ3Vyc29yIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJDdXJzb3JXaXRoVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U+LCBJREJSZXF1ZXN0KiwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBmcm9tQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVlKCk7Ci0K
LSAgICAvLyBUaGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkg
aW1wbGVtZW50ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCi0gICAgLy8gaXRz
IElETCkuIFRoaXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hp
bGUgbWF0Y2hpbmcgd2hhdCB0aGUgc3BlYyBzYXlzLgotCi1wcml2YXRlOgotICAgIElEQkN1cnNv
cldpdGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+LCBJREJSZXF1
ZXN0KiwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCQ3Vyc29yV2l0aFZhbHVlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0
aFZhbHVlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRQotICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV2
ZW50UXVldWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2lu
Y2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXgu
aCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
LSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNp
bmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlIDxsaW1pdHM+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJhc2UpCi17Ci0g
ICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcgSURCRGF0YWJh
c2UoY29udGV4dCwgZGF0YWJhc2UpKSk7Ci0gICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRl
ZCgpOwotICAgIHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Ci19Ci0KLUlEQkRhdGFiYXNl
OjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKLSAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2Ns
b3NlUGVuZGluZyhmYWxzZSkKLSAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCi17Ci0gICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0gICAgbV9kYXRhYmFzZUNh
bGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMpOwotfQotCi1J
REJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKLXsKLSAgICBjbG9zZSgpOwotICAgIG1fZGF0YWJh
c2VDYWxsYmFja3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKLX0KLQotdm9pZCBJREJEYXRh
YmFzZTo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKLSAgICBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotfQotCi12b2lkIElEQkRh
dGFiYXNlOjpjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOwotICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uID0gMDsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVj
dCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
QUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFN0cmluZyBrZXlQ
YXRoOwotICAgIGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKCJrZXlQYXRoIiwga2V5UGF0aCk7Ci0gICAgaWYgKGtleVBhdGhFeGlzdHMgJiYg
IUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgiYXV0b0lu
Y3JlbWVudCIsIGF1dG9JbmNyZW1lbnQpOwotICAgIC8vIEZJWE1FOiBMb29rIHVwIGV2aWN0YWJs
ZSBhbmQgcGFzcyB0aGF0IG9uIGFzIHdlbGwuCi0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9i
amVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkg
ewotICAgICAgICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZShvYmplY3RTdG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi5nZXQoKSk7Ci0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYmFja2VuZC0+ZGVsZXRl
T2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQo
bmFtZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkRhdGFi
YXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHZlcnNpb24uaXNO
dWxsKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVO
VF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOwotICAgIG1fYmFja2VuZC0+
c2V0VmVyc2lvbih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7Ci0g
ICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRh
dGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKLSAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKLSAgICBy
ZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOwotfQotCi1Q
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBwcnBT
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFtZXM7Ci0gICAg
aWYgKCFzdG9yZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg
KG1vZGUgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5P
Tl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fY2xv
c2VQZW5kaW5nKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgbmVlZCB0byBj
cmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVk
IGFzeW5jaHJvbm91c2x5LiBPcGVyYXRpb25zCi0gICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0
IHRoZSB0cmFuc2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcg
YXMgc29vbiBhcyB0aGUKLSAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWly
ZWQuCi0gICAgLy8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25k
cyB0byBleGFjdGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCi0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5k
LT50cmFuc2FjdGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7Ci0gICAgaWYgKCF0cmFu
c2FjdGlvbkJhY2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVjKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhpcyk7Ci0gICAg
dHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNs
b3NlKCkKLXsKLSAgICBpZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VD
YWxsYmFja3MpOwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1
ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIC8vIFJlbW92
ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0
aGlzCi0gICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5
IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgotICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZl
cnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwotICAgIC8vIGNsb3Nl
ZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVu
dFF1ZXVlLT5jYW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgaWYg
KG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRl
KHZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZTo6b3BlbigpCi17Ci0gICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0YWJhc2VDYWxs
YmFja3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVl
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgZXZlbnQtPnNl
dFRhcmdldCh0aGlzKTsKLSAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkp
OwotICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKLX0KLQotYm9vbCBJREJEYXRh
YmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAgICAgICAgICAg
bV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAgfQotICAgIHJldHVybiBFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OnN0
b3AoKQotewotICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOwotICAgIC8vIFN0b3AgZmlyZXMg
YXQgYSBkZXRlcm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4K
LSAgICBjbG9zZSgpOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci19Ci0KLWNvbnN0
IEF0b21pY1N0cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAotewotICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Ci19Ci0KLVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0RGF0
YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXRE
YXRhKiBJREJEYXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4g
Jm1fZXZlbnRUYXJnZXREYXRhOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgSURCRGF0YWJhc2VfaAotI2RlZmluZSBJREJEYXRhYmFzZV9oCi0KLSNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAi
RXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
IgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCRGF0YWJhc2Ug
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB+SURCRGF0YWJhc2UoKTsKLQotICAgIHZv
aWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9p
ZCBjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiopOwotCi0gICAg
Ly8gSW1wbGVtZW50IHRoZSBJREwKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZC0+bmFtZSgpOyB9Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmQtPnZlcnNpb24oKTsgfQotICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2Jq
ZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+b2JqZWN0U3RvcmVOYW1l
cygpOyB9Ci0KLSAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Ig
c28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQotICAg
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzaG9ydCBtb2Rl
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKLSAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHZlcnNpb25jaGFuZ2UpOwotCi0gICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKLSAg
ICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkVmVy
c2lvbik7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
IE9WRVJSSURFOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCBv
cGVuKCk7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIGJv
b2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0KLSAgICB1
c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCRGF0YWJhc2U+OjpkZXJlZjsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+
KTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0
KCkgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJl
ZigpOyB9Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwot
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKLQot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwotCi0gICAg
Ym9vbCBtX2Nsb3NlUGVuZGluZzsKLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICBF
dmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9m
IHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZpcmVkIG9uIHRoaXMKLSAg
ICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2Ug
Y2xvc2VzLgotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50czsKLQot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IG1fZGF0YWJhc2VDYWxsYmFja3M7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURC
RGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2Ugewot
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwK
LSAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gSURC
RGF0YWJhc2UgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3Qgb2JqZWN0U3RvcmVOYW1lczsKLQotICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0OwotICAgICAgICBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbmVycm9yOwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnZl
cnNpb25jaGFuZ2U7Ci0KLSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUo
aW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQot
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUpCi0gICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IHNldFZlcnNpb24oaW4gRE9NU3RyaW5n
IHZlcnNpb24pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uKGluIERPTVN0cmluZ0xpc3Qgc3RvcmVOYW1lcywgaW4gW09wdGlvbmFsPURlZmF1
bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgc2hvcnQgbW9kZSkKLSAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oaW4gRE9NU3RyaW5nW10gc3RvcmVO
YW1lcywgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgc2hvcnQgbW9k
ZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oaW4gRE9NU3RyaW5nIHN0b3JlTmFtZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5l
ZF0gdW5zaWduZWQgc2hvcnQgbW9kZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwotICAgICAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICAgICAgLy8gRXZlbnRUYXJn
ZXQgaW50ZXJmYWNlCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xl
YW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01T
dHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0
aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVu
dChpbiBFdmVudCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwotICAg
IH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MTIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2Fs
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuQ2FsbD4gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBl
bmRpbmdPcGVuQ2FsbChjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0g
ICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxl
dGVDYWxsPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNh
bGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsK
LSAgICB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJu
IG1fY2FsbGJhY2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCi0gICAgewotICAgIH0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9u
Q2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbCh2ZXJz
aW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIFN0cmluZyB2
ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9Ci0gICAgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFi
YXNlQ2FsbGJhY2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGluZ1NldFZlcnNpb25DYWxsKGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAg
ICAgIDogbV92ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tz
KQotICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCi0gICAg
ewotICAgIH0KLSAgICBTdHJpbmcgbV92ZXJzaW9uOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFz
ZUNhbGxiYWNrczsKLX07Ci0KLUlEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICwgbV9pZChJbnZhbGlkSWQpCi0gICAg
LCBtX25hbWUobmFtZSkKLSAgICAsIG1fdmVyc2lvbigiIikKLSAgICAsIG1faWRlbnRpZmllcih1
bmlxdWVJZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0b3IpCi17Ci0gICAgQVNTRVJUKCFtX25hbWUuaXNO
dWxsKCkpOwotICAgIG9wZW5JbnRlcm5hbCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5JbnRlcm5hbCgpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3Rv
cmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOwotICAg
IEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkpOwotICAgIGlmIChzdWNjZXNz
KSB7Ci0gICAgICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFt
ZSwgbV92ZXJzaW9uLCBtX2lkKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZy4KLX0KLQotSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQotewotICAgIG1fZmFjdG9yeS0+cmVtb3Zl
SURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRpZmllcik7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZTsKLX0KLQotUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKLXsK
LSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOwotICAgIG9i
amVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpOwotCi0gICAgaWYgKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUp
KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQp
OwotICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwotCi0gICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRy
OwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFi
YXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJl
bW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3Rv
cmUpOwotICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7Ci0KLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1l
KCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCks
IG9iamVjdFN0b3JlSWQpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgb2JqZWN0U3RvcmUtPnNldElkKG9iamVjdFN0b3JlSWQp
OwotICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZElt
cGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9vYmpl
Y3RTdG9yZXMuZ2V0KG5hbWUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9y
ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghb2JqZWN0U3RvcmUpIHsKLSAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRl
cm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24pCi17Ci0gICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9y
ZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0
YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0gICAg
aWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGRhdGFiYXNlQ2FsbGJhY2tzKSkg
ewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpBQk9SVF9FUlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVm
b3JlIHNldCB2ZXJzaW9uIHRyYW5zYWN0aW9uIHdhcyBjcmVhdGVkIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxs
YmFja3MpCi0gICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwotICAg
IH0KLSAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBj
b25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNl
aXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuc2l6ZSgpID4gMSkgewotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwotICAgICAg
ICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQ
ZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzKTsKLSAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5k
aW5nU2V0VmVyc2lvbkNhbGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3J1
bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25D
YWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAg
ICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxs
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBv
YmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UsIHRoaXMpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25J
bnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7
Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAg
ICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbikKLXsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQo
KTsKLSAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNl
LT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBk
YXRhYmFzZS0+bV92ZXJzaW9uKSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0
YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVk
IHRvIEkvTyBlcnJvcnMuCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3Jp
dGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
dHJhbnNhY3Rpb24pOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0
aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJw
VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgQVNTRVJU
KCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCi17Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFu
c2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fcnVubmlu
Z1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICBwcm9jZXNzUGVuZGlu
Z0NhbGxzKCk7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nl
c3NQZW5kaW5nQ2FsbHMoKQotewotICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVk
IG9yIGFib3J0ZWQKLSAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBl
bmRpbmdTZXRWZXJzaW9uQ2FsbHM7Ci0gICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnN3YXAo
cGVuZGluZ1NldFZlcnNpb25DYWxscyk7Ci0gICAgd2hpbGUgKCFwZW5kaW5nU2V0VmVyc2lvbkNh
bGxzLmlzRW1wdHkoKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gcGVu
ZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKLSAgICAgICAgc2V0VmVyc2lvbihwZW5k
aW5nU2V0VmVyc2lvbkNhbGwtPnZlcnNpb24oKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxs
YmFja3MoKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7
Ci0gICAgICAgIEFTU0VSVCghZWMpOwotICAgIH0KLQotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVk
LgotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2Fs
bHM7Ci0gICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOwot
ICAgIHdoaWxlICghcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQ
dHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNh
bGxzLnRha2VGaXJzdCgpOwotICAgICAgICBkZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2Fs
bC0+Y2FsbGJhY2tzKCkpOwotICAgIH0KLQotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hp
bGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQZW5k
aW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmly
c3QoKTsKLSAgICAgICAgb3BlbkNvbm5lY3Rpb24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3Mo
KSk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2Jq
ZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVO
YW1lcy0+aXRlbShpKSkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVu
IGNhbGxlZC4KLSAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9i
amVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ewotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4oY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Bl
bkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBp
ZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUo
Y2FsbGJhY2tzKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkK
LSAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRl
RGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBp
ZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJz
aW9uQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVu
ZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxiYWNrcykpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKLSAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0
aGUgY29ubmVjdGlvbiBpc24ndCBpbgotICAgIC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTI5Ci0gICAg
Zm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7
ICsraXQpCi0gICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOwotICAgIC8vIEZJWE1F
OiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVy
IHRoZQotICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBz
ZXQgdXAgdG8gZmlyZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzExMzAKLSAgICBpZiAoIW1fZGF0YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6
Y3JlYXRlKGNhbGxiYWNrcykpOwotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFi
YXNlKG1fbmFtZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBl
cnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV92ZXJzaW9uID0gIiI7Ci0g
ICAgbV9pZCA9IEludmFsaWRJZDsKLSAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBBU1NFUlQobV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOwotICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LnNpemUoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMo
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkK
LXsKLSAgICBWZWN0b3I8aW50NjRfdD4gaWRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwot
ICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhzOwotICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVt
ZW50RmxhZ3M7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBpZHMs
IG5hbWVzLCBrZXlQYXRocywgYXV0b0luY3JlbWVudEZsYWdzKTsKLQotICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBp
ZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoYXV0b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBpZHMu
c2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQot
ICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9pZCwgaWRzW2ldLCBuYW1lc1tp
XSwga2V5UGF0aHNbaV0sIGF1dG9JbmNyZW1lbnRGbGFnc1tpXSkpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLXsKLSAg
ICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5u
YW1lKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3Jl
LT5uYW1lKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0
b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUpCi17Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlUHRyID0gb2JqZWN0U3RvcmU7Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVQdHItPm5hbWUoKSkpOwotICAgIGRhdGFi
YXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3Rv
cmVQdHIpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIGRhdGFiYXNlLT5tX3Zl
cnNpb24gPSB2ZXJzaW9uOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7Ci1j
bGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKG5hbWUsIGRhdGFiYXNlLCBjb29yZGlu
YXRvciwgZmFjdG9yeSwgdW5pcXVlSWRlbnRpZmllcikpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5J
REJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZh
bGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLSAg
ICAvLyBGSVhNRTogUmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZSwg
bGlrZSByZWdpc3RlckZyb250RW5kQ2FsbGJhY2tzLgotICAgIHZvaWQgb3BlbihQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJzaW9uOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVj
dFN0b3JlTmFtZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZlcnNp
b24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24o
RE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9Ci0gICAgdm9pZCB0cmFuc2FjdGlvblN0
YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2
b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+KTsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVl
SWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIG9wZW5JbnRlcm5hbCgpOwotICAgIHZvaWQgbG9hZE9i
amVjdFN0b3JlcygpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotCi0gICAgc3Rh
dGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2b2lkIHNldFZlcnNpb25JbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0KLSAgICAvLyBU
aGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgotICAg
IHN0YXRpYyB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgYWRkT2JqZWN0U3RvcmVU
b01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7Ci0gICAgc3Rh
dGljIHZvaWQgcmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotCi0gICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgaW50NjQgbV9pZDsK
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3ZlcnNpb247Ci0KLSAgICBTdHJpbmcg
bV9pZGVudGlmaWVyOwotICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIg
c2luY2UgdGhlIGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBi
dXQgaXQncyBiZXR0ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRy
PElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVN
YXA7Ci0gICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZXM7Ci0KLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbjsKLQotICAgIGNsYXNzIFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDsKLSAgICBE
ZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IG1fcGVuZGluZ1NldFZlcnNpb25D
YWxsczsKLQotICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKLSAgICBEZXF1ZTxSZWZQdHI8UGVu
ZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKLQotICAgIGNsYXNzIFBlbmRpbmdE
ZWxldGVDYWxsOwotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRp
bmdEZWxldGVDYWxsczsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwotICAgIERhdGFiYXNlQ2FsbGJh
Y2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBJREJDYWxsYmFj
a3M7Ci1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLQot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkg
SURCRGF0YWJhc2UgKGFzeW5jKSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KLS8vIFRoaXMg
aXMgaW1wbGVtZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBv
dGhlcnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVy
cykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5k
Ci0vLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1j
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyBuYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5o
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCRGF0YWJhc2VDYWxsYmFja3NfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19o
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VDYWxs
YmFja3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGw+IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRhdGFiYXNlKiBkYXRhYmFz
ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbChk
YXRhYmFzZSkpOwotfQotCi1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbChJREJEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBtX2RhdGFiYXNlKGRhdGFi
YXNlKQotewotfQotCi1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwoKQotewotfQotCi12b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6b25WZXJz
aW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkK
LSAgICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFiYXNlKElEQkRhdGFiYXNl
KiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9kYXRhYmFzZSk7Ci0gICAg
bV9kYXRhYmFzZSA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSURCRGF0YWJhc2U7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCA6IHB1
YmxpYyBJREJEYXRhYmFzZUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsPiBjcmVhdGUoSURCRGF0YWJhc2UqKTsKLSAgICB2
aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBv
blZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2b2lkIHVucmVnaXN0
ZXJEYXRhYmFzZShJREJEYXRhYmFzZSopOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbChJREJEYXRhYmFzZSopOwotCi0gICAgLy8gbV9kYXRhYmFzZSBoYXMgYSBSZWZQ
dHIgdG8gdGhpcywgc28gdXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCi0gICAg
SURCRGF0YWJhc2UqIG1fZGF0YWJhc2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUVycm9yX2gK
LSNkZWZpbmUgSURCRGF0YWJhc2VFcnJvcl9oCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VF
cnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlRXJyb3I+IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVhdGUodW5zaWduZWQgc2hv
cnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNv
ZGUgPj0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0KTsK
LSAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VF
eGNlcHRpb25NYXgpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJy
b3IoY29kZSAtIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNl
dCwgbWVzc2FnZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGNyZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkpOwotICAgIH0KLQotICAg
IH5JREJEYXRhYmFzZUVycm9yKCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlOyB9Ci0gICAgdm9pZCBzZXRDb2RlKHVuc2lnbmVkIHNob3J0IHZh
bHVlKSB7IG1fY29kZSA9IHZhbHVlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9Ci0gICAgdm9pZCBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpIHsgbV9tZXNzYWdlID0gdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBJREJEYXRh
YmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAg
ICAgICAgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlKSB7IH0KLQotICAgIHVuc2ln
bmVkIHNob3J0IG1fY29kZTsKLSAgICBTdHJpbmcgbV9tZXNzYWdlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlRXJyb3JfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3Iu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFn
ZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFCi0gICAgXSBJREJEYXRhYmFzZUVycm9yIHsKLSAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVk
IHNob3J0IGNvZGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbWVzc2FnZTsKLSAgICB9
OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0
aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNl
cHRpb25OYW1lc1tdID0gewotICAgICJVTktOT1dOX0VSUiIsCi0gICAgIk5PTl9UUkFOU0lFTlRf
RVJSIiwKLSAgICAiTk9UX0ZPVU5EX0VSUiIsCi0gICAgIkNPTlNUUkFJTlRfRVJSIiwKLSAgICAi
REFUQV9FUlIiLAotICAgICJOT1RfQUxMT1dFRF9FUlIiLAotICAgICJUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlIiLAotICAgICJBQk9SVF9FUlIiLAotICAgICJSRUFEX09OTFlfRVJSIiwKLSAgICAi
VElNRU9VVF9FUlIiLAotICAgICJRVU9UQV9FUlIiLAotICAgICJWRVJfRVJSIgotfTsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1tdID0gewotICAgICJB
biB1bmtub3duIGVycm9yIG9jY3VycmVkIHdpdGhpbiBJbmRleGVkIERhdGFiYXNlLiIsCi0gICAg
Ik5PTl9UUkFOU0lFTlRfRVJSIiwgLy8gRklYTUU6IFdyaXRlIGEgYmV0dGVyIG1lc3NhZ2UgaWYg
aXQncyBldmVyIHBvc3NpYmxlIHRoaXMgaXMgdGhyb3duLgotICAgICJUaGUgbmFtZSBzdXBwbGll
ZCBkb2VzIG5vdCBtYXRjaCBhbnkgZXhpc3RpbmcgaXRlbS4iLAotICAgICJUaGUgcmVxdWVzdCBj
YW5ub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIGZhaWxlZCBjb25zdHJhaW50LiIsCi0gICAgIlRo
ZSBkYXRhIHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgZnVu
Y3Rpb24uIiwKLSAgICAiVGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQg
aW4gc3VjaCBhIGNvbnRleHQuIiwKLSAgICAiQSByZXF1ZXN0IHdhcyBwbGFjZWQgYWdhaW5zdCBh
IHRyYW5zYWN0aW9uIHdoaWNoIGlzIGVpdGhlciBjdXJyZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hp
Y2ggaXMgZmluaXNoZWQuIiwKLSAgICAiVGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0
aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIsCi0gICAgIkEgd3JpdGUgb3BlcmF0aW9u
IHdhcyBhdHRlbXB0ZWQgaW4gYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24uIiwKLSAgICAiQSBsb2Nr
IGZvciB0aGUgdHJhbnNhY3Rpb24gY291bGQgbm90IGJlIG9idGFpbmVkIGluIGEgcmVhc29uYWJs
ZSB0aW1lLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVzZWQgeWV0LgotICAgICJUaGUgb3BlcmF0
aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdl
IHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBhbmQgdGhlIHVzZXIgZGVj
bGluZWQgdG8gZ2l2ZSBtb3JlIHNwYWNlIHRvIHRoZSBkYXRhYmFzZS4iLCAvLyBGSVhNRTogVGhp
cyBpc24ndCB1c2VkIHlldAotICAgICJBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRh
YmFzZSB1c2luZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgZXhpc3RpbmcgdmVyc2lvbi4iLCAv
LyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAotfTsKLQotQ09NUElMRV9BU1NFUlQoV1RGX0FS
UkFZX0xFTkdUSChleGNlcHRpb25OYW1lcykgPT0gV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25E
ZXNjcmlwdGlvbnMpLCBJREJEYXRhYmFzZUV4Y2VwdGlvblRhYmxlc011c3RNYXRjaCk7Ci0KLWJv
b2wgSURCRGF0YWJhc2VFeGNlcHRpb246OmluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25D
b2RlIGVjLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQotewotICAgIGlm
IChlYyA8IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0IHx8IGVjID4gSURCRGF0YWJhc2VFeGNl
cHRpb25NYXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlc2NyaXB0aW9uLT50eXBl
TmFtZSA9ICJET00gSURCRGF0YWJhc2UiOwotICAgIGRlc2NyaXB0aW9uLT5jb2RlID0gZWMgLSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldDsKLSAgICBkZXNjcmlwdGlvbi0+dHlwZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uVHlwZTsKLQotICAgIHNpemVfdCB0YWJsZVNpemUgPSBXVEZfQVJSQVlf
TEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGVjIC0gVU5L
Tk9XTl9FUlI7Ci0KLSAgICBkZXNjcmlwdGlvbi0+bmFtZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNp
emUgPyBleGNlcHRpb25OYW1lc1t0YWJsZUluZGV4XSA6IDA7Ci0gICAgZGVzY3JpcHRpb24tPmRl
c2NyaXB0aW9uID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9u
c1t0YWJsZUluZGV4XSA6IDA7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0
YWJhc2VFeGNlcHRpb25faAotI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlvbiA6IHB1Ymxp
YyBFeGNlcHRpb25CYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNl
RXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7Ci0gICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk1heCA9IDEyOTk7Ci0KLSAgICBlbnVtIElEQkRhdGFiYXNlRXhj
ZXB0aW9uQ29kZSB7Ci0gICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0
LAotICAgICAgICBVTktOT1dOX0VSUiwKLSAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIsCi0gICAg
ICAgIE5PVF9GT1VORF9FUlIsCi0gICAgICAgIENPTlNUUkFJTlRfRVJSLAotICAgICAgICBEQVRB
X0VSUiwKLSAgICAgICAgTk9UX0FMTE9XRURfRVJSLAotICAgICAgICBUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlIsCi0gICAgICAgIEFCT1JUX0VSUiwKLSAgICAgICAgUkVBRF9PTkxZX0VSUiwKLSAg
ICAgICAgVElNRU9VVF9FUlIsCi0gICAgICAgIFFVT1RBX0VSUiwKLSAgICAgICAgVkVSX0VSUgot
ICAgIH07Ci0KLSAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgZXJy
b3JDb2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFlcnJvckNvZGUpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNl
cHRpb25Db2RlLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKLQotcHJpdmF0ZToKLSAgICBJ
REJEYXRhYmFzZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQotICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCi0gICAgewotICAg
IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBb
Ci0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIERvTm90Q2hl
Y2tDb25zdGFudHMKLSAgICBdIElEQkRhdGFiYXNlRXhjZXB0aW9uIHsKLQotICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgICBjb2RlOwotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBtZXNzYWdlOwotCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZB
U0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIC8vIE92ZXJyaWRlIGluIGEg
TW96aWxsYSBjb21wYXRpYmxlIGZvcm1hdAotICAgICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3Ry
aW5nIHRvU3RyaW5nKCk7Ci0jZW5kaWYKLQotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBO
T19FUlIgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDE7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PTl9UUkFOU0lFTlRfRVJSID0gMjsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDM7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gNDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgREFUQV9FUlIgPSA1OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBO
T1RfQUxMT1dFRF9FUlIgPSA2OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlIgPSA3OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBQk9S
VF9FUlIgPSA4OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBSRUFEX09OTFlfRVJSID0g
OTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVElNRU9VVF9FUlIgPSAxMDsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUVVPVEFfRVJSID0gMTE7Ci0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFZFUl9FUlIgPSAxMjsKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJREJFdmVudERpc3BhdGNoZXIuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChFdmVudCog
ZXZlbnQsIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4mIGV2ZW50VGFyZ2V0cykKLXsKLSAg
ICBzaXplX3Qgc2l6ZSA9IGV2ZW50VGFyZ2V0cy5zaXplKCk7Ci0gICAgQVNTRVJUKHNpemUpOwot
Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IHNpemUgLSAxOyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0
IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tp
XS5nZXQoKSk7Ci0gICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2
ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAg
ICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwotICAgIH0KLQotICAgIGV2ZW50LT5zZXRFdmVudFBo
YXNlKEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50
VGFyZ2V0c1swXS5nZXQoKSk7Ci0gICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5l
cnMoZXZlbnQpOwotICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50
LT5idWJibGVzKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQotICAgICAgICBnb3RvIGRvbmVE
aXNwYXRjaGluZzsKLQotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19Q
SEFTRSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsgLy8gRG9uJ3Qg
ZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2
ZW50VGFyZ2V0c1tpXS5nZXQoKSk7Ci0gICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQo
KSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCi0gICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRj
aGluZzsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogIi4uLkhvd2V2ZXIsIHdlIGFsc28gd2FudGVk
IHRvIGludGVncmF0ZSB0aGUgd2luZG93Lm9uZXJyb3IgZmVhdHVyZSBpbgotICAgIC8vICAgICAg
ICBIVE1MNS4gU28gYWZ0ZXIgd2UndmUgZmlyZWQgYW4gImVycm9yIiBldmVudCwgaWYgLnByZXZl
bnREZWZhdWx0KCkgd2FzCi0gICAgLy8gICAgICAgIG5ldmVyIGNhbGxlZCBvbiB0aGUgZXZlbnQs
IHdlIGZpcmUgYW4gZXJyb3IgZXZlbnQgb24gdGhlIHdpbmRvdyAoY2FuJ3QKLSAgICAvLyAgICAg
ICAgcmVtZW1iZXIgaWYgdGhpcyBoYXBwZW5zIGJlZm9yZSBvciBhZnRlciB3ZSBhYm9ydCB0aGUg
dHJhbnNhY3Rpb24pLgotICAgIC8vICAgICAgICBUaGlzIGlzIGEgc2VwYXJhdGUgZXZlbnQsIHdo
aWNoIGZvciBleGFtcGxlIG1lYW5zIHRoYXQgZXZlbiBpZiB5b3UKLSAgICAvLyAgICAgICAgYXR0
YWNoIGEgY2FwdHVyaW5nICJlcnJvciIgaGFuZGxlciBvbiB3aW5kb3csIHlvdSB3b24ndCBzZWUg
YW55IGV2ZW50cwotICAgIC8vICAgICAgICB1bmxlc3MgYW4gZXJyb3IgcmVhbGx5IHdlbnQgdW5o
YW5kbGVkLiBBbmQgeW91IGFsc28gY2FuJ3QgY2FsbAotICAgIC8vICAgICAgICAucHJldmVudERl
ZmF1bHQgb24gdGhlIGVycm9yIGV2ZW50IGZpcmVkIG9uIHRoZSB3aW5kb3cgaW4gb3JkZXIgdG8K
LSAgICAvLyAgICAgICAgcHJldmVudCB0aGUgdHJhbnNhY3Rpb24gZnJvbSBiZWluZyBhYm9ydGVk
LiBJdCdzIHB1cmVseSB0aGVyZSBmb3IKLSAgICAvLyAgICAgICAgZXJyb3IgcmVwb3J0aW5nIGFu
ZCBkaXN0aW5jdGx5IGRpZmZlcmVudCBmcm9tIHRoZSBldmVudCBwcm9wYWdhdGluZyB0bwotICAg
IC8vICAgICAgICB0aGUgd2luZG93LgotICAgIC8vICAgICAgICAKLSAgICAvLyAgICAgICAgVGhp
cyBpcyBzaW1pbGFyIHRvIGhvdyAiZXJyb3IiIGV2ZW50cyBhcmUgaGFuZGxlZCBpbiB3b3JrZXJz
LgotICAgIC8vICAgICAgICAKLSAgICAvLyAgICAgICAgKEkgdGhpbmsgdGhhdCBzbyBmYXIgd2Vi
a2l0IGhhc24ndCBpbXBsZW1lbnRlZCB0aGUgd2luZG93Lm9uZXJyb3IKLSAgICAvLyAgICAgICAg
ZmVhdHVyZSB5ZXQsIHNvIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGZpcmUgdGhlIHNlcGFy
YXRlIGVycm9yCi0gICAgLy8gICAgICAgIGV2ZW50IG9uIHRoZSB3aW5kb3cgdW50aWwgdGhhdCBo
YXMgYmVlbiBpbXBsZW1lbnRlZCkuIiAtLSBKb25hcyBTaWNraW5nCi0KLWRvbmVEaXNwYXRjaGlu
ZzoKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZSgwKTsKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSURCRXZlbnREaXNwYXRjaGVyX2gKLSNkZWZpbmUgSURCRXZl
bnREaXNwYXRjaGVyX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50VGFyZ2V0OwotCi1jbGFzcyBJREJF
dmVudERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50
KiwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFu
ZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgot
Ci1wcml2YXRlOgotICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRp
ZiAvLyBJREJFdmVudERpc3BhdGNoZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiR3JvdXBTZXR0aW5ncy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdl
LmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCRmFjdG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAgICA6IG1fYmFja2VuZChmYWN0b3J5KQotewot
ICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBi
ZSBhZG9wdGVkLgotICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotfQotCi1JREJGYWN0
b3J5Ojp+SURCRmFjdG9yeSgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFj
dG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQot
ewotICAgIGlmICghY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBt
YWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7
Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIEdyb3Vw
U2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3Vw
U2V0dGluZ3MoKTsKLSAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdz
LT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgICAgIGlmICgh
ZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUs
IHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJpbmco
KSk7Ci0gICAgICAgIHJldHVybiByZXF1ZXN0OwotICAgIH0KLSNpZiBFTkFCTEUoV09SS0VSUykK
LSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdv
cmtlcihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsKLSAgICByZXR1cm4g
cmVxdWVzdDsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAv
LyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpOwotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdl
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFu
eTo6Y3JlYXRlTnVsbCgpLCAiIik7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9
IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2Vu
ZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBh
dGgoKSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXNob3J0IElEQkZhY3Rvcnk6OmNtcChQ
YXNzUmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChmaXJzdCk7Ci0gICAgQVNTRVJUKHNlY29uZCk7
Ci0KLSAgICBpZiAoZmlyc3QtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlIHx8IHNlY29u
ZC0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gICAgCi0g
ICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFyZShzZWNvbmQu
Z2V0KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlfaAotI2Rl
ZmluZSBJREJGYWN0b3J5X2gKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRl
ICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlOwotY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7Ci1jbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJ
REJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZSogZmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
RmFjdG9yeShmYWN0b3J5KSk7Ci0gICAgfQotICAgIH5JREJGYWN0b3J5KCk7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwotCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBz
aG9ydCBjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vj
b25kLCBFeGNlcHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgSURCRmFjdG9yeShJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZSopOwotCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlPiBtX2JhY2tlbmQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gSURCRmFjdG9yeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UKLSAgICBdIElEQkZhY3RvcnkgewotICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBnZXREYXRhYmFzZU5hbWVzKCk7Ci0KLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3Blbihp
biBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QgZGVsZXRlRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUpCi0gICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLQotICAgICAgICBzaG9ydCBjbXAo
aW4gSURCS2V5IGZpcnN0LCBpbiBJREJLZXkgc2Vjb25kKQotICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlz
dC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIGNvbXB1dGVGaWxlSWRlbnRpZmllcihTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga0xldmVs
REJGaWxlU3VmZml4W10gPSAiQDEiOwotICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkgKyBrTGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBTdHJpbmcg
Y29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihz
ZWN1cml0eU9yaWdpbikgKyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZh
Y3RvcnlCYWNrZW5kSW1wbCgpCi0gICAgOiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6Y3JlYXRlKCkpCi17Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpyZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJ
ZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1
bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1
ZUlkZW50aWZpZXIpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6YWRkSURCQmFj
a2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlKQotewotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmVNYXAuY29udGFpbnMo
ZmlsZUlkZW50aWZpZXIpKTsKLSAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZp
ZXIsIGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1v
dmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmVNYXAuY29udGFpbnMoZmlsZUlkZW50aWZpZXIpKTsKLSAgICBt
X2JhY2tpbmdTdG9yZU1hcC5yZW1vdmUoZmlsZUlkZW50aWZpZXIpOwotfQotCi12b2lkIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdp
biwgZGF0YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VOYW1lcyA9IERPTVN0
cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsKLSAg
ICBiYWNraW5nU3RvcmUtPmdldERhdGFiYXNlTmFtZXMoZm91bmROYW1lcyk7Ci0gICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5hbWVzLmJlZ2luKCk7IGl0
ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFiYXNlTmFtZXMtPmFwcGVu
ZCgqaXQpOwotCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNl
KCkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17
Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXJlY3RvcnkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3Jr
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNr
cywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotfQotCi12b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAg
Y29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihu
YW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVy
KTsKLSAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKLSAgICAgICAg
Ly8gSWYgdGhlcmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5
IGRlbGV0ZSB0aGUKLSAgICAgICAgLy8gZGF0YWJhc2UuCi0gICAgICAgIGl0LT5zZWNvbmQtPmRl
bGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVy
IHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVu
QmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVy
cm9yLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
Z2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFw
LnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgIGRhdGFi
YXNlQmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyZWN0b3J5KQotewotICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1
dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7Ci0gICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVy
YXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUg
PSBpdDItPnNlY29uZDsKLSAgICBlbHNlIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgYmFj
a2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5n
ZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwotI2Vsc2UKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoYmFja2lu
Z1N0b3JlKQotICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rv
cnkpCi17Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IHBycFNl
Y3VyaXR5T3JpZ2luOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0
ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURC
RGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZp
bmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmVuZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2
ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRv
IGNvbXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3Mp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJv
bSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9y
aWdpbiwgZGF0YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VC
YWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9y
ZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVu
dGlmaWVyKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlPihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7Ci0gICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotI2lmbmRlZiBJREJGYWN0b3J5QmFja2VuZEltcGxfaAotI2RlZmluZSBJREJGYWN0b3J5
QmFja2VuZEltcGxfaAotCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OwotCi1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGwgOiBwdWJsaWMgSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW1wbD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5
QmFja2VuZEltcGwoKTsKLQotICAgIC8vIE5vdGlmaWNhdGlvbnMgZnJvbSB3ZWFrIHBvaW50ZXJz
LgotICAgIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVl
SWRlbnRpZmllcik7Ci0gICAgdm9pZCBhZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBm
aWxlSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlKik7Ci0gICAgdm9pZCByZW1vdmVJREJCYWNr
aW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0g
ICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotcHJpdmF0ZToK
LSAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2b2lkIG9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKLSAgICBJREJEYXRhYmFzZUJhY2tl
bmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBJREJCYWNraW5nU3RvcmUqPiBJREJCYWNraW5nU3RvcmVNYXA7Ci0gICAgSURCQmFja2luZ1N0
b3JlTWFwIG1fYmFja2luZ1N0b3JlTWFwOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKLQotICAgIC8vIE9ubHkgb25lIGlu
c3RhbmNlIG9mIHRoZSBmYWN0b3J5IHNob3VsZCBleGlzdCBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAg
ICBzdGF0aWMgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBpZGJGYWN0b3J5QmFja2VuZEltcGw7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRmFj
dG9yeUJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgiCi0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNlcnJvciAiQ2hyb21pdW0g
c2hvdWxkIG5vdCBjb21waWxlIHRoaXMgZmlsZSBhbmQgaW5zdGVhZCBkZWZpbmUgaXRzIG93biB2
ZXJzaW9uIG9mIHRoaXMgZmFjdG9yeSB0aGF0IG5hdmlnYXRlcyB0aGUgbXVsdGktcHJvY2VzcyBi
b3VuZHJ5LiIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4g
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6Y3JlYXRlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZV9oCi0jZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
X2gKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEZyYW1lOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsK
LWNsYXNzIFdvcmtlckNvbnRleHQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8v
IFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJ5IElEQkZhY3RvcnkgKGFzeW5jKSBhbmQgSURCRmFjdG9y
eVN5bmMgKHN5bmMpLgotLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2Vu
ZEltcGwgYW5kIG9wdGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQotLy8gY2FsbHMg
YWNyb3NzIHByb2Nlc3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91
bGQgYmUgbm9uLWJsb2NraW5nIGFuZAotLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0
aHJlYWQgaWYgbmVjZXNzYXJ5LgotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtl
cihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCi0KLSNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0j
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKLQotSURC
SW5kZXg6OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKLSAgICA6IG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKLSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJU
KG1fYmFja2VuZCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOwotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uKTsKLX0KLQotSURCSW5kZXg6On5JREJJbmRleCgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJ
bmRleDo6b3BlbkN1cnNvciIpOwotICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpORVhU
ICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVjdGlv
biAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9OT19E
VVBMSUNBVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVuIHNw
ZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMTQw
NgotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IpOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihr
ZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChr
ZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJJbmRleDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0g
SURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwotICAgIGlmIChkaXJlY3Rpb24g
IT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQ
TElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElE
QkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVk
IHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3No
b3dfYnVnLmNnaT9pZD0xMTQwNgotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
T05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNv
clR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOwotICAgIG1f
YmFja2VuZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleDo6Z2V0Iik7Ci0gICAg
aWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tl
bmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0
aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKLSAgICBpZiAoa2V5ICYm
IChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1f
YmFja2VuZC0+Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSURCSW5kZXhfaAotI2RlZmluZSBJREJJbmRleF9oCi0KLSNp
bmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJPYmplY3RTdG9yZTsKLQotY2xhc3MgSURCSW5kZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJJbmRleD4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQk9iamVj
dFN0b3JlKiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleChiYWNrZW5kLCBvYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb24pKTsKLSAgICB9Ci0gICAgfklEQkluZGV4KCk7Ci0KLSAgICAvLyBJbXBs
ZW1lbnQgdGhlIElETAotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
LT5uYW1lKCk7IH0KLSAgICBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9Ci0gICAgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmQtPmtleVBhdGgoKTsgfQotICAgIGJvb2wgdW5pcXVlKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kLT51bmlxdWUoKTsgfQotICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bXVsdGlFbnRyeSgpOyB9Ci0KLSAgICAvLyBGSVhNRTog
VHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwgMCwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlS
YW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJ
REJLZXlSYW5nZSo+KDApLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNv
bnRleHQsIDAsIGVjKTsgfSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNv
bnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBJREJJbmRleChQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJh
bnNhY3Rpb24qKTsKLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFj
a2VuZDsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkluZGV4X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCSW5kZXguaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQotICAgIF0gSURCSW5kZXggewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJ
REJPYmplY3RTdG9yZSBvYmplY3RTdG9yZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBrZXlQYXRoOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1bmlx
dWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIG11bHRpRW50cnk7Ci0KLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbkN1
cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVx
dWVzdCBvcGVuS2V5Q3Vyc29yKGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtP
cHRpb25hbF0gdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQotICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJSZXF1ZXN0IGdldChpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBJREJSZXF1ZXN0IGdldEtleShpbiBJREJLZXkga2V5KQotICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIFtPcHRpb25hbF0gSURCS2V5UmFu
Z2UgcmFuZ2UpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQo
aW4gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24p
OwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tl
bmRJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkNy
b3NzVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
IklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
LSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCVHJh
Y2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkluZGV4QmFja2VuZEltcGw6OklE
QkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVC
YWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3Rv
cmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnkpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2RhdGFiYXNl
SWQoZGF0YWJhc2VJZCkKLSAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFj
a2VuZCkKLSAgICAsIG1faWQoaWQpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fc3RvcmVO
YW1lKHN0b3JlTmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV91bmlxdWUo
dW5pcXVlKQotICAgICwgbV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCi17Ci19Ci0KLUlEQkluZGV4
QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
c3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnkpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2RhdGFi
YXNlSWQoZGF0YWJhc2VJZCkKLSAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3Jl
QmFja2VuZCkKLSAgICAsIG1faWQoSW52YWxpZElkKQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAg
LCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKLSAgICAs
IG1fdW5pcXVlKHVuaXF1ZSkKLSAgICAsIG1fbXVsdGlFbnRyeShtdWx0aUVudHJ5KQotewotfQot
Ci1JREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwg
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJh
Y2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odW50eXBlZERp
cmVjdGlvbik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdT
dG9yZUN1cnNvcjsKLQotICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4
LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgt
PmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgotICAgICAgICBiYWNraW5n
U3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcihpbmRl
eC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4
LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKLSAgICBjYXNl
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFi
YWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZShpbmRl
eC0+bV9zdG9yZU5hbWUsIGVjKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUgJiYgIWVjKTsKLQot
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgZGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOwotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQkluZGV4
QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJ
bXBsOjpvcGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gdGhpczsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7
Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJh
bnNhY3Rpb24pKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlD
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29y
Iik7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKLSAgICBS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3Bl
bkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJh
bnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudElu
dGVybmFsIik7Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotCi0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3Rv
cmUtPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29y
OjpORVhUKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0g
ICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLSAg
ICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkpOwotfQotCi12b2lkIElE
QkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJB
Q0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY291bnRJbnRlcm5hbCwgdGhpcywgcmFu
Z2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29s
IGdldE9iamVjdCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7Ci0gICAgLy8gRklY
TUU6IFNwbGl0IGdldEludGVybmFsIGludG8gdHdvIGZ1bmN0aW9ucywgZ2V0dGluZyByaWQgb2Zm
IHxnZXRPYmplY3R8LgotICAgIGlmIChnZXRPYmplY3QpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVl
ID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+bV9kYXRh
YmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAq
a2V5KTsKLSAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+bV9iYWNr
aW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKLSAgICAg
ICAgaWYgKCFrZXlSZXN1bHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PElEQktleSo+KDApKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0KCkpOwotICAgIH0KLX0K
LQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBy
cEtleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Z2V0SW50ZXJuYWwsIGluZGV4LCBrZXksIHRydWUsIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElE
Ql9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5Iik7Ci0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBw
cnBLZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JmdldEludGVybmFsLCBpbmRleCwga2V5LCBmYWxzZSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQot
Ym9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKLXsKLSAgICBpZiAoIW1fdW5pcXVl
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFy
eUtleTsKLSAgICBib29sIGZvdW5kID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luSW5kZXgo
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pZCwgKmluZGV4S2V5
LCBmb3VuZFByaW1hcnlLZXkpOwotICAgIGlmICghZm91bmQpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5
S2V5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCShy
ZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SURCSW5kZXhCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkluZGV4QmFja2VuZEltcGxfaAotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCS2V5
OwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
c3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2Vu
ZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUJhY2tlbmQsIGlkLCBu
YW1lLCBzdG9yZU5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkluZGV4QmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUJhY2tlbmQsIG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKLQotICAgIGludDY0
X3QgaWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faWQgIT0gSW52YWxpZElkKTsK
LSAgICAgICAgcmV0dXJuIG1faWQ7Ci0gICAgfQotICAgIHZvaWQgc2V0SWQoaW50NjRfdCBpZCkg
eyBtX2lkID0gaWQ7IH0KLSAgICBib29sIGhhc1ZhbGlkSWQoKSBjb25zdCB7IHJldHVybiBtX2lk
ICE9IEludmFsaWRJZDsgfTsKLQotICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChjb25zdCBJREJL
ZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwKTsKLQotICAgIC8vIElt
cGxlbWVudHMgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLgotICAgIHZpcnR1YWwgU3RyaW5nIG5h
bWUoKSB7IHJldHVybiBtX25hbWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBzdG9yZU5hbWUoKSB7
IHJldHVybiBtX3N0b3JlTmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSB7IHJl
dHVybiBtX2tleVBhdGg7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdW5pcXVlKCkgeyByZXR1cm4gbV91
bmlxdWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpIHsgcmV0dXJuIG1fbXVsdGlF
bnRyeTsgfQotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi1wcml2YXRlOgotICAgIElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3Jl
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwg
aW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKLSAg
ICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICBz
dGF0aWMgdm9pZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4pOwotICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4s
IGJvb2wgZ2V0T2JqZWN0LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgc3RhdGlj
IGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IG1fYmFja2luZ1N0b3JlOwotCi0gICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29u
c3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogbV9vYmplY3RTdG9yZUJhY2tlbmQ7Ci0gICAg
aW50NjRfdCBtX2lkOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fc3RvcmVOYW1l
OwotICAgIFN0cmluZyBtX2tleVBhdGg7Ci0gICAgYm9vbCBtX3VuaXF1ZTsKLSAgICBib29sIG1f
bXVsdGlFbnRyeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBJREJJbmRleEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xh
c3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQklu
ZGV4QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tl
bmRJbnRlcmZhY2UoKSB7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSA9IDA7Ci0gICAg
dmlydHVhbCBTdHJpbmcgc3RvcmVOYW1lKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBh
dGgoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVuaXF1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgbXVsdGlFbnRyeSgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktl
eT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NS
ZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFj
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
OTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJLZXku
aCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUlEQktleTo6SURCS2V5KCkKLSAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkKLSAgICAsIG1f
c2l6ZUVzdGltYXRlKGtPdmVyaGVhZFNpemUpCi17Ci19Ci0KLUlEQktleTo6fklEQktleSgpCi17
Ci19Ci0KLWludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKLXsK
LSAgICBBU1NFUlQob3RoZXIpOwotICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1fdHlwZSkKLSAg
ICAgICAgcmV0dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7Ci0KLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQXJyYXlUeXBlOgotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5jb21wYXJlKG90
aGVyLT5tX2FycmF5W2ldLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5tX2FycmF5LnNp
emUoKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgp
ID4gb3RoZXItPm1fYXJyYXkuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIGNhc2UgU3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuIC1jb2RlUG9p
bnRDb21wYXJlKG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOwotICAgIGNhc2UgRGF0ZVR5cGU6
Ci0gICAgICAgIHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6Ci0gICAgICAg
ICAgICAgICAgKG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7Ci0gICAgY2FzZSBOdW1i
ZXJUeXBlOgotICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVtYmVyKSA/IC0x
IDoKLSAgICAgICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVyKSA/IDEgOiAw
OwotICAgIGNhc2UgSW52YWxpZFR5cGU6Ci0gICAgY2FzZSBNaW5UeXBlOgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSURCS2V5Ojppc0xlc3NU
aGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG90aGVyKTsKLSAg
ICByZXR1cm4gY29tcGFyZShvdGhlcikgPT0gLTE7Ci19Ci0KLWJvb2wgSURCS2V5Ojppc0VxdWFs
KGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCFvdGhlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCS2V5X2gKLSNk
ZWZpbmUgSURCS2V5X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElE
QktleT4gewotcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gS2V5
QXJyYXk7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUludmFsaWQoKQot
ICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktl
eSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBJbnZhbGlkVHlwZTsKLSAgICAgICAgcmV0
dXJuIGlkYktleS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5PiBjcmVhdGVOdW1iZXIoZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJ
REJLZXk+IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7Ci0gICAgICAgIGlkYktleS0+
bV90eXBlID0gTnVtYmVyVHlwZTsKLSAgICAgICAgaWRiS2V5LT5tX251bWJlciA9IG51bWJlcjsK
LSAgICAgICAgaWRiS2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKLSAgICAg
ICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAg
ICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOwotICAg
ICAgICBpZGJLZXktPm1fdHlwZSA9IFN0cmluZ1R5cGU7Ci0gICAgICAgIGlkYktleS0+bV9zdHJp
bmcgPSBzdHJpbmc7Ci0gICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc3RyaW5nLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVEYXRlKGRvdWJs
ZSBkYXRlKQotICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYo
bmV3IElEQktleSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBEYXRlVHlwZTsKLSAgICAg
ICAgaWRiS2V5LT5tX2RhdGUgPSBkYXRlOwotICAgICAgICBpZGJLZXktPm1fc2l6ZUVzdGltYXRl
ICs9IHNpemVvZihkb3VibGUpOwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUFycmF5KGNvbnN0IEtl
eUFycmF5JiBhcnJheSkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IGFk
b3B0UmVmKG5ldyBJREJLZXkoKSk7Ci0gICAgICAgIGlkYktleS0+bV90eXBlID0gQXJyYXlUeXBl
OwotICAgICAgICBpZGJLZXktPm1fYXJyYXkgPSBhcnJheTsKLQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKQotICAgICAgICAgICAgaWRiS2V5LT5tX3Np
emVFc3RpbWF0ZSArPSBhcnJheVtpXS0+bV9zaXplRXN0aW1hdGU7Ci0KLSAgICAgICAgcmV0dXJu
IGlkYktleS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgfklEQktleSgpOwotCi0gICAgLy8gSW4g
b3JkZXIgb2YgdGhlIGxlYXN0IHRvIHRoZSBoaWdoZXN0IHByZWNlZGVudCBpbiB0ZXJtcyBvZiBz
b3J0IG9yZGVyLgotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIEludmFsaWRUeXBlID0gMCwKLSAg
ICAgICAgQXJyYXlUeXBlLAotICAgICAgICBTdHJpbmdUeXBlLAotICAgICAgICBEYXRlVHlwZSwK
LSAgICAgICAgTnVtYmVyVHlwZSwKLSAgICAgICAgTWluVHlwZQotICAgIH07Ci0KLSAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlICE9IEludmFsaWRUeXBlOyB9Ci0KLSAgICBjb25zdCBLZXlBcnJheSYg
YXJyYXkoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBcnJheVR5cGUp
OwotICAgICAgICByZXR1cm4gbV9hcnJheTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0
cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFN0cmluZ1R5cGUp
OwotICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgfQotCi0gICAgZG91YmxlIGRhdGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBEYXRlVHlwZSk7Ci0gICAgICAg
IHJldHVybiBtX2RhdGU7Ci0gICAgfQotCi0gICAgZG91YmxlIG51bWJlcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQobV90eXBlID09IE51bWJlclR5cGUpOwotICAgICAgICByZXR1cm4g
bV9udW1iZXI7Ci0gICAgfQotCi0gICAgaW50IGNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikg
Y29uc3Q7Ci0gICAgYm9vbCBpc0xlc3NUaGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Owot
ICAgIGJvb2wgaXNFcXVhbChjb25zdCBJREJLZXkqIG90aGVyKSBjb25zdDsKLQotICAgIHNpemVf
dCBzaXplRXN0aW1hdGUoKSBjb25zdCB7IHJldHVybiBtX3NpemVFc3RpbWF0ZTsgfQotCi0gICAg
c3RhdGljIGludCBjb21wYXJlVHlwZXMoVHlwZSBhLCBUeXBlIGIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYiAtIGE7Ci0gICAgfQotCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURC
S2V5Pjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OmRlcmVm
OwotCi1wcml2YXRlOgotICAgIElEQktleSgpOwotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAgS2V5
QXJyYXkgbV9hcnJheTsKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgZG91YmxlIG1fZGF0ZTsK
LSAgICBkb3VibGUgbV9udW1iZXI7Ci0KLSAgICBzaXplX3QgbV9zaXplRXN0aW1hdGU7Ci0KLSAg
ICAvLyBWZXJ5IHJvdWdoIGVzdGltYXRlIG9mIG1pbmltdW0ga2V5IHNpemUgb3ZlcmhlYWQuCi0g
ICAgZW51bSB7IGtPdmVyaGVhZFNpemUgPSAxNiB9OwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJLZXlfaApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJLZXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBDdXN0b21Ub0pTT2JqZWN0Ci0gICAgXSBJREJL
ZXkgewotICAgICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4K
LSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvZHRvYS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleVBhdGhMZXhlciB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBUb2tlblR5cGUgewotICAgICAgICBUb2tlbklkZW50aWZpZXIsCi0gICAgICAg
IFRva2VuRG90LAotICAgICAgICBUb2tlbkVuZCwKLSAgICAgICAgVG9rZW5FcnJvcgotICAgIH07
Ci0KLSAgICBleHBsaWNpdCBJREJLZXlQYXRoTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQotICAgICAg
ICA6IG1fc3RyaW5nKHMpCi0gICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCi0gICAgICAg
ICwgbV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQotICAgICAgICAsIG1fY3VycmVu
dFRva2VuVHlwZShUb2tlbkVycm9yKQotICAgIHsKLSAgICB9Ci0KLSAgICBUb2tlblR5cGUgY3Vy
cmVudFRva2VuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRva2VuVHlwZTsgfQotCi0g
ICAgVG9rZW5UeXBlIG5leHRUb2tlblR5cGUoKQotICAgIHsKLSAgICAgICAgbV9jdXJyZW50VG9r
ZW5UeXBlID0gbGV4KG1fY3VycmVudEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50
VG9rZW5UeXBlOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYgY3VycmVudEVsZW1lbnQoKSB7
IHJldHVybiBtX2N1cnJlbnRFbGVtZW50OyB9Ci0KLXByaXZhdGU6Ci0gICAgVG9rZW5UeXBlIGxl
eChTdHJpbmcmKTsKLSAgICBUb2tlblR5cGUgbGV4SWRlbnRpZmllcihTdHJpbmcmKTsKLSAgICBT
dHJpbmcgbV9jdXJyZW50RWxlbWVudDsKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgY29uc3Qg
VUNoYXIqIG1fcHRyOwotICAgIGNvbnN0IFVDaGFyKiBtX2VuZDsKLSAgICBUb2tlblR5cGUgbV9j
dXJyZW50VG9rZW5UeXBlOwotfTsKLQotSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5
UGF0aExleGVyOjpsZXgoU3RyaW5nJiBlbGVtZW50KQotewotICAgIGlmIChtX3B0ciA+PSBtX2Vu
ZCkKLSAgICAgICAgcmV0dXJuIFRva2VuRW5kOwotICAgIEFTU0VSVChtX3B0ciA8IG1fZW5kKTsK
LQotICAgIGlmICgqbV9wdHIgPT0gJy4nKSB7Ci0gICAgICAgICsrbV9wdHI7Ci0gICAgICAgIHJl
dHVybiBUb2tlbkRvdDsKLSAgICB9Ci0gICAgcmV0dXJuIGxleElkZW50aWZpZXIoZWxlbWVudCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIo
VUNoYXIgYykKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IChjID09ICdfJykgfHwg
KGMgPT0gJyQnKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJDaGFy
YWN0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCAo
YyA9PSAnXycpIHx8IChjID09ICckJyk7Ci19Ci0KLUlEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBl
IElEQktleVBhdGhMZXhlcjo6bGV4SWRlbnRpZmllcihTdHJpbmcmIGVsZW1lbnQpCi17Ci0gICAg
Y29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9wdHI7Ci0gICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYgaXNT
YWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVyKCptX3B0cikpCi0gICAgICAgICsrbV9wdHI7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gVG9rZW5FcnJvcjsKLQotICAgIHdoaWxlIChtX3B0ciA8
IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKLSAgICAgICAgKytt
X3B0cjsKLQotICAgIGVsZW1lbnQgPSBTdHJpbmcoc3RhcnQsIG1fcHRyIC0gc3RhcnQpOwotICAg
IHJldHVybiBUb2tlbklkZW50aWZpZXI7Ci19Ci0KLWJvb2wgSURCSXNWYWxpZEtleVBhdGgoY29u
c3QgU3RyaW5nJiBrZXlQYXRoKQotewotICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwot
ICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKLSAgICBJREJQYXJzZUtleVBhdGgo
a2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Ci0gICAgcmV0dXJuIGVycm9yID09IElE
QktleVBhdGhQYXJzZUVycm9yTm9uZTsKLX0KLQotdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8U3RyaW5nPiYgZWxlbWVudHMsIElEQktleVBhdGhQYXJz
ZUVycm9yJiBlcnJvcikKLXsKLSAgICAvLyBJREJLZXlQYXRoIDo6PSBFTVBUWV9TVFJJTkcgfCBp
ZGVudGlmaWVyICgnLicgaWRlbnRpZmllcikqCi0gICAgLy8gVGhlIGJhc2ljIHN0YXRlIG1hY2hp
bmUgaXM6Ci0gICAgLy8gICBTdGFydCA9PiB7SWRlbnRpZmllciwgRW5kfQotICAgIC8vICAgSWRl
bnRpZmllciA9PiB7RG90LCBFbmR9Ci0gICAgLy8gICBEb3QgPT4ge0lkZW50aWZpZXJ9Ci0gICAg
Ly8gSXQgYmFpbHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMgYW4gZXJyb3IsIGJ1dCBkb2Vzbid0
IGRpc2NhcmQgdGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJzZS4KLSAgICBlbnVtIFBhcnNlclN0
YXRlIHsgSWRlbnRpZmllciwgRG90LCBFbmQgfTsKLQotICAgIElEQktleVBhdGhMZXhlciBsZXhl
cihrZXlQYXRoKTsKLSAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBs
ZXhlci5uZXh0VG9rZW5UeXBlKCk7Ci0gICAgUGFyc2VyU3RhdGUgc3RhdGU7Ci0gICAgaWYgKHRv
a2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRpZmllcikKLSAgICAgICAgc3Rh
dGUgPSBJZGVudGlmaWVyOwotICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4
ZXI6OlRva2VuRW5kKQotICAgICAgICBzdGF0ZSA9IEVuZDsKLSAgICBlbHNlIHsKLSAgICAgICAg
ZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0OwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBj
YXNlIElkZW50aWZpZXIgOiB7Ci0gICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBBU1NF
UlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKTsKLQotICAg
ICAgICAgICAgU3RyaW5nIGVsZW1lbnQgPSBsZXhlci5jdXJyZW50RWxlbWVudCgpOwotICAgICAg
ICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwotCi0gICAgICAgICAgICB0b2tlblR5cGUg
PSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW5UeXBlID09IElE
QktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBEb3Q7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkVu
ZCkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IEVuZDsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JJZGVudGlmaWVyOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRG90OiB7Ci0gICAgICAgICAgICBJREJLZXlQYXRoTGV4
ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpOwot
Ci0gICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7Ci0gICAgICAg
ICAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQot
ICAgICAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JEb3Q7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBFbmQ6IHsKLSAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0
aFBhcnNlRXJyb3JOb25lOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQ
YXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmgJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQktleVBh
dGhfaAotI2RlZmluZSBJREJLZXlQYXRoX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIElEQktleVBhdGhQYXJzZUVycm9y
IHsKLSAgICBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUsCi0gICAgSURCS2V5UGF0aFBhcnNlRXJy
b3JTdGFydCwKLSAgICBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXIsCi0gICAgSURCS2V5
UGF0aFBhcnNlRXJyb3JEb3QsCi19OwotCi1ib29sIElEQklzVmFsaWRLZXlQYXRoKGNvbnN0IFN0
cmluZyYpOwotdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmlu
Zz4mLCBJREJLZXlQYXRoUGFyc2VFcnJvciYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgotCi0jZW5kaWYgLy8gSURCS2V5UGF0aF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQotI2Vycm9yICJDaHJvbWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBp
bnN0ZWFkIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBmYWN0b3J5IHRoYXQgbmF2aWdh
dGVzIHRoZSBtdWx0aS1wcm9jZXNzIGJvdW5kcnkuIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotdm9pZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktl
eXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+JiwgMD4gdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZCBvbmNlIEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVk
U2NyaXB0VmFsdWUuCi19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZCBvbmNlIEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0
VmFsdWUuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2Vu
ZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXlQYXRoQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJREJLZXlQYXRoQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJLZXlQYXRoQmFj
a2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLWNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCS2V5UGF0aEJhY2tlbmRJbXBs
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRW
YWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgMD4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktl
eT4sIDA+JiBrZXlzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlm
IC8vIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQktleVJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJLZXlSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQktleVJh
bmdlOjpJREJLZXlSYW5nZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURC
S2V5PiB1cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlwZSB1cHBl
clR5cGUpCi0gICAgOiBtX2xvd2VyKGxvd2VyKQotICAgICwgbV91cHBlcih1cHBlcikKLSAgICAs
IG1fbG93ZXJUeXBlKGxvd2VyVHlwZSkKLSAgICAsIG1fdXBwZXJUeXBlKHVwcGVyVHlwZSkKLXsK
LX0KLQotUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gcHJwS2V5OwotICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6
SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6
OmNyZWF0ZShrZXksIGtleSwgTG93ZXJCb3VuZENsb3NlZCwgVXBwZXJCb3VuZENsb3NlZCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpsb3dlckJvdW5kKFBhc3NS
ZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpZiAoYm91bmQgJiYgKGJvdW5kLT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKGJvdW5kLCAw
LCBvcGVuID8gTG93ZXJCb3VuZE9wZW4gOiBMb3dlckJvdW5kQ2xvc2VkLCBVcHBlckJvdW5kQ2xv
c2VkKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6OnVwcGVyQm91
bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmIChib3VuZCAmJiAoYm91bmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRU
eXBlKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUo
MCwgYm91bmQsIExvd2VyQm91bmRDbG9zZWQsIG9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVy
Qm91bmRDbG9zZWQpOwotfQotCi1QYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6
Ym91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIs
IGJvb2wgbG93ZXJPcGVuLCBib29sIHVwcGVyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgaWYgKChsb3dlciAmJiAobG93ZXItPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkg
fHwgKHVwcGVyICYmICh1cHBlci0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGlmIChsb3dlciAmJiB1cHBlciAmJiB1cHBlci0+aXNMZXNzVGhh
bihsb3dlci5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobG93ZXIgJiYgdXBwZXIg
JiYgdXBwZXItPmlzRXF1YWwobG93ZXIuZ2V0KCkpICYmIChsb3dlck9wZW4gfHwgdXBwZXJPcGVu
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUobG93
ZXIsIHVwcGVyLCBsb3dlck9wZW4gPyBMb3dlckJvdW5kT3BlbiA6IExvd2VyQm91bmRDbG9zZWQs
IHVwcGVyT3BlbiA/IFVwcGVyQm91bmRPcGVuIDogVXBwZXJCb3VuZENsb3NlZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQktleVJhbmdlX2gKLSNkZWZpbmUg
SURCS2V5UmFuZ2VfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRl
ICJJREJLZXkuaCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCS2V5UmFuZ2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+IHsKLXB1YmxpYzoKLSAg
ICBlbnVtIExvd2VyQm91bmRUeXBlIHsKLSAgICAgICAgTG93ZXJCb3VuZE9wZW4sCi0gICAgICAg
IExvd2VyQm91bmRDbG9zZWQKLSAgICB9OwotICAgIGVudW0gVXBwZXJCb3VuZFR5cGUgewotICAg
ICAgICBVcHBlckJvdW5kT3BlbiwKLSAgICAgICAgVXBwZXJCb3VuZENsb3NlZAotICAgIH07Ci0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
S2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5kVHlwZSBsb3dl
clR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCS2V5UmFuZ2UobG93ZXIsIHVwcGVyLCBsb3dlclR5cGUsIHVwcGVyVHlw
ZSkpOwotICAgIH0KLSAgICB+SURCS2V5UmFuZ2UoKSB7IH0KLQotICAgIFBhc3NSZWZQdHI8SURC
S2V5PiBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIG1fbG93ZXI7IH0KLSAgICBQYXNzUmVmUHRyPElE
QktleT4gdXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3VwcGVyOyB9Ci0gICAgYm9vbCBsb3dlck9w
ZW4oKSBjb25zdCB7IHJldHVybiBtX2xvd2VyVHlwZSA9PSBMb3dlckJvdW5kT3BlbjsgfQotICAg
IGJvb2wgdXBwZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV91cHBlclR5cGUgPT0gVXBwZXJCb3Vu
ZE9wZW47IH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBvbmx5KFBhc3NS
ZWZQdHI8SURCS2V5PiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGxvd2VyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBF
eGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0gICAgICByZXR1cm4gbG93ZXJCb3VuZChib3VuZCwg
ZmFsc2UsIGVjKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGxv
d2VyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiB1cHBlckJvdW5kKFBh
c3NSZWZQdHI8SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAg
cmV0dXJuIHVwcGVyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7Ci0gICAgfQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiB1cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3Vu
ZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElE
QktleT4gdXBwZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIHsKLSAgICAgIHJldHVybiBib3Vu
ZChsb3dlciwgdXBwZXIsIGZhbHNlLCBmYWxzZSwgZWMpOwotICAgIH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNz
UmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBFeGNlcHRpb25Db2RlJiBlYykK
LSAgICB7Ci0gICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVwcGVyLCBsb3dlck9wZW4sIGZhbHNl
LCBlYyk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBib3VuZChQ
YXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgYm9vbCBs
b3dlck9wZW4sIGJvb2wgdXBwZXJPcGVuLCBFeGNlcHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0g
ICAgSURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktl
eT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJCb3VuZFR5cGUgdXBwZXJU
eXBlKTsKLQotICAgIFJlZlB0cjxJREJLZXk+IG1fbG93ZXI7Ci0gICAgUmVmUHRyPElEQktleT4g
bV91cHBlcjsKLSAgICBMb3dlckJvdW5kVHlwZSBtX2xvd2VyVHlwZTsKLSAgICBVcHBlckJvdW5k
VHlwZSBtX3VwcGVyVHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
Ci0KLSNlbmRpZiAvLyBJREJLZXlSYW5nZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQktleVJhbmdlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJLZXlSYW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UKLSAgICBdIElEQktleVJhbmdlIHsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIElEQktleSBsb3dlcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktl
eSB1cHBlcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbG93ZXJPcGVuOwot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9wZW47Ci0KLSAgICAgICAg
c3RhdGljIElEQktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQotICAgICAgICAgICAgcmFp
c2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHN0YXRpYyBJREJLZXlSYW5nZSBs
b3dlckJvdW5kKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pCi0g
ICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgc3RhdGlj
IElEQktleVJhbmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9uYWxdIGJv
b2xlYW4gb3BlbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwot
ICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5IGxvd2VyLCBpbiBJREJL
ZXkgdXBwZXIsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4sIGluIFtPcHRpb25hbF0g
Ym9vbGVhbiB1cHBlck9wZW4pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTUzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotI2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLSNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKLSNpbmNs
dWRlICJMZXZlbERCQ29tcGFyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgot
I2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgot
I2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJD
b2Rpbmc7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9v
bCBnZXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGlu
dDY0X3QmIGZvdW5kSW50KQotewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFk
Yi0+Z2V0KGtleSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRJ
bnQgPSBkZWNvZGVJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMg
Ym9vbCBwdXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXks
IGludDY0X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRiLT5wdXQoa2V5LCBlbmNvZGVJbnQodmFs
dWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBi
b29sIGdldFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtl
eSwgU3RyaW5nJiBmb3VuZFN0cmluZykKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAg
IGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGZvdW5kU3RyaW5nID0gZGVjb2RlU3RyaW5nKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0
aW9uPgotc3RhdGljIGJvb2wgcHV0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZl
Y3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKCFkYi0+cHV0
KGtleSwgZW5jb2RlU3RyaW5nKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBjb21wYXJlS2V5cyhjb25zdCBMZXZlbERCU2xp
Y2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYikKLXsKLSAgICByZXR1cm4gY29tcGFyZShhLCBi
KTsKLX0KLQotc3RhdGljIGludCBjb21wYXJlSW5kZXhLZXlzKGNvbnN0IExldmVsREJTbGljZSYg
YSwgY29uc3QgTGV2ZWxEQlNsaWNlJiBiKQotewotICAgIHJldHVybiBjb21wYXJlKGEsIGIsIHRy
dWUpOwotfQotCi1jbGFzcyBDb21wYXJhdG9yIDogcHVibGljIExldmVsREJDb21wYXJhdG9yIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIGludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwg
Y29uc3QgTGV2ZWxEQlNsaWNlJiBiKSBjb25zdCB7IHJldHVybiBJREJMZXZlbERCQ29kaW5nOjpj
b21wYXJlKGEsIGIpOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gImlkYl9jbXAxIjsgfQotfTsKLQotc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZl
bERCRGF0YWJhc2UqIGRiKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtZXRhRGF0YUtleSA9
IFNjaGVtYVZlcnNpb25LZXk6OmVuY29kZSgpOwotCi0gICAgaW50NjRfdCBzY2hlbWFWZXJzaW9u
ID0gMDsKLSAgICBpZiAoIWdldEludChkYiwgbWV0YURhdGFLZXksIHNjaGVtYVZlcnNpb24pKSB7
Ci0gICAgICAgIHNjaGVtYVZlcnNpb24gPSAwOwotICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0
YURhdGFLZXksIHNjaGVtYVZlcnNpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5LCB3ZSdsbCBuZWVkIHRvIGJlIGFibGUgdG8g
dHJhbnNpdGlvbiBiZXR3ZWVuIHNjaGVtYXMuCi0gICAgaWYgKHNjaGVtYVZlcnNpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gRG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhpcyB2ZXJz
aW9uLgotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKLSAg
ICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0g
ICAgLCBtX2RiKGRiKQotewotICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50
aWZpZXIsIHRoaXMpOwotfQotCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9p
ZGVudGlmaWVyKTsKLQotICAgIC8vIG1fZGIncyBkZXN0cnVjdG9yIHVzZXMgbV9jb21wYXJhdG9y
LiBUaGUgb3JkZXIgb2YgZGVzdHJ1Y3Rpb24gaXMgaW1wb3J0YW50LgotICAgIG1fZGIuY2xlYXIo
KTsKLSAgICBtX2NvbXBhcmF0b3IuY2xlYXIoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJ
ZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi17Ci0gICAgU3RyaW5n
IHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+
IGNvbXBhcmF0b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKLSAgICBPd25QdHI8TGV2
ZWxEQkRhdGFiYXNlPiBkYjsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCi0gICAgICAg
IGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIEluZGV4ZWREQiBkYXRhYmFz
ZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERCIGRhdGFiYXNlIGZv
ciBhbGwgb3JpZ2lucy4KLSAgICAgICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIu
aW5kZXhlZGRiLmxldmVsZGIiKTsKLQotICAgICAgICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3Bl
bihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRiKQotICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0KLSAgICAvLyBGSVhNRTog
SGFuZGxlIGNvbXBhcmF0b3IgbmFtZSBjaGFuZ2VzLgotCi0gICAgUmVmUHRyPElEQkxldmVsREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihuZXcgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZShmaWxlSWRlbnRpZmllciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkpOwotICAgIGJhY2tp
bmdTdG9yZS0+bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7Ci0KLSAgICBpZiAo
IXNldFVwTWV0YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwotCi0gICAgcmV0dXJuIGJhY2tpbmdTdG9y
ZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJh
c2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKLXsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbiht
X2lkZW50aWZpZXIpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VO
YW1lS2V5OjplbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7Ci0KLSAgICBBU1NF
UlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOwotCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkp
OyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBp
dC0+bmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsK
LSAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAg
RGF0YWJhc2VOYW1lS2V5IGRhdGFiYXNlTmFtZUtleTsKLSAgICAgICAgcCA9IERhdGFiYXNlTmFt
ZUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YWJhc2VOYW1lS2V5KTsKLSAgICAgICAgQVNTRVJU
KHApOwotCi0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFz
ZU5hbWUoKSk7Ci0gICAgfQotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0
YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKLQotICAgIGJvb2wgb2sg
PSBnZXRJbnQobV9kYi5nZXQoKSwga2V5LCBmb3VuZElkKTsKLSAgICBpZiAoIW9rKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJW
ZXJzaW9uKSwgZm91bmRWZXJzaW9uKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0YWJh
c2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQotewotICAgIGludDY0X3QgbWF4RGF0YWJhc2VJZCA9
IC0xOwotICAgIGlmICghZ2V0SW50KGRiLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4
RGF0YWJhc2VJZCkpCi0gICAgICAgIG1heERhdGFiYXNlSWQgPSAwOwotCi0gICAgQVNTRVJUKG1h
eERhdGFiYXNlSWQgPj0gMCk7Ci0KLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtYXhEYXRhYmFz
ZUlkICsgMTsKLSAgICBpZiAoIXB1dEludChkYiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCks
IGRhdGFiYXNlSWQpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICByZXR1cm4gZGF0YWJhc2VJ
ZDsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCkKLXsKLSAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7Ci0g
ICAgaWYgKHJvd0lkIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFt
ZSk7Ci0gICAgaWYgKCFwdXRJbnQobV9kYi5nZXQoKSwga2V5LCByb3dJZCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIXB1dFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiks
IHZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShp
bnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIXB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjprVXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0
IFZlY3RvcjxjaGFyPiYgZW5kKQotewotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0g
dHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhiZWdpbik7
IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5l
eHQoKSkgewotICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bj4gdHJhbnNhY3Rpb24gPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3Jl
YXRlKHRoaXMpOwotICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOwotCi0gICAgaW50NjRfdCBkYXRh
YmFzZUlkOwotICAgIFN0cmluZyB2ZXJzaW9uOwotICAgIGlmICghZ2V0SURCRGF0YWJhc2VNZXRh
RGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+
cm9sbGJhY2soKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkICsg
MSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOwotICAgIGlmICghZGVsZXRlUmFu
Z2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KSkgewotICAg
ICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29k
ZShtX2lkZW50aWZpZXIsIG5hbWUpOwotICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUo
a2V5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShjb25zdCBMZXZl
bERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBtZXRhRGF0YVR5cGUpCi17Ci0gICAgaWYgKCFpdC0+aXNWYWxp
ZCgpIHx8IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAg
ICBjb25zdCBjaGFyKiBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGl0LT5rZXko
KS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCksICZtZXRhRGF0YUtleSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChwLCBwKTsKLSAgICBpZiAobWV0YURhdGFLZXkub2JqZWN0U3RvcmVJZCgpICE9IG9iamVj
dFN0b3JlSWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWV0YURhdGFLZXkubWV0
YURhdGFUeXBlKCkgIT0gbWV0YURhdGFUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0
U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKQotewotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCAxLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkKTsKLQotICAgIEFTU0VSVChmb3Vu
ZElkcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRBdXRvSW5j
cmVtZW50RmxhZ3MuaXNFbXB0eSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+c2VlayhzdGFydEtleSk7Ci0gICAg
d2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8
IDApIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAg
ICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OwotICAgICAgICBwID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwotICAgICAgICBBU1NFUlQo
cCk7Ci0gICAgICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWV0
YURhdGFLZXkub2JqZWN0U3RvcmVJZCgpOwotICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1l
ID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsK
LQotICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRN
ZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDEpKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGtleVBhdGggPSBkZWNvZGVT
dHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotICAgICAgICBi
b29sIGhhc0tleVBhdGggPSB0cnVlOwotCi0gICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIGlm
ICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2Jq
ZWN0U3RvcmVJZCwgMikpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAv
LyBGSVhNRTogQWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAg
Ym9vbCBhdXRvSW5jcmVtZW50ID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7Ci0KLSAgICAgICAgaXQt
Pm5leHQoKTsgLy8gSXMgZXZpY2F0YmxlLgotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVB
bmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDMpKSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBMYXN0
IHZlcnNpb24uCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShp
dC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgNCkpIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIE1heGl1bSBpbmRleCBpZCBhbGxv
Y2F0ZWQuCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5n
ZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgNSkpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIFtvcHRpb25hbF0gaGFzIGtleSBwYXRo
IChpcyBub3QgbnVsbCkKLSAgICAgICAgaWYgKGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDYpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogQWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAg
ICAgIGhhc0tleVBhdGggPSAqaXQtPnZhbHVlKCkuYmVnaW4oKTsKLSAgICAgICAgICAgIGlmICgh
aGFzS2V5UGF0aCAmJiAha2V5UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvdW5kSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKLSAgICAgICAgZm91bmRO
YW1lcy5hcHBlbmQob2JqZWN0U3RvcmVOYW1lKTsKLSAgICAgICAgZm91bmRLZXlQYXRocy5hcHBl
bmQoaGFzS2V5UGF0aCA/IGtleVBhdGggOiBTdHJpbmcoKSk7Ci0gICAgICAgIGZvdW5kQXV0b0lu
Y3JlbWVudEZsYWdzLmFwcGVuZChhdXRvSW5jcmVtZW50KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bnQ2NF90IGdldE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9
IC0xOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtN
YXhPYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0
U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIG1heE9iamVjdFN0b3JlSWQg
PSAwOwotCi0gICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0KLSAgICBpbnQ2NF90
IG9iamVjdFN0b3JlSWQgPSBtYXhPYmplY3RTdG9yZUlkICsgMTsKLSAgICBpZiAoIXB1dEludCh0
cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAg
IHJldHVybiAtMTsKLQotICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwotfQotCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gZ2V0TmV3T2Jq
ZWN0U3RvcmVJZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCk7Ci0gICAg
aWYgKG9iamVjdFN0b3JlSWQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
UGF0aEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gYXV0b0luY3JlbWVudEtleSA9
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAyKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXZpY3RhYmxlS2V5ID0gT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDMpOwotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCA1KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaGFzS2V5
UGF0aEtleSAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgNik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0
U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9
IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7Ci0g
ICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJy
b3IuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dFN0cmlu
ZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dElu
dChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOwotICAgIGlmICghb2sp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIG1heEluZGV4SWRLZXksIGtNaW5pbXVtSW5kZXhJZCk7Ci0gICAgaWYg
KCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVy
cm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKLSAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCA9IG9iamVjdFN0b3JlSWQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOwotCi0gICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1lKTsKLQotICAgIGlm
ICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkK
LSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotCi0gICAgbV9jdXJyZW50
VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVOYW1lKSk7Ci0KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKSkpCi0gICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJv
ci4KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRl
eE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIElu
ZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkp
Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLQotICAgIGNsZWFyT2Jq
ZWN0U3RvcmUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLVN0cmluZyBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0g
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIW1fY3VycmVudFRyYW5z
YWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50
KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFwKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgKHZvaWQpIHZlcnNpb247Ci0KLSAgICByZXR1cm4gZGVj
b2RlU3RyaW5nKHAsIGRhdGEuZW5kKCkpOwotfQotCi1uYW1lc3BhY2UgewotY2xhc3MgTGV2ZWxE
QlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJS
ZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBp
bnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRp
ZmllcihwcmltYXJ5S2V5LCB2ZXJzaW9uKSk7IH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZl
bERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExldmVs
REJSZWNvcmRJZGVudGlmaWVyKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleS5pc0VtcHR5KCk7IH0KLSAgICBWZWN0b3I8Y2hhcj4g
cHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZvaWQgc2V0
UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5
ID0gcHJpbWFyeUtleTsgfQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVyc2lvbjsgfQotICAgIHZvaWQgc2V0VmVyc2lvbihpbnQ2NF90IHZlcnNpb24pIHsgbV92ZXJz
aW9uID0gdmVyc2lvbjsgfQotCi1wcml2YXRlOgotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVy
KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSA6IG1fcHJp
bWFyeUtleShwcmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJUKCFwcmltYXJ5
S2V5LmlzRW1wdHkoKSk7IH0KLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpIDogbV9wcmlt
YXJ5S2V5KCksIG1fdmVyc2lvbigtMSkge30KLQotICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlL
ZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSAqZW5jb2Rl
ZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgIGludDY0X3QgbV92ZXJzaW9uOwotfTsKLX0KLQot
c3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsK
LSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7Ci0KLSAgICBpbnQ2
NF90IGxhc3RWZXJzaW9uID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RW
ZXJzaW9uS2V5LCBsYXN0VmVyc2lvbikpCi0gICAgICAgIGxhc3RWZXJzaW9uID0gMDsKLQotICAg
IEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKLQotICAgIGludDY0X3QgdmVyc2lvbiA9IGxhc3RW
ZXJzaW9uICsgMTsKLSAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lv
bktleSwgdmVyc2lvbik7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgQVNTRVJU
KHZlcnNpb24gPiBsYXN0VmVyc2lvbik7IC8vIEZJWE1FOiBUaGluayBhYm91dCBob3cgd2Ugd2Fu
dCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IHNjZW5hcmlvLgotCi0gICAgcmV0dXJuIHZlcnNpb247
Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAg
ICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiB2OwotICAg
IHYuYXBwZW5kKGVuY29kZVZhckludCh2ZXJzaW9uKSk7Ci0gICAgdi5hcHBlbmQoZW5jb2RlU3Ry
aW5nKHZhbHVlKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQob2JqZWN0
U3RvcmVkYXRhS2V5LCB2KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24t
PnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVu
dGlmaWVyKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNv
ZGVJREJLZXkoa2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24o
dmVyc2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwKS5lbmNvZGUoKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVBy
ZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7Ci0KLSAgICBk
ZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkp
OwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpCi17Ci0gICAgcmV0dXJuIExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsK
LX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIEFTU0VSVCht
X2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIq
IGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29y
ZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgp
KTsKLSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoZXhp
c3RzRW50cnlLZXkpOwotfQotCi1kb3VibGUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1
dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0
b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBtYXhJREJLZXkoKSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1f
Y3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotCi0gICAgaW50IG1heE51bWVy
aWNLZXkgPSAwOwotCi0gICAgLy8gRklYTUU6IEJlIG1vcmUgZWZmaWNpZW50OiBzZWVrIHRvIHNv
bWV0aGluZyBhZnRlciB0aGUgb2JqZWN0IHN0b3JlIGRhdGEsIHRoZW4gcmV2ZXJzZS4KLQotICAg
IGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0
LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIg
KnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+
a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAg
ICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJmRhdGFLZXkpOwot
ICAgICAgICBBU1NFUlQocCk7Ci0KLSAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBl
KCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG4gPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihkYXRhS2V5LnVzZXJLZXkoKS0+bnVtYmVyKCkpOwotICAgICAgICAg
ICAgaWYgKG4gPiBtYXhOdW1lcmljS2V5KQotICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkg
PSBuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heE51bWVyaWNLZXkgKyAxOwot
fQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYg
a2V5LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikK
LXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgIGlmICgh
bV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2RlVmFySW50
KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4oZm91bmRSZWNvcmRJZGVu
dGlmaWVyKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNv
ZGVJREJLZXkoa2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24o
dmVyc2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKLXsK
LSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1h
eElEQktleSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50
VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhzdGFydEtl
eSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7
IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigp
OwotICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLSAgICAgICAg
T2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZURhdGFL
ZXk6OmRlY29kZShwLCBsaW1pdCwgJmRhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0KLSAg
ICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGRhdGFLZXkudXNlcktleSgpOwotCi0g
ICAgICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZh
ckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0g
ICAgICAgIGlmICghcSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBSZWZQ
dHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IHJpID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6
OmNyZWF0ZShlbmNvZGVJREJLZXkoKnByaW1hcnlLZXkpLCB2ZXJzaW9uKTsKLSAgICAgICAgU3Ry
aW5nIGlkYlZhbHVlID0gZGVjb2RlU3RyaW5nKHEsIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAg
ICAgICBpZiAoIWNhbGxiYWNrLmNhbGxiYWNrKHJpLmdldCgpLCBpZGJWYWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBib29sIGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3QgaW5kZXhJZCwgdW5zaWduZWQg
Y2hhciBtZXRhRGF0YVR5cGUpCi17Ci0gICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSW5kZXhNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICBjb25zdCBjaGFyKiBwID0gSW5k
ZXhNZXRhRGF0YUtleTo6ZGVjb2RlKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCks
ICZtZXRhRGF0YUtleSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwLCBwKTsKLSAgICBpZiAobWV0YURh
dGFLZXkuaW5kZXhJZCgpICE9IGluZGV4SWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gbWV0YURhdGFUeXBlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRV
bmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncykKLXsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0
b3BLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCArIDEsIDAsIDApOwotCi0gICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRLZXlQYXRocy5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChmb3VuZFVuaXF1ZUZsYWdzLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKGZvdW5kTXVsdGlFbnRyeUZsYWdzLmlzRW1wdHkoKSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgaXQtPnNlZWsoc3Rh
cnRLZXkpOwotICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXko
KSwgc3RvcEtleSkgPCAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVn
aW4oKTsKLSAgICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAg
ICAgICAgSW5kZXhNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICAgICAgcCA9IEluZGV4TWV0
YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKLSAgICAgICAgQVNTRVJU
KHApOwotCi0gICAgICAgIGludDY0X3QgaW5kZXhJZCA9IG1ldGFEYXRhS2V5LmluZGV4SWQoKTsK
LSAgICAgICAgQVNTRVJUKCFtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSk7Ci0KLSAgICAgICAg
U3RyaW5nIGluZGV4TmFtZSA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+
dmFsdWUoKS5lbmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gdW5pcXVlIGZsYWcKLSAg
ICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGlu
ZGV4SWQsIDEpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklY
TUU6IEFkZCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCi0gICAgICAgIGJvb2wg
aW5kZXhVbmlxdWUgPSAqaXQtPnZhbHVlKCkuYmVnaW4oKTsKLQotICAgICAgICBpdC0+bmV4dCgp
OyAvLyBrZXlQYXRoCi0gICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0Lmdl
dCgpLCBzdG9wS2V5LCBpbmRleElkLCAyKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9u
YWxdIG11bHRpRW50cnkgZmxhZwotICAgICAgICBib29sIGluZGV4TXVsdGlFbnRyeSA9IGZhbHNl
OwotICAgICAgICBpZiAoY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5
LCBpbmRleElkLCAzKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBlbmNvZGUvZGVjb2Rl
IGZ1bmN0aW9ucyBmb3IgYm9vbHMuCi0gICAgICAgICAgICBpbmRleE11bHRpRW50cnkgPSAqaXQt
PnZhbHVlKCkuYmVnaW4oKTsKLSAgICAgICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmb3VuZElkcy5hcHBlbmQoaW5kZXhJZCk7Ci0gICAgICAgIGZvdW5kTmFtZXMuYXBw
ZW5kKGluZGV4TmFtZSk7Ci0gICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGtleVBhdGgpOwot
ICAgICAgICBmb3VuZFVuaXF1ZUZsYWdzLmFwcGVuZChpbmRleFVuaXF1ZSk7Ci0gICAgICAgIGZv
dW5kTXVsdGlFbnRyeUZsYWdzLmFwcGVuZChpbmRleE11bHRpRW50cnkpOwotICAgIH0KLX0KLQot
c3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBp
bnQ2NF90IG1heEluZGV4SWQgPSAtMTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJ
ZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCA1KTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwg
bWF4SW5kZXhJZCkpCi0gICAgICAgIG1heEluZGV4SWQgPSBrTWluaW11bUluZGV4SWQ7Ci0KLSAg
ICBBU1NFUlQobWF4SW5kZXhJZCA+PSAwKTsKLQotICAgIGludDY0X3QgaW5kZXhJZCA9IG1heElu
ZGV4SWQgKyAxOwotICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBp
bmRleElkKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcmV0dXJuIGluZGV4SWQ7Ci19Ci0K
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYg
aW5kZXhJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGluZGV4
SWQgPSBnZXROZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoaW5kZXhJZCA8IDApCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOwotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiB1bmlxdWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMSk7Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IGtleVBhdGhLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgMik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG11bHRpRW50
cnlLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgMyk7Ci0KLSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBr
ZXlQYXRoS2V5LCBrZXlQYXRoKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBtdWx0aUVu
dHJ5S2V5LCBpc011bHRpRW50cnkpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwot
Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7Ci0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IHVuaXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
UGF0aEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCAyKTsKLQotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92
ZShuYW1lS2V5KSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJy
b3IuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+cmVtb3ZlKHVuaXF1ZUtleSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9j
dXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXlQYXRoS2V5KSkgewotICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6
OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhL
ZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0KLSAgICBpZiAoIWRlbGV0
ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhE
YXRhRW5kKSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgQVNT
RVJUKGluZGV4SWQgPj0ga01pbmltdW1JbmRleElkKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRh
S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5
S2V5KCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoZW5jb2Rl
VmFySW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKLSAgICBkYXRhLmFw
cGVuZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLQotICAgIHJldHVy
biBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Ci19Ci0KLXN0
YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+
JiBmb3VuZEtleSkKLXsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKHRhcmdldCk7Ci0KLSAgICBpZiAo
IWl0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaXQtPnNlZWtUb0xhc3QoKTsKLSAgICAgICAgaWYg
KCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHdoaWxlIChjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSA+IDApIHsKLSAgICAg
ICAgaXQtPnByZXYoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgZm91bmRLZXkuY2xlYXIo
KTsKLSAgICAgICAgZm91bmRLZXkuYXBwZW5kKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCku
ZW5kKCkgLSBpdC0+a2V5KCkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUgY2FuIGJlIHNl
dmVyYWwgaW5kZXgga2V5cyB0aGF0IGNvbXBhcmUgZXF1YWwuIFdlIHdhbnQgdGhlIGxhc3Qgb25l
LgotICAgICAgICBpdC0+bmV4dCgpOwotICAgIH0gd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgIWNv
bXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCB0YXJnZXQpKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IG5lZWRlZCBzaW5jZSB3ZSBpbnZh
bGlkYXRlIGluZGV4IGRhdGEgdmlhIHRoZSB2ZXJzaW9uIG51bWJlciBtZWNoYW5pc20uCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmpl
Y3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5ID0gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleSk7Ci0gICAgaWYgKCFwcmltYXJ5S2V5KQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gZ2V0T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXkpOwotfQotCi1zdGF0aWMgYm9vbCB2ZXJzaW9uRXhp
c3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3RvcjxjaGFy
PiYgZW5jb2RlZFByaW1hcnlLZXkpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IEV4
aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlZFBy
aW1hcnlLZXkpOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgaWYgKCF0cmFuc2FjdGlv
bi0+Z2V0KGtleSwgZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBk
ZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9PSB2ZXJzaW9uOwotfQotCi1zdGF0
aWMgYm9vbCBmaW5kS2V5SW5JbmRleChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5
KQotewotICAgIEFTU0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHkoKSk7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSk7Ci0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+
c2VlayhsZXZlbGRiS2V5KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKCFpdC0+aXNW
YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY29tcGFyZUlu
ZGV4S2V5cyhpdC0+a2V5KCksIGxldmVsZGJLZXkpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAg
PSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZl
cnNpb24pOwotICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0g
cCk7Ci0KLSAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewotICAg
ICAgICAgICAgLy8gRGVsZXRlIHN0YWxlIGluZGV4IGRhdGEgZW50cnkgYW5kIGNvbnRpbnVlLgot
ICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwotICAgICAgICAgICAg
aXQtPm5leHQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQot
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
Zm91bmRFbmNvZGVkUHJpbWFyeUtleTsKLSAgICBpZiAoZmluZEtleUluSW5kZXgobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleTsKLSAgICAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVn
aW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgcHJpbWFyeUtleSk7Ci0gICAgICAg
IHJldHVybiBwcmltYXJ5S2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLQotICAgIFZlY3RvcjxjaGFyPiBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4
S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNv
ZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3Rvcjxj
aGFyPiBsb3dLZXk7Ci0gICAgYm9vbCBsb3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5
OwotICAgIGJvb2wgaGlnaE9wZW47Ci0gICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5pcXVl
OwotfTsKLQotY2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6
OkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2
aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqKTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50
S2V5OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4
RGF0YUlkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgfQotCi0gICAgdmlydHVh
bCBib29sIGxvYWRDdXJyZW50Um93KCkgPSAwOwotICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBDdXJzb3JJbXBsQ29tbW9uKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMoY3Vyc29y
T3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0gICAgQ3Vyc29ySW1wbENvbW1vbihjb25zdCBDdXJz
b3JJbXBsQ29tbW9uKiBvdGhlcikKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3Ry
YW5zYWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRp
b25zKQotICAgICAgICAsIG1fY3VycmVudEtleShvdGhlci0+bV9jdXJyZW50S2V5KQotICAgIHsK
LSAgICAgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBtX2l0ZXJhdG9y
ID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLQotICAgICAgICAgICAgaWYgKG90
aGVyLT5tX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9y
LT5zZWVrKG90aGVyLT5tX2l0ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KG1faXRlcmF0b3ItPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkge30KLQotICAgIExldmVsREJUcmFu
c2FjdGlvbiogbV90cmFuc2FjdGlvbjsKLSAgICBDdXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9u
czsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwotICAgIFJlZlB0cjxJ
REJLZXk+IG1fY3VycmVudEtleTsKLX07Ci0KLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RT
ZWVrKCkKLXsKLSAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKLQotICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgbV9pdGVyYXRv
ci0+c2VlayhtX2N1cnNvck9wdGlvbnMubG93S2V5KTsKLSAgICBlbHNlCi0gICAgICAgIG1faXRl
cmF0b3ItPnNlZWsobV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpOwotCi0gICAgZm9yICg7Oykgewot
ICAgICAgICBpZiAoIW1faXRlcmF0b3ItPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJzb3JP
cHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1f
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9w
dGlvbnMuaGlnaEtleSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYm
IGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dL
ZXkpIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9jdXJz
b3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJ
bmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDwgMCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25z
LmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4pIHsKLSAgICAgICAgICAgIC8vIGxv
d0tleSBub3QgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLgotICAgICAgICAgICAgaWYgKGNvbXBhcmVJ
bmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDAp
IHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2N1cnNv
ck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4pIHsKLSAgICAgICAg
ICAgIC8vIGhpZ2hLZXkgbm90IGluY2x1ZGVkIGluIHRoZSByYW5nZS4KLSAgICAgICAgICAgIGlm
IChjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGln
aEtleSkgPj0gMCkgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnByZXYoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbG9hZEN1cnJlbnRSb3coKSkgewotICAgICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9u
cy5mb3J3YXJkKQotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPm5leHQoKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0K
LQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSog
a2V5KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNoYXJlcyBhIGxvdCBvZiBjb2RlIHdpdGggZmly
c3RTZWVrLgotICAgIFJlZlB0cjxJREJLZXk+IHByZXZpb3VzS2V5ID0gbV9jdXJyZW50S2V5Owot
Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCi0g
ICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1faXRlcmF0b3ItPnByZXYoKTsKLQotICAgICAgICBpZiAoIW1faXRlcmF0b3ItPmlzVmFsaWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBWZWN0b3I8Y2hhcj4gdHJh
c2g7Ci0gICAgICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0
cmFzaCkpCi0gICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKG1fY3Vyc29yT3B0
aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPj0gMCkgLy8g
aGlnaCBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JPcHRpb25z
LmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29y
T3B0aW9ucy5oaWdoS2V5KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4g
JiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxv
d0tleSkgPD0gMCkgLy8gbG93IGtleSBub3QgaW5jbHVkZWQgaW4gcmFuZ2UKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAh
bV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5r
ZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmICghbG9hZEN1cnJlbnRSb3coKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlv
bnMuZm9yd2FyZCkgewotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRLZXktPmlzTGVzc1Ro
YW4oa2V5KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChrZXktPmlzTGVzc1RoYW4obV9jdXJyZW50S2V5Lmdl
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLnVuaXF1ZSAmJiBtX2N1cnJlbnRL
ZXktPmlzRXF1YWwocHJldmlvdXNLZXkuZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIE9i
amVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1
cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRoaXMpKTsK
LSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFs
dWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lkZW50
aWZpZXI7Ci0gICAgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCk7Ci0KLXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMp
Ci0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykK
LSAgICB7Ci0gICAgfQotCi0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGNvbnN0IE9iamVjdFN0
b3JlQ3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikK
LSAgICAgICAgLCBtX2N1cnJlbnRWYWx1ZShvdGhlci0+bV9jdXJyZW50VmFsdWUpCi0gICAgewot
ICAgIH0KLQotICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKLSAgICBSZWZQdHI8TGV2ZWxEQlJl
Y29yZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKLX07Ci0KLWJvb2wgT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0
b3ItPmtleSgpLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9y
LT5rZXkoKS5lbmQoKTsKLQotICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFL
ZXk7Ci0gICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGtleUxpbWl0LCAmb2Jq
ZWN0U3RvcmVEYXRhS2V5KTsKLSAgICBBU1NFUlQocCk7Ci0gICAgaWYgKCFwKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNl
cktleSgpOwotCi0gICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNv
ZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgp
LmVuZCgpLCB2ZXJzaW9uKTsKLSAgICBBU1NFUlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1
c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KLSAgICBtX2lkZW50aWZpZXIgPSBMZXZlbERC
UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVy
c2lvbik7Ci0KLSAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmluZyhxLCBtX2l0ZXJhdG9y
LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBJbmRleEtl
eUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0aGlzKSk7Ci0gICAgfQotCi0gICAgLy8g
Q3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4g
b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwotCi1wcml2YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewot
ICAgIH0KLQotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChjb25zdCBJbmRleEtleUN1cnNvckltcGwq
IG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwgbV9w
cmltYXJ5S2V5KG90aGVyLT5tX3ByaW1hcnlLZXkpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLX07Ci0KLWJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0b3ItPmtleSgp
LmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5l
bmQoKTsKLSAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5OwotICAgIHAgPSBJbmRleERhdGFL
ZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJmluZGV4RGF0YUtleSk7Ci0KLSAgICBtX2N1cnJlbnRL
ZXkgPSBpbmRleERhdGFLZXkudXNlcktleSgpOwotCi0gICAgaW50NjRfdCBpbmRleERhdGFWZXJz
aW9uOwotICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUo
KS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBpbmRleERhdGFWZXJzaW9uKTsK
LSAgICBBU1NFUlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBxID0gZGVjb2RlSURCS2V5KHEsIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIG1fcHJpbWFy
eUtleSk7Ci0gICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgVmVjdG9yPGNoYXI+IHByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVj
dFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0Owot
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNp
b247Ci0gICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVz
dWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodCk7Ci0gICAg
aWYgKCF0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVEYXRh
VmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJl
bW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIEN1
cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4Q3Vy
c29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1
cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xv
bmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwo
dGhpcykpOwotICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgYm9vbCBsb2FkQ3VycmVudFJvdygpOwotCi1w
cml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNv
ckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgIH0KLQot
ICAgIEluZGV4Q3Vyc29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVyKQotICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwgbV9wcmltYXJ5S2V5KG90aGVy
LT5tX3ByaW1hcnlLZXkpCi0gICAgICAgICwgbV92YWx1ZShvdGhlci0+bV92YWx1ZSkKLSAgICAg
ICAgLCBtX3ByaW1hcnlMZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlMZXZlbERCS2V5KQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7Ci0gICAgU3RyaW5n
IG1fdmFsdWU7Ci0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUxldmVsREJLZXk7Ci19OwotCi1i
b29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQotewotICAgIGNvbnN0IGNoYXIg
KnAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0g
bV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5
OwotICAgIHAgPSBJbmRleERhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJmluZGV4RGF0YUtleSk7
Ci0KLSAgICBtX2N1cnJlbnRLZXkgPSBpbmRleERhdGFLZXkudXNlcktleSgpOwotCi0gICAgY29u
c3QgY2hhciAqcSA9IG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFy
ICp2YWx1ZUxpbWl0ID0gbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKTsKLQotICAgIGludDY0X3Qg
aW5kZXhEYXRhVmVyc2lvbjsKLSAgICBxID0gZGVjb2RlVmFySW50KHEsIHZhbHVlTGltaXQsIGlu
ZGV4RGF0YVZlcnNpb24pOwotICAgIEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBxID0gZGVjb2RlSURCS2V5KHEsIHZhbHVlTGltaXQsIG1fcHJpbWFy
eUtleSk7Ci0gICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgbV9wcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2Rl
KGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCks
ICptX3ByaW1hcnlLZXkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmdldChtX3ByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247Ci0gICAg
Y29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
LCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodCk7Ci0gICAgaWYgKCF0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAh
PSBpbmRleERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0
ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Zh
bHVlID0gZGVjb2RlU3RyaW5nKHQsIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLQotICAgIGJvb2wgbG93ZXJCb3Vu
ZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vy
c29yOjpORVhUKTsKLSAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVW
X05PX0RVUExJQ0FURSk7Ci0KLSAgICBpZiAoIWxvd2VyQm91bmQpIHsKLSAgICAgICAgY3Vyc29y
T3B0aW9ucy5sb3dLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3Bl
biA9IHRydWU7IC8vIE5vdCBpbmNsdWRlZC4KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JP
cHRpb25zLmxvd0tleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsICpyYW5nZS0+bG93ZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93
T3BlbiA9IHJhbmdlLT5sb3dlck9wZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQp
IHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwotCi0gICAgICAg
IGlmIChjdXJzb3JPcHRpb25zLmZvcndhcmQpCi0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhp
Z2hPcGVuID0gdHJ1ZTsgLy8gTm90IGluY2x1ZGVkLgotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
KnJhbmdlLT51cHBlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdl
LT51cHBlck9wZW4oKTsKLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgewot
ICAgICAgICAgICAgLy8gRm9yIHJldmVyc2UgY3Vyc29ycywgd2UgbmVlZCBhIGtleSB0aGF0IGV4
aXN0cy4KLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgICAg
ICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91
bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ug
c2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hP
cGVuICYmIGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hL
ZXkpIDwgMCkKLSAgICAgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNv
ciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBjdXJzb3JPcHRpb25zKTsKLSAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBib29sIGxvd2VyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAm
JiByYW5nZS0+dXBwZXIoKTsKLSAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVCk7Ci0gICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1
cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9O
T19EVVBMSUNBVEUpOwotCi0gICAgaWYgKCFsb3dlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9w
dGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IGZh
bHNlOyAvLyBJbmNsdWRlZC4KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxv
d0tleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsICpyYW5nZS0+bG93ZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9
IHJhbmdlLT5sb3dlck9wZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQpIHsKLSAg
ICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlv
bnMuaGlnaE9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0KLSAgICAgICAgaWYgKCFjdXJzb3JP
cHRpb25zLmZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAg
ICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhp
Z2hPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JP
cHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0gICAgICAgIFZlY3RvcjxjaGFyPiBm
b3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFs
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5k
SGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5p
cXVlIGtleXMuCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAvLyBJZiB0aGUgdGFy
Z2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFs
bGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgaWYgKGN1cnNvck9wdGlv
bnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlv
bnMuaGlnaEtleSkgPCAwKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZh
bHNlOwotCi0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1
cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9u
cyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
Ci17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25z
IGN1cnNvck9wdGlvbnM7Ci0gICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxv
d2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0g
ICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRf
Tk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGN1cnNv
ck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElD
QVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsKLQotICAg
IGlmICghbG93ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4
RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
OwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPmxvd2Vy
KCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJPcGVuKCk7
Ci0gICAgfQotCi0gICAgaWYgKCF1cHBlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMu
aGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7
IC8vIEluY2x1ZGVkLgotCi0gICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7IC8v
IFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVz
dEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gSW5k
ZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJh
bmdlLT51cHBlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51
cHBlck9wZW4oKTsKLQotICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OwotICAgICAg
ICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBTZWVrIHRv
IHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBi
ZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBp
bmNsdWRlIHRoYXQuCi0gICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBh
cmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAg
ICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLQotICAgICAgICBjdXJz
b3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7Ci0gICAgfQotCi0gICAgUmVmUHRyPElu
ZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwotICAgIGlmICghY3Vyc29yLT5maXJz
dFNlZWsoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIFRyYW5z
YWN0aW9uOjpjcmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Ci19Ci0KLUlEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
Ci17Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2lu
KCkKLXsKLSAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5z
YWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwotfQotCi12b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQotewotICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIG1fYmFja2luZ1N0
b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y29tbWl0KCk7Ci0gICAgbV9iYWNraW5nU3RvcmUt
Pm1fY3VycmVudFRyYW5zYWN0aW9uLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJy
ZW50VHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVu
dFRyYW5zYWN0aW9uLmNsZWFyKCk7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZykKLXsKLSAgICBTdHJpbmcgcGF0aEJh
c2UgPSBwYXRoQmFzZUFyZzsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSB1c2Ug
dGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMuCi0gICAgU3RyaW5nIHBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5k
YXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKLQotICAgIC8vIEZJ
WE1FOiB0aGlzIGlzIGNoZWNraW5nIGZvciBwcmVzZW5jZSBvZiB0aGUgZG9tYWluLCBub3QgdGhl
IGRhdGFiYXNlIGl0c2VsZgotICAgIHJldHVybiBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlX2gKLSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKLWNsYXNzIExldmVsREJEYXRhYmFzZTsK
LWNsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsK
LQotY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmls
ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQkxl
dmVsREJCYWNraW5nU3RvcmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVz
KFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBp
bnQ2NF90JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0
X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0
ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0T2Jq
ZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywg
VmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhz
LCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBh
c3NpZ25lZE9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJl
Y29yZElkZW50aWZpZXIoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
Jik7Ci0gICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
Zm91bmRSZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9i
amVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVz
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRf
dD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4m
IGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFncywgVmVjdG9yPGJv
b2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnksIGludDY0X3QmIGluZGV4SWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKik7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5Jik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZp
YUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigp
OwotCi0gICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsKLQotcHJpdmF0ZToK
LSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKLQotICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4g
bV9mYWN0b3J5OwotICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7Ci0gICAgT3duUHRy
PExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Ci0gICAgUmVmUHRyPExldmVsREJUcmFu
c2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6
IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNvbW1pdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsK
LSAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7Ci0gICAgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIp
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJMZXZl
bERCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQ29kaW5nLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTA1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkNvZGluZy5o
IgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0KLSNp
bmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLS8vIExldmVsREIgc3RvcmVzIGtleS92YWx1ZSBw
YWlycy4gS2V5cyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzIG9mIGJ5dGVzLCBub3JtYWxseSBvZiB0
eXBlIFZlY3RvcjxjaGFyPi4KLS8vCi0vLyBUaGUga2V5cyBpbiB0aGUgYmFja2luZyBzdG9yZSBh
cmUgdmFyaWFibGUtbGVuZ3RoIHR1cGxlcyB3aXRoIGRpZmZlcmVudCB0eXBlcwotLy8gb2YgZmll
bGRzLiBFYWNoIGtleSBpbiB0aGUgYmFja2luZyBzdG9yZSBzdGFydHMgd2l0aCBhIHRlcm5hcnkg
cHJlZml4OiAoZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQpLiBGb3IgZWFj
aCwgMCBpcyByZXNlcnZlZCBmb3IgbWV0YS1kYXRhLgotLy8gVGhlIHByZWZpeCBtYWtlcyBzdXJl
IHRoYXQgZGF0YSBmb3IgYSBzcGVjaWZpYyBkYXRhYmFzZSwgb2JqZWN0IHN0b3JlLCBhbmQgaW5k
ZXggYXJlIGdyb3VwZWQgdG9nZXRoZXIuIFRoZSBsb2NhbGl0eSBpcyBpbXBvcnRhbnQgZm9yIHBl
cmZvcm1hbmNlOiBjb21tb24KLS8vIG9wZXJhdGlvbnMgc2hvdWxkIG9ubHkgbmVlZCBhIG1pbmlt
YWwgbnVtYmVyIG9mIHNlZWsgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGFsbCB0aGUgbWV0YS1k
YXRhIGZvciBhIGRhdGFiYXNlIGlzIGdyb3VwZWQgdG9nZXRoZXIgc28gdGhhdCByZWFkaW5nIHRo
YXQKLS8vIG1ldGEtZGF0YSBvbmx5IHJlcXVpcmVzIG9uZSBzZWVrLgotLy8KLS8vIEVhY2gga2V5
IHR5cGUgaGFzIGEgY2xhc3MgKGluIHNxdWFyZSBicmFja2V0cyBiZWxvdykgd2hpY2gga25vd3Mg
aG93IHRvIGVuY29kZSwgZGVjb2RlLCBhbmQgY29tcGFyZSB0aGF0IGtleSB0eXBlLgotLy8KLS8v
IEdsb2JhbCBtZXRhLWRhdGEgaGF2ZSBrZXlzIHdpdGggcHJlZml4ICgwLDAsMCksIGZvbGxvd2Vk
IGJ5IGEgdHlwZSBieXRlOgotLy8KLS8vICAgICA8MCwgMCwgMCwgMD4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gSW5kZXhlZERCL0xldmVsREIgc2NoZW1hIHZl
cnNpb24gKDAgZm9yIG5vdykgW1NjaGVtYVZlcnNpb25LZXldCi0vLyAgICAgPDAsIDAsIDAsIDE+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRoZSBtYXhpbXVt
IGRhdGFiYXNlIGlkIGV2ZXIgYWxsb2NhdGVkIFtNYXhEYXRhYmFzZUlkS2V5XQotLy8gICAgIDww
LCAwLCAwLCAxMDAsIGRhdGFiYXNlIGlkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBF
eGlzdGVuY2UgaW1wbGllcyB0aGUgZGF0YWJhc2UgaWQgaXMgaW4gdGhlIGZyZWUgbGlzdCBbRGF0
YWJhc2VGcmVlTGlzdEtleV0KLS8vICAgICA8MCwgMCwgMCwgMjAxLCB1dGYxNiBvcmlnaW4gbmFt
ZSwgdXRmMTYgZGF0YWJhc2UgbmFtZT4gPT4gRGF0YWJhc2UgaWQgW0RhdGFiYXNlTmFtZUtleV0K
LS8vCi0vLwotLy8gRGF0YWJhc2UgbWV0YS1kYXRhOgotLy8KLS8vICAgICBBZ2FpbiwgdGhlIHBy
ZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlk
LCAwLCAwLCAwPiA9PiB1dGYxNiBvcmlnaW4gbmFtZSBbRGF0YWJhc2VNZXRhRGF0YUtleV0KLS8v
ICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDE+ID0+IHV0ZjE2IGRhdGFiYXNlIG5hbWUgW0RhdGFi
YXNlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAyPiA9PiB1dGYxNiB1
c2VyIHZlcnNpb24gZGF0YSBbRGF0YWJhc2VNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2Ug
aWQsIDAsIDAsIDM+ID0+IG1heGltdW0gb2JqZWN0IHN0b3JlIGlkIGV2ZXIgYWxsb2NhdGVkIFtE
YXRhYmFzZU1ldGFEYXRhS2V5XQotLy8KLS8vCi0vLyBPYmplY3Qgc3RvcmUgbWV0YS1kYXRhOgot
Ly8KLS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEg
dmFyaWFibGUtbGVuZ3RoIGludGVnZXIsIGFuZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3Ro
IGludGVnZXIgKEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGJ5dGUpLgotLy8KLS8vICAgICA8ZGF0
YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDA+ID0+IHV0ZjE2IG9iamVjdCBz
dG9yZSBuYW1lIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwg
MCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMT4gPT4gdXRmMTYga2V5IHBhdGggW09iamVjdFN0
b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0
b3JlIGlkLCAyPiA9PiBoYXMgYXV0byBpbmNyZW1lbnQgW09iamVjdFN0b3JlTWV0YURhdGFLZXld
Ci0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAzPiA9PiBp
cyBldmljdGFibGUgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlk
LCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA0PiA9PiBsYXN0ICJ2ZXJzaW9uIiBudW1iZXIg
W09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwg
b2JqZWN0IHN0b3JlIGlkLCA1PiA9PiBtYXhpbXVtIGluZGV4IGlkIGV2ZXIgYWxsb2NhdGVkIFtP
YmplY3RTdG9yZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9i
amVjdCBzdG9yZSBpZCwgNj4gPT4gaGFzIGtleSBwYXRoICh2cy4gbnVsbCkgW09iamVjdFN0b3Jl
TWV0YURhdGFLZXldCi0vLwotLy8KLS8vIEluZGV4IG1ldGEtZGF0YToKLS8vCi0vLyAgICAgVGhl
IHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiB0d28gdmFyaWFibGUtbGVu
Z3RoIGludGVnZXJzLCBhbmQgdGhlbiBhbm90aGVyIHR5cGUgYnl0ZS4KLS8vCi0vLyAgICAgPGRh
dGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDA+ID0+IHV0
ZjE2IGluZGV4IG5hbWUgW0luZGV4TWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDE+ID0+IGFyZSBpbmRleCBrZXlz
IHVuaXF1ZSBbSW5kZXhNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEw
MCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgMj4gPT4gdXRmMTYga2V5IHBhdGggW0luZGV4
TWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9y
ZSBpZCwgaW5kZXggaWQsIDM+ID0+IGlzIGluZGV4IG11bHRpLWVudHJ5IFtJbmRleE1ldGFEYXRh
S2V5XQotLy8KLS8vCi0vLyBPdGhlciBvYmplY3Qgc3RvcmUgYW5kIGluZGV4IG1ldGEtZGF0YToK
LS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIG9i
amVjdCBzdG9yZSBhbmQgaW5kZXggaWQgYXJlIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VycywgdGhl
IHV0ZjE2IHN0cmluZ3MgYXJlIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmdzLgotLy8KLS8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDE1MCwgb2JqZWN0IHN0b3JlIGlkPiAgICAgICAgICAgICAgICAg
ICA9PiBleGlzdGVuY2UgaW1wbGllcyB0aGUgb2JqZWN0IHN0b3JlIGlkIGlzIGluIHRoZSBmcmVl
IGxpc3QgW09iamVjdFN0b3JlRnJlZUxpc3RLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAw
LCAxNTEsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQ+ICAgICAgICAgPT4gZXhpc3RlbmNlIGlt
cGxpZXMgdGhlIGluZGV4IGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW0luZGV4RnJlZUxpc3RLZXld
Ci0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAyMDAsIHV0ZjE2IG9iamVjdCBzdG9yZSBuYW1l
PiAgICAgICAgICAgPT4gb2JqZWN0IHN0b3JlIGlkIFtPYmplY3RTdG9yZU5hbWVzS2V5XQotLy8g
ICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMjAxLCBvYmplY3Qgc3RvcmUgaWQsIHV0ZjE2IGluZGV4
IG5hbWU+ID0+IGluZGV4IGlkIFtJbmRleE5hbWVzS2V5XQotLy8KLS8vCi0vLyBPYmplY3Qgc3Rv
cmUgZGF0YToKLS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0
ZS4gVGhlIHVzZXIga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJh
c2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgMSwgdXNlciBrZXk+ID0+ICJ2ZXJzaW9uIiwgc2VyaWFs
aXplZCBzY3JpcHQgdmFsdWUgW09iamVjdFN0b3JlRGF0YUtleV0KLS8vCi0vLwotLy8gIkV4aXN0
cyIgZW50cnk6Ci0vLwotLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5
dGUuIFRoZSB1c2VyIGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KLS8vCi0vLyAgICAgPGRhdGFi
YXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIDIsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIgW0V4aXN0
c0VudHJ5S2V5XQotLy8KLS8vCi0vLyBJbmRleCBkYXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4
IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgaW5kZXgga2V5IGlzIGFuIGVuY29kZWQg
SURCS2V5LiBUaGUgc2VxdWVuY2UgbnVtYmVyIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGludGVnZXIu
Ci0vLyAgICAgVGhlIHByaW1hcnkga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAg
ICA8ZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIGluZGV4IGtleSwgc2Vx
dWVuY2UgbnVtYmVyLCBwcmltYXJ5IGtleT4gPT4gInZlcnNpb24iLCBwcmltYXJ5IGtleSBbSW5k
ZXhEYXRhS2V5XQotLy8KLS8vICAgICAoVGhlIHNlcXVlbmNlIG51bWJlciBpcyBvYnNvbGV0ZTsg
aXQgd2FzIHVzZWQgdG8gYWxsb3cgdHdvIGVudHJpZXMgd2l0aAotLy8gICAgIHRoZSBzYW1lIHVz
ZXIgKGluZGV4KSBrZXkgaW4gbm9uLXVuaXF1ZSBpbmRleGVzIHByaW9yIHRvIHRoZSBpbmNsdXNp
b24gb2YKLS8vICAgICB0aGUgcHJpbWFyeSBrZXkgaW4gdGhlIGRhdGEuIFRoZSAidmVyc2lvbiIg
ZmllbGQgaXMgdXNlZCB0byB3ZWVkIG91dCBzdGFsZQotLy8gICAgIGluZGV4IGRhdGEuIFdoZW5l
dmVyIG5ldyBvYmplY3Qgc3RvcmUgZGF0YSBpcyBpbnNlcnRlZCwgaXQgZ2V0cyBhIG5ldwotLy8g
ICAgICJ2ZXJzaW9uIiBudW1iZXIsIGFuZCBuZXcgaW5kZXggZGF0YSBpcyB3cml0dGVuIHdpdGgg
dGhpcyBudW1iZXIuIFdoZW4KLS8vICAgICB0aGUgaW5kZXggaXMgdXNlZCBmb3IgbG9vay11cHMs
IGVudHJpZXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZQotLy8gICAgICJleGlzdHMiIGVudHJp
ZXMsIGFuZCByZWNvcmRzIHdpdGggb2xkICJ2ZXJzaW9uIiBudW1iZXJzIGFyZSBkZWxldGVkCi0v
LyAgICAgd2hlbiB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgs
Ci0vLyAgICAgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdywgYW5kIEluZGV4S2V5Q3Vy
c29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgSURCTGV2ZWxEQkNvZGluZyB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJL
ZXlOdWxsVHlwZUJ5dGUgPSAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleVN0
cmluZ1R5cGVCeXRlID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlEYXRl
VHlwZUJ5dGUgPSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleU51bWJlclR5
cGVCeXRlID0gMzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlBcnJheVR5cGVC
eXRlID0gNDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlNaW5LZXlUeXBlQnl0
ZSA9IDU7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZURhdGFJbmRl
eElkID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtFeGlzdHNFbnRyeUluZGV4SWQg
PSAyOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrU2NoZW1hVmVyc2lvblR5cGVCeXRl
ID0gMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtNYXhEYXRhYmFzZUlkVHlwZUJ5dGUg
PSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0RhdGFiYXNlRnJlZUxpc3RUeXBlQnl0
ZSA9IDEwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZU5hbWVUeXBlQnl0
ZSA9IDIwMTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlTWV0YURh
dGFUeXBlQnl0ZSA9IDUwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4TWV0YURh
dGFUeXBlQnl0ZSA9IDEwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9y
ZUZyZWVMaXN0VHlwZUJ5dGUgPSAxNTA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5k
ZXhGcmVlTGlzdFR5cGVCeXRlID0gMTUxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09i
amVjdFN0b3JlTmFtZXNUeXBlQnl0ZSA9IDIwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUgPSAyMDE7Ci0KLSNpZm5kZWYgSU5UNjRfTUFYCi0jZGVm
aW5lIElOVDY0X01BWCAweDdmZmZmZmZmZmZmZmZmZmZMTAotI2VuZGlmCi0jaWZuZGVmIElOVDMy
X01BWAotI2RlZmluZSBJTlQzMl9NQVggMHg3ZmZmZmZmZkwKLSNlbmRpZgotCi0KLVZlY3Rvcjxj
aGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIgYykKLXsKLSAgICBWZWN0b3I8Y2hhcj4gdjsK
LSAgICB2LmFwcGVuZChjKTsKLSAgICByZXR1cm4gdjsKLX0KLQotVmVjdG9yPGNoYXI+IG1heElE
QktleSgpCi17Ci0gICAgcmV0dXJuIGVuY29kZUJ5dGUoa0lEQktleU51bGxUeXBlQnl0ZSk7Ci19
Ci0KLVZlY3RvcjxjaGFyPiBtaW5JREJLZXkoKQotewotICAgIHJldHVybiBlbmNvZGVCeXRlKGtJ
REJLZXlNaW5LZXlUeXBlQnl0ZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVJbnQoaW50NjRf
dCBuKQotewotICAgIEFTU0VSVChuID49IDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQ7IC8vIEZJ
WE1FOiBTaXplIHRoaXMgYXQgY3JlYXRpb24uCi0KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgYyA9IG47Ci0gICAgICAgIHJldC5hcHBlbmQoYyk7Ci0gICAgICAgIG4gPj49IDg7Ci0g
ICAgfSB3aGlsZSAobik7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQ2NF90IGRlY29kZUlu
dChjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kKQotewotICAgIEFTU0VSVChiZWdp
biA8PSBlbmQpOwotICAgIGludDY0X3QgcmV0ID0gMDsKLQotICAgIGludCBzaGlmdCA9IDA7Ci0g
ICAgd2hpbGUgKGJlZ2luIDwgZW5kKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpiZWdp
bisrOwotICAgICAgICByZXQgfD0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oYykgPDwgc2hpZnQ7Ci0g
ICAgICAgIHNoaWZ0ICs9IDg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj
IGludCBjb21wYXJlSW50cyhpbnQ2NF90IGEsIGludDY0X3QgYikKLXsKLSAgICBBU1NFUlQoYSA+
PSAwKTsKLSAgICBBU1NFUlQoYiA+PSAwKTsKLQotICAgIGludDY0X3QgZGlmZiA9IGEgLSBiOwot
ICAgIGlmIChkaWZmIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChkaWZmID4gMCkK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNv
ZGVWYXJJbnQoaW50NjRfdCBuKQotewotICAgIFZlY3RvcjxjaGFyPiByZXQ7IC8vIEZJWE1FOiBT
aXplIHRoaXMgYXQgY3JlYXRpb24uCi0KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
YyA9IG4gJiAweDdmOwotICAgICAgICBuID4+PSA3OwotICAgICAgICBpZiAobikKLSAgICAgICAg
ICAgIGMgfD0gMHg4MDsKLSAgICAgICAgcmV0LmFwcGVuZChjKTsKLSAgICB9IHdoaWxlIChuKTsK
LQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWNvbnN0IGNoYXIqIGRlY29kZVZhckludChjb25zdCBj
aGFyICpwLCBjb25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYgZm91bmRJbnQpCi17Ci0gICAgQVNT
RVJUKGxpbWl0ID49IHApOwotICAgIGZvdW5kSW50ID0gMDsKLSAgICBpbnQgc2hpZnQgPSAwOwot
Ci0gICAgZG8gewotICAgICAgICBpZiAocCA+PSBsaW1pdCkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpwOwotICAgICAgICBmb3VuZEludCB8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihjICYgMHg3ZikgPDwgc2hpZnQ7Ci0gICAgICAgIHNoaWZ0ICs9
IDc7Ci0gICAgfSB3aGlsZSAoKnArKyAmIDB4ODApOwotICAgIHJldHVybiBwOwotfQotCi1WZWN0
b3I8Y2hhcj4gZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBWZWN0b3I8Y2hh
cj4gcmV0OyAvLyBGSVhNRTogU2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBVQ2hhciB1ID0gc1tp
XTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBoaSA9IHUgPj4gODsKLSAgICAgICAgdW5zaWduZWQg
Y2hhciBsbyA9IHU7Ci0gICAgICAgIHJldC5hcHBlbmQoaGkpOwotICAgICAgICByZXQuYXBwZW5k
KGxvKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1TdHJpbmcgZGVjb2RlU3RyaW5n
KGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBBU1NFUlQoZW5kID49IHAp
OwotICAgIEFTU0VSVCghKChlbmQgLSBwKSAlIDIpKTsKLQotICAgIHNpemVfdCBsZW4gPSAoZW5k
IC0gcCkgLyAyOwotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkobGVuKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciBoaSA9ICpwKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
bG8gPSAqcCsrOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KCho
aSA8PCA4KSB8IGxvKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwot
fQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBTdHJpbmcmIHMp
Ci17Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IGVuY29kZVZhckludChzLmxlbmd0aCgpKTsKLSAg
ICByZXQuYXBwZW5kKGVuY29kZVN0cmluZyhzKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotY29u
c3QgY2hhciogZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFy
KiBsaW1pdCwgU3RyaW5nJiBmb3VuZFN0cmluZykKLXsKLSAgICBBU1NFUlQobGltaXQgPj0gcCk7
Ci0gICAgaW50NjRfdCBsZW47Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuKTsK
LSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwICsgbGVuICogMiA+IGxp
bWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvdW5kU3RyaW5nID0gZGVjb2RlU3RyaW5n
KHAsIHAgKyBsZW4gKiAyKTsKLSAgICBwICs9IGxlbiAqIDI7Ci0gICAgcmV0dXJuIHA7Ci19Ci0K
LWludCBjb21wYXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqJiBwLCBjb25z
dCBjaGFyKiBsaW1pdFAsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdFEpCi17Ci0g
ICAgQVNTRVJUKCZwICE9ICZxKTsKLSAgICBBU1NFUlQobGltaXRQID49IHApOwotICAgIEFTU0VS
VChsaW1pdFEgPj0gcSk7Ci0gICAgaW50NjRfdCBsZW5QLCBsZW5ROwotICAgIHAgPSBkZWNvZGVW
YXJJbnQocCwgbGltaXRQLCBsZW5QKTsKLSAgICBxID0gZGVjb2RlVmFySW50KHEsIGxpbWl0USwg
bGVuUSk7Ci0gICAgQVNTRVJUKHAgJiYgcSk7Ci0gICAgQVNTRVJUKGxlblAgPj0gMCk7Ci0gICAg
QVNTRVJUKGxlblEgPj0gMCk7Ci0gICAgQVNTRVJUKHAgKyBsZW5QICogMiA8PSBsaW1pdFApOwot
ICAgIEFTU0VSVChxICsgbGVuUSAqIDIgPD0gbGltaXRRKTsKLQotICAgIGNvbnN0IGNoYXIqIHN0
YXJ0UCA9IHA7Ci0gICAgY29uc3QgY2hhciogc3RhcnRRID0gcTsKLSAgICBwICs9IGxlblAgKiAy
OwotICAgIHEgKz0gbGVuUSAqIDI7Ci0KLSAgICBpZiAocCA+IGxpbWl0UCB8fCBxID4gbGltaXRR
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IHNpemVfdCBsbWluID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihsZW5QIDwgbGVuUSA/IGxlblAgOiBsZW5RKTsKLSAgICBpZiAoaW50IHggPSBt
ZW1jbXAoc3RhcnRQLCBzdGFydFEsIGxtaW4gKiAyKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAg
ICBpZiAobGVuUCA9PSBsZW5RKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiAobGVu
UCA+IGxlblEpID8gMSA6IC0xOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlRG91YmxlKGRvdWJs
ZSB4KQotewotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIGJlIGJ5
dGUgb3JkZXIgaW5kZXBlbmRlbnQuCi0gICAgY29uc3QgY2hhciogcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZ4KTsKLSAgICBWZWN0b3I8Y2hhcj4gdjsKLSAgICB2LmFwcGVuZChwLCBzaXpl
b2YoeCkpOwotICAgIEFTU0VSVCh2LnNpemUoKSA9PSBzaXplb2YoeCkpOwotICAgIHJldHVybiB2
OwotfQotCi1jb25zdCBjaGFyKiBkZWNvZGVEb3VibGUoY29uc3QgY2hhciogcCwgY29uc3QgY2hh
ciogbGltaXQsIGRvdWJsZSogZCkKLXsKLSAgICBpZiAocCArIHNpemVvZigqZCkgPiBsaW1pdCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjaGFyKiB4ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoKmQpOyArK2kpCi0gICAg
ICAgICp4KysgPSAqcCsrOwotICAgIHJldHVybiBwOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2Rl
SURCS2V5KGNvbnN0IElEQktleSYga2V5KQotewotICAgIFZlY3RvcjxjaGFyPiByZXQ7Ci0gICAg
ZW5jb2RlSURCS2V5KGtleSwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi12b2lkIGVuY29k
ZUlEQktleShjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBpbnRvKQotewotICAgIHNp
emVfdCBwcmV2aW91c1NpemUgPSBpbnRvLnNpemUoKTsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkp
IHsKLSAgICBjYXNlIElEQktleTo6SW52YWxpZFR5cGU6Ci0gICAgY2FzZSBJREJLZXk6Ok1pblR5
cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBpbnRvLmFwcGVuZChl
bmNvZGVCeXRlKGtJREJLZXlOdWxsVHlwZUJ5dGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSURCS2V5OjpBcnJheVR5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludG8uYXBwZW5k
KGVuY29kZUJ5dGUoa0lEQktleUFycmF5VHlwZUJ5dGUpKTsKLSAgICAgICAgICAgIHNpemVfdCBs
ZW5ndGggPSBrZXkuYXJyYXkoKS5zaXplKCk7Ci0gICAgICAgICAgICBpbnRvLmFwcGVuZChlbmNv
ZGVWYXJJbnQobGVuZ3RoKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGVuY29kZUlEQktleSgqa2V5LmFycmF5KClbaV0s
IGludG8pOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6
ZSgpID4gcHJldmlvdXNTaXplKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRl
KGtJREJLZXlTdHJpbmdUeXBlQnl0ZSkpOwotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVTdHJp
bmdXaXRoTGVuZ3RoKGtleS5zdHJpbmcoKSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXZp
b3VzU2l6ZSwgaW50by5zaXplKCkgPiBwcmV2aW91c1NpemUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRl
KGtJREJLZXlEYXRlVHlwZUJ5dGUpKTsKLSAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlRG91Ymxl
KGtleS5kYXRlKCkpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8u
c2l6ZSgpIC0gcHJldmlvdXNTaXplID09IDkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
REJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lEQktl
eU51bWJlclR5cGVCeXRlKSk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZURvdWJsZShrZXku
bnVtYmVyKCkpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6
ZSgpIC0gcHJldmlvdXNTaXplID09IDkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLQotY29uc3QgY2hhciogZGVjb2RlSURCS2V5KGNv
bnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBSZWZQdHI8SURCS2V5PiYgZm91bmRLZXkp
Ci17Ci0gICAgQVNTRVJUKGxpbWl0ID49IHApOwotICAgIGlmIChwID49IGxpbWl0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGNoYXIgdHlwZSA9ICpwKys7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5dGU6Ci0gICAgICAgIGZvdW5k
S2V5ID0gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgICAgIHJldHVybiBwOwotCi0gICAg
Y2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgaW50NjRf
dCBsZW5ndGg7Ci0gICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW5ndGgp
OwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICBJREJLZXk6OktleUFycmF5IGFycmF5OwotICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0t
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgICAgICAgICAgICAg
IHAgPSBkZWNvZGVJREJLZXkocCwgbGltaXQsIGtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBhcnJheS5h
cHBlbmQoa2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5
OjpjcmVhdGVBcnJheShhcnJheSk7Ci0gICAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfQot
ICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBT
dHJpbmcgczsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0
LCBzKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcocyk7Ci0gICAgICAgICAg
ICByZXR1cm4gcDsKLSAgICAgICAgfQotICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKLSAg
ICAgICAgewotICAgICAgICAgICAgZG91YmxlIGQ7Ci0gICAgICAgICAgICBwID0gZGVjb2RlRG91
YmxlKHAsIGxpbWl0LCAmZCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlRGF0ZShkKTsK
LSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVy
VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBkOwotICAgICAgICAgICAg
cCA9IGRlY29kZURvdWJsZShwLCBsaW1pdCwgJmQpOwotICAgICAgICAgICAgaWYgKCFwKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcihkKTsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNo
YXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgVmVjdG9yPGNoYXI+KiByZXN1bHQpCi17Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAg
Y29uc3QgY2hhciogcCA9IHN0YXJ0OwotICAgIGlmIChwID49IGxpbWl0KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHVuc2lnbmVkIGNoYXIgdHlwZSA9ICpwKys7Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5dGU6Ci0gICAgY2FzZSBrSURCS2V5TWlu
S2V5VHlwZUJ5dGU6Ci0gICAgICAgICpyZXN1bHQgPSBlbmNvZGVCeXRlKHR5cGUpOwotICAgICAg
ICByZXR1cm4gcDsKLSAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVWYXJJbnQo
cCwgbGltaXQsIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+YXBwZW5kKHN0YXJ0LCBwIC0gc3RhcnQpOwotICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0t
KSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IHN1YmtleTsKLSAgICAgICAgICAgICAg
ICBwID0gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgbGltaXQsICZzdWJrZXkpOwotICAgICAgICAg
ICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LT5hcHBlbmQoc3Via2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5U3RyaW5nVHlwZUJ5dGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludDY0X3QgbGVuZ3RoOwotICAgICAgICAgICAgcCA9IGRl
Y29kZVZhckludChwLCBsaW1pdCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChwICsgbGVuZ3RoICogMiA+IGxp
bWl0KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmVzdWx0LT5jbGVh
cigpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3RhcnQsIHAgLSBzdGFydCArIGxlbmd0
aCAqIDIpOwotICAgICAgICAgICAgcmV0dXJuIHAgKyBsZW5ndGggKiAyOwotICAgICAgICB9Ci0g
ICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVC
eXRlOgotICAgICAgICBpZiAocCArIHNpemVvZihkb3VibGUpID4gbGltaXQpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgcmVzdWx0LT5jbGVhcigpOwotICAgICAgICByZXN1bHQtPmFw
cGVuZChzdGFydCwgMSArIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgcmV0dXJuIHAgKyBzaXpl
b2YoZG91YmxlKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBJREJLZXk6OlR5cGUga2V5VHlwZUJ5dGVUb0tleVR5cGUodW5zaWdu
ZWQgY2hhciB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Uga0lEQktleU51
bGxUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6SW52YWxpZFR5cGU7Ci0gICAgY2Fz
ZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6QXJyYXlUeXBl
OwotICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5
OjpTdHJpbmdUeXBlOwotICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKLSAgICAgICAgcmV0
dXJuIElEQktleTo6RGF0ZVR5cGU7Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6Ok51bWJlclR5cGU7Ci0gICAgY2FzZSBrSURCS2V5TWluS2V5
VHlwZUJ5dGU6Ci0gICAgICAgIHJldHVybiBJREJLZXk6Ok1pblR5cGU7Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIElEQktleTo6SW52YWxpZFR5cGU7Ci19
Ci0KLWludCBjb21wYXJlRW5jb2RlZElEQktleXMoY29uc3QgY2hhciomIHAsIGNvbnN0IGNoYXIq
IGxpbWl0QSwgY29uc3QgY2hhciomIHEsIGNvbnN0IGNoYXIqIGxpbWl0QikKLXsKLSAgICBBU1NF
UlQoJnAgIT0gJnEpOwotICAgIEFTU0VSVChwIDwgbGltaXRBKTsKLSAgICBBU1NFUlQocSA8IGxp
bWl0Qik7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQSA9ICpwKys7Ci0gICAgdW5zaWduZWQgY2hh
ciB0eXBlQiA9ICpxKys7Ci0KLSAgICBpZiAoaW50IHggPSBJREJLZXk6OmNvbXBhcmVUeXBlcyhr
ZXlUeXBlQnl0ZVRvS2V5VHlwZSh0eXBlQSksIGtleVR5cGVCeXRlVG9LZXlUeXBlKHR5cGVCKSkp
Ci0gICAgICAgIHJldHVybiB4OwotCi0gICAgc3dpdGNoICh0eXBlQSkgewotICAgIGNhc2Uga0lE
QktleU51bGxUeXBlQnl0ZToKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlUeXBlQnl0ZToKLSAgICAg
ICAgLy8gTnVsbCB0eXBlIG9yIG1heCB0eXBlOyBubyBwYXlsb2FkIHRvIGNvbXBhcmUuCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGNhc2Uga0lEQktleUFycmF5VHlwZUJ5dGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGludDY0X3QgbGVuZ3RoQSwgbGVuZ3RoQjsKLSAgICAgICAgICAgIHAgPSBk
ZWNvZGVWYXJJbnQocCwgbGltaXRBLCBsZW5ndGhBKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHEgPSBkZWNvZGVWYXJJbnQocSwg
bGltaXRCLCBsZW5ndGhCKTsKLSAgICAgICAgICAgIGlmICghcSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChsZW5ndGhBIDwgMCB8fCBsZW5ndGhCIDwgMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gMDsg
aSA8IGxlbmd0aEEgJiYgaSA8IGxlbmd0aEI7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChp
bnQgY21wID0gY29tcGFyZUVuY29kZWRJREJLZXlzKHAsIGxpbWl0QSwgcSwgbGltaXRCKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChsZW5ndGhBIDwgbGVuZ3RoQikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgICAgICBpZiAobGVuZ3RoQSA+IGxlbmd0aEIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIGNhc2Uga0lEQktleVN0cmlu
Z1R5cGVCeXRlOgotICAgICAgICByZXR1cm4gY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0
aChwLCBsaW1pdEEsIHEsIGxpbWl0Qik7Ci0gICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgot
ICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBk
b3VibGUgZCwgZTsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVEb3VibGUocCwgbGltaXRBLCAmZCk7
Ci0gICAgICAgICAgICBBU1NFUlQocCk7Ci0gICAgICAgICAgICBxID0gZGVjb2RlRG91YmxlKHEs
IGxpbWl0QiwgJmUpOwotICAgICAgICAgICAgQVNTRVJUKHEpOwotICAgICAgICAgICAgaWYgKGQg
PCBlKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChkID4gZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBjb21wYXJlRW5jb2RlZElEQktleXMoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlBLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGtleUIpCi17Ci0gICAgQVNTRVJUKGtleUEuc2l6ZSgpID49IDEp
OwotICAgIEFTU0VSVChrZXlCLnNpemUoKSA+PSAxKTsKLQotICAgIGNvbnN0IGNoYXIqIHAgPSBr
ZXlBLmRhdGEoKTsKLSAgICBjb25zdCBjaGFyKiBsaW1pdEEgPSBwICsga2V5QS5zaXplKCk7Ci0g
ICAgY29uc3QgY2hhciogcSA9IGtleUIuZGF0YSgpOwotICAgIGNvbnN0IGNoYXIqIGxpbWl0QiA9
IHEgKyBrZXlCLnNpemUoKTsKLQotICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMocCwg
bGltaXRBLCBxLCBsaW1pdEIpOwotfQotCi1uYW1lc3BhY2UgewotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5VHlwZT4KLWludCBkZWNvZGVBbmRDb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29u
c3QgTGV2ZWxEQlNsaWNlJiBiKQotewotICAgIEtleVR5cGUga2V5QTsKLSAgICBLZXlUeXBlIGtl
eUI7Ci0KLSAgICBjb25zdCBjaGFyKiBwdHJBID0gS2V5VHlwZTo6ZGVjb2RlKGEuYmVnaW4oKSwg
YS5lbmQoKSwgJmtleUEpOwotICAgIEFTU0VSVF9VTlVTRUQocHRyQSwgcHRyQSk7Ci0gICAgY29u
c3QgY2hhciogcHRyQiA9IEtleVR5cGU6OmRlY29kZShiLmJlZ2luKCksIGIuZW5kKCksICZrZXlC
KTsKLSAgICBBU1NFUlRfVU5VU0VEKHB0ckIsIHB0ckIpOwotCi0gICAgcmV0dXJuIGtleUEuY29t
cGFyZShrZXlCKTsKLX0KLX0KLQotaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBj
b25zdCBMZXZlbERCU2xpY2UmIGIsIGJvb2wgaW5kZXhLZXlzKQotewotICAgIGNvbnN0IGNoYXIq
IHB0ckEgPSBhLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciogcHRyQiA9IGIuYmVnaW4oKTsKLSAg
ICBjb25zdCBjaGFyKiBlbmRBID0gYS5lbmQoKTsKLSAgICBjb25zdCBjaGFyKiBlbmRCID0gYi5l
bmQoKTsKLQotICAgIEtleVByZWZpeCBwcmVmaXhBOwotICAgIEtleVByZWZpeCBwcmVmaXhCOwot
Ci0gICAgcHRyQSA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckEsIGVuZEEsICZwcmVmaXhBKTsKLSAg
ICBwdHJCID0gS2V5UHJlZml4OjpkZWNvZGUocHRyQiwgZW5kQiwgJnByZWZpeEIpOwotICAgIEFT
U0VSVChwdHJBKTsKLSAgICBBU1NFUlQocHRyQik7Ci0KLSAgICBpZiAoaW50IHggPSBwcmVmaXhB
LmNvbXBhcmUocHJlZml4QikpCi0gICAgICAgIHJldHVybiB4OwotCi0gICAgaWYgKHByZWZpeEEu
dHlwZSgpID09IEtleVByZWZpeDo6a0dsb2JhbE1ldGFEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChw
dHJBICE9IGVuZEEpOwotICAgICAgICBBU1NFUlQocHRyQiAhPSBlbmRCKTsKLQotICAgICAgICB1
bnNpZ25lZCBjaGFyIHR5cGVCeXRlQSA9ICpwdHJBKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
dHlwZUJ5dGVCID0gKnB0ckIrKzsKLQotICAgICAgICBpZiAoaW50IHggPSB0eXBlQnl0ZUEgLSB0
eXBlQnl0ZUIpCi0gICAgICAgICAgICByZXR1cm4geDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVB
IDw9IDEpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBr
RGF0YWJhc2VGcmVlTGlzdFR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENv
bXBhcmU8RGF0YWJhc2VGcmVlTGlzdEtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEg
PT0ga0RhdGFiYXNlTmFtZVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENv
bXBhcmU8RGF0YWJhc2VOYW1lS2V5PihhLCBiKTsKLSAgICB9Ci0KLSAgICBpZiAocHJlZml4QS50
eXBlKCkgPT0gS2V5UHJlZml4OjprRGF0YWJhc2VNZXRhRGF0YSkgewotICAgICAgICBBU1NFUlQo
cHRyQSAhPSBlbmRBKTsKLSAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7Ci0KLSAgICAgICAg
dW5zaWduZWQgY2hhciB0eXBlQnl0ZUEgPSAqcHRyQSsrOwotICAgICAgICB1bnNpZ25lZCBjaGFy
IHR5cGVCeXRlQiA9ICpwdHJCKys7Ci0KLSAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVBIC0g
dHlwZUJ5dGVCKQotICAgICAgICAgICAgcmV0dXJuIHg7Ci0KLSAgICAgICAgaWYgKHR5cGVCeXRl
QSA8PSAzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9
PSBrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVNZXRhRGF0YUtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0
eXBlQnl0ZUEgPT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDb21wYXJlPEluZGV4TWV0YURhdGFLZXk+KGEsIGIpOwotICAgICAgICBpZiAodHlw
ZUJ5dGVBID09IGtPYmplY3RTdG9yZUZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9yZUZyZWVMaXN0S2V5PihhLCBiKTsKLSAgICAg
ICAgaWYgKHR5cGVCeXRlQSA9PSBrSW5kZXhGcmVlTGlzdFR5cGVCeXRlKQotICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENvbXBhcmU8SW5kZXhGcmVlTGlzdEtleT4oYSwgYik7Ci0gICAgICAg
IGlmICh0eXBlQnl0ZUEgPT0ga09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSkKLSAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDb21wYXJlPE9iamVjdFN0b3JlTmFtZXNLZXk+KGEsIGIpOwotICAg
ICAgICBpZiAodHlwZUJ5dGVBID09IGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUpCi0gICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxJbmRleE5hbWVzS2V5PihhLCBiKTsKLQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAg
aWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6a09iamVjdFN0b3JlRGF0YSkgewotICAg
ICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQotICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1F
OiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8g
YmUgaGFuZGxlZCB0aGlzIHdheS4KLQotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxP
YmplY3RTdG9yZURhdGFLZXk+KGEsIGIpOwotICAgIH0KLSAgICBpZiAocHJlZml4QS50eXBlKCkg
PT0gS2V5UHJlZml4OjprRXhpc3RzRW50cnkpIHsKLSAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSAm
JiBwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHB0ckEg
PT0gZW5kQSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHB0ckIgPT0gZW5k
QikKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhpcyBjYXNlIG9mIG5vbi1leGlz
dGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgdGhpcyB3YXkuCi0K
LSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8RXhpc3RzRW50cnlLZXk+KGEsIGIpOwot
ICAgIH0KLSAgICBpZiAocHJlZml4QS50eXBlKCkgPT0gS2V5UHJlZml4OjprSW5kZXhEYXRhKSB7
Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEgJiYgcHRyQiA9PSBlbmRCKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEpCi0gICAgICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICAgIGlmIChwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMTsgLy8g
RklYTUU6IFRoaXMgY2FzZSBvZiBub24tZXhpc3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2
ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5LgotCi0gICAgICAgIEluZGV4RGF0YUtleSBpbmRleERh
dGFLZXlBOwotICAgICAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5QjsKLQotICAgICAgICBw
dHJBID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoYS5iZWdpbigpLCBlbmRBLCAmaW5kZXhEYXRhS2V5
QSk7Ci0gICAgICAgIHB0ckIgPSBJbmRleERhdGFLZXk6OmRlY29kZShiLmJlZ2luKCksIGVuZEIs
ICZpbmRleERhdGFLZXlCKTsKLSAgICAgICAgQVNTRVJUKHB0ckEpOwotICAgICAgICBBU1NFUlQo
cHRyQik7Ci0KLSAgICAgICAgYm9vbCBpZ25vcmVEdXBsaWNhdGVzID0gaW5kZXhLZXlzOwotICAg
ICAgICByZXR1cm4gaW5kZXhEYXRhS2V5QS5jb21wYXJlKGluZGV4RGF0YUtleUIsIGlnbm9yZUR1
cGxpY2F0ZXMpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biAwOwotfQotCi0KLUtleVByZWZpeDo6S2V5UHJlZml4KCkKLSAgICA6IG1fZGF0YWJhc2VJZChr
SW52YWxpZFR5cGUpCi0gICAgLCBtX29iamVjdFN0b3JlSWQoa0ludmFsaWRUeXBlKQotICAgICwg
bV9pbmRleElkKGtJbnZhbGlkVHlwZSkKLXsKLX0KLQotS2V5UHJlZml4OjpLZXlQcmVmaXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkK
LSAgICA6IG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkKG9i
amVjdFN0b3JlSWQpCi0gICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLXsKLX0KLQotY29uc3QgY2hh
ciogS2V5UHJlZml4OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0
LCBLZXlQcmVmaXgqIHJlc3VsdCkKLXsKLSAgICBpZiAoc3RhcnQgPT0gbGltaXQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGUgPSAqc3RhcnQrKzsKLQot
ICAgIGludCBkYXRhYmFzZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiA1KSAmIDB4NykgKyAxOwot
ICAgIGludCBvYmplY3RTdG9yZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiAyKSAmIDB4NykgKyAx
OwotICAgIGludCBpbmRleElkQnl0ZXMgPSAoZmlyc3RCeXRlICYgMHgzKSArIDE7Ci0KLSAgICBp
ZiAoc3RhcnQgKyBkYXRhYmFzZUlkQnl0ZXMgKyBvYmplY3RTdG9yZUlkQnl0ZXMgKyBpbmRleElk
Qnl0ZXMgPiBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXN1bHQtPm1fZGF0YWJh
c2VJZCA9IGRlY29kZUludChzdGFydCwgc3RhcnQgKyBkYXRhYmFzZUlkQnl0ZXMpOwotICAgIHN0
YXJ0ICs9IGRhdGFiYXNlSWRCeXRlczsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IGRl
Y29kZUludChzdGFydCwgc3RhcnQgKyBvYmplY3RTdG9yZUlkQnl0ZXMpOwotICAgIHN0YXJ0ICs9
IG9iamVjdFN0b3JlSWRCeXRlczsKLSAgICByZXN1bHQtPm1faW5kZXhJZCA9IGRlY29kZUludChz
dGFydCwgc3RhcnQgKyBpbmRleElkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IGluZGV4SWRCeXRlczsK
LQotICAgIHJldHVybiBzdGFydDsKLX0KLQotVmVjdG9yPGNoYXI+IEtleVByZWZpeDo6ZW5jb2Rl
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkICE9IGtJbnZhbGlkSWQpOwotICAg
IEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1faW5k
ZXhJZCAhPSBrSW52YWxpZElkKTsKLQotICAgIFZlY3RvcjxjaGFyPiBkYXRhYmFzZUlkU3RyaW5n
ID0gZW5jb2RlSW50KG1fZGF0YWJhc2VJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3Jl
SWRTdHJpbmcgPSBlbmNvZGVJbnQobV9vYmplY3RTdG9yZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4g
aW5kZXhJZFN0cmluZyA9IGVuY29kZUludChtX2luZGV4SWQpOwotCi0gICAgQVNTRVJUKGRhdGFi
YXNlSWRTdHJpbmcuc2l6ZSgpIDw9IDgpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkU3RyaW5n
LnNpemUoKSA8PSA4KTsKLSAgICBBU1NFUlQoaW5kZXhJZFN0cmluZy5zaXplKCkgPD0gNCk7Ci0K
LQotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKGRhdGFiYXNlSWRTdHJpbmcuc2l6ZSgp
IC0gMSkgPDwgNSB8IChvYmplY3RTdG9yZUlkU3RyaW5nLnNpemUoKSAtIDEpIDw8IDIgfCAoaW5k
ZXhJZFN0cmluZy5zaXplKCkgLSAxKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0OwotICAgIHJldC5h
cHBlbmQoZmlyc3RCeXRlKTsKLSAgICByZXQuYXBwZW5kKGRhdGFiYXNlSWRTdHJpbmcpOwotICAg
IHJldC5hcHBlbmQob2JqZWN0U3RvcmVJZFN0cmluZyk7Ci0gICAgcmV0LmFwcGVuZChpbmRleElk
U3RyaW5nKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludCBLZXlQcmVmaXg6OmNvbXBhcmUo
Y29uc3QgS2V5UHJlZml4JiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlk
ICE9IGtJbnZhbGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJ
ZCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZCAhPSBrSW52YWxpZElkKTsKLQotICAgIGlmIChtX2Rh
dGFiYXNlSWQgIT0gb3RoZXIubV9kYXRhYmFzZUlkKQotICAgICAgICByZXR1cm4gY29tcGFyZUlu
dHMobV9kYXRhYmFzZUlkLCBvdGhlci5tX2RhdGFiYXNlSWQpOwotICAgIGlmIChtX29iamVjdFN0
b3JlSWQgIT0gb3RoZXIubV9vYmplY3RTdG9yZUlkKQotICAgICAgICByZXR1cm4gY29tcGFyZUlu
dHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmIChtX2lu
ZGV4SWQgIT0gb3RoZXIubV9pbmRleElkKQotICAgICAgICByZXR1cm4gY29tcGFyZUludHMobV9p
bmRleElkLCBvdGhlci5tX2luZGV4SWQpOwotICAgIHJldHVybiAwOwotfQotCi1LZXlQcmVmaXg6
OlR5cGUgS2V5UHJlZml4Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlk
ICE9IGtJbnZhbGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJ
ZCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZCAhPSBrSW52YWxpZElkKTsKLQotICAgIGlmICghbV9k
YXRhYmFzZUlkKQotICAgICAgICByZXR1cm4ga0dsb2JhbE1ldGFEYXRhOwotICAgIGlmICghbV9v
YmplY3RTdG9yZUlkKQotICAgICAgICByZXR1cm4ga0RhdGFiYXNlTWV0YURhdGE7Ci0gICAgaWYg
KG1faW5kZXhJZCA9PSBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCkKLSAgICAgICAgcmV0dXJuIGtP
YmplY3RTdG9yZURhdGE7Ci0gICAgaWYgKG1faW5kZXhJZCA9PSBrRXhpc3RzRW50cnlJbmRleElk
KQotICAgICAgICByZXR1cm4ga0V4aXN0c0VudHJ5OwotICAgIGlmIChtX2luZGV4SWQgPj0ga01p
bmltdW1JbmRleElkKQotICAgICAgICByZXR1cm4ga0luZGV4RGF0YTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrSW52YWxpZFR5cGU7Ci19Ci0KLVZlY3RvcjxjaGFy
PiBTY2hlbWFWZXJzaW9uS2V5OjplbmNvZGUoKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoMCwg
MCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQu
YXBwZW5kKGVuY29kZUJ5dGUoa1NjaGVtYVZlcnNpb25UeXBlQnl0ZSkpOwotICAgIHJldHVybiBy
ZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKQotewotICAg
IEtleVByZWZpeCBwcmVmaXgoMCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZp
eC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa01heERhdGFiYXNlSWRUeXBl
Qnl0ZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLURhdGFiYXNlRnJlZUxpc3RLZXk6OkRhdGFi
YXNlRnJlZUxpc3RLZXkoKQotICAgIDogbV9kYXRhYmFzZUlkKC0xKQotewotfQotCi1jb25zdCBj
aGFyKiBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBEYXRhYmFzZUZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJl
Zml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyICpwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQs
IGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFT
U0VSVCghcHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RT
dG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxp
bWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnAr
KzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrRGF0YWJhc2VGcmVl
TGlzdFR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2RhdGFiYXNlSWQpOwot
fQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VGcmVlTGlzdEtleTo6ZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDApOwotICAgIFZlY3Rvcjxj
aGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtE
YXRhYmFzZUZyZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChk
YXRhYmFzZUlkKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IERhdGFiYXNl
RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleSgpCi17Ci0gICAgcmV0dXJuIGVuY29kZShJTlQ2NF9N
QVgpOwotfQotCi1pbnQ2NF90IERhdGFiYXNlRnJlZUxpc3RLZXk6OmRhdGFiYXNlSWQoKSBjb25z
dAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fZGF0YWJh
c2VJZDsKLX0KLQotaW50IERhdGFiYXNlRnJlZUxpc3RLZXk6OmNvbXBhcmUoY29uc3QgRGF0YWJh
c2VGcmVlTGlzdEtleSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+
PSAwKTsKLSAgICByZXR1cm4gY29tcGFyZUludHMobV9kYXRhYmFzZUlkLCBvdGhlci5tX2RhdGFi
YXNlSWQpOwotfQotCi1jb25zdCBjaGFyKiBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShjb25zdCBj
aGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KQot
ewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6
ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1
cm4gcDsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJl
Zml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAg
ICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZSA9ICpwKys7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0g
a0RhdGFiYXNlTmFtZVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcCA9IGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+
bV9vcmlnaW4pOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRl
Y29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZU5hbWUpOwot
fQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUoY29uc3QgU3RyaW5nJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQotewotICAgIEtleVByZWZpeCBwcmVm
aXgoMCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAg
ICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0RhdGFiYXNlTmFtZVR5cGVCeXRlKSk7Ci0gICAgcmV0
LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9yaWdpbikpOwotICAgIHJldC5hcHBlbmQo
ZW5jb2RlU3RyaW5nV2l0aExlbmd0aChkYXRhYmFzZU5hbWUpKTsKLSAgICByZXR1cm4gcmV0Owot
fQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIGVuY29kZShvcmlnaW4sICIiKTsK
LX0KLQotVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlU3RvcEtleUZvck9yaWdp
bihjb25zdCBTdHJpbmcmIG9yaWdpbikKLXsKLSAgICAvLyBqdXN0IGFmdGVyIG9yaWdpbiBpbiBj
b2xsYXRpb24gb3JkZXIKLSAgICByZXR1cm4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG9yaWdpbiAr
ICJceDAxIik7Ci19Ci0KLWludCBEYXRhYmFzZU5hbWVLZXk6OmNvbXBhcmUoY29uc3QgRGF0YWJh
c2VOYW1lS2V5JiBvdGhlcikKLXsKLSAgICBpZiAoaW50IHggPSBjb2RlUG9pbnRDb21wYXJlKG1f
b3JpZ2luLCBvdGhlci5tX29yaWdpbikpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlKG1fZGF0YWJhc2VOYW1lLCBvdGhlci5tX2RhdGFiYXNlTmFtZSk7Ci19
Ci0KLVZlY3RvcjxjaGFyPiBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBNZXRhRGF0YVR5cGUgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVm
aXgoZGF0YWJhc2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNv
ZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUobWV0YURhdGFUeXBlKSk7Ci0gICAgcmV0
dXJuIHJldDsKLX0KLQotT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6T2JqZWN0U3RvcmVNZXRhRGF0
YUtleSgpCi0gICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCi0gICAgLCBtX21ldGFEYXRhVHlwZSgt
MSkKLXsKLX0KLQotY29uc3QgY2hhciogT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGNv
bnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9
IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAg
QVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2lu
ZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNp
Z25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0
eXBlQnl0ZSA9PSBrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwg
cmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgQVNTRVJUKHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLSAgICBpZiAocCA9PSBsaW1p
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwg
cmVzdWx0LT5tX21ldGFEYXRhVHlwZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJh
c2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAg
ICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkpOwot
ICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZVZhckludChtZXRhRGF0YVR5cGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1W
ZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3Qg
ZGF0YWJhc2VJZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCwg
SU5UNjRfTUFYKTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsK
LSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCk7
Ci19Ci0KLWludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9v
YmplY3RTdG9yZUlkOwotfQotaW50NjRfdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjptZXRhRGF0
YVR5cGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+PSAwKTsKLSAgICBy
ZXR1cm4gbV9tZXRhRGF0YVR5cGU7Ci19Ci0KLWludCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpj
b21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKQotewotICAgIEFTU0VS
VChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1fbWV0YURhdGFUeXBlID49IDAp
OwotICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9v
YmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIG1fbWV0YURhdGFU
eXBlIC0gb3RoZXIubV9tZXRhRGF0YVR5cGU7Ci19Ci0KLUluZGV4TWV0YURhdGFLZXk6OkluZGV4
TWV0YURhdGFLZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElk
KC0xKQotICAgICwgbV9tZXRhRGF0YVR5cGUoMCkKLXsKLX0KLQotY29uc3QgY2hhciogSW5kZXhN
ZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwg
SW5kZXhNZXRhRGF0YUtleSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAg
Y29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7
Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0
YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NF
UlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1
cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5V
U0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhNZXRhRGF0YVR5cGVCeXRlKTsKLSAgICBp
ZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChw
LCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4
SWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHAgPT0gbGltaXQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUgPSAqcCsrOwot
ICAgIHJldHVybiBwOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgo
ZGF0YWJhc2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUo
KTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4TWV0YURhdGFUeXBlQnl0ZSkpOwot
ICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZVZhckludChpbmRleElkKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1l
dGFEYXRhVHlwZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleE1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBJTlQ2NF9NQVgsIDI1NSk7Ci19Ci0KLWludCBJbmRleE1ldGFEYXRhS2V5Ojpjb21wYXJlKGNv
bnN0IEluZGV4TWV0YURhdGFLZXkmIG90aGVyKQotewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jl
SWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKLQotICAgIGlmIChpbnQgeCA9
IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkKLSAg
ICAgICAgcmV0dXJuIHg7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9pbmRleElkLCBv
dGhlci5tX2luZGV4SWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gbV9tZXRhRGF0
YVR5cGUgLSBvdGhlci5tX21ldGFEYXRhVHlwZTsKLX0KLQotaW50NjRfdCBJbmRleE1ldGFEYXRh
S2V5OjppbmRleElkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAg
IHJldHVybiBtX2luZGV4SWQ7Ci19Ci0KLU9iamVjdFN0b3JlRnJlZUxpc3RLZXk6Ok9iamVjdFN0
b3JlRnJlZUxpc3RLZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotewotfQotCi1jb25z
dCBjaGFyKiBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQs
IGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0g
ICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyICpwID0gS2V5UHJlZml4OjpkZWNv
ZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAw
OwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5t
X29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYg
KHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5
dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtPYmpl
Y3RTdG9yZUZyZWVMaXN0VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2Jq
ZWN0U3RvcmVJZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZUZyZWVMaXN0S2V5Ojpl
bmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAg
S2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0
ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3Rv
cmVGcmVlTGlzdFR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0
U3RvcmVJZCkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9y
ZUZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIHJl
dHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYKTsKLX0KLQotaW50NjRfdCBPYmplY3RT
dG9yZUZyZWVMaXN0S2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlSWQ7Ci19Ci0KLWlu
dCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRnJlZUxp
c3RLZXkmIG90aGVyKQotewotICAgIC8vIEZJWE1FOiBJdCBtYXkgc2VlbSBzdHJhbmdlIHRoYXQg
d2UncmUgbm90IGNvbXBhcmluZyBkYXRhYmFzZSBpZCdzLAotICAgIC8vIGJ1dCB0aGF0IGNvbXBh
cmlzb24gd2lsbCBoYXZlIGJlZW4gbWFkZSBlYXJsaWVyLgotICAgIC8vIFdlIHNob3VsZCBwcm9i
YWJseSBtYWtlIHRoaXMgbW9yZSBjbGVhciwgdGhvdWdoLi4uCi0gICAgQVNTRVJUKG1fb2JqZWN0
U3RvcmVJZCA+PSAwKTsKLSAgICByZXR1cm4gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBv
dGhlci5tX29iamVjdFN0b3JlSWQpOwotfQotCi1JbmRleEZyZWVMaXN0S2V5OjpJbmRleEZyZWVM
aXN0S2V5KCkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAgICAsIG1faW5kZXhJZCgtMSkK
LXsKLX0KLQotY29uc3QgY2hhciogSW5kZXhGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhGcmVlTGlzdEtleSogcmVzdWx0KQotewot
ICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVj
b2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgu
bV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlm
IChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5k
ZXhGcmVlTGlzdFR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3Jl
SWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZh
ckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4SWQpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5k
ZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFz
ZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAg
IHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrSW5kZXhGcmVlTGlzdFR5cGVCeXRlKSk7Ci0gICAgcmV0
LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5j
b2RlVmFySW50KGluZGV4SWQpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4g
SW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgSU5UNjRfTUFYKTsKLX0KLQotaW50IEluZGV4RnJlZUxpc3RLZXk6OmNvbXBhcmUo
Y29uc3QgSW5kZXhGcmVlTGlzdEtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3Rv
cmVJZCA+PSAwKTsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAgIGlmIChpbnQgeCA9
IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkKLSAg
ICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIu
bV9pbmRleElkKTsKLX0KLQotaW50NjRfdCBJbmRleEZyZWVMaXN0S2V5OjpvYmplY3RTdG9yZUlk
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIHJldHVy
biBtX29iamVjdFN0b3JlSWQ7Ci19Ci0KLWludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJ
ZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9p
bmRleElkOwotfQotCi0vLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBvYmpl
Y3Qgc3RvcmUgaWRzLCBiZWNhdXNlIGEgbWFwcGluZwotLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwotLy8g
Q2FuIHdlIHJlbW92ZSB0aGlzPwotY29uc3QgY2hhciogT2JqZWN0U3RvcmVOYW1lc0tleTo6ZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1l
c0tleSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciog
cCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFw
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0g
ICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5t
X2luZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1
bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRl
LCB0eXBlQnl0ZSA9PSBrT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRlKTsKLSAgICByZXR1cm4gZGVj
b2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlTmFtZSk7
Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKLXsKLSAgICBLZXlQcmVm
aXggcHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVm
aXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZU5hbWVz
VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgob2JqZWN0
U3RvcmVOYW1lKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IE9iamVjdFN0b3JlTmFtZXNL
ZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVOYW1lc0tleSYgb3RoZXIpCi17Ci0gICAgcmV0
dXJuIGNvZGVQb2ludENvbXBhcmUobV9vYmplY3RTdG9yZU5hbWUsIG90aGVyLm1fb2JqZWN0U3Rv
cmVOYW1lKTsKLX0KLQotSW5kZXhOYW1lc0tleTo6SW5kZXhOYW1lc0tleSgpCi0gICAgOiBtX29i
amVjdFN0b3JlSWQoLTEpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBs
b29rIHVwIGluZGV4IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKLS8vIGlzIGtlcHQgYXQgYSBoaWdo
ZXIgbGV2ZWwuCi1jb25zdCBjaGFyKiBJbmRleE5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciog
c3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpCi17Ci0gICAg
S2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUo
c3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwot
ICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29i
amVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAg
PT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUg
PSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtJbmRleE5h
bWVzS2V5VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7
Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5n
V2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4TmFtZSk7Ci19Ci0KLVZlY3Rvcjxj
aGFyPiBJbmRleE5hbWVzS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQotewotICAgIEtleVByZWZpeCBw
cmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5l
bmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4TmFtZXNLZXlUeXBlQnl0
ZSkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICBy
ZXQuYXBwZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoaW5kZXhOYW1lKSk7Ci0gICAgcmV0dXJu
IHJldDsKLX0KLQotaW50IEluZGV4TmFtZXNLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhOYW1lc0tl
eSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICBpZiAo
aW50IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJ
ZCkpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKG1faW5k
ZXhOYW1lLCBvdGhlci5tX2luZGV4TmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIqIE9iamVjdFN0b3Jl
RGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIE9iamVj
dFN0b3JlRGF0YUtleSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29u
c3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBlbmQsICZwcmVmaXgpOwotICAg
IGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNl
SWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJl
Zml4Lm1faW5kZXhJZCA9PSBrU3BlY2lhbEluZGV4TnVtYmVyKTsKLSAgICBpZiAocCA9PSBlbmQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBleHRyYWN0RW5jb2RlZElEQktleShwLCBl
bmQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1WZWN0b3I8Y2hhcj4gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSkKLXsKLSAgICBLZXlQcmVm
aXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtTcGVjaWFsSW5kZXhOdW1iZXIp
OwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVu
ZChlbmNvZGVkVXNlcktleSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4g
T2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSkKLXsKLSAgICByZXR1cm4gZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZUlEQktleSh1c2VyS2V5KSk7Ci19Ci0K
LWludCBPYmplY3RTdG9yZURhdGFLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVEYXRhS2V5
JiBvdGhlcikKLXsKLSAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFVz
ZXJLZXksIG90aGVyLm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4g
T2JqZWN0U3RvcmVEYXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SURCS2V5
PiBrZXk7Ci0gICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNv
ZGVkVXNlcktleS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25zdCBpbnQ2
NF90IE9iamVjdFN0b3JlRGF0YUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtPYmplY3RTdG9y
ZURhdGFJbmRleElkOwotCi1jb25zdCBjaGFyKiBFeGlzdHNFbnRyeUtleTo6ZGVjb2RlKGNvbnN0
IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIEV4aXN0c0VudHJ5S2V5KiByZXN1bHQpCi17
Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4Ojpk
ZWNvZGUoc3RhcnQsIGVuZCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZpeC5t
X29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9pbmRleElkID09IGtTcGVjaWFs
SW5kZXhOdW1iZXIpOwotICAgIGlmIChwID09IGVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGVuZCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNl
cktleSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
Y29kZWRLZXkpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBrU3BlY2lhbEluZGV4TnVtYmVyKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4
LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlZEtleSk7Ci0gICAgcmV0dXJuIHJldDsK
LX0KLQotVmVjdG9yPGNoYXI+IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSkKLXsKLSAg
ICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZUlEQktleSh1
c2VyS2V5KSk7Ci19Ci0KLWludCBFeGlzdHNFbnRyeUtleTo6Y29tcGFyZShjb25zdCBFeGlzdHNF
bnRyeUtleSYgb3RoZXIpCi17Ci0gICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2Vu
Y29kZWRVc2VyS2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJLZXk+IEV4aXN0c0VudHJ5S2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXk7Ci0gICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9l
bmNvZGVkVXNlcktleS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25zdCBp
bnQ2NF90IEV4aXN0c0VudHJ5S2V5OjprU3BlY2lhbEluZGV4TnVtYmVyID0ga0V4aXN0c0VudHJ5
SW5kZXhJZDsKLQotSW5kZXhEYXRhS2V5OjpJbmRleERhdGFLZXkoKQotICAgIDogbV9kYXRhYmFz
ZUlkKC0xKQotICAgICwgbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQot
ICAgICwgbV9zZXF1ZW5jZU51bWJlcigtMSkKLXsKLX0KLQotY29uc3QgY2hhciogSW5kZXhEYXRh
S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleERh
dGFLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIq
IHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICgh
cCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwot
ICAgIEFTU0VSVChwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1f
aW5kZXhJZCA+PSBrTWluaW11bUluZGV4SWQpOwotICAgIHJlc3VsdC0+bV9kYXRhYmFzZUlkID0g
cHJlZml4Lm1fZGF0YWJhc2VJZDsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IHByZWZp
eC5tX29iamVjdFN0b3JlSWQ7Ci0gICAgcmVzdWx0LT5tX2luZGV4SWQgPSBwcmVmaXgubV9pbmRl
eElkOwotICAgIHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlciA9IC0xOwotICAgIHJlc3VsdC0+bV9l
bmNvZGVkUHJpbWFyeUtleSA9IG1pbklEQktleSgpOwotCi0gICAgcCA9IGV4dHJhY3RFbmNvZGVk
SURCS2V5KHAsIGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKLSAgICBpZiAoIXAp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gW29wdGlvbmFsXSBzZXF1ZW5jZSBudW1iZXIK
LSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9ICBkZWNvZGVW
YXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlcik7Ci0gICAgaWYgKCFwKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFtvcHRpb25hbF0gcHJpbWFyeSBrZXkKLSAgICBp
ZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9IGV4dHJhY3RFbmNvZGVk
SURCS2V5KHAsIGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRQcmltYXJ5S2V5KTsKLSAgICBpZiAo
IXApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFy
PiBJbmRleERhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2Vy
S2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVl
bmNlTnVtYmVyKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsK
LSAgICByZXQuYXBwZW5kKGVuY29kZWRVc2VyS2V5KTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZh
ckludChzZXF1ZW5jZU51bWJlcikpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlZFByaW1hcnlLZXkp
OwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29k
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkodXNlcktleSksIG1pbklE
QktleSgpKTsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
Ci17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCBtaW5JREJLZXkoKSwgbWluSURCS2V5KCkpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhEYXRh
S2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIG1heElEQktleSgpLCBtYXhJREJLZXkoKSwgSU5UNjRfTUFY
KTsKLX0KLQotaW50IEluZGV4RGF0YUtleTo6Y29tcGFyZShjb25zdCBJbmRleERhdGFLZXkmIG90
aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+
PSAwKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIEFTU0VSVChtX2lu
ZGV4SWQgPj0gMCk7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5j
b2RlZFVzZXJLZXksIG90aGVyLm1fZW5jb2RlZFVzZXJLZXkpKQotICAgICAgICByZXR1cm4geDsK
LSAgICBpZiAoaWdub3JlRHVwbGljYXRlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGlu
dCB4ID0gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFByaW1hcnlLZXksIG90aGVyLm1f
ZW5jb2RlZFByaW1hcnlLZXkpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gY29tcGFy
ZUludHMobV9zZXF1ZW5jZU51bWJlciwgb3RoZXIubV9zZXF1ZW5jZU51bWJlcik7Ci19Ci0KLWlu
dDY0X3QgSW5kZXhEYXRhS2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZUlkID49IDApOwotICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7Ci19Ci0KLWludDY0X3Qg
SW5kZXhEYXRhS2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9vYmpl
Y3RTdG9yZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlSWQ7Ci19Ci0KLWludDY0
X3QgSW5kZXhEYXRhS2V5OjppbmRleElkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbmRleElk
ID49IDApOwotICAgIHJldHVybiBtX2luZGV4SWQ7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJ
bmRleERhdGFLZXk6OnVzZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtleTsK
LSAgICBkZWNvZGVJREJLZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29kZWRVc2Vy
S2V5LmVuZCgpLCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5
PiBJbmRleERhdGFLZXk6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKLSAgICBkZWNvZGVJREJLZXkobV9lbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBtX2Vu
Y29kZWRQcmltYXJ5S2V5LmVuZCgpLCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIElEQkxldmVsREJDb2RpbmcKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERC
Q29kaW5nX2gKLSNkZWZpbmUgSURCTGV2ZWxEQkNvZGluZ19oCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3MgTGV2ZWxEQlNs
aWNlOwotCi1uYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZyB7Ci0KLWNvbnN0IHVuc2lnbmVkIGNo
YXIga01pbmltdW1JbmRleElkID0gMzA7Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVCeXRlKHVuc2ln
bmVkIGNoYXIpOwotVmVjdG9yPGNoYXI+IG1heElEQktleSgpOwotVmVjdG9yPGNoYXI+IG1pbklE
QktleSgpOwotVmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90KTsKLWludDY0X3QgZGVjb2Rl
SW50KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpOwotVmVjdG9yPGNoYXI+IGVu
Y29kZVZhckludChpbnQ2NF90KTsKLWNvbnN0IGNoYXIqIGRlY29kZVZhckludChjb25zdCBjaGFy
ICpwLCBjb25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYgZm91bmRJbnQpOwotVmVjdG9yPGNoYXI+
IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLVN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3Qg
Y2hhciogcCwgY29uc3QgY2hhciogZW5kKTsKLVZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRo
TGVuZ3RoKGNvbnN0IFN0cmluZyYpOwotY29uc3QgY2hhciogZGVjb2RlU3RyaW5nV2l0aExlbmd0
aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgU3RyaW5nJiBmb3VuZFN0cmluZyk7
Ci1pbnQgY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29u
c3QgY2hhciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKTsKLVZl
Y3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlKTsKLWNvbnN0IGNoYXIqIGRlY29kZURvdWJs
ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgZG91YmxlKik7Ci12b2lkIGVuY29k
ZUlEQktleShjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGludG8pOwotVmVjdG9yPGNoYXI+
IGVuY29kZUlEQktleShjb25zdCBJREJLZXkmKTsKLWNvbnN0IGNoYXIqIGRlY29kZUlEQktleShj
b25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5
KTsKLWNvbnN0IGNoYXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBj
b25zdCBjaGFyKiBsaW1pdCwgVmVjdG9yPGNoYXI+KiByZXN1bHQpOwotaW50IGNvbXBhcmVFbmNv
ZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLQot
aW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJiwgYm9v
bCBpbmRleEtleXMgPSBmYWxzZSk7Ci0KLWNsYXNzIEtleVByZWZpeCB7Ci1wdWJsaWM6Ci0gICAg
S2V5UHJlZml4KCk7Ci0gICAgS2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEtleVByZWZpeCog
cmVzdWx0KTsKLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlKCkgY29uc3Q7Ci0gICAgaW50IGNvbXBh
cmUoY29uc3QgS2V5UHJlZml4JiBvdGhlcikgY29uc3Q7Ci0KLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBrR2xvYmFsTWV0YURhdGEsCi0gICAgICAgIGtEYXRhYmFzZU1ldGFEYXRhLAotICAgICAg
ICBrT2JqZWN0U3RvcmVEYXRhLAotICAgICAgICBrRXhpc3RzRW50cnksCi0gICAgICAgIGtJbmRl
eERhdGEsCi0gICAgICAgIGtJbnZhbGlkVHlwZQotICAgIH07Ci0KLSAgICBUeXBlIHR5cGUoKSBj
b25zdDsKLQotICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOwotICAgIGludDY0X3QgbV9pbmRleElkOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0
X3Qga0ludmFsaWRJZCA9IC0xOwotfTsKLQotY2xhc3MgU2NoZW1hVmVyc2lvbktleSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKLX07Ci0KLWNsYXNzIE1heERh
dGFiYXNlSWRLZXkgewotcHVibGljOgotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7
Ci19OwotCi1jbGFzcyBEYXRhYmFzZUZyZWVMaXN0S2V5IHsKLXB1YmxpYzoKLSAgICBEYXRhYmFz
ZUZyZWVMaXN0S2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlRnJlZUxpc3RLZXkqIHJlc3VsdCk7
Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkKTsKLSAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleSgpOwotICAgIGludDY0X3QgZGF0YWJh
c2VJZCgpIGNvbnN0OwotICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJlZUxpc3RLZXkm
IG90aGVyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLX07
Ci0KLWNsYXNzIERhdGFiYXNlTmFtZUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNl
TmFtZUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOwotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKTsK
LSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW4pOwotICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdp
bjsgfQotICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNl
TmFtZTsgfQotICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3RoZXIpOwot
Ci1wcml2YXRlOgotICAgIFN0cmluZyBtX29yaWdpbjsgLy8gRklYTUU6IFN0b3JlIGVuY29kZWQg
c3RyaW5ncywgb3IganVzdCBwb2ludGVycy4KLSAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7Ci19
OwotCi1jbGFzcyBEYXRhYmFzZU1ldGFEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBlbnVtIE1ldGFE
YXRhVHlwZSB7Ci0gICAgICAgIGtPcmlnaW5OYW1lID0gMCwKLSAgICAgICAga0RhdGFiYXNlTmFt
ZSA9IDEsCi0gICAgICAgIGtVc2VyVmVyc2lvbiA9IDIsCi0gICAgICAgIGtNYXhPYmplY3RTdG9y
ZUlkID0gMwotICAgIH07Ci0KLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSk7Ci19OwotCi1jbGFzcyBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5IHsKLXB1YmxpYzoKLSAgICBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbWV0YURhdGFUeXBlKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4
S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBpbnQ2
NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNv
bnN0OwotICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVy
KTsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90
IG1fbWV0YURhdGFUeXBlOyAvLyBGSVhNRTogTWFrZSB0aGlzIGEgYnl0ZS4KLX07Ci0KLWNsYXNz
IEluZGV4TWV0YURhdGFLZXkgewotcHVibGljOgotICAgIEluZGV4TWV0YURhdGFLZXkoKTsKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSk7Ci0gICAgc3RhdGljIFZl
Y3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4TWV0YURhdGFLZXkmIG90aGVy
KTsKLSAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBjaGFyIG1ldGFE
YXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YURhdGFUeXBlOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgaW50NjRfdCBtX2luZGV4SWQ7Ci0gICAg
dW5zaWduZWQgY2hhciBtX21ldGFEYXRhVHlwZTsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlRnJl
ZUxpc3RLZXkgewotcHVibGljOgotICAgIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkoKTsKLSAgICBz
dGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlk
KTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQgY29tcGFyZShj
b25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhlcik7Ci0KLXByaXZhdGU6Ci0gICAgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19OwotCi1jbGFzcyBJbmRleEZyZWVMaXN0S2V5IHsKLXB1
YmxpYzoKLSAgICBJbmRleEZyZWVMaXN0S2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RL
ZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAgc3Rh
dGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4RnJlZUxpc3RLZXkm
IG90aGVyKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2NF90
IGluZGV4SWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlTmFtZXNL
ZXkgewotcHVibGljOgotICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVw
IG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0
aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlh
YmxlPwotICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KLSAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVO
YW1lc0tleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKLSAgICBpbnQgY29t
cGFyZShjb25zdCBPYmplY3RTdG9yZU5hbWVzS2V5JiBvdGhlcik7Ci0gICAgU3RyaW5nIG9iamVj
dFN0b3JlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVOYW1lOyB9Ci0KLXByaXZh
dGU6Ci0gICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOyAvLyBGSVhNRTogU3RvcmUgdGhlIGVu
Y29kZWQgc3RyaW5nLCBvciBqdXN0IHBvaW50ZXJzIHRvIGl0LgotfTsKLQotY2xhc3MgSW5kZXhO
YW1lc0tleSB7Ci1wdWJsaWM6Ci0gICAgSW5kZXhOYW1lc0tleSgpOwotICAgIC8vIEZJWE1FOiBX
ZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIGluZGV4IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcK
LSAgICAvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVsLgotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVz
S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7
Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhOYW1lc0tleSYgb3RoZXIpOwotICAgIFN0cmlu
ZyBpbmRleE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TmFtZTsgfQotCi1wcml2YXRlOgot
ICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIFN0cmluZyBtX2luZGV4TmFtZTsKLX07
Ci0KLWNsYXNzIE9iamVjdFN0b3JlRGF0YUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RT
dG9yZURhdGFLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFy
PiBlbmNvZGVkVXNlcktleSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktl
eSk7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVEYXRhS2V5JiBvdGhlcik7Ci0g
ICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBjb25zdDsKLSAgICBzdGF0aWMgY29uc3Qg
aW50NjRfdCBrU3BlY2lhbEluZGV4TnVtYmVyOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxjaGFy
PiBtX2VuY29kZWRVc2VyS2V5OwotfTsKLQotY2xhc3MgRXhpc3RzRW50cnlLZXkgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZEtleSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBl
bmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYgdXNlcktleSk7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlLZXkmIG90
aGVyKTsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gdXNlcktleSgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIGNvbnN0IGludDY0X3Qga1NwZWNpYWxJbmRleE51bWJlcjsKLQotcHJpdmF0ZToKLSAgICBW
ZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKLX07Ci0KLWNsYXNzIEluZGV4RGF0YUtleSB7
Ci1wdWJsaWM6Ci0gICAgSW5kZXhEYXRhS2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RGF0YUtleSog
cmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5
S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVtYmVyID0gMCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZU1pbktleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKTsKLSAgICBpbnQgY29tcGFyZShjb25zdCBJbmRleERhdGFLZXkmIG90aGVyLCBib29sIGln
bm9yZUR1cGxpY2F0ZXMpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OwotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0
OwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1f
ZGF0YWJhc2VJZDsKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1f
aW5kZXhJZDsKLSAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKLSAgICBWZWN0b3I8
Y2hhcj4gbV9lbmNvZGVkUHJpbWFyeUtleTsKLSAgICBpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCTGV2ZWxEQkNvZGluZ19oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSURCT2JqZWN0U3RvcmUuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRl
ICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKLQotSURCT2JqZWN0
U3RvcmU6OklEQk9iamVjdFN0b3JlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAg
IDogbV9iYWNrZW5kKGlkYk9iamVjdFN0b3JlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlv
bik7Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQg
Y2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLVN0
cmluZyBJREJPYmplY3RTdG9yZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZTo6bmFtZSIpOwotICAgIHJldHVybiBtX2JhY2tlbmQtPm5hbWUoKTsKLX0KLQot
U3RyaW5nIElEQk9iamVjdFN0b3JlOjprZXlQYXRoKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjprZXlQYXRoIik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+a2V5UGF0
aCgpOwotfQotCi1QYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRl
eE5hbWVzKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleE5h
bWVzIik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+aW5kZXhOYW1lcygpOwotfQotCi1JREJUcmFu
c2FjdGlvbiogSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKCkgY29uc3QKLXsKLSAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbiIpOwotICAgIHJldHVybiBtX3RyYW5z
YWN0aW9uLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6Z2V0Iik7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlk
VHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0
LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsK
LSAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIGlmIChrZXkgJiYgKGtl
eS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNr
ZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRP
clVwZGF0ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpkZWxl
dGUiKTsKLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5kZWxl
dGVGdW5jdGlvbihrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRl
bGV0ZSIpOwotICAgIGlmICgha2V5IHx8ICFrZXktPnZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBt
X2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURl
YXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNsZWFy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmNsZWFyIik7Ci0gICAgUmVmUHRyPElEQlJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVh
dGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Y2xlYXIocmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+
IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9ucywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgiKTsK
LSAgICBpZiAoIUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBib29sIHVuaXF1ZSA9IGZhbHNlOwotICAgIG9wdGlvbnMuZ2V0KCJ1bmlx
dWUiLCB1bmlxdWUpOwotCi0gICAgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgb3B0aW9u
cy5nZXQoIm11bHRpRW50cnkiLCBtdWx0aUVudHJ5KTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIEFy
cmF5LXR5cGUga2V5UGF0aHMgYXJlIHN1cHBvcnRlZCwgdGhyb3cgZXhjZXB0aW9uIGlmIGtleVBh
dGggaXMgQXJyYXkgYW5kIG11bHRpRW50cnkgaXMgdHJ1ZS4KLQotICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgo
bmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRu
J3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUu
IEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5kZXhCYWNrZW5kKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShpbmRleEJh
Y2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2luZGV4
TWFwLnNldChuYW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6aW5kZXgiKTsKLSAgICBpZiAobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhN
YXAuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKLSAgICBBU1NFUlQo
IWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBz
aG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgotICAg
IGlmICghaW5kZXhCYWNrZW5kKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJJ
bmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRo
aXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4
KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3Jl
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgobmFtZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwotICAgIGlm
IChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGly
ZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAgLy8gRklY
TUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1
Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMTQwNgotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVl
c3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVD
dXJzb3IpOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1
ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Y291bnQocmFuZ2Us
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewot
ICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKLSAgICBpZiAoZWMpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxl
YXNlKCksIGVjKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmZpbmlzaGVkKCkpOwotCi0gICAgLy8g
QnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2luZGV4TWFwLmNsZWFyKCk7Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQk9iamVjdFN0
b3JlX2gKLSNkZWZpbmUgSURCT2JqZWN0U3RvcmVfaAotCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgi
Ci0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5o
IgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgot
I2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgSURCQW55OwotCi1jbGFzcyBJREJPYmpl
Y3RTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQk9iamVjdFN0b3JlPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
T2JqZWN0U3RvcmUoaWRiT2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Ci0gICAgfQotICAgIH5J
REJPYmplY3RTdG9yZSgpIHsgfQotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICBTdHJp
bmcga2V5UGF0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhO
YW1lcygpIGNvbnN0OwotICAgIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbigpIGNvbnN0Owot
Ci0gICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMg
aXMgdW5uZWVkZWQuCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBl
Yyk7ICB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9
Ci0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVh
dGVJbmRleChuYW1lLCBrZXlQYXRoLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQotICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCAwLCBl
Yyk7IH0gCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwg
SURCQ3Vyc29yOjpORVhULCBlYyk7IH0gCi0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBj
bGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFz
c1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGNvbnN0IE9wdGlvbnNPYmplY3QmLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgUGFzc1JlZlB0cjxJREJJbmRleD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOyAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDAp
LCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB0cmFuc2FjdGlv
bkZpbmlzaGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZv
aWQgcmVtb3ZlVHJhbnNhY3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKLQotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8SURCSW5kZXg+ID4gSURCSW5kZXhNYXA7Ci0gICAgSURCSW5kZXhNYXAgbV9pbmRleE1h
cDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJPYmplY3RTdG9yZV9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRQotICAgIF0gSURCT2JqZWN0U3RvcmUgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIG5h
bWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdB
cz1OdWxsXSBET01TdHJpbmcga2V5UGF0aDsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZ0xpc3QgaW5kZXhOYW1lczsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQlRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uOwotCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUs
IGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBhZGQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBbT3B0aW9u
YWxdIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVk
QXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlIGtleVJh
bmdlKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1
bmN0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFp
c2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVj
dXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNsZWFyKCkKLSAgICAgICAgICAgIHJhaXNlcyAoSURC
RGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCUmVxdWVzdCBnZXQoaW4gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2Ug
cmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQotICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIElEQkluZGV4IGNyZWF0
ZUluZGV4KGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcga2V5UGF0aCwgaW4gW09wdGlv
bmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKLSAgICAgICAgSURCSW5kZXggaW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUp
Ci0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgdm9p
ZCBkZWxldGVJbmRleChpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURC
RGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlKQot
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIElEQktleSBr
ZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICB9Owot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgot
I2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwu
aCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVk
ZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNp
bmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6On5JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKCkKLXsKLX0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQotICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX2lkKGlk
KQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKLSAgICAsIG1f
YXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9hdXRvSW5jcmVtZW50TnVtYmVy
KC0xKQotewotICAgIGxvYWRJbmRleGVzKCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKLSAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwgbV9pZChJbnZh
bGlkSWQpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAg
ICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCi0gICAgLCBtX2F1dG9JbmNyZW1lbnRO
dW1iZXIoLTEpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKElu
ZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2lu
ZGV4ZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+Zmlyc3Qp
OwotICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKLSAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNl
KCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0Iik7
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhp
czsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEludGVybmFsLCBvYmplY3RTdG9yZSwga2V5LCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
SW50ZXJuYWwiKTsKLSAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5n
U3RvcmUtPmdldE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5KTsKLSAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKLSAg
ICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmlu
ZWRWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsK
LX0KLQotc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmZldGNoS2V5RnJvbUtleVBhdGgi
KTsKLSAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7Ci0g
ICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4ga2V5
czsKLSAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXpl
ZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKLSAgICBpZiAoa2V5cy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChrZXlzLnNpemUoKSA9PSAx
KTsKLSAgICByZXR1cm4ga2V5c1swXS5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0S2V5SW50b0tleVBhdGgoUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjppbmplY3RLZXlJbnRvS2V5UGF0aCIpOwotICAgIHJldHVybiBJREJLZXlQYXRoQmFj
a2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5
UGF0aCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnB1dCIpOwotICAgIGlmICh0cmFuc2FjdGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVB
RF9PTkxZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBwcnBLZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRh
dGUpIHsKLSAgICAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1
dG9JbmNyZW1lbnQoKTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9iamVjdFN0
b3JlLT5tX2tleVBhdGguaXNOdWxsKCk7Ci0KLSAgICAgICAgaWYgKGhhc0tleVBhdGggJiYga2V5
KSB7Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYg
IWF1dG9JbmNyZW1lbnQgJiYgIWtleSkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhL
ZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoKTsKLSAgICAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT52YWxpZCgp
KSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCFhdXRvSW5jcmVtZW50ICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhL
ZXkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6
Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoZHVtbXlL
ZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtl
eSAmJiAha2V5LT52YWxpZCgpKSB7Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBm
b3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2lu
ZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOwotICAgICAgICAgICAgUmVmUHRyPElEQktl
eT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5
UGF0aCgpKTsKLSAgICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZhbGlkKCkp
IHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNLZXlQ
YXRoID0gIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCk7Ci0gICAgICAgIGlmIChoYXNL
ZXlQYXRoKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hL
ZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAg
ICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1YWwoa2V5LmdldCgp
KSkgewotICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWws
IG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KSwKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92ZXJr
aWxsLCBzaW5jZSBpdCdzIHNpbXBseSBhIGNhY2hlIGludmFsaWRhdGlvbi4KLSAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0
b0luY3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKQotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlKQotewotICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNo
ZSgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtl
eTsKLQotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBi
b29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwotICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsK
LSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQ
YXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlm
IChrZXlQYXRoS2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3Jl
LT5nZW5BdXRvSW5jcmVtZW50S2V5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0tleVBhdGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVl
LCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
bHVlQWZ0ZXJJbmplY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJ
bmplY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1
dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tz
IGluIHB1dCgpIGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2Nj
dXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFi
YXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0
byBJL08gZXJyb3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9F
UlIsICJJbnRlcm5hbCBlcnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmpl
Y3QuIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZ2ljIHRvIHVw
ZGF0ZSBnZW5lcmF0b3Igc3RhdGUgc2hvdWxkIGdvIGhlcmUuIEN1cnJlbnRseSBpdCBkb2VzIGEg
c2Nhbi4KLSAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChr
ZXkgJiYga2V5LT52YWxpZCgpKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVjdFN0b3JlLT5t
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICBpZiAo
cHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhp
c3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+
aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAgICAgb2JqZWN0U3Rv
cmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNU
UkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5k
ZXhLZXlzOwotICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBp
dC0+c2Vjb25kOwotCi0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlG
cm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7Ci0gICAgICAgIGlmICgh
aW5kZXhLZXkpIHsKLSAgICAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFz
ZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChp
bmRleEtleS0+dmFsaWQoKSk7Ci0KLSAgICAgICAgaWYgKCghaW5kZXgtPm11bHRpRW50cnkoKSB8
fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSAmJiAhaW5kZXgtPmFkZGlu
Z0tleUFsbG93ZWQoaW5kZXhLZXkuZ2V0KCksIGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgIG9i
amVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlIsICJPbmUgb2YgdGhlIGRlcml2ZWQgKGZyb20gYSBrZXlQYXRo
KSBrZXlzIGZvciBhbiBpbmRleCBkb2VzIG5vdCBzYXRpc2Z5IGl0cyB1bmlxdWVuZXNzIHJlcXVp
cmVtZW50cy4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaW5kZXgtPm11bHRpRW50cnkoKSAmJiBpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJy
YXlUeXBlKSB7Ci0gICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5kZXhLZXktPmFy
cmF5KCkuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4LT5hZGRpbmdL
ZXlBbGxvd2VkKGluZGV4S2V5LT5hcnJheSgpW2pdLmdldCgpLCBrZXkuZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgp
OwotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIk9uZSBvZiB0
aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRvZXMgbm90IHNh
dGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGluZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKLSAgICB9Ci0K
LSAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIg
dGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0K
LSAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0T2JqZWN0U3RvcmVSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZh
bHVlLT50b1dpcmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2
ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgotICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7
Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaW50IGkgPSAwOwotICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVu
ZCgpOyArK2l0LCArK2kpIHsKLSAgICAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQs
IGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgotCi0gICAgICAgIGlmICgh
b2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2Jq
ZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRl
eGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRl
ZGljYXRlZCB0byBJL08gZXJyb3JzLgotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
ICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWluZGV4S2V5c1tpXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGluZGV4S2V5c1tpXTsKLQotICAgICAgICBpZiAo
IWluZGV4LT5tdWx0aUVudHJ5KCkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5
VHlwZSkgewotICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1
dEluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZS0+aWQoKSwgaW5kZXgtPmlkKCksICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lm
aWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJv
cnMuCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5n
IGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleC0+bXVsdGlFbnRyeSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9i
amVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSwgKmluZGV4S2V5LT5hcnJheSgpW2pdLCByZWNv
cmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhl
IEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNv
ZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsK
LSAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkuZ2V0KCkpOwotfQotCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
Iik7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlmICgha2V5IHx8ICFr
ZXktPnZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBkZWxldGVGdW5jdGlvbihrZXlSYW5nZS5yZWxlYXNlKCksIHBycENh
bGxiYWNrcywgdHJhbnNhY3Rpb24sIGVjKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLSAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBL
ZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUlu
dGVybmFsIik7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3Rv
cmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZS0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgaWYg
KGJhY2tpbmdTdG9yZUN1cnNvcikgewotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHJlY29y
ZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllcigpOwotCi0gICAgICAgICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJ
ZCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBo
YXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4K
LQotICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQs
IG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUt
PmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVj
dFN0b3JlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKLQotICAgICAgICB9IHdoaWxl
IChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgICAgIGJh
Y2tpbmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKLSAgICB9Ci0KLSAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotfQotCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y2xlYXIiKTsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJU
cmFuc2FjdGlvbjo6UkVBRF9PTkxZKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlJFQURfT05MWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLQotICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwsIG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKSkKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0g
ICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKG9iamVjdFN0
b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotfQotCi1u
YW1lc3BhY2UgewotY2xhc3MgUG9wdWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJhY2tp
bmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgUG9wdWxh
dGVJbmRleENhbGxiYWNrKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0g
ICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2Jq
ZWN0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKTsK
LSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9i
amVjdFZhbHVlLmdldCgpLCBtX2luZGV4LT5rZXlQYXRoKCkpOwotCi0gICAgICAgIGlmICghaW5k
ZXhLZXkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoIW1faW5kZXgt
Pm11bHRpRW50cnkoKSB8fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7
Ci0gICAgICAgICAgICBpZiAoIW1faW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXkuZ2V0
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2luZGV4LT5pZCgpLCAqaW5kZXhLZXksIHJlY29yZElkZW50aWZpZXIpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX2luZGV4LT5tdWx0aUVudHJ5KCkpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
YmFja2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleC0+aWQoKSwgKmluZGV4S2V5LT5hcnJheSgpW2ldLCByZWNvcmRJZGVu
dGlmaWVyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBJREJCYWNraW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOwotICAgIGludDY0X3QgbV9kYXRhYmFz
ZUlkOwotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBtX2luZGV4OwotfTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwb3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKLXsKLSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2so
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleCk7Ci0gICAgaWYg
KCFiYWNraW5nU3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGNhbGxiYWNrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PTl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KG1faW5kZXhlcy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQo
KSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBuYW1lLCBtX25hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7Ci0gICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7Ci0KLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uUHRyID0gdHJh
bnNhY3Rpb247Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZUluZGV4SW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RT
dG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uUHRyKSwKLSAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1faW5kZXhlcy5zZXQobmFtZSwg
aW5kZXgpOwotICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIGludDY0X3QgaWQ7
Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9iamVj
dFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFtZSgpLCBp
bmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCksIGlk
KSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGluZGV4LT5zZXRJZChpZCk7Ci0KLSAgICBpZiAoIXBvcHVsYXRlSW5kZXgoKm9i
amVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPm1faWQsIGluZGV4KSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRh
c2tFdmVudHMoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lP
Tl9DSEFOR0UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9X
RURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7
Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rpb247Ci0gICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uUHRy
KSwKLSAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjphZGRJbmRleFRvTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0U3RvcmUsIGluZGV4KSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1faW5kZXhlcy5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCksIGluZGV4LT5pZCgpKTsKLSAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZl
bnRzKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UgPSBwcnBSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlv
biwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvblB0cikpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLSAgICB9Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdG1w
RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsK
LSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4odG1wRGlyZWN0aW9uKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0
b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvciwgdHJhbnNhY3Rpb24u
Z2V0KCksIG9iamVjdFN0b3JlLmdldCgpKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJz
b3IucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3Vu
dChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjb3VudCIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWws
IHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCi0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y291bnRJbnRlcm5hbCIpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5t
X2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5tX2RhdGFi
YXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAgfSB3aGls
ZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLQotICAgIGJhY2tp
bmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBp
ZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0
aHM7Ci0gICAgVmVjdG9yPGJvb2w+IHVuaXF1ZUZsYWdzOwotICAgIFZlY3Rvcjxib29sPiBtdWx0
aUVudHJ5RmxhZ3M7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmdldEluZGV4ZXMobV9kYXRhYmFzZUlk
LCBtX2lkLCBpZHMsIG5hbWVzLCBrZXlQYXRocywgdW5pcXVlRmxhZ3MsIG11bHRpRW50cnlGbGFn
cyk7Ci0KLSAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGlkcy5zaXplKCkpOwotICAgIEFTU0VS
VChrZXlQYXRocy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHVuaXF1ZUZsYWdz
LnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQobXVsdGlFbnRyeUZsYWdzLnNpemUo
KSA9PSBpZHMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUo
KTsgaSsrKQotICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWVzW2ldLCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJhc2VJZCwgdGhpcywgaWRz
W2ldLCBuYW1lc1tpXSwgbV9uYW1lLCBrZXlQYXRoc1tpXSwgdW5pcXVlRmxhZ3NbaV0sIG11bHRp
RW50cnlGbGFnc1tpXSkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJl
bW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKLXsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5j
b250YWlucyhpbmRleC0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1v
dmUoaW5kZXgtPm5hbWUoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCkKLXsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXhQ
dHIgPSBpbmRleDsKLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMo
aW5kZXhQdHItPm5hbWUoKSkpOwotICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4
UHRyLT5uYW1lKCksIGluZGV4UHRyKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdlbkF1dG9JbmNyZW1lbnRLZXkoKQotewotICAgIGlmIChtX2F1
dG9JbmNyZW1lbnROdW1iZXIgPiAwKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1i
ZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOwotCi0gICAgbV9hdXRvSW5jcmVtZW50TnVtYmVy
ID0gc3RhdGljX2Nhc3Q8aW50PihtX2JhY2tpbmdTdG9yZS0+bmV4dEF1dG9JbmNyZW1lbnROdW1i
ZXIobV9kYXRhYmFzZUlkLCBpZCgpKSk7Ci0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVy
KG1fYXV0b0luY3JlbWVudE51bWJlcisrKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsX2gK
LSNkZWZpbmUgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwot
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gY3JlYXRlKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBuYW1lLCBrZXlQYXRo
LCBhdXRvSW5jcmVtZW50KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7Ci0g
ICAgaW50NjRfdCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZh
bGlkSWQpOwotICAgICAgICByZXR1cm4gbV9pZDsKLSAgICB9Ci0gICAgdm9pZCBzZXRJZChpbnQ2
NF90IGlkKSB7IG1faWQgPSBpZDsgfQotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VJZDsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7
IHJldHVybiBtX2tleVBhdGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gaW5kZXhOYW1lcygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBhdXRvSW5jcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9hdXRvSW5jcmVtZW50OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc3RhdGljIGJv
b2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7Ci0K
LXByaXZhdGU6Ci0gICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUq
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
KTsKLQotICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gZ2Vu
QXV0b0luY3JlbWVudEtleSgpOwotICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUo
KSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZv
aWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBz
dGF0aWMgdm9pZCBjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4p
OwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLQotICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFz
IHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCi0gICAgc3RhdGljIHZvaWQgcmVt
b3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsK
LSAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2Fj
aGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4pOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7
Ci0KLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBpbnQ2NF90IG1faWQ7Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9rZXlQYXRoOwotICAgIGJvb2wgbV9hdXRvSW5jcmVt
ZW50OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+ID4gSW5kZXhNYXA7Ci0gICAgSW5kZXhNYXAgbV9pbmRleGVzOwotICAgIGludCBtX2F1
dG9JbmNyZW1lbnROdW1iZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZp
bmUgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlz
dDsKLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZTsK
LWNsYXNzIElEQktleTsKLWNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi10eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0g
ICAgZW51bSBQdXRNb2RlIHsKLSAgICAgICAgQWRkT3JVcGRhdGUsCi0gICAgICAgIEFkZE9ubHks
Ci0gICAgICAgIEN1cnNvclVwZGF0ZQotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBj
cmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
ci5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotCi11c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOwot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
VGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4m
IHRyYW5zYWN0aW9ucygpCi17Ci0gICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAotICAgIC8vIHRocmVhZC1s
b2NhbCBzdG9yYWdlLgotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVj
aWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0
aW9ucyA9IG5ldyBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKj4gPik7Ci0gICAgcmV0dXJuICp0cmFuc2FjdGlvbnM7Ci19Ci0KLXZvaWQgSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgdHJhbnNhY3Rpb25zKCkt
PmFwcGVuZCh0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9u
cygpOwotICAgIHNpemVfdCBwb3MgPSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24p
OwotICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5z
YWN0aW9uTGlzdC0+cmVtb3ZlKHBvcyk7Ci19Ci0KLXZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9u
TW9uaXRvcjo6YWJvcnRQZW5kaW5nVHJhbnNhY3Rpb25zKCkKLXsKLSAgICBUaHJlYWRTcGVjaWZp
YzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25M
aXN0ID0gdHJhbnNhY3Rpb25zKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Fj
dGlvbnMoKS0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFi
b3J0KCk7Ci0gICAgLy8gRklYTUU6IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEg
bGF5b3V0IHRlc3QuCi0gICAgdHJhbnNhY3Rpb25MaXN0LT5jbGVhcigpOwotfQotCi19OwotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0aW9u
TW9uaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAotI2RlZmluZSBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLQot
Ly8gVGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgdHJhbnNhY3Rpb25zIGNyZWF0ZWQgZHVy
aW5nIHRoZSBjdXJyZW50Ci0vLyBKYXZhc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBBIHRyYW5z
YWN0aW9uIGlzICdwZW5kaW5nJyBpZiBubyBhc3luY2hyb25vdXMKLS8vIG9wZXJhdGlvbiBpcyBj
dXJyZW50bHkgcXVldWVkIGZvciBpdCAoZS5nLiBhbiBJREJPYmplY3RTdG9yZTo6cHV0KCkgb3Ig
c2ltaWxhcikuCi0vLyBBbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgYXJlIGFib3J0ZWQgYXMgc29v
biBhcyBleGVjdXRpb24gcmV0dXJucyBmcm9tCi0vLyB0aGUgc2NyaXB0IGVuZ2luZS4KLQotY2xh
c3MgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICBzdGF0aWMgdm9pZCBhYm9ydFBlbmRpbmdUcmFuc2Fj
dGlvbnMoKTsKLQotcHJpdmF0ZToKLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKCk7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlJl
cXVlc3QuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZl
bnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JX
aXRoVmFsdWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkV2ZW50
RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIK
LSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNl
LCB0cmFuc2FjdGlvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICBy
ZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLUlEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRl
eHQsIHRoaXMpCi0gICAgLCBtX2Vycm9yQ29kZSgwKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQot
ICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fcmVhZHlTdGF0ZShMT0FE
SU5HKQotICAgICwgbV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCi0gICAgLCBtX2N1cnNvckZpbmlz
aGVkKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fY3Vyc29y
VHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKLSAgICAs
IG1fY3Vyc29yKDApCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotICAgICAgICBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpKTsKLSAgICB9Ci19Ci0KLUlEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKLXsKLSAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5RGVhdGgg
fHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pCi0g
ICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotfQotCi1QYXNz
UmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gbV9yZXN1bHQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6
OmVycm9yQ29kZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0
YXRlICE9IERPTkUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FM
TE9XRURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JD
b2RlOwotfQotCi1TdHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwotfQot
Ci1QYXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zb3VyY2U7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVl
c3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKLX0K
LQotdW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsK
LSAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om1hcmtFYXJs
eURlYXRoKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOwotICAgIG1f
cmVhZHlTdGF0ZSA9IEVhcmx5RGVhdGg7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFk
eVN0YXRlKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fcmVx
dWVzdEZpbmlzaGVkKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAg
ICBBU1NFUlQodHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7Ci0gICAgaWYgKG1fcmVhZHlT
dGF0ZSAhPSBET05FKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3JlYWR5U3RhdGUg
PSBMT0FESU5HOwotICAgIG1fcmVzdWx0LmNsZWFyKCk7Ci0gICAgbV9lcnJvckNvZGUgPSAwOwot
ICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0KLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2Vu
ZCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JREJBbnkqIElEQlJlcXVlc3Q6OnNvdXJj
ZSgpCi17Ci0gICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6
OmFib3J0KCkKLXsKLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IExP
QURJTkcpIHsKLSAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0g
ZXZlbnRRdWV1ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAgfQotICAgIG1fZW5xdWV1
ZWRFdmVudHMuY2xlYXIoKTsKLQotICAgIG1fZXJyb3JDb2RlID0gMDsKLSAgICBtX2Vycm9yTWVz
c2FnZSA9IFN0cmluZygpOwotICAgIG1fcmVzdWx0LmNsZWFyKCk7Ci0gICAgb25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIlRo
ZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJlIGZ1bGZp
bGxlZC4iKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCi17Ci0gICAgQVNTRVJUKG1f
Y3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZSk7Ci0gICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpzZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKLXsKLSAgICBBU1NFUlQo
IW1fY3Vyc29yKTsKLSAgICBtX2N1cnNvciA9IGN1cnNvcjsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpmaW5pc2hDdXJzb3IoKQotewotICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOwotICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gTE9BRElORykKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0
cnVlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvcikKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29k
ZSgpOwotICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKLSAgICBtX2N1cnNv
ci5jbGVhcigpOwotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBj
cmVhdGVTdWNjZXNzRXZlbnQoKQotewotICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIpOwotICAg
IEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVz
dWx0KTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOwotICAg
IGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7
Ci0gICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAh
bV9yZXN1bHQpOwotICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNv
cjsKLSAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5Q3Vyc29yKQotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5k
LCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCB0aGlz
LCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0KLSAgICBzZXRSZXN1bHRD
dXJzb3IoY3Vyc29yLCBtX2N1cnNvclR5cGUpOwotCi0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7Ci0gICAgQVNTRVJUKCFtX2Vy
cm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwotICAgIGlm
IChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJREJEYXRh
YmFzZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7Ci0gICAgaWRi
RGF0YWJhc2UtPm9wZW4oKTsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0
YWJhc2UucmVsZWFzZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkp
OwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRi
S2V5KQotewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsK
LSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFt
X3Jlc3VsdCk7Ci0gICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCi0gICAgICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVz
dWx0ID0gSURCQW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1
ZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gcHJwQmFja2VuZCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3Vj
Y2VzcyhJREJUcmFuc2FjdGlvbikiKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJy
b3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7Ci0KLSAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgIGJh
Y2tlbmQtPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsK
LSAgICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOwotICAgIG1fdHJhbnNh
Y3Rpb24gPSBmcm9udGVuZDsKLQotICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFu
eTo6SURCRGF0YWJhc2VUeXBlKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpID09
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7Ci0gICAgbV9zb3VyY2UtPmlkYkRhdGFi
YXNlKCktPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7Ci0KLSAg
ICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24o
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVh
dGUoZnJvbnRlbmQucmVsZWFzZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2
ZW50KCkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQotewotICAgIElEQl9UUkFD
RSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsKLSAgICBB
U1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3Vs
dCk7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUp
OwotICAgIG1fY3Vyc29yLmNsZWFyKCk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NF
dmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9u
KCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRp
b24iKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgp
ICYmICFtX3Jlc3VsdCk7Ci0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBzZXRSZXN1bHRDdXJz
b3IobV9jdXJzb3IsIG1fY3Vyc29yVHlwZSk7Ci0gICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBl
bnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi1ib29sIElEQlJlcXVlc3Q6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGFuIGlkZWFs
IHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3Ig
Y2FuCi0gICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBs
aXN0ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCi0gICAgLy8gICAgICAgIHVzZXIgZ2Vu
ZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8
IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6c3RvcCgpCi17Ci0gICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7Ci0gICAgaWYgKG1f
Y29udGV4dFN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOwotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKLSAgICAgICAgbWFya0Vh
cmx5RGVhdGgoKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElEQlJlcXVlc3Q6
OmludGVyZmFjZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9ySURCUmVxdWVzdDsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVz
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi1ib29sIElEQlJlcXVlc3Q6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5p
c2hlZCk7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NFUlQobV9lbnF1
ZXVlZEV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdh
cyAlZCIsIERPTkUsIG1fcmVhZHlTdGF0ZSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCkKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkK
LSAgICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwotICAgIH0KLQotICAgIFZl
Y3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0
aGlzKTsKLSAgICBpZiAobV90cmFuc2FjdGlvbikgewotICAgICAgICB0YXJnZXRzLmFwcGVuZCht
X3RyYW5zYWN0aW9uKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQg
YXJlIGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAotICAgICAgICAvLyB0aGF0IGRvIG5v
dCBoYXZlIGEgdHJhbnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVk
Ci0gICAgICAgIC8vIHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8g
dGhlIGRhdGFiYXNlICh0byBlbnN1cmUKLSAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgotICAg
ICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKLSAgICBpZiAobV9yZXN1bHQpIHsKLSAg
ICAgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQotICAg
ICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7Ci0gICAgICAg
IGVsc2UgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVU
eXBlKQotICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0
aFZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2
ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0gICAg
QVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCk7Ci0gICAgYm9vbCBkb250UHJldmVudERlZmF1bHQg
PSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKLQot
ICAgIC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tl
ZCBldmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChldmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNv
ckZpbmlzaGVkKSkKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOwotCi0gICAgaWYg
KGN1cnNvclRvTm90aWZ5KQotICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nlc3NIYW5k
bGVyQ2FsbGJhY2soKTsKLQotICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7Ci0gICAgICAgIC8vIElm
IGFuIGVycm9yIGV2ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCi0gICAg
ICAgIGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZXJyb3JFdmVudCkKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKS0+YWJv
cnQoKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0ZVRhc2tF
dmVudHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKLX0KLQotdm9p
ZCBJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKLXsKLSAgICBp
ZiAobV90cmFuc2FjdGlvbikKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9y
dCgpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKLXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKLQotICAgIGlmICht
X2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKLQotICAgIEV2ZW50UXVl
dWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsK
LSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgaWYgKGV2ZW50UXVldWUtPmVucXVl
dWVFdmVudChldmVudC5nZXQoKSkpCi0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2
ZW50KTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEo
KQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0
YSogSURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQ
YXNzUmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpDdXJzb3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpIHsKLSAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNy
ZWF0ZShwcnBDdXJzb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9yZXN1bHQg
PSBJREJBbnk6OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJwQ3Vyc29y
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQlJlcXVlc3RfaAotI2RlZmluZSBJREJSZXF1ZXN0X2gKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudFRh
cmdldC5oIgotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotCi10eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIElEQkNhbGxi
YWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7
Ci0gICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwotCi0gICAgUGFzc1JlZlB0cjxJREJBbnk+IHJl
c3VsdChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2Rl
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBTdHJpbmcgd2Via2l0RXJyb3JNZXNzYWdlKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlKCkgY29u
c3Q7Ci0gICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdDsK
LQotICAgIC8vIERlZmluZWQgaW4gdGhlIElETAotICAgIGVudW0gUmVhZHlTdGF0ZSB7Ci0gICAg
ICAgIExPQURJTkcgPSAxLAotICAgICAgICBET05FID0gMiwKLSAgICAgICAgRWFybHlEZWF0aCA9
IDMKLSAgICB9OwotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGUoKSBjb25zdDsKLQotICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3VjY2Vzcyk7Ci0gICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7Ci0KLSAgICB2b2lkIG1hcmtFYXJseURlYXRo
KCk7Ci0gICAgYm9vbCByZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lk
IHNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSk7Ci0g
ICAgdm9pZCBzZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIGZpbmlz
aEN1cnNvcigpOwotICAgIElEQkFueSogc291cmNlKCk7Ci0gICAgdm9pZCBhYm9ydCgpOwotCi0g
ICAgLy8gSURCQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5Pik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3Vj
Y2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsK
LSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpOwotICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+
ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBwcmltYXJ5S2V5cywgY29u
c3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcykgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfSAvLyBOb3QgaW1wbGVtZW50ZWQuIENhbGxiYWNrIHNob3VsZCBu
b3QgcmVhY2ggdGhlIHJlbmRlcmVyIHNpZGUuCi0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgp
OwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50
VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5j
YXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwotCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPElEQkNhbGxiYWNrcz46OmRlcmVmOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJh
bnNhY3Rpb24qKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0g
ICAgUmVmUHRyPElEQkFueT4gbV9yZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9lcnJvckNv
ZGU7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotCi1wcml2YXRlOgotICAgIC8vIEV2ZW50
VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0gICAgdmlydHVh
bCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwotICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKLQotICAgIHZvaWQgc2V0UmVzdWx0
Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
Q3Vyc29yVHlwZSk7Ci0KLSAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0KLSAgICBSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKLSAgICBib29sIG1fcmVxdWVzdEZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJsZSB0aGF0
IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzPyBJZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgotICAg
IGJvb2wgbV9jdXJzb3JGaW5pc2hlZDsKLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0gICAg
VmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgLy8gT25seSB1
c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0cjxJREJD
dXJzb3I+IG1fY3Vyc29yOwotCi0gICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRh
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJSZXF1ZXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJSZXF1ZXN0LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgRXZl
bnRUYXJnZXQKLSAgICBdIElEQlJlcXVlc3QgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
SURCQW55IHJlc3VsdAotICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JD
b2RlCi0gICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRl
ZmluZWRdIERPTVN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UKLSAgICAgICAgICAgIGdldHRlciBy
YWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IElEQkFueSBzb3VyY2U7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbjsKLQotICAgICAgICAvLyBTdGF0ZXMKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgTE9BRElORyA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUg
PSAyOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0
ZTsKLQotICAgICAgICAvLyBFdmVudHMKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25zdWNjZXNzOwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwotCi0g
ICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICB2b2lkIGFkZEV2ZW50TGlz
dGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBi
b29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQotICAgICAgICAgICAgcmFpc2VzKEV2
ZW50RXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFj
aW5nLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
Y2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFj
aW5nX2gKLSNkZWZpbmUgSURCVHJhY2luZ19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotCi0jaW5jbHVkZSAiVHJhY2VFdmVudC5oIgot
I2RlZmluZSBJREJfVFJBQ0UoYSkgVFJBQ0VfRVZFTlQwKCJJbmRleGVkREIiLCAoYSkpOwotCi0j
ZWxzZQotCi0jZGVmaW5lIElEQl9UUkFDRShhKSAoKHZvaWQpMCkKLQotI2VuZGlmIC8vICBQTEFU
Rk9STShDSFJPTUlVTSkKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
ZW5kaWYgLy8gSURCVHJhY2luZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0
Y2hlci5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUu
aCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElE
QlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFi
YXNlKiBkYikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0
UmVmKG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBkYikpKTsKLSAgICB0cmFu
c2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVh
c2UoKTsKLX0KLQotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29u
dGV4dCwgdGhpcykKLSAgICAsIG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9kYXRhYmFzZShk
YikKLSAgICAsIG1fbW9kZShtX2JhY2tlbmQtPm1vZGUoKSkKLSAgICAsIG1fdHJhbnNhY3Rpb25G
aW5pc2hlZChmYWxzZSkKLSAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCi17Ci0gICAgQVNT
RVJUKG1fYmFja2VuZCk7Ci0gICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVu
ZGluZ1RyYW5zYWN0aW9uKG1fYmFja2VuZC5nZXQoKSk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjp+
SURCVHJhbnNhY3Rpb24oKQotewotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IElEQlRyYW5zYWN0aW9uOjpiYWNrZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpmaW5pc2hlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURC
VHJhbnNhY3Rpb246Om1vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21vZGU7Ci19Ci0KLUlE
QkRhdGFiYXNlKiBJREJUcmFuc2FjdGlvbjo6ZGIoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGFiYXNlLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAobV90cmFuc2FjdGlvbkZpbmlzaGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1h
cC5maW5kKG5hbWUpOwotICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUo
bmFtZSwgZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7Ci0gICAgICAgIEFTU0VS
VChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RTdG9yZUJhY2tl
bmQsIHRoaXMpOwotICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7Ci0g
ICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bjo6b2JqZWN0U3RvcmVDcmVhdGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZT4gb2JqZWN0U3RvcmUpCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmlu
aXNoZWQpOwotICAgIG1fb2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7Ci0gICAgbV9vYmpl
Y3RTdG9yZU1hcC5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0
KCkKLXsKLSAgICBpZiAobV90cmFuc2FjdGlvbkZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gdGhpczsKLSAgICBpZiAobV9iYWNr
ZW5kKQotICAgICAgICBtX2JhY2tlbmQtPmFib3J0KCk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjpP
cGVuQ3Vyc29yTm90aWZpZXI6Ok9wZW5DdXJzb3JOb3RpZmllcihQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbiwgSURCQ3Vyc29yKiBjdXJzb3IpCi0gICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKSwKLSAgICAgIG1fY3Vyc29yKGN1cnNvcikKLXsKLSAgICBtX3RyYW5z
YWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOwotfQotCi1JREJUcmFuc2FjdGlv
bjo6T3BlbkN1cnNvck5vdGlmaWVyOjp+T3BlbkN1cnNvck5vdGlmaWVyKCkKLXsKLSAgICBtX3Ry
YW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb246OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqIGN1cnNvcikKLXsKLSAg
ICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjp1
bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJz
b3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjbG9zZU9wZW5D
dXJzb3JzKCkKLXsKLSAgICBIYXNoU2V0PElEQkN1cnNvcio+IGN1cnNvcnM7Ci0gICAgY3Vyc29y
cy5zd2FwKG1fb3BlbkN1cnNvcnMpOwotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3IqPjo6aXRl
cmF0b3IgaSA9IGN1cnNvcnMuYmVnaW4oKTsgaSAhPSBjdXJzb3JzLmVuZCgpOyArK2kpCi0gICAg
ICAgICgqaSktPmNsb3NlKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnJlZ2lzdGVyUmVx
dWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIG1fY2hpbGRSZXF1ZXN0cy5hZGQocmVx
dWVzdCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KElEQlJl
cXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgLy8gSWYgd2UgYWJvcnRlZCB0aGUgcmVxdWVzdCwgaXQg
d2lsbCBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLgotICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1v
dmUocmVxdWVzdCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQotewotICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKLSAgICB3aGlsZSAoIW1fY2hpbGRSZXF1
ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgSURCUmVxdWVzdCogcmVxdWVzdCA9ICptX2NoaWxk
UmVxdWVzdHMuYmVnaW4oKTsKLSAgICAgICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0
KTsKLSAgICAgICAgcmVxdWVzdC0+YWJvcnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tb2RlID09
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkKLSAgICAgICAgbV9kYXRhYmFzZS0+Y2xl
YXJWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygp
OwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb246Om9uQ29tcGxldGUoKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVk
KTsKLSAgICBpZiAobV9tb2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkKLSAg
ICAgICAgbV9kYXRhYmFzZS0+Y2xlYXJWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odGhpcyk7Ci0g
ICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5xdWV1ZUV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBmYWxz
ZSkpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJldHVybiB0
cnVlIGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgotICAgIC8vICAgICAgICBnZXQgYSBo
YW5kbGUgdG8gdXMgb3IgYW55IGNoaWxkIHJlcXVlc3Qgb2JqZWN0IGFuZCBhbnkgb2YgdGhvc2Ug
aGF2ZQotICAgIC8vICAgICAgICBldmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgIGluIG9yZGVyIHRv
IGhhbmRsZSB1c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCi0gICAgcmV0dXJuICFtX3Ry
YW5zYWN0aW9uRmluaXNoZWQgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHko
KTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJUcmFu
c2FjdGlvbjsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCVHJhbnNhY3Rpb246OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmpl
Y3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0
aW9uRmluaXNoZWQpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAg
IEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgbV90cmFuc2FjdGlvbkZpbmlz
aGVkID0gdHJ1ZTsKLQotICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgZm9yIChJ
REJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmJlZ2luKCk7
IGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnRyYW5zYWN0aW9uRmluaXNoZWQoKTsKLSAgICBtX29iamVjdFN0b3JlTWFwLmNsZWFyKCk7Ci0K
LSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+IHRhcmdldHM7Ci0gICAgdGFyZ2V0cy5h
cHBlbmQodGhpcyk7Ci0gICAgdGFyZ2V0cy5hcHBlbmQoZGIoKSk7Ci0KLSAgICAvLyBGSVhNRTog
V2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJs
eSBuZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50KTsKLSAgICByZXR1cm4gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQo
KSwgdGFyZ2V0cyk7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBUZWNobmljYWxseSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhl
IGZpcnN0IHJlcXVlc3QgaXMgc2NoZWR1bGUKLSAgICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBj
b21wbGV0ZS9hYm9ydCBldmVudCBpcyBlbnF1ZXVlZC4KLSAgICByZXR1cm4gbV90cmFuc2FjdGlv
bkZpbmlzaGVkOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkKLXsKLSAgICBBY3Rp
dmVET01PYmplY3Q6OnN0b3AoKTsKLSAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLQotICAg
IGFib3J0KCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3RyYW5zYWN0
aW9uRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRvIGVucXVldWUgYW4g
ZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOwotICAgIGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudCk7Ci19Ci0KLUV2ZW50VGFy
Z2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlv
bjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXRE
YXRhOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25faAotI2Rl
ZmluZSBJREJUcmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIK
LSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNh
bGxiYWNrcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3I7Ci1jbGFz
cyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQk9iamVjdFN0b3JlOwotCi1jbGFzcyBJREJUcmFuc2Fj
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7Ci0gICAg
dmlydHVhbCB+SURCVHJhbnNhY3Rpb24oKTsKLQotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIFJF
QURfT05MWSA9IDAsCi0gICAgICAgIFJFQURfV1JJVEUgPSAxLAotICAgICAgICBWRVJTSU9OX0NI
QU5HRSA9IDIKLSAgICB9OwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBi
YWNrZW5kKCkgY29uc3Q7Ci0gICAgYm9vbCBmaW5pc2hlZCgpIGNvbnN0OwotCi0gICAgdW5zaWdu
ZWQgc2hvcnQgbW9kZSgpIGNvbnN0OwotICAgIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0OwotICAg
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWJvcnQoKTsKLQotICAgIGNsYXNzIE9wZW5D
dXJzb3JOb3RpZmllciB7Ci0gICAgcHVibGljOgotICAgICAgICBPcGVuQ3Vyc29yTm90aWZpZXIo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4sIElEQkN1cnNvciopOwotICAgICAgICB+T3BlbkN1
cnNvck5vdGlmaWVyKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgICAgICBJREJDdXJzb3IqIG1fY3Vyc29yOwotICAgIH07
Ci0KLSAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCBvYmplY3RTdG9yZUNyZWF0ZWQo
Y29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pOwotICAgIHZvaWQgb2Jq
ZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYpOwotCi0gICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihhYm9ydCk7Ci0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uihjb21wbGV0ZSk7Ci0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7
Ci0KLSAgICAvLyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBvbkFi
b3J0KCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKTsKLQotICAgIC8vIEV2ZW50VGFy
Z2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQo
ZXZlbnQsIGVjKTsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBj
YW5TdXNwZW5kKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVS
UklERTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+Ojpy
ZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVm
OwotCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNl
Kik7Ci0KLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9p
ZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3IqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvciopOwotCi0g
ICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
LSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0
cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX21vZGU7Ci0g
ICAgYm9vbCBtX3RyYW5zYWN0aW9uRmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2Un
bGwgZmlyZSBhbnkgbW9yZSBldmVudHMgb3IgYWxsb3cgYW55IG5ldyByZXF1ZXN0cz8gSWYgbm90
LCB3ZSdyZSBmaW5pc2hlZC4KLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICBMaXN0
SGFzaFNldDxJREJSZXF1ZXN0Kj4gbV9jaGlsZFJlcXVlc3RzOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPElEQk9iamVjdFN0b3JlPiA+IElEQk9iamVjdFN0b3JlTWFwOwot
ICAgIElEQk9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVNYXA7Ci0KLSAgICBIYXNoU2V0PElE
QkN1cnNvcio+IG1fb3BlbkN1cnNvcnM7Ci0KLSAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBp
bnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAg
ICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJUcmFuc2Fj
dGlvbiB7Ci0gICAgICAgIC8vIE1vZGVzCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJF
QURfT05MWSA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAx
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7Ci0KLSAg
ICAgICAgLy8gUHJvcGVydGllcwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQgbW9kZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOwot
ICAgICAgICAvLyBNZXRob2RzCi0gICAgICAgIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChp
biBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwotICAgICAgICB2b2lkIGFib3J0ICgpOwotICAgICAgICAvLyBFdmVudHMKLSAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25jb21wbGV0ZTsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25l
cnJvcjsKLSAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0g
ICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpIAotICAgICAgICAgICAg
cmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKERPTVN0cmluZ0xp
c3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCogZGF0YWJhc2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKG9iamVjdFN0b3JlcywgbW9kZSwgZGF0YWJhc2UpKTsKLX0KLQotSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdM
aXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqIGRhdGFiYXNlKQotICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykK
LSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9zdGF0ZShVbnVzZWQpCi0gICAgLCBtX2RhdGFi
YXNlKGRhdGFiYXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3Jl
KCktPmNyZWF0ZVRyYW5zYWN0aW9uKCkpCi0gICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpCi0gICAgLCBtX3Rhc2tFdmVudFRp
bWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVk
KQotICAgICwgbV9wZW5kaW5nRXZlbnRzKDApCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVO
YW1lcyk7Ci0gICAgQVNTRVJUKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFO
R0UgfHwgIW1fb2JqZWN0U3RvcmVOYW1lcy0+aXNFbXB0eSgpKTsKLSAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwotfQot
Ci1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgp
Ci17Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBn
ZXQgZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgotICAgIEFT
U0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1fc3Rh
dGUgPT0gRmluaXNoZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9U
X0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBEb2VzIGEg
bGluZWFyIHNlYXJjaCwgYnV0IGl0IHJlYWxseSBzaG91bGRuJ3QgYmUgdGhhdCBzbG93IGluIHBy
YWN0aWNlLgotICAgIGlmIChtX21vZGUgIT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdF
ICYmICFtX29iamVjdFN0b3JlTmFtZXMtPmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVj
dFN0b3JlID0gbV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRyYW5z
YWN0aW9uIGNvdWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMgY3Jl
YXRpb24gKHdoZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9yZSBj
YWxsLgotICAgIC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3NpYmxl
IGluIHRoZSBzcGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAgIC8v
ICAgICAgICBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0K
LQotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soUGFzc093blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBG
aW5pc2hlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV90YXNrUXVldWUuYXBwZW5k
KHRhc2spOwotICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJl
cGVuZChhYm9ydFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQotICAgICAgICBz
dGFydCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6YWJvcnQoKQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6YWJvcnQiKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOwotCi0gICAg
Ly8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGls
ZSBwZXJmb3JtaW5nIHRoZQotICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUg
dGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hp
bGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBzZWxmKHRoaXMpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAgIG1fdGFz
a1RpbWVyLnN0b3AoKTsKLSAgICBtX3Rhc2tFdmVudFRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3Nl
T3BlbkN1cnNvcnMoKTsKLSAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV90cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKLQotICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KLSAg
ICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUuZmlyc3Qo
KS5yZWxlYXNlKCkpOwotICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0g
ICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOwotICAgIH0KLQotICAgIGlmIChtX2NhbGxiYWNr
cykKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKLSAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIEFT
U0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlz
KSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLSAgICBtX2Rh
dGFiYXNlID0gMDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpyZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKLXsKLSAgICBtX29wZW5D
dXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCi17Ci0g
ICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphZGRQZW5kaW5nRXZlbnRzKGludCBuKQotewotICAgIG1fcGVuZGluZ0V2
ZW50cyArPSBuOwotICAgIEFTU0VSVChtX3BlbmRpbmdFdmVudHMgPj0gMCk7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkKLXsKLSAg
ICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cyk7Ci0gICAg
bV9wZW5kaW5nRXZlbnRzLS07Ci0KLSAgICBpZiAoIW1fdGFza0V2ZW50VGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV90YXNrRXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGFydFBlbmRpbmcgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICBBU1NFUlQoIW1fdGFz
a1RpbWVyLmlzQWN0aXZlKCkpOwotCi0gICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0YXJ0KCkKLXsKLSAgICBBU1NF
UlQobV9zdGF0ZSA9PSBVbnVzZWQpOwotCi0gICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rp
b24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQiKTsKLSAgICAvLyBUaGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1p
bmcgdGhlCi0gICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNl
bGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0
aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBz
ZWxmKHRoaXMpOwotICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCht
X3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAgIGNs
b3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICBtX2Nh
bGxiYWNrcy0+b25Db21wbGV0ZSgpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLSAgICBtX2RhdGFiYXNlID0gMDsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiopCi17Ci0gICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjp0YXNrVGltZXJGaXJlZCIpOwotICAgIEFTU0VSVCghbV90YXNrUXVldWUuaXNFbXB0
eSgpKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewotICAgICAgICBtX3Ry
YW5zYWN0aW9uLT5iZWdpbigpOwotICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKLSAgICB9Ci0K
LSAgICBUYXNrUXVldWUgcXVldWU7Ci0gICAgcXVldWUuc3dhcChtX3Rhc2tRdWV1ZSk7Ci0gICAg
d2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2socXVldWUuZmlyc3QoKS5yZWxlYXNlKCkpOwotICAgICAg
ICBxdWV1ZS5yZW1vdmVGaXJzdCgpOwotICAgICAgICBtX3BlbmRpbmdFdmVudHMrKzsKLSAgICAg
ICAgdGFzay0+cGVyZm9ybVRhc2soMCk7Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4qKQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
dGFza0V2ZW50VGltZXJGaXJlZCIpOwotICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwot
Ci0gICAgaWYgKCFtX3BlbmRpbmdFdmVudHMgJiYgbV90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBsYXN0IHRhc2sgZXZlbnQgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRhc2sK
LSAgICAgICAgLy8gcXVldWUgaXMgZW1wdHkuIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCi0gICAg
ICAgIGNvbW1pdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIHN0
aWxsIHdhaXRpbmcgZm9yIG90aGVyIGV2ZW50cyB0byBjb21wbGV0ZS4gSG93ZXZlciwKLSAgICAv
LyB0aGUgdGFzayBxdWV1ZSBpcyBub24tZW1wdHkgYW5kIHRoZSB0aW1lciBpcyBpbmFjdGl2ZS4K
LSAgICAvLyBXZSBjYW4gdGhlcmZvcmUgc2NoZWR1bGUgdGhlIHRpbWVyIGFnYWluLgotICAgIGlm
ICghbV90YXNrUXVldWUuaXNFbXB0eSgpICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAgZm9yIChIYXNoU2V0PElE
QkN1cnNvckJhY2tlbmRJbXBsKj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7
IGkgIT0gbV9vcGVuQ3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9zZSgpOwot
ICAgIG1fb3BlbkN1cnNvcnMuY2xlYXIoKTsKLX0KLQotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRl
ICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShE
T01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFi
YXNlQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBhYm9ydFRhc2spOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJh
Y2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBj
YWxsYmFja3M7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ckJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvckJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVudHMo
aW50KTsKLQotICAgIHZvaWQgcnVuKCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKLQotICAgIGVudW0gU3RhdGUgewotICAgICAg
ICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCi0gICAgICAgIFN0YXJ0UGVu
ZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHlldCBz
dGFydGVkLgotICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBi
dXQgbm90IHlldCBmaW5pc2hlZC4KLSAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVk
IG9yIGNvbW1pdHRlZC4KLSAgICB9OwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgY29t
bWl0KCk7Ci0KLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+Kik7Ci0gICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+Kik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOwotICAgIHVuc2lnbmVk
IHNob3J0IG1fbW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gbV9kYXRhYmFzZTsKLQotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBtX3Rhc2tR
dWV1ZTsKLSAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKLQotICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotCi0gICAgLy8gRklYTUU6
IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KLSAgICBUaW1l
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKLSAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOwotICAgIGludCBtX3BlbmRp
bmdFdmVudHM7Ci0KLSAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVuQ3Vy
c29yczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gKLQotI2lu
Y2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3M7Ci0KLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJ5IElEQlRyYW5z
YWN0aW9uIChhc3luYykgYW5kIElEQlRyYW5zYWN0aW9uU3luYyAoc3luYykuCi0vLyBUaGlzIGlz
IGltcGxlbWVudGVkIGJ5IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgYW5kIG9wdGlvbmFsbHkg
b3RoZXJzIChpbiBvcmRlciB0byBwcm94eQotLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3MgYmFycmll
cnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2NraW5nIGFu
ZAotLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNzYXJ5Lgot
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gewotcHVibGljOgotICAg
IHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgbW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1
bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2sgPSBudWxscHRy
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNr
cyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNh
bGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKLSNkZWZpbmUgSURCVHJh
bnNhY3Rpb25DYWxsYmFja3NfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNhbGxiYWNrcygpIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIG9uQWJvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKSA9
IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8g
SURCVHJhbnNhY3Rpb25DYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yPiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpKTsKLX0K
LQotSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigp
IAotewotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+SURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpCi17Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkQ3Jl
YXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17
Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAg
IG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOwotfQotCi12b2lk
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgaWYgKG1fc3RhcnRlZFRy
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgQVNTRVJUKCFtX3J1
bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICAgICAgbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgfSBlbHNlIGlmIChtX3J1
bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKQotICAgICAgICBtX3J1bm5p
bmdUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIG1fdHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0KLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygp
OwotfQotCi0jaWZuZGVmIE5ERUJVRwotLy8gVmVyaWZpZXMgaW50ZXJuYWwgY29uc2lzdGllbmN5
IHdoaWxlIHJldHVybmluZyB3aGV0aGVyIGFueXRoaW5nIGlzIGZvdW5kLgotYm9vbCBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbikKLXsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgaWYgKG1fc3RhcnRl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICBpZiAobV9ydW5uaW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkg
ewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgIH0K
LSAgICBBU1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24p
KTsKLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCi17Ci0gICAgLy8gRklYTUU6
IEZvciBub3csIHdlIG9ubHkgYWxsb3cgb25lIHRyYW5zYWN0aW9uIHRvIHJ1biBhdCBhIHRpbWUu
Ci0gICAgaWYgKCFtX3J1bm5pbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAq
bV9zdGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCk7Ci0gICAgbV9zdGFydGVkVHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgbV9ydW5uaW5nVHJhbnNhY3Rpb25zLmFkZCh0cmFu
c2FjdGlvbik7Ci0gICAgdHJhbnNhY3Rpb24tPnJ1bigpOwotfQotCi19OwotCi0jZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0j
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFu
c2FjdGlvbkNhbGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci0KLS8vIFRy
YW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCi1j
bGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlvbnMgYXMg
dGhleSBzdGFydCBhbmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hUcmFuc2FjdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9v
bCBpc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICB2b2lkIHByb2Nlc3NT
dGFydGVkVHJhbnNhY3Rpb25zKCk7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYW4gZWZmaWNpZW50
IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KLSAgICBIYXNoTWFw
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gPiBtX3RyYW5zYWN0aW9uczsKLSAgICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlmZmVyZW50
IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCo+IG1fcnVubmluZ1RyYW5zYWN0aW9uczsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIklE
QkFueS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVmVyc2lvbkNo
YW5nZUV2ZW50PiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZl
cnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KHZlcnNpb24sIGV2ZW50VHlwZSkpOwotfQot
Ci1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBTdHJp
bmcmIHZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotICAgIDogRXZlbnQo
ZXZlbnRUeXBlLCBmYWxzZSAvKmNhbkJ1YmJsZSovLCBmYWxzZSAvKmNhbmNlbGFibGUqLykKLSAg
ICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotewotfQotCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6On5J
REJWZXJzaW9uQ2hhbmdlRXZlbnQoKQotewotfQotCi1TdHJpbmcgSURCVmVyc2lvbkNoYW5nZUV2
ZW50Ojp2ZXJzaW9uKCkKLXsKLSAgICByZXR1cm4gbV92ZXJzaW9uOwotfQotCi1jb25zdCBBdG9t
aWNTdHJpbmcmIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdlRXZl
bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVmVyc2lv
bkNoYW5nZUV2ZW50X2gKLSNkZWZpbmUgSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkFueTsKLQot
Y2xhc3MgSURCVmVyc2lvbkNoYW5nZUV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHZlcnNpb24gPSBTdHJpbmcoKSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUg
PSBBdG9taWNTdHJpbmcoKSk7Ci0gICAgdmlydHVhbCB+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCk7
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIElEQlZl
cnNpb25DaGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKTsKLQotICAgIFN0cmluZyBtX3ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2Vu
ZGlmIC8vIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAg
IGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKLSAgICBd
IElEQlZlcnNpb25DaGFuZ2VFdmVudCA6IEV2ZW50IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQkFueT4gc291cmNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgUmVmUHRy
PElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKG5ldyBJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHZlcnNpb24pKSk7Ci0gICAgcmVxdWVzdC0+
c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotCi19Ci0K
LUlEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pCi0gICAgOiBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgMCkK
LSAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotewotfQotCi1JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dDo6fklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KCkKLXsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5n
JiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDsK
LX0KLQotdm9pZCBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6b25CbG9ja2VkKCkKLXsKLSAgICBB
U1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3Vs
dCk7Ci0gICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG1fdmVy
c2lvbiwgZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0X2gKLSNk
ZWZpbmUgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBwdWJsaWMgSURCUmVxdWVzdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwotCi0gICAgLy8gRXZlbnRU
YXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0OwotCi0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihibG9ja2VkKTsKLQot
cHJpdmF0ZToKLSAgICBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
LQotICAgIFN0cmluZyBtX3ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlJlcXVl
c3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBBY3RpdmVET01PYmplY3Qs
Ci0gICAgICAgIEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElE
QlJlcXVlc3QgewotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7Ci0g
ICAgfTsKLX0K
</data>
<flag name="commit-queue"
          id="132546"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129781</attachid>
            <date>2012-03-01 17:17:58 -0800</date>
            <delta_ts>2012-03-01 17:54:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80071-20120301171756.patch</filename>
            <type>text/plain</type>
            <size>1140741</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wMy0wMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgV2ViQ29yZS9zdG9yYWdl
L0lEQiogZmlsZXMgaW50byBXZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQg
YWxsIHRoZSBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgaWZkZWZzIGZyb20KKyAgICAgICAgV2Vi
Q29yZSBwcm9wZXIsIHdlIGNhbiBtb3ZlIEluZGV4ZWREQiBpbnRvIGl0cyBvd24gbW9kdWxlLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFr
ZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNh
bGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhW
YWx1ZS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFcnJvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RXZlbnREaXNwYXRjaGVyLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXkuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmguCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlJlcXVlc3QuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhY2luZy5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdl
RXZlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwuCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQkFueS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuaWRsOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUVycm9yLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJE
YXRhYmFzZUVycm9yLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJJbmRleC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGguY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5
UmFuZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVJhbmdlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQlRyYWNpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6IFJlbW92ZWQuCisK
IDIwMTItMDMtMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbmFtZSBMYXllckNocm9taXVtOjpuYW1lIHRvIGRlYnVnTmFtZSB0
byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBkZWJ1ZyBwcm9wZXJ0aWVzLCBtYWtlIHRo
cmVhZHNhZmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
NyBAQCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAKIFNFVChXZWJDb3JlX0lETF9J
TkNMVURFUwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24KKyAgICBNb2R1bGVzL2luZGV4ZWRkYgog
ICAgIE1vZHVsZXMvd2Vic29ja2V0cwogICAgIGJpbmRpbmdzL2dlbmVyaWMKICAgICBjc3MKQEAg
LTExNyw2ICsxMTgsMjQgQEAgU0VUKFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9kdWxlcy9nZW9s
b2NhdGlvbi9Qb3NpdGlvbkVycm9yLmlkbAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRp
b25FcnJvckNhbGxiYWNrLmlkbAogCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAor
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNw
cAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAorICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKyAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKKyAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCisKICAgICBNb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5pZGwKICAg
ICBNb2R1bGVzL3dlYnNvY2tldHMvRE9NV2luZG93V2ViU29ja2V0LmlkbAogCkBAIC0xMzkyLDIz
ICsxNDExLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNr
LmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCiAgICAgc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwCi0gICAgc3RvcmFnZS9JREJBbnkuY3BwCi0gICAgc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHAKLSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCi0gICAgc3Rv
cmFnZS9JREJDdXJzb3IuY3BwCi0gICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAK
LSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAotICAgIHN0b3JhZ2UvSURCRXZl
bnREaXNwYXRjaGVyLmNwcAotICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwCi0gICAgc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAotICAgIHN0b3JhZ2UvSURCS2V5LmNwcAotICAgIHN0b3Jh
Z2UvSURCS2V5UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAotICAgIHN0b3Jh
Z2UvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHAKLSAgICBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhy
ZWFkLmNwcAogICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcApAQCAtMTUzNiwxOCAr
MTUzOCwxOCBAQCBFTkRJRiAoKQogCiBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKLSAgICAgICAgc3RvcmFnZS9JREJBbnkuaWRs
Ci0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFi
YXNlRXJyb3IuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCi0g
ICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9y
eS5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJJbmRleC5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJL
ZXkuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsCi0gICAgICAgIHN0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKLSAgICAg
ICAgc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCQW55LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaWRsCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAorICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKICAgICApCiBFTkRJRiAoKQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9nZW9sb2NhdGlvbiBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGlu
Z3MvZ2VuZXJpYyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC02MSw2ICs2Miwx
OCBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRp
b24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlv
bi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkFueS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJv
ci5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNl
cHRpb24uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rvcnku
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkKFdlYkNv
cmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBcCisgICAgJChXZWJDb3JlKS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
c29ja2V0cy9DbG9zZUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tl
dHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmlkbCBcCkBAIC0zNTUsMTggKzM2OCw2IEBAIEJJTkRJTkdfSURMUyA9
IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5pZGwgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZS9E
YXRhYmFzZVN5bmMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkN1cnNvci5pZGwgXAotICAgICQoV2ViQ29yZSkvc3Rv
cmFnZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9JREJEYXRhYmFz
ZUVycm9yLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURC
S2V5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbCBcCi0gICAg
JChXZWJDb3JlKS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJChXZWJDb3JlKS9z
dG9yYWdlL0lEQlJlcXVlc3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXJyb3IuaWRsIFwKICAgICAk
KFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9zdG9y
YWdlL1NRTFJlc3VsdFNldC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxOCBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQk
UFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQkUFdEL01vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbCBcCisgICAgJCRQV0QvTW9k
dWxlcy9pbmRleGVkZGIvSURCQW55LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VF
cnJvci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0
aW9uLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQkUFdE
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxl
cy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tl
dHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGwgXApAQCAtMzc4LDE4ICszOTAsNiBAQCBJRExfQklORElOR1MgKz0gXAog
ICAgICQkUFdEL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFi
YXNlQ2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAot
ICAgICQkUFdEL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJDdXJz
b3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLSAgICAk
JFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFn
ZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAot
ICAgICQkUFdEL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQktl
eS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsIFwKLSAgICAkJFBXRC9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdE
L3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUV2ZW50Lmlk
bCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mby5pZGwgXApAQCAtNjkzLDYgKzY5Myw3
IEBAIGdlbmVyYXRlQmluZGluZ3MuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VH1cIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1nZW5lcmF0b3IgJCRnZW5lcmF0
b3IgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVz
L2dlb2xvY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQ
V0QvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5j
bHVkZSAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0taW5jbHVkZSAkJFBXRC9kb20gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
aW5jbHVkZSAkJFBXRC9maWxlYXBpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtOTcwLDYgKzk3MCw2MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFj
ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9u
cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNr
cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVy
cm9yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VFeGNlcHRpb24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNw
YXRjaGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoQmFja2VuZEltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlSYW5nZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Mb2NhbE1lZGlhU3RyZWFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9Mb2NhbE1lZGlhU3RyZWFtLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0uY3BwIFwKQEAgLTM4NzksNjIgKzM5MzUsNiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJBbnkuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JCYWNrZW5kSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVu
dERpc3BhdGNoZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0
Y2hlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4
QmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXku
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJh
bmdlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuY3BwIFwKQEAgLTQ3ODgsMTYgKzQ3ODgsMTYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rp
b24uaAogCiBkb21fYmluZGluZ19pZGxzICs9IFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55
LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBcCi0JJChXZWJDb3Jl
KS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRmFjdG9yeS5p
ZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJJbmRleC5pZGwgXAotCSQoV2ViQ29yZSkvc3Rv
cmFnZS9JREJLZXlSYW5nZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0JJChXZWJDb3Jl
KS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQW55LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKIAogIyAt
LS0tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI5ODYsMzEgKzI5ODYsMzEgQEAgY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX0lOREVYRURfREFUQUJBUwogICAgIH0KIAogICAgIEhFQURFUlMg
Kz0gXAotICAgICAgICBzdG9yYWdlL0lEQkFueS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJDYWxs
YmFja3MuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmggXAotICAgICAgICBzdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0gICAgICAg
IHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VF
cnJvci5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKLSAgICAg
ICAgc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFj
dG9yeS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3Jh
Z2UvSURCSW5kZXguaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmggXAotICAgICAgICBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCS2V5LmggXAotICAgICAgICBzdG9yYWdlL0lEQktleVJhbmdlLmggXAotICAgICAg
ICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmggXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlLmggXAotICAgICAgICBzdG9yYWdlL0lEQlJlcXVlc3QuaCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBc
CisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIFwKKyAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggXAorICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAogCiAg
ICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0zMDIwLDI0ICszMDIwLDI0IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVMKICAgICB9CiAKICAgICBTT1VS
Q0VTICs9IFwKLSAgICAgICAgc3RvcmFnZS9JREJBbnkuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9J
REJDdXJzb3IuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAg
XAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCi0g
ICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwIFwKLSAgICAgICAgc3Rv
cmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5LmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9J
REJPYmplY3RTdG9yZS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIFwKKyAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwK
KyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgXAorICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UmFuZ2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNw
cCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAogfQogCiBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDk0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMjEgQEAKICAgICAgICAgICAgICdN
b2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsJywKICAgICAgICAgICAgICdNb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9p
bnRlbnRzL0RPTVdpbmRvd0ludGVudHMuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3Vs
dENhbGxiYWNrLmlkbCcsCkBAIC0xMDQ3LDIxICsxMDYyLDYgQEAKICAgICAgICAgICAgICdzdG9y
YWdlL0RhdGFiYXNlLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNr
LmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAgICAgICAg
ICAgICdzdG9yYWdlL0lEQkFueS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29y
LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJEYXRhYmFzZS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0lEQktleS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCcsCi0gICAgICAgICAgICAnc3Rv
cmFnZS9JREJSZXF1ZXN0LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMRXJyb3IuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TEV4Y2VwdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCcs
CkBAIC0xMjk2LDYgKzEyOTYsNzYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9u
L05hdmlnYXRvckdlb2xvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRi
L0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkNvZGluZy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJDb2RpbmcuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhY2luZy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVk
RGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAnLApAQCAtNDY1Miw3NiArNDcyMiw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQkFueS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQW55LmgnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3IuaCcsCi0gICAgICAgICAgICAnc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vy
c29yQmFja2VuZEltcGwuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
RGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaCcsCi0gICAgICAgICAgICAn
c3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VF
cnJvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKLSAgICAgICAg
ICAgICdzdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCRXZlbnREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9y
eS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5oJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguY3Bw
JywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4LmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCS2V5LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5j
cHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFu
Z2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJhbmdlLmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCTGV2ZWxEQkNvZGluZy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3Qu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaCcsCi0gICAgICAgICAgICAn
c3RvcmFnZS9JREJUcmFjaW5nLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKICAgICAgICAgICAgICdzdG9y
YWdlL1N0b3JhZ2VUYXNrLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5j
cHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNw
cDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2lu
Y2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6
Y3JlYXRlSW52YWxpZCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZU51bGwoKQoreworICAgIFJlZlB0
cjxJREJBbnk+IGlkYkFueSA9IGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7CisgICAgaWRiQW55LT5z
ZXROdWxsKCk7CisgICAgcmV0dXJuIGlkYkFueS5yZWxlYXNlKCk7Cit9CisKK0lEQkFueTo6SURC
QW55KCkKKyAgICA6IG1fdHlwZShVbmRlZmluZWRUeXBlKQoreworfQorCitJREJBbnk6On5JREJB
bnkoKQoreworfQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5n
TGlzdCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJpbmdMaXN0VHlwZSk7CisgICAg
cmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkFu
eTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvclR5cGUpOwor
ICAgIHJldHVybiBtX2lkYkN1cnNvcjsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFs
dWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1
ZTsKK30KKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJldHVybiBtX2lk
YkRhdGFiYXNlOworfQorCitQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9y
eSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJGYWN0b3J5VHlwZSk7CisgICAgcmV0dXJu
IG1faWRiRmFjdG9yeTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRl
eCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBt
X2lkYkluZGV4OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQW55OjppZGJLZXkoKQorewor
ICAgIEFTU0VSVChtX3R5cGUgPT0gSURCS2V5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiS2V5Owor
fQorCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVjdFN0b3JlKCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJu
IG1faWRiT2JqZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFu
eTo6aWRiVHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rp
b25UeXBlKTsKKyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkFueTo6c2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKK3sK
KyAgICBBU1NFUlQobV90eXBlID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOworICAgIHJl
dHVybiBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK30KKwordm9pZCBJREJBbnk6OnNldE51bGwo
KQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0g
TnVsbFR5cGU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1f
dHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9IHZhbHVlOwor
fQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9
IElEQkN1cnNvcldpdGhWYWx1ZVR5cGU7CisgICAgbV9pZGJDdXJzb3JXaXRoVmFsdWUgPSB2YWx1
ZTsKK30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcj4gdmFsdWUpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJD
dXJzb3JUeXBlOworICAgIG1faWRiQ3Vyc29yID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55Ojpz
ZXQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJEYXRhYmFzZVR5cGU7CisgICAgbV9p
ZGJEYXRhYmFzZSA9IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURC
RmFjdG9yeT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsK
KyAgICBtX3R5cGUgPSBJREJGYWN0b3J5VHlwZTsKKyAgICBtX2lkYkZhY3RvcnkgPSB2YWx1ZTsK
K30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkluZGV4PiB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQkluZGV4
VHlwZTsKKyAgICBtX2lkYkluZGV4ID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxJREJLZXk+IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVk
VHlwZSk7CisgICAgbV90eXBlID0gSURCS2V5VHlwZTsKKyAgICBtX2lkYktleSA9IHZhbHVlOwor
fQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gSURC
VHJhbnNhY3Rpb25UeXBlOworICAgIG1faWRiVHJhbnNhY3Rpb24gPSB2YWx1ZTsKK30KKwordm9p
ZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQk9iamVjdFN0
b3JlVHlwZTsKKyAgICBtX2lkYk9iamVjdFN0b3JlID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlVHlwZTsKKyAgICBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHZhbHVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSURCQW55X2gKKyNkZWZpbmUgSURCQW55X2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vyc29yOworY2xh
c3MgSURCQ3Vyc29yV2l0aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0
b3J5OworY2xhc3MgSURCSW5kZXg7CitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJPYmplY3RTdG9y
ZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwor
CitjbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlkYk9iamVjdCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgp
OworICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVh
c2UoKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJBbnk+IGNyZWF0ZShQYXNzUmVmUHRyPFQ+IGlkYk9iamVjdCkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAg
ICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVhc2UoKTsKKyAg
ICB9CisgICAgfklEQkFueSgpOworCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5kZWZpbmVk
VHlwZSA9IDAsCisgICAgICAgIE51bGxUeXBlLAorICAgICAgICBET01TdHJpbmdMaXN0VHlwZSwK
KyAgICAgICAgSURCQ3Vyc29yVHlwZSwKKyAgICAgICAgSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSwK
KyAgICAgICAgSURCRGF0YWJhc2VUeXBlLAorICAgICAgICBJREJGYWN0b3J5VHlwZSwKKyAgICAg
ICAgSURCSW5kZXhUeXBlLAorICAgICAgICBJREJLZXlUeXBlLAorICAgICAgICBJREJPYmplY3RT
dG9yZVR5cGUsCisgICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKKyAgICAgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlVHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9m
IHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNhbGwuCisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBkb21TdHJpbmdMaXN0KCk7CisgICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNv
cigpOworICAgIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFs
dWUoKTsKKyAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpOworICAgIFBh
c3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOworICAgIFBhc3NSZWZQdHI8SURCSW5k
ZXg+IGlkYkluZGV4KCk7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgpOworICAgIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisKKyAgICAvLyBTZXQg
Y2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCisgICAgdm9pZCBzZXROdWxsKCk7CisgICAgdm9pZCBz
ZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4p
OworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKKyAgICB2b2lkIHNldChQ
YXNzUmVmUHRyPElEQkZhY3Rvcnk+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkluZGV4
Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lkIHNldChQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4pOworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Pik7CisKK3ByaXZhdGU6CisgICAgSURCQW55KCk7CisKKyAgICBUeXBlIG1fdHlwZTsKKworICAg
IC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFu
eSBnaXZlbiB0aW1lLgorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7
CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9pZGJDdXJzb3I7CisgICAgUmVmUHRyPElEQkN1cnNv
cldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7CisgICAgUmVmUHRyPElEQkRhdGFiYXNl
PiBtX2lkYkRhdGFiYXNlOworICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7Cisg
ICAgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4OworICAgIFJlZlB0cjxJREJLZXk+IG1faWRi
S2V5OworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9yZTsKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
I2VuZGlmIC8vIElEQkFueV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBbnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCisgICAgICAgIEN1c3RvbVRvSlNPYmplY3QKKyAgICBdIElEQkFueSB7
CisgICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgorICAg
IH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBJREJCYWNr
aW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJ
REJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5
OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgSURC
QmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
U3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RT
dG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisKKyAgICBjbGFzcyBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIoKSB7fQorICAgIH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBm
b3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3Jk
Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9
IDA7CisgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307Cisg
ICAgfTsKKyAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywg
VmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlF
bnRyeUZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0
X3QmIGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmlt
YXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZD
b3VudGVkPEN1cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gY2xvbmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0
aW9uKGNvbnN0IElEQktleSogPSAwKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IGlu
ZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworCisgICAgY2xhc3MgVHJhbnNh
Y3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGJl
Z2luKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxi
YWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNh
bGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNh
bGxiYWNrc19oCisjZGVmaW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJET01TdHJpbmdM
aXN0LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJy
b3IuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNzZXMgbmVlZCB0byBiZSBtYWRlIHRo
cmVhZHNhZmUuCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SURCQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aENvbnRpbnVhdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNoKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4g
PiYgcHJpbWFyeUtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiA+JiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxi
YWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCVHJh
Y2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJDdXJzb3I6OmNy
ZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJl
cXVlc3QqIHJlcXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3IoYmFja2VuZCwgcmVxdWVz
dCwgc291cmNlLCB0cmFuc2FjdGlvbikpOworfQorCitJREJDdXJzb3I6OklEQkN1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJlcXVlc3QqIHJl
cXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAg
OiBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9z
b3VyY2Uoc291cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1f
dHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKK3sKKyAgICBBU1NFUlQobV9i
YWNrZW5kKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBBU1NFUlQobV9zb3VyY2UtPnR5
cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6SURCSW5kZXhUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Cit9CisK
K0lEQkN1cnNvcjo6fklEQkN1cnNvcigpCit7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQkN1cnNv
cjo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6ZGlyZWN0
aW9uIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+ZGlyZWN0aW9uKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJD
dXJzb3I6OmtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmtleSgpOworfQorCitQYXNzUmVm
UHRyPElEQktleT4gSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvcjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPnByaW1h
cnlLZXkoKTsKK30KKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkN1cnNvcjo6dmFsdWUoKSBjb25z
dAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp2YWx1ZSIpOworICAgIHJldHVybiBJREJB
bnk6OmNyZWF0ZShtX2JhY2tlbmQtPnZhbHVlKCkpOworfQorCitJREJBbnkqIElEQkN1cnNvcjo6
c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Cisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFj
a2VuZC0+dXBkYXRlKHZhbHVlLCByZXF1ZXN0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpjb250aW51ZSIpOworICAgIGlmIChrZXkgJiYgKGtl
eS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJ
WE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBj
YWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjaworICAgIC8vICAgICAgICB3aWxsIGJlIG9u
IHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyBy
aWdodD8KKyAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5n
ZXQoKSkpIHsKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXRDdXJzb3IodGhpcyk7CisgICAgICAgIG1f
YmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOworICAgIH0gZWxz
ZQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkN1cnNvcjo6ZGVsZXRlIik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVx
dWVzdCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0
aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOworfQorCit2b2lkIElEQkN1cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKQor
eworICAgIG1fYmFja2VuZC0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKK30KKwordm9p
ZCBJREJDdXJzb3I6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBtX3Jl
cXVlc3QtPmZpbmlzaEN1cnNvcigpOworICAgIG1fcmVxdWVzdC5jbGVhcigpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQ3Vyc29y
X2gKKyNkZWZpbmUgSURCQ3Vyc29yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkFu
eTsKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7
CitjbGFzcyBJREJSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwor
Y2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7CitwdWJsaWM6
CisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgICBORVhUID0gMCwKKyAgICAgICAgTkVYVF9O
T19EVVBMSUNBVEUgPSAxLAorICAgICAgICBQUkVWID0gMiwKKyAgICAgICAgUFJFVl9OT19EVVBM
SUNBVEUgPSAzLAorICAgIH07CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElE
QkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfklEQkN1cnNvcigp
OworCisgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRo
aXMgaXMgdW5uZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9CisKKyAgICAvLyBJbXBsZW1lbnQgdGhl
IElETAorICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpIGNvbnN0OworICAgIElE
QkFueSogc291cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsb3Nl
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlv
biopOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBt
X2JhY2tlbmQ7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKKyAgICBSZWZQdHI8
SURCQW55PiBtX3NvdXJjZTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rp
b247CisgICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllciBtX3RyYW5zYWN0aW9u
Tm90aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5k
aWYgLy8gSURCQ3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkN1cnNvci5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBdIElEQkN1cnNvciB7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IE5FWFQgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBORVhUX05PX0RVUExJQ0FURSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBS
RVYgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RVUExJQ0FURSA9
IDM7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
bjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFyeUtleTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIElEQkFueSBzb3VyY2U7CisKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbSW1w
bGVtZW50ZWRBcz1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0g
SURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwor
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1k
ZWxldGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQorICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tl
bmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNy
b3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tl
bmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCisgICAgOiBtX2N1cnNvcihjdXJzb3IpCisgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAg
ICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX29iamVjdFN0b3JlKG9iamVj
dFN0b3JlKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1
cnNvckJhY2tlbmRJbXBsKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1
cnNvcih0aGlzKTsKKyAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQsIHRoZSBjdXJzb3JzIGhhdmUg
dG8gYmUgZGVzdHJ1Y3RlZCBiZWZvcmUgdGhlIG9iamVjdFN0b3JlLgorICAgIG1fY3Vyc29yLmNs
ZWFyKCk7CisgICAgbV9zYXZlZEN1cnNvci5jbGVhcigpOworCisgICAgbV9vYmplY3RTdG9yZS5j
bGVhcigpOworfQorCit1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGlyZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpkaXJl
Y3Rpb24iKTsKKyAgICByZXR1cm4gbV9kaXJlY3Rpb247Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5
PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjprZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPmtleSgpOwor
fQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlLZXko
KSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlL
ZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsKK30KKworUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNv
bnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUiKTsKKyAg
ICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKQorICAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUi
KTsKKyAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIG1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVXBkYXRlLCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKK30KKwordm9p
ZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktl
eT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250
aW51ZSIpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKworICAgIGlmIChtX2N1
cnNvciAmJiBrZXkpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAg
IGlmIChtX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgbV9kaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnNvci0+
a2V5KCktPmlzTGVzc1RoYW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgha2V5LT5pc0xl
c3NUaGFuKG1fY3Vyc29yLT5rZXkoKS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpj
b250aW51ZUZ1bmN0aW9uSW50ZXJuYWwsIHRoaXMsIGtleSwgcHJwQ2FsbGJhY2tzKSkpCisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
K30KKworLy8gSU1QT1JUQU5UOiBJZiB0aGlzIGV2ZXIgMSkgZmlyZXMgYW4gJ2Vycm9yJyBldmVu
dCBhbmQgMikgaXQncyBwb3NzaWJsZSB0byBmaXJlIGFub3RoZXIgZXZlbnQgYWZ0ZXJ3YXJkcywK
Ky8vICAgICAgICAgICAgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgd2lsbCBuZWVk
IHRvIGJlIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGlzISEhCit2b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUludGVybmFsIik7CisgICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisgICAgUmVm
UHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8
ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKKyAgICAg
ICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7Cit9CisKK3Zv
aWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFD
RSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICghbV9jdXJzb3IgfHwg
bV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCks
IHBycENhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworfQorCit2b2lkIElEQkN1
cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlIik7
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsLCB0aGlzLCBu
dW1iZXJUb0ZldGNoLCBwcnBDYWxsYmFja3MpKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJl
clRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURC
X1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsIik7
CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisK
KyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gPiBmb3VuZFZhbHVlczsKKworICAgIGlmIChjdXJzb3ItPm1fY3Vyc29y
KQorICAgICAgICBjdXJzb3ItPm1fc2F2ZWRDdXJzb3IgPSBjdXJzb3ItPm1fY3Vyc29yLT5jbG9u
ZSgpOworCisgICAgY29uc3Qgc2l6ZV90IGtNYXhTaXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAx
MDI0OworICAgIHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsKKyAgICAgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29y
IHx8ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7CisgICAgICAgICAg
ICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAg
ICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXko
KSk7CisKKyAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBw
ZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY3Vyc29yLT5tX2N1cnNv
ci0+dmFsdWUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBl
bmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7CisKKyAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAg
c2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGlt
YXRlKCk7CisgICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSAr
PSBjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKwor
ICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4ga01heFNpemVFc3RpbWF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN1cnNvci0+bV90cmFuc2FjdGlvbi0+YWRk
UGVuZGluZ0V2ZW50cyhmb3VuZEtleXMuc2l6ZSgpIC0gMSk7CisgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVl
cyk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQoaW50IHVz
ZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcykKK3sKKyAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7CisgICAgbV90cmFuc2FjdGlvbi0+
YWRkUGVuZGluZ0V2ZW50cygtdW51c2VkUHJlZmV0Y2hlcyk7CisgICAgbV9jdXJzb3IgPSBtX3Nh
dmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJzb3IgPSAwOworCisgICAgaWYgKG1fY2xvc2VkKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsraSkgeworICAgICAgICAgICAgYm9vbCBvayA9IG1f
Y3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6
OmNsb3NlKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIp
OworICAgIG1fY2xvc2VkID0gdHJ1ZTsKKyAgICBpZiAobV9jdXJzb3IpCisgICAgICAgIG1fY3Vy
c29yLT5jbG9zZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEltcGxf
aAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJREJJbmRleEJhY2tl
bmRJbXBsOworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIElE
QkN1cnNvckJhY2tlbmRJbXBsIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Ugewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlKiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNr
ZW5kSW1wbCgpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3Q7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lk
IHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGlu
dCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOworICAgIHZvaWQgY2xvc2Uo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisKK3ByaXZhdGU6CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIElEQkN1cnNvcjo6RGlyZWN0aW9u
LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBpbnQgbnVtYmVy
VG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBtX3NhdmVkQ3Vyc29yOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fZGlyZWN0
aW9uOworICAgIEN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9vYmplY3RTdG9yZTsKKyAgICAKKyAgICBib29sIG1f
Y2xvc2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55OworY2xhc3Mg
SURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCUmVxdWVzdDsKK2NsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSgpIHt9CisKKyAgICBlbnVtIEN1cnNvclR5cGUgeworICAg
ICAgICBJbnZhbGlkQ3Vyc29yVHlwZSA9IDAsCisgICAgICAgIEluZGV4Q3Vyc29yLAorICAgICAg
ICBJbmRleEtleUN1cnNvciwKKyAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKKyAgICB9OworCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0
Y2hlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAv
LyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1
ZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVx
dWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvcldpdGhWYWx1ZShiYWNrZW5k
LCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQ3Vy
c29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+IHBycEN1cnNvcikKK3sKKyAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBj
dXJzb3JXaXRoVmFsdWUoc3RhdGljX2Nhc3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29y
LmdldCgpKSk7CisgICAgcmV0dXJuIGN1cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7Cit9CisKK0lE
QkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IElEQkN1cnNvcihiYWNr
ZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQoreworfQorCitJREJDdXJzb3JXaXRo
VmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5o
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
V2l0aFZhbHVlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKyNkZWZpbmUgSURCQ3Vyc29yV2l0aFZh
bHVlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVl
IDogcHVibGljIElEQkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
Q3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gZnJvbUN1cnNvcihQYXNzUmVm
UHRyPElEQkN1cnNvcj4pOworICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1ZSgpOworCisg
ICAgLy8gVGhlIHZhbHVlIGF0dHJpYnV0ZSBkZWZpbmVkIGluIHRoZSBJREwgaXMgc2ltcGx5IGlt
cGxlbWVudGVkIGluIElEQkN1cnNvciAoYnV0IG5vdCBleHBvc2VkIHZpYQorICAgIC8vIGl0cyBJ
REwpLiBUaGlzIGlzIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG1vcmUgc2ltcGxlIHdoaWxl
IG1hdGNoaW5nIHdoYXQgdGhlIHNwZWMgc2F5cy4KKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JX
aXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVz
dCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkN1cnNvcldpdGhWYWx1ZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQkN1cnNv
cldpdGhWYWx1ZSA6IElEQkN1cnNvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJB
bnkgdmFsdWU7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2
ZW50UXVldWUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2lu
Y2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXgu
aCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
KyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNp
bmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJhc2UpCit7Cisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcgSURCRGF0YWJh
c2UoY29udGV4dCwgZGF0YWJhc2UpKSk7CisgICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRl
ZCgpOworICAgIHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Cit9CisKK0lEQkRhdGFiYXNl
OjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKKyAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisgICAgLCBtX2Ns
b3NlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCit7CisgICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisgICAgbV9kYXRhYmFzZUNh
bGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMpOworfQorCitJ
REJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKK3sKKyAgICBjbG9zZSgpOworICAgIG1fZGF0YWJh
c2VDYWxsYmFja3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZTo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKyAgICBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworfQorCit2b2lkIElEQkRh
dGFiYXNlOjpjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCit7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uID0gMDsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVj
dCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
QUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFN0cmluZyBrZXlQ
YXRoOworICAgIGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKCJrZXlQYXRoIiwga2V5UGF0aCk7CisgICAgaWYgKGtleVBhdGhFeGlzdHMgJiYg
IUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdldCgiYXV0b0lu
Y3JlbWVudCIsIGF1dG9JbmNyZW1lbnQpOworICAgIC8vIEZJWE1FOiBMb29rIHVwIGV2aWN0YWJs
ZSBhbmQgcGFzcyB0aGF0IG9uIGFzIHdlbGwuCisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9i
amVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkg
eworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZShvYmplY3RTdG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi5nZXQoKSk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZC0+ZGVsZXRl
T2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQo
bmFtZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkRhdGFi
YXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHZlcnNpb24uaXNO
dWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVO
VF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOworICAgIG1fYmFja2VuZC0+
c2V0VmVyc2lvbih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7Cisg
ICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRh
dGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKKyAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKKyAgICBy
ZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOworfQorCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBwcnBT
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFtZXM7CisgICAg
aWYgKCFzdG9yZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYg
KG1vZGUgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5P
Tl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fY2xv
c2VQZW5kaW5nKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBj
cmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVk
IGFzeW5jaHJvbm91c2x5LiBPcGVyYXRpb25zCisgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0
IHRoZSB0cmFuc2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcg
YXMgc29vbiBhcyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWly
ZWQuCisgICAgLy8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25k
cyB0byBleGFjdGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5k
LT50cmFuc2FjdGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7CisgICAgaWYgKCF0cmFu
c2FjdGlvbkJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVjKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhpcyk7CisgICAg
dHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0KCkpOworICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmNs
b3NlKCkKK3sKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VD
YWxsYmFja3MpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1
ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOworICAgIC8vIFJlbW92
ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0
aGlzCisgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5
IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZl
cnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZworICAgIC8vIGNsb3Nl
ZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHJlbW92ZWQgPSBldmVu
dFF1ZXVlLT5jYW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgaWYg
KG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRl
KHZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZTo6b3BlbigpCit7CisgICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0YWJhc2VDYWxs
YmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVl
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNl
dFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkp
OworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKworYm9vbCBJREJEYXRh
YmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQorICAgICAgICAgICAg
bV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CisgICAgfQorICAgIHJldHVybiBFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OnN0
b3AoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOworICAgIC8vIFN0b3AgZmlyZXMg
YXQgYSBkZXRlcm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4K
KyAgICBjbG9zZSgpOworCisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Cit9CisKK2NvbnN0
IEF0b21pY1N0cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Cit9CisKK1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXRE
YXRhKiBJREJEYXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4g
Jm1fZXZlbnRUYXJnZXREYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmg6MTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VfaAorI2RlZmluZSBJREJE
YXRhYmFzZV9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Owor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworY2xhc3MgSURCRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4s
IHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB+
SURCRGF0YWJhc2UoKTsKKworICAgIHZvaWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCBjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbiopOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOyB9CisgICAgU3RyaW5nIHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPnZlcnNpb24oKTsgfQorICAgIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZC0+b2JqZWN0U3RvcmVOYW1lcygpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBPcHRp
b25zT2JqZWN0KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiwgdW5z
aWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGNsb3NlKCk7CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFi
b3J0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHZlcnNpb25jaGFuZ2UpOworCisgICAgLy8g
SURCRGF0YWJhc2VDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNv
bnN0IFN0cmluZyYgcmVxdWVzdGVkVmVyc2lvbik7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QK
KyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOworCisgICAgLy8gRXZlbnRUYXJnZXQK
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OworCisgICAgdm9pZCBvcGVuKCk7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50KGV2ZW50LCBlYyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pik7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVm
OworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKKworcHJpdmF0ZToK
KyAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uOworCisgICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKKyAgICBib29sIG1f
Y29udGV4dFN0b3BwZWQ7CisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7
CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5n
IHRvIGJlIGZpcmVkIG9uIHRoaXMKKyAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5j
ZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgorICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+
ID4gbV9lbnF1ZXVlZEV2ZW50czsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGw+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBp
bnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAg
ICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJEYXRhYmFz
ZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOworCisgICAgICAgIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udmVyc2lvbmNo
YW5nZTsKKworICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9yZShpbiBET01T
dHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCisgICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0
YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJpbmcgdmVyc2lv
bikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oaW4gRE9NU3RyaW5nTGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5k
ZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRh
YmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9yZU5hbWVzLCBp
biBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBE
T01TdHJpbmcgc3RvcmVOYW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNp
Z25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRl
cmZhY2UKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2
ZW50IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRp
bmdPcGVuQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdPcGVu
Q2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFja3MpKTsK
KyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJu
IG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
ZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbCh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2Fs
bGJhY2tzKSk7CisgICAgfQorICAgIFN0cmluZyB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9u
OyB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1f
Y2FsbGJhY2tzOyB9CisgICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJh
c2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ1NldFZlcnNpb25DYWxsKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV92ZXJzaW9uKHZlcnNpb24pCisg
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxs
YmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBTdHJpbmcgbV92ZXJz
aW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK0lEQkRhdGFi
YXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorICAgICwgbV9pZChJbnZhbGlkSWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fdmVy
c2lvbigiIikKKyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQorICAgICwgbV9m
YWN0b3J5KGZhY3RvcnkpCisgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0
b3IpCit7CisgICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOworICAgIG9wZW5JbnRlcm5hbCgp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCit7Cisg
ICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEo
bV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9
IEludmFsaWRJZCkpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIGxvYWRPYmplY3RTdG9y
ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5j
cmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKSkKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5k
bGluZy4KK30KKworSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZElt
cGwoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRp
Zmllcik7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZTsKK30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
b2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoT2Jq
ZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCisgICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKKyAg
ICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb25Q
dHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgaWYg
KG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQs
IG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIEFTU0VSVChvYmplY3RTdG9yZS0+
bmFtZSgpID09IG5hbWUpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNy
ZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0
YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtX29i
amVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9y
ZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2Jq
ZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7CisK
KyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0
YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCks
IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb2Jq
ZWN0U3RvcmUtPnNldElkKG9iamVjdFN0b3JlSWQpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21w
bGV0ZVRhc2tFdmVudHMoKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIGlmICghb2Jq
ZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3Jl
LCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01h
cCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
b2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3Rv
cmUtPmlkKCkpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
ID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmNvbnRhaW5zKGRhdGFiYXNlQ2FsbGJhY2tzKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBQk9SVF9F
UlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2ZXJzaW9uIHRyYW5zYWN0aW9u
IHdhcyBjcmVhdGVkIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoRGF0YWJh
c2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1Nl
dC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICAoKml0KS0+
b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworICAgIH0KKyAgICAvLyBGSVhNRTogT25seSBmaXJl
IG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAv
LyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZp
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMw
CisgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25D
YWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0
ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZl
cnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJh
Y2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxs
cy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9y
ZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24s
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVy
c2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2
NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKKyAgICBkYXRhYmFzZS0+bV92ZXJzaW9u
ID0gdmVyc2lvbjsKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5v
dCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdl
LiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2Fj
dGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVS
U0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5j
bGVhcigpOworICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIC8v
IFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKKyAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CisgICAg
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ1NldFZlcnNpb25DYWxscyk7Cisg
ICAgd2hpbGUgKCFwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2Fs
bD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gcGVuZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmly
c3QoKTsKKyAgICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPnZlcnNpb24o
KSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1NldFZlcnNpb25D
YWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAg
IH0KKworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVu
ZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5n
RGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAgbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ0RlbGV0ZUNh
bGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRp
bmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBk
ZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KKwor
ICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2Fs
bCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rp
b24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hv
cnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKKyAgICAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90
IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KKyAgICByZXR1cm4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2FsbGJhY2tzKSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlz
RW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGlu
Z1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5h
cHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgp
OworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRl
KHBycENhbGxiYWNrcykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhNRTogT25seSBm
aXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAg
IC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTI5CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5vblZl
cnNpb25DaGFuZ2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRo
ZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25DaGFuZ2VF
dmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoIW1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNh
bGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFtZSkpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV92ZXJzaW9uID0gIiI7CisgICAgbV9pZCA9IEludmFsaWRJZDsKKyAgICBt
X29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxs
YmFja3MpKTsKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOwor
ICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaWRz
OworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhz
OworICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgbV9iYWNraW5nU3Rv
cmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBpZHMsIG5hbWVzLCBrZXlQYXRocywgYXV0b0luY3Jl
bWVudEZsYWdzKTsKKworICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Cisg
ICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoYXV0
b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQo
bmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9y
ZS5nZXQoKSwgbV9pZCwgaWRzW2ldLCBuYW1lc1tpXSwga2V5UGF0aHNbaV0sIGF1dG9JbmNyZW1l
bnRGbGFnc1tpXSkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9i
amVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlUHRyID0gb2JqZWN0U3Rv
cmU7CisgICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVQdHItPm5hbWUoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2Jq
ZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKQoreworICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNl
QmFja2VuZEltcGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKKworI2luY2x1
ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsKK2NsYXNzIElEQkRhdGFiYXNlOwor
Y2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgZGF0YWJhc2Us
IGNvb3JkaW5hdG9yLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7CisgICAgfQorICAgIHZp
cnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsKKworICAgIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2
NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7
IH0KKworICAgIC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2Ny
aXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCisgICAgdm9pZCBvcGVuKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5z
YWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4p
OworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4pOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5n
JiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkludGVybmFsKCk7CisgICAgdm9p
ZCBsb2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisK
KyAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgc2V0VmVy
c2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKwor
ICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFz
a3MuCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRPYmpl
Y3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsK
KyAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBpbnQ2
NCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmVyc2lvbjsKKworICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBh
IFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2Ug
Z3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KKyAg
ICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmpl
Y3RTdG9yZU1hcDsKKyAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxs
OworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0
VmVyc2lvbkNhbGxzOworCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAgIERlcXVlPFJl
ZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCisgICAgY2xhc3Mg
UGVuZGluZ0RlbGV0ZUNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CisgICAgRGF0YWJh
c2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBET01TdHJpbmdMaXN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBJREJDYWxsYmFja3M7CitjbGFz
cyBJREJEYXRhYmFzZUNhbGxiYWNrczsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKKwordHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKKworLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCRGF0YWJh
c2UgKGFzeW5jKSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KKy8vIFRoaXMgaXMgaW1wbGVt
ZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGlu
IG9yZGVyIHRvIHByb3h5CisvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBj
YWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCisvLyB0cmln
Z2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCitjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFja3NfaAorI2RlZmlu
ZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBv
blZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFj
a3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGw+IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbChkYXRhYmFzZSkpOworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbChJREJEYXRhYmFzZSogZGF0YWJhc2UpCisgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6
b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBpZiAobV9kYXRh
YmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFiYXNlKElEQkRh
dGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9kYXRhYmFzZSk7
CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bF9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFi
YXNlOworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgOiBwdWJsaWMgSURCRGF0YWJh
c2VDYWxsYmFja3MgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbD4gY3JlYXRlKElEQkRhdGFiYXNlKik7CisgICAgdmlydHVhbCB+SURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdl
KGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRGF0YWJhc2UoSURC
RGF0YWJhc2UqKTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoSURC
RGF0YWJhc2UqKTsKKworICAgIC8vIG1fZGF0YWJhc2UgaGFzIGEgUmVmUHRyIHRvIHRoaXMsIHNv
IHVzZSBhIHdlYWsgcG9pbnRlciB0byBhdm9pZCBhIGN5Y2xlLgorICAgIElEQkRhdGFiYXNlKiBt
X2RhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJy
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJE
YXRhYmFzZUVycm9yX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VFcnJvcl9oCisKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCRGF0YWJhc2VFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlRXJyb3I+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVh
dGUodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNvZGUgPj0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhj
ZXB0aW9uT2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCRGF0YWJhc2VFeGNlcHRpb25NYXgpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkRhdGFiYXNlRXJyb3IoY29kZSAtIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFz
ZUV4Y2VwdGlvbk9mZnNldCwgbWVzc2FnZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGNyZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWduZWQgc2hvcnQg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvZGUg
PCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkp
OworICAgIH0KKworICAgIH5JREJEYXRhYmFzZUVycm9yKCkgeyB9CisKKyAgICB1bnNpZ25lZCBz
aG9ydCBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgdm9pZCBzZXRDb2RlKHVu
c2lnbmVkIHNob3J0IHZhbHVlKSB7IG1fY29kZSA9IHZhbHVlOyB9CisgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9pZCBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9tZXNzYWdlID0gdmFsdWU7IH0KKworcHJpdmF0
ZToKKyAgICBJREJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlKSB7
IH0KKworICAgIHVuc2lnbmVkIHNob3J0IG1fY29kZTsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRh
dGFiYXNlRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFcnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0g
SURCRGF0YWJhc2VFcnJvciB7CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBjb2Rl
OworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CisgICAgfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGFy
cmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0geworICAgICJVTktOT1dOX0VS
UiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwKKyAgICAiTk9UX0ZPVU5EX0VSUiIsCisgICAg
IkNPTlNUUkFJTlRfRVJSIiwKKyAgICAiREFUQV9FUlIiLAorICAgICJOT1RfQUxMT1dFRF9FUlIi
LAorICAgICJUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIiLAorICAgICJBQk9SVF9FUlIiLAorICAg
ICJSRUFEX09OTFlfRVJSIiwKKyAgICAiVElNRU9VVF9FUlIiLAorICAgICJRVU9UQV9FUlIiLAor
ICAgICJWRVJfRVJSIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRl
c2NyaXB0aW9uc1tdID0geworICAgICJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdpdGhpbiBJ
bmRleGVkIERhdGFiYXNlLiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwgLy8gRklYTUU6IFdy
aXRlIGEgYmV0dGVyIG1lc3NhZ2UgaWYgaXQncyBldmVyIHBvc3NpYmxlIHRoaXMgaXMgdGhyb3du
LgorICAgICJUaGUgbmFtZSBzdXBwbGllZCBkb2VzIG5vdCBtYXRjaCBhbnkgZXhpc3RpbmcgaXRl
bS4iLAorICAgICJUaGUgcmVxdWVzdCBjYW5ub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIGZhaWxl
ZCBjb25zdHJhaW50LiIsCisgICAgIlRoZSBkYXRhIHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhl
IHJlcXVpcmVtZW50cyBvZiB0aGUgZnVuY3Rpb24uIiwKKyAgICAiVGhpcyBmdW5jdGlvbiBpcyBu
b3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgaW4gc3VjaCBhIGNvbnRleHQuIiwKKyAgICAiQSByZXF1
ZXN0IHdhcyBwbGFjZWQgYWdhaW5zdCBhIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGVpdGhlciBjdXJy
ZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIiwKKyAgICAiVGhlIHRyYW5z
YWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIs
CisgICAgIkEgd3JpdGUgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgaW4gYSByZWFkLW9ubHkgdHJh
bnNhY3Rpb24uIiwKKyAgICAiQSBsb2NrIGZvciB0aGUgdHJhbnNhY3Rpb24gY291bGQgbm90IGJl
IG9idGFpbmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVz
ZWQgeWV0LgorICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub3Qg
ZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMg
cmVhY2hlZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gZ2l2ZSBtb3JlIHNwYWNlIHRvIHRoZSBk
YXRhYmFzZS4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorICAgICJBbiBhdHRlbXB0
IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRhYmFzZSB1c2luZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0
aGUgZXhpc3RpbmcgdmVyc2lvbi4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorfTsK
KworQ09NUElMRV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25OYW1lcykgPT0gV1RG
X0FSUkFZX0xFTkdUSChleGNlcHRpb25EZXNjcmlwdGlvbnMpLCBJREJEYXRhYmFzZUV4Y2VwdGlv
blRhYmxlc011c3RNYXRjaCk7CisKK2Jvb2wgSURCRGF0YWJhc2VFeGNlcHRpb246OmluaXRpYWxp
emVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlIGVjLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24q
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChlYyA8IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0
IHx8IGVjID4gSURCRGF0YWJhc2VFeGNlcHRpb25NYXgpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGRlc2NyaXB0aW9uLT50eXBlTmFtZSA9ICJET00gSURCRGF0YWJhc2UiOworICAgIGRl
c2NyaXB0aW9uLT5jb2RlID0gZWMgLSBJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldDsKKyAgICBk
ZXNjcmlwdGlvbi0+dHlwZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZTsKKworICAgIHNpemVf
dCB0YWJsZVNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsKKyAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7CisKKyAgICBkZXNjcmlwdGlvbi0+bmFt
ZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0YWJsZUluZGV4XSA6
IDA7CisgICAgZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRleCA8IHRhYmxlU2l6
ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0
YWJhc2VFeGNlcHRpb25faAorI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlvbiA6IHB1Ymxp
YyBFeGNlcHRpb25CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNl
RXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbk1heCA9IDEyOTk7CisKKyAgICBlbnVtIElEQkRhdGFiYXNlRXhj
ZXB0aW9uQ29kZSB7CisgICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0
LAorICAgICAgICBVTktOT1dOX0VSUiwKKyAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIsCisgICAg
ICAgIE5PVF9GT1VORF9FUlIsCisgICAgICAgIENPTlNUUkFJTlRfRVJSLAorICAgICAgICBEQVRB
X0VSUiwKKyAgICAgICAgTk9UX0FMTE9XRURfRVJSLAorICAgICAgICBUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlIsCisgICAgICAgIEFCT1JUX0VSUiwKKyAgICAgICAgUkVBRF9PTkxZX0VSUiwKKyAg
ICAgICAgVElNRU9VVF9FUlIsCisgICAgICAgIFFVT1RBX0VSUiwKKyAgICAgICAgVkVSX0VSUgor
ICAgIH07CisKKyAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgZXJy
b3JDb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFlcnJvckNvZGUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNl
cHRpb25Db2RlLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKKworcHJpdmF0ZToKKyAgICBJ
REJEYXRhYmFzZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQorICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cworICAgIF0gSURC
RGF0YWJhc2VFeGNlcHRpb24geworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCAgIGNvZGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1l
c3NhZ2U7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pB
VkFTQ1JJUFQKKyAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3ppbGxhIGNvbXBhdGlibGUgZm9y
bWF0CisgICAgICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKKyNlbmRp
ZgorCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VSUiA9IDA7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgTk9OX1RSQU5TSUVOVF9FUlIgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBOT1RfRk9VTkRfRVJSID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09O
U1RSQUlOVF9FUlIgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRBX0VSUiA9
IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9BTExPV0VEX0VSUiA9IDY7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiA9IDc7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VSUiA9IDg7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDEwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBRVU9UQV9FUlIgPSAxMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSX0VSUiA9
IDEyOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHA6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYgZXZlbnRUYXJn
ZXRzKQoreworICAgIHNpemVfdCBzaXplID0gZXZlbnRUYXJnZXRzLnNpemUoKTsKKyAgICBBU1NF
UlQoc2l6ZSk7CisKKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BI
QVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24ndCBk
byB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZl
bnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRM
aXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KQorICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CisgICAgfQorCisgICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQtPnNldEN1cnJlbnRU
YXJnZXQoZXZlbnRUYXJnZXRzWzBdLmdldCgpKTsKKyAgICBldmVudFRhcmdldHNbMF0tPmZpcmVF
dmVudExpc3RlbmVycyhldmVudCk7CisgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQo
KSB8fCAhZXZlbnQtPmJ1YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6
OkJVQkJMSU5HX1BIQVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkg
eyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJl
bnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ld
LT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgIGdvdG8g
ZG9uZURpc3BhdGNoaW5nOworICAgIH0KKworICAgIC8vIEZJWE1FOiAiLi4uSG93ZXZlciwgd2Ug
YWxzbyB3YW50ZWQgdG8gaW50ZWdyYXRlIHRoZSB3aW5kb3cub25lcnJvciBmZWF0dXJlIGluCisg
ICAgLy8gICAgICAgIEhUTUw1LiBTbyBhZnRlciB3ZSd2ZSBmaXJlZCBhbiAiZXJyb3IiIGV2ZW50
LCBpZiAucHJldmVudERlZmF1bHQoKSB3YXMKKyAgICAvLyAgICAgICAgbmV2ZXIgY2FsbGVkIG9u
IHRoZSBldmVudCwgd2UgZmlyZSBhbiBlcnJvciBldmVudCBvbiB0aGUgd2luZG93IChjYW4ndAor
ICAgIC8vICAgICAgICByZW1lbWJlciBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIG9yIGFmdGVyIHdl
IGFib3J0IHRoZSB0cmFuc2FjdGlvbikuCisgICAgLy8gICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0
ZSBldmVudCwgd2hpY2ggZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCBldmVuIGlmIHlvdQorICAgIC8v
ICAgICAgICBhdHRhY2ggYSBjYXB0dXJpbmcgImVycm9yIiBoYW5kbGVyIG9uIHdpbmRvdywgeW91
IHdvbid0IHNlZSBhbnkgZXZlbnRzCisgICAgLy8gICAgICAgIHVubGVzcyBhbiBlcnJvciByZWFs
bHkgd2VudCB1bmhhbmRsZWQuIEFuZCB5b3UgYWxzbyBjYW4ndCBjYWxsCisgICAgLy8gICAgICAg
IC5wcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXJyb3IgZXZlbnQgZmlyZWQgb24gdGhlIHdpbmRvdyBp
biBvcmRlciB0bworICAgIC8vICAgICAgICBwcmV2ZW50IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGJl
aW5nIGFib3J0ZWQuIEl0J3MgcHVyZWx5IHRoZXJlIGZvcgorICAgIC8vICAgICAgICBlcnJvciBy
ZXBvcnRpbmcgYW5kIGRpc3RpbmN0bHkgZGlmZmVyZW50IGZyb20gdGhlIGV2ZW50IHByb3BhZ2F0
aW5nIHRvCisgICAgLy8gICAgICAgIHRoZSB3aW5kb3cuCisgICAgLy8gICAgICAgIAorICAgIC8v
ICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93ICJlcnJvciIgZXZlbnRzIGFyZSBoYW5kbGVk
IGluIHdvcmtlcnMuCisgICAgLy8gICAgICAgIAorICAgIC8vICAgICAgICAoSSB0aGluayB0aGF0
IHNvIGZhciB3ZWJraXQgaGFzbid0IGltcGxlbWVudGVkIHRoZSB3aW5kb3cub25lcnJvcgorICAg
IC8vICAgICAgICBmZWF0dXJlIHlldCwgc28geW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gZmly
ZSB0aGUgc2VwYXJhdGUgZXJyb3IKKyAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKKworZG9u
ZURpc3BhdGNoaW5nOgorICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2ZW50
LT5zZXRFdmVudFBoYXNlKDApOworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5o
CShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnRE
aXNwYXRjaGVyLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSURCRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSURCRXZlbnREaXNwYXRjaGVyX2gK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBFdmVudDsKK2NsYXNzIEV2ZW50VGFyZ2V0OworCitjbGFzcyBJREJFdmVudERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50KiwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0cyBhbmNl
c3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgorCitwcml2YXRlOgorICAg
IElEQkV2ZW50RGlzcGF0Y2hlcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJFdmVudERp
c3BhdGNoZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRo
cmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkZhY3Rvcnk6OklEQkZhY3Rvcnko
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBtX2JhY2tlbmQoZmFj
dG9yeSkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9y
ZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30K
KworSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQoreworfQorCitQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAv
LyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsK
KyAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3Jv
dXAoKS5ncm91cFNldHRpbmdzKCk7CisgICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJl
cXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3Jv
dXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
ICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OworICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAgICAgIG1fYmFja2VuZC0+
b3BlbihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBmcmFt
ZSwgU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9CisjaWYgRU5BQkxF
KFdPUktFUlMpCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1fYmFja2VuZC0+
b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIHJlcXVlc3Q7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bh
c3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1
bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3Vt
ZW50LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3Vw
U2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAg
ICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERC
RGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9ydCBJREJGYWN0
b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vj
b25kLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoZmlyc3QpOworICAgIEFTU0VS
VChzZWNvbmQpOworCisgICAgaWYgKGZpcnN0LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlw
ZSB8fCBzZWNvbmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9ICAgIAorICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBh
cmUoc2Vjb25kLmdldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIElEQkZhY3RvcnlfaAorI2RlZmluZSBJREJGYWN0b3J5X2gKKworI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJL
ZXlSYW5nZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCit0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNv
dW50ZWQ8SURCRmFjdG9yeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZh
Y3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeShmYWN0b3J5KSk7CisgICAg
fQorICAgIH5JREJGYWN0b3J5KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzaG9ydCBjbXAoUGFzc1JlZlB0cjxJREJL
ZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJik7CisK
K3ByaXZhdGU6CisgICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOwor
CisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRmFjdG9y
eV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFCisgICAgXSBJREJGYWN0b3J5IHsKKyAgICAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0RGF0YWJhc2VOYW1lcygpOworCisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4o
aW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQorICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisKKyAgICAgICAgc2hvcnQgY21w
KGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKKyAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEltcGwuaCIKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIK
KyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtMZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAx
IjsKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsga0xl
dmVsREJGaWxlU3VmZml4OworfQorCitzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQor
eworICAgIHJldHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4pICsgbmFt
ZTsKK30KKworSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZEltcGwoKQor
ICAgIDogbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OmNyZWF0ZSgpKQoreworfQorCitJREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5QmFj
a2VuZEltcGwoKQoreworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURC
RGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUJhY2tlbmRNYXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOwor
ICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJp
bmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAg
ICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7Cisg
ICAgbV9iYWNraW5nU3RvcmVNYXAuc2V0KGZpbGVJZGVudGlmaWVyLCBiYWNraW5nU3RvcmUpOwor
fQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3Jl
TWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVNYXAucmVt
b3ZlKGZpbGVJZGVudGlmaWVyKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Omdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwor
ICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAi
SW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7CisgICAgYmFja2luZ1N0b3JlLT5nZXRE
YXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZm91bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgp
OyArK2l0KQorICAgICAgICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIG9wZW5JbnRlcm5hbChu
YW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKK30KKwordm9p
ZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBk
YXRhRGlyZWN0b3J5KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJ
ZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4u
Z2V0KCkpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0
YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkg
Y29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCisgICAgICAg
IC8vIGRhdGFiYXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFj
a3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcg
ZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0
eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdT
dG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmll
ciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURh
dGFiYXNlKGNhbGxiYWNrcyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3sKKyAg
ICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2Vj
dXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlOworICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5n
U3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdT
dG9yZU1hcC5lbmQoKSkKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAg
ZWxzZSB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3Rvcnks
IGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0
dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKKyAgICBj
b25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5h
bWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIp
OworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAv
LyBJZiBpdCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBl
bmRpbmcKKyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAg
aXQtPnNlY29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBk
b25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4oZGF0YWJh
c2VCYWNrZW5kLmdldCgpKS5yZWxlYXNlKCkpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNl
dCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisjZGVm
aW5lIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3MgSURCQmFja2lu
Z1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2VuZEltcGwoKSk7CisgICAgfQorICAgIHZpcnR1
YWwgfklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworCisgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9t
IHdlYWsgcG9pbnRlcnMuCisgICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3Qg
U3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lk
IHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2Vy
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
OworCitwcml2YXRlOgorICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworICAgIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVybmFsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElE
QkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIElEQkJhY2tpbmdTdG9yZSo+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAg
ICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOworCisgICAg
Ly8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBn
aXZlbiB0aW1lLgorICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlC
YWNrZW5kSW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNl
bmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3IgIkNocm9taXVtIHNo
b3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0cyBvd24gdmVy
c2lvbiBvZiB0aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMgdGhlIG11bHRpLXByb2Nlc3MgYm91
bmRyeS4iCisjZW5kaWYKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBJREJGYWN0
b3J5QmFja2VuZEltcGw6OmNyZWF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Vf
aAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNz
IElEQkRhdGFiYXNlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXb3JrZXJDb250ZXh0
OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJl
ZCBieSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KKy8vIFRo
aXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5
IG90aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJp
ZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBh
bmQKKy8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4K
K2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOworICAgIHZp
cnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCSW5kZXgu
aCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisj
aW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgor
I2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKKwor
SURCSW5kZXg6OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbikKKyAgICA6IG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7CisgICAgQVNT
RVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uKTsKK30KKworSURCSW5kZXg6On5JREJJbmRleCgpCit7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJ
REJJbmRleDo6b3BlbkN1cnNvciIpOworICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpO
RVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVj
dGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9O
T19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVu
IHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0x
MTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IpOworICAgIG1fYmFja2VuZC0+b3BlbkN1cnNv
cihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3Vu
dChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RS
QUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7
Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgSURCX1RSQUNFKCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIGlmIChkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9
IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBu
ZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xMTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1
cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOworICAg
IG1fYmFja2VuZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVx
dWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJl
dHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Z2V0Iik7Cisg
ICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKKyAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlE
ZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKKyAgICBpZiAoa2V5
ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAg
IG1fYmFja2VuZC0+Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCSW5kZXhfaAor
I2RlZmluZSBJREJJbmRleF9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgSURCSW5k
ZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IGJhY2tlbmQsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJ
bmRleChiYWNrZW5kLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKKyAgICB9CisgICAgfklE
QkluZGV4KCk7CisKKyAgICAvLyBJbXBsZW1lbnQgdGhlIElETAorICAgIFN0cmluZyBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KKyAgICBJREJPYmplY3RTdG9yZSog
b2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisgICAg
U3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPmtleVBhdGgoKTsgfQor
ICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT51bmlxdWUoKTsgfQor
ICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bXVsdGlFbnRy
eSgpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Ig
c28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
b3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KKyAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjb3Vu
dChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0KKyAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQs
IGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJp
dmF0ZToKKyAgICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4s
IElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElE
QkluZGV4X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFCisgICAgXSBJREJJbmRleCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0
b3JlIG9iamVjdFN0b3JlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtl
eVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKKworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtP
cHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Cisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW5L
ZXlDdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgZ2V0S2V5KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkg
a2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisj
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3Jl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3Rv
cmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25h
bWUobmFtZSkKKyAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFtZSkKKyAgICAsIG1fa2V5UGF0aChr
ZXlQYXRoKQorICAgICwgbV91bmlxdWUodW5pcXVlKQorICAgICwgbV9tdWx0aUVudHJ5KG11bHRp
RW50cnkpCit7Cit9CisKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0
U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoSW52YWxpZElkKQor
ICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCisgICAgLCBt
X2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1fdW5pcXVlKHVuaXF1ZSkKKyAgICAsIG1fbXVsdGlF
bnRyeShtdWx0aUVudHJ5KQoreworfQorCitJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhC
YWNrZW5kSW1wbCgpCit7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
ckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQg
c2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7Cisg
ICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsK
KyAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVjdGlvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIHN3aXRjaCAoY3Vyc29y
VHlwZSkgeworICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3I6CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+
b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
Q3Vyc29yOgorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3Rv
cmUtPm9wZW5JbmRleEN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmpl
Y3RTdG9yZUN1cnNvcjoKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFs
aWRDdXJzb3JUeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IHRyYW5z
YWN0aW9uLT5vYmplY3RTdG9yZShpbmRleC0+bV9zdG9yZU5hbWUsIGVjKTsKKyAgICBBU1NFUlQo
b2JqZWN0U3RvcmUgJiYgIWVjKTsKKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1
cnNvci5nZXQoKSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2Jq
ZWN0U3RvcmUuZ2V0KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNl
KCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURC
X1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7CisgICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJw
S2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJh
Y2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJw
S2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJJ
bmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgdWludDMyX3QgY291bnQgPSAw
OworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+bV9k
YXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgp
LCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bWJlclZhbHVlKGNvdW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
byB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5j
b250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7Cisg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1
ZShjb3VudCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Omdl
dEludGVybmFsIik7CisgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVybmFsIGludG8gdHdvIGZ1
bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgorICAgIGlmIChnZXRPYmplY3Qp
IHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRPYmpl
Y3RWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUodmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBr
ZXlSZXN1bHQgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChp
bmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGlu
ZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKCFrZXlSZXN1bHQpIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlS
ZXN1bHQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQo
UGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXQiKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXksIHRydWUsIGNh
bGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5Iik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5LCBmYWxzZSwg
Y2FsbGJhY2tzKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdL
ZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtl
eSkKK3sKKyAgICBpZiAoIW1fdW5pcXVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJl
ZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICBib29sIGZvdW5kID0gbV9iYWNraW5n
U3RvcmUtPmtleUV4aXN0c0luSW5kZXgobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgbV9pZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgIGlmICghZm91
bmQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJp
bWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmg6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJJbmRleEJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJLZXk7
CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKKworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9y
ZUJhY2tlbmQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
dG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlF
bnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5k
SW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5h
bWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CisgICAgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCSW5kZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
QmFja2VuZCwgbmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOworCisgICAgaW50NjRf
dCBpZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOwor
ICAgICAgICByZXR1cm4gbV9pZDsKKyAgICB9CisgICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7
IG1faWQgPSBpZDsgfQorICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQg
IT0gSW52YWxpZElkOyB9OworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktl
eSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOworCisgICAgLy8gSW1w
bGVtZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCisgICAgdmlydHVhbCBTdHJpbmcgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHN0b3JlTmFtZSgpIHsg
cmV0dXJuIG1fc3RvcmVOYW1lOyB9CisgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0
dXJuIG1fa2V5UGF0aDsgfQorICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3Vu
aXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tdWx0aUVu
dHJ5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7CisKK3ByaXZhdGU6CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUq
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBp
bnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAg
IElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0
YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
Ym9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAgICBzdGF0aWMg
Y29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gbV9iYWNraW5nU3RvcmU7CisKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25z
dCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKKyAgICBp
bnQ2NF90IG1faWQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9zdG9yZU5hbWU7
CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBib29sIG1fdW5pcXVlOworICAgIGJvb2wgbV9t
dWx0aUVudHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIElEQkluZGV4QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmlu
ZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURC
S2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKwor
ICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc3RvcmVO
YW1lKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHVuaXF1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXku
aCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0lEQktleTo6SURCS2V5KCkKKyAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkKKyAgICAsIG1f
c2l6ZUVzdGltYXRlKGtPdmVyaGVhZFNpemUpCit7Cit9CisKK0lEQktleTo6fklEQktleSgpCit7
Cit9CisKK2ludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQob3RoZXIpOworICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1fdHlwZSkKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7CisKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5jb21wYXJlKG90
aGVyLT5tX2FycmF5W2ldLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5tX2FycmF5LnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgp
ID4gb3RoZXItPm1fYXJyYXkuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IHJldHVybiAwOworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIC1jb2RlUG9p
bnRDb21wYXJlKG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOworICAgIGNhc2UgRGF0ZVR5cGU6
CisgICAgICAgIHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6CisgICAgICAg
ICAgICAgICAgKG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7CisgICAgY2FzZSBOdW1i
ZXJUeXBlOgorICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVtYmVyKSA/IC0x
IDoKKyAgICAgICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVyKSA/IDEgOiAw
OworICAgIGNhc2UgSW52YWxpZFR5cGU6CisgICAgY2FzZSBNaW5UeXBlOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0xlc3NU
aGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG90aGVyKTsKKyAg
ICByZXR1cm4gY29tcGFyZShvdGhlcikgPT0gLTE7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0VxdWFs
KGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIElEQktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxJREJLZXk+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IEtleUFycmF5OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJbnZhbGlkKCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBlID0gSW52YWxp
ZFR5cGU7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlTnVtYmVyKGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkp
OworICAgICAgICBpZGJLZXktPm1fdHlwZSA9IE51bWJlclR5cGU7CisgICAgICAgIGlkYktleS0+
bV9udW1iZXIgPSBudW1iZXI7CisgICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc2l6
ZW9mKGRvdWJsZSk7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQorICAgIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYo
bmV3IElEQktleSgpKTsKKyAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBTdHJpbmdUeXBlOworICAg
ICAgICBpZGJLZXktPm1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBpZGJLZXktPm1fc2l6ZUVz
dGltYXRlICs9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHJldHVy
biBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gY3JlYXRlRGF0ZShkb3VibGUgZGF0ZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBl
ID0gRGF0ZVR5cGU7CisgICAgICAgIGlkYktleS0+bV9kYXRlID0gZGF0ZTsKKyAgICAgICAgaWRi
S2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGlk
YktleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBj
cmVhdGVBcnJheShjb25zdCBLZXlBcnJheSYgYXJyYXkpCisgICAgeworICAgICAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOworICAgICAgICBpZGJLZXkt
Pm1fdHlwZSA9IEFycmF5VHlwZTsKKyAgICAgICAgaWRiS2V5LT5tX2FycmF5ID0gYXJyYXk7CisK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRl
OworCisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIH5JREJL
ZXkoKTsKKworICAgIC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVj
ZWRlbnQgaW4gdGVybXMgb2Ygc29ydCBvcmRlci4KKyAgICBlbnVtIFR5cGUgeworICAgICAgICBJ
bnZhbGlkVHlwZSA9IDAsCisgICAgICAgIEFycmF5VHlwZSwKKyAgICAgICAgU3RyaW5nVHlwZSwK
KyAgICAgICAgRGF0ZVR5cGUsCisgICAgICAgIE51bWJlclR5cGUsCisgICAgICAgIE1pblR5cGUK
KyAgICB9OworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAg
Ym9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkVHlwZTsgfQorCisg
ICAgY29uc3QgS2V5QXJyYXkmIGFycmF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQXJyYXlUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fYXJyYXk7CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgIH0KKwor
ICAgIGRvdWJsZSBkYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
RGF0ZVR5cGUpOworICAgICAgICByZXR1cm4gbV9kYXRlOworICAgIH0KKworICAgIGRvdWJsZSBu
dW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBOdW1iZXJUeXBl
KTsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIH0KKworICAgIGludCBjb21wYXJlKGNv
bnN0IElEQktleSogb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNMZXNzVGhhbihjb25zdCBJREJL
ZXkqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoY29uc3QgSURCS2V5KiBvdGhlcikg
Y29uc3Q7CisKKyAgICBzaXplX3Qgc2l6ZUVzdGltYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
RXN0aW1hdGU7IH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZVR5cGVzKFR5cGUgYSwgVHlwZSBi
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGIgLSBhOworICAgIH0KKworICAgIHVzaW5nIFRocmVh
ZFNhZmVSZWZDb3VudGVkPElEQktleT46OnJlZjsKKyAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxJREJLZXk+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJLZXkoKTsKKworICAgIFR5
cGUgbV90eXBlOworICAgIEtleUFycmF5IG1fYXJyYXk7CisgICAgU3RyaW5nIG1fc3RyaW5nOwor
ICAgIGRvdWJsZSBtX2RhdGU7CisgICAgZG91YmxlIG1fbnVtYmVyOworCisgICAgc2l6ZV90IG1f
c2l6ZUVzdGltYXRlOworCisgICAgLy8gVmVyeSByb3VnaCBlc3RpbWF0ZSBvZiBtaW5pbXVtIGtl
eSBzaXplIG92ZXJoZWFkLgorICAgIGVudW0geyBrT3ZlcmhlYWRTaXplID0gMTYgfTsKK307CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURC
S2V5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmlk
bAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5p
ZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2Ug
eworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKKyAgICAgICAgQ3VzdG9tVG9KU09iamVjdAorICAgIF0gSURCS2V5IHsKKyAgICAgICAgLy8g
VGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuCisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5j
cHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuSWRlbnRpZmllciwK
KyAgICAgICAgVG9rZW5Eb3QsCisgICAgICAgIFRva2VuRW5kLAorICAgICAgICBUb2tlbkVycm9y
CisgICAgfTsKKworICAgIGV4cGxpY2l0IElEQktleVBhdGhMZXhlcihjb25zdCBTdHJpbmcmIHMp
CisgICAgICAgIDogbV9zdHJpbmcocykKKyAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkK
KyAgICAgICAgLCBtX2VuZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCisgICAgICAgICwg
bV9jdXJyZW50VG9rZW5UeXBlKFRva2VuRXJyb3IpCisgICAgeworICAgIH0KKworICAgIFRva2Vu
VHlwZSBjdXJyZW50VG9rZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBl
OyB9CisKKyAgICBUb2tlblR5cGUgbmV4dFRva2VuVHlwZSgpCisgICAgeworICAgICAgICBtX2N1
cnJlbnRUb2tlblR5cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRUb2tlblR5cGU7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBjdXJyZW50RWxl
bWVudCgpIHsgcmV0dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KKworcHJpdmF0ZToKKyAgICBUb2tl
blR5cGUgbGV4KFN0cmluZyYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKFN0cmluZyYp
OworICAgIFN0cmluZyBtX2N1cnJlbnRFbGVtZW50OworICAgIFN0cmluZyBtX3N0cmluZzsKKyAg
ICBjb25zdCBVQ2hhciogbV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIFRva2Vu
VHlwZSBtX2N1cnJlbnRUb2tlblR5cGU7Cit9OworCitJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSBJREJLZXlQYXRoTGV4ZXI6OmxleChTdHJpbmcmIGVsZW1lbnQpCit7CisgICAgaWYgKG1fcHRy
ID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FbmQ7CisgICAgQVNTRVJUKG1fcHRyIDwg
bV9lbmQpOworCisgICAgaWYgKCptX3B0ciA9PSAnLicpIHsKKyAgICAgICAgKyttX3B0cjsKKyAg
ICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIH0KKyAgICByZXR1cm4gbGV4SWRlbnRpZmllcihl
bGVtZW50KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENo
YXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0g
J18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRp
ZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmlj
KGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0aExleGVyOjpU
b2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKFN0cmluZyYgZWxlbWVudCkK
K3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIgPCBtX2Vu
ZCAmJiBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgKytt
X3B0cjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisgICAgd2hpbGUg
KG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9wdHIpKQorICAg
ICAgICArK21fcHRyOworCisgICAgZWxlbWVudCA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFy
dCk7CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworYm9vbCBJREJJc1ZhbGlkS2V5
UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ZXJyb3I7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICByZXR1cm4gZXJy
b3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lOworfQorCit2b2lkIElEQlBhcnNlS2V5UGF0
aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+JiBlbGVtZW50cywgSURCS2V5
UGF0aFBhcnNlRXJyb3ImIGVycm9yKQoreworICAgIC8vIElEQktleVBhdGggOjo9IEVNUFRZX1NU
UklORyB8IGlkZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSoKKyAgICAvLyBUaGUgYmFzaWMgc3Rh
dGUgbWFjaGluZSBpczoKKyAgICAvLyAgIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBFbmR9CisgICAg
Ly8gICBJZGVudGlmaWVyID0+IHtEb3QsIEVuZH0KKyAgICAvLyAgIERvdCA9PiB7SWRlbnRpZmll
cn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0
IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgorICAgIGVudW0g
UGFyc2VyU3RhdGUgeyBJZGVudGlmaWVyLCBEb3QsIEVuZCB9OworCisgICAgSURCS2V5UGF0aExl
eGVyIGxleGVyKGtleVBhdGgpOworICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2Vu
VHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICBQYXJzZXJTdGF0ZSBzdGF0ZTsKKyAg
ICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQorICAg
ICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktl
eVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgIHN0YXRlID0gRW5kOworICAgIGVsc2Ugewor
ICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6
VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIp
OworCisgICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7
CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAgICAgICAgIHRv
a2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5
cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IERvdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6
OlRva2VuRW5kKQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZp
ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIElEQktl
eVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUo
KTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tl
bkRvdCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsK
KyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50
aWZpZXIpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAgZXJyb3IgPSBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gKKyNkZWZpbmUgSURCS2V5UGF0aF9o
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworZW51bSBJREJLZXlQYXRoUGFyc2VFcnJvciB7CisgICAgSURCS2V5UGF0aFBhcnNlRXJy
b3JOb25lLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQsCisgICAgSURCS2V5UGF0aFBh
cnNlRXJyb3JJZGVudGlmaWVyLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yRG90LAorfTsKKwor
Ym9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmKTsKK3ZvaWQgSURCUGFyc2VLZXlQ
YXRoKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0aFBhcnNlRXJyb3Im
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQktl
eVBhdGhfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCisKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyNlcnJvciAiQ2hyb21pdW0gc2hvdWxkIG5vdCBjb21waWxlIHRoaXMg
ZmlsZSBhbmQgaW5zdGVhZCBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMgZmFjdG9yeSB0
aGF0IG5hdmlnYXRlcyB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3ZvaWQgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3Ig
U2VyaWFsaXplZFNjcmlwdFZhbHVlLgorfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZh
bHVlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFs
aXplZFNjcmlwdFZhbHVlLgorICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOjEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QktleVBhdGhCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOworCitjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBh
dGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVz
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURC
S2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKK307CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5UGF0
aEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlSYW5nZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJLZXlSYW5nZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJREJLZXlSYW5nZTo6SURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQ
YXNzUmVmUHRyPElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJC
b3VuZFR5cGUgdXBwZXJUeXBlKQorICAgIDogbV9sb3dlcihsb3dlcikKKyAgICAsIG1fdXBwZXIo
dXBwZXIpCisgICAgLCBtX2xvd2VyVHlwZShsb3dlclR5cGUpCisgICAgLCBtX3VwcGVyVHlwZSh1
cHBlclR5cGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpv
bmx5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUo
KSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IElEQktleVJhbmdlOjpjcmVhdGUoa2V5LCBrZXksIExvd2VyQm91bmRDbG9zZWQsIFVwcGVyQm91
bmRDbG9zZWQpOworfQorCitQYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6bG93
ZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKGJvdW5kICYmIChib3VuZC0+dHlwZSgpID09IElEQktleTo6SW52
YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNy
ZWF0ZShib3VuZCwgMCwgb3BlbiA/IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3VuZENsb3NlZCwg
VXBwZXJCb3VuZENsb3NlZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJh
bmdlOjp1cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYm91bmQgJiYgKGJvdW5kLT50eXBlKCkgPT0gSURC
S2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlS
YW5nZTo6Y3JlYXRlKDAsIGJvdW5kLCBMb3dlckJvdW5kQ2xvc2VkLCBvcGVuID8gVXBwZXJCb3Vu
ZE9wZW4gOiBVcHBlckJvdW5kQ2xvc2VkKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
SURCS2V5UmFuZ2U6OmJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJ
REJLZXk+IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICgobG93ZXIgJiYgKGxvd2VyLT50eXBlKCkgPT0gSURCS2V5OjpJ
bnZhbGlkVHlwZSkpIHx8ICh1cHBlciAmJiAodXBwZXItPnR5cGUoKSA9PSBJREJLZXk6OkludmFs
aWRUeXBlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobG93ZXIgJiYgdXBwZXIgJiYgdXBw
ZXItPmlzTGVzc1RoYW4obG93ZXIuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGxv
d2VyICYmIHVwcGVyICYmIHVwcGVyLT5pc0VxdWFsKGxvd2VyLmdldCgpKSAmJiAobG93ZXJPcGVu
IHx8IHVwcGVyT3BlbikpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlSYW5n
ZTo6Y3JlYXRlKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuID8gTG93ZXJCb3VuZE9wZW4gOiBMb3dl
ckJvdW5kQ2xvc2VkLCB1cHBlck9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVyQm91bmRDbG9z
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQktleVJhbmdlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJLZXlSYW5nZV9oCisjZGVmaW5lIElEQktleVJhbmdlX2gKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVk
ZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPElEQktleVJhbmdlPiB7CitwdWJsaWM6CisgICAgZW51bSBMb3dlckJvdW5kVHlw
ZSB7CisgICAgICAgIExvd2VyQm91bmRPcGVuLAorICAgICAgICBMb3dlckJvdW5kQ2xvc2VkCisg
ICAgfTsKKyAgICBlbnVtIFVwcGVyQm91bmRUeXBlIHsKKyAgICAgICAgVXBwZXJCb3VuZE9wZW4s
CisgICAgICAgIFVwcGVyQm91bmRDbG9zZWQKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQ
dHI8SURCS2V5PiB1cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlw
ZSB1cHBlclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleVJh
bmdlKGxvd2VyLCB1cHBlciwgbG93ZXJUeXBlLCB1cHBlclR5cGUpKTsKKyAgICB9CisgICAgfklE
QktleVJhbmdlKCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gbG93ZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvd2VyOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyKCkgY29uc3Qg
eyByZXR1cm4gbV91cHBlcjsgfQorICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4g
bV9sb3dlclR5cGUgPT0gTG93ZXJCb3VuZE9wZW47IH0KKyAgICBib29sIHVwcGVyT3BlbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXBwZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gb25seShQYXNzUmVmUHRyPElEQktleT4gdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBs
b3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCisg
ICAgeworICAgICAgcmV0dXJuIGxvd2VyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7CisgICAgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5kKFBhc3NSZWZQdHI8
SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91
bmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgIHJldHVybiB1cHBlckJvdW5kKGJv
dW5kLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBh
c3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBFeGNlcHRp
b25Db2RlJiBlYykKKyAgICB7CisgICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVwcGVyLCBmYWxz
ZSwgZmFsc2UsIGVjKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVy
LCBib29sIGxvd2VyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgcmV0dXJu
IGJvdW5kKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxv
d2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBib29sIHVwcGVy
T3BlbiwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIElEQktleVJhbmdlKFBhc3NS
ZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5k
VHlwZSBsb3dlclR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSk7CisKKyAgICBSZWZQdHI8
SURCS2V5PiBtX2xvd2VyOworICAgIFJlZlB0cjxJREJLZXk+IG1fdXBwZXI7CisgICAgTG93ZXJC
b3VuZFR5cGUgbV9sb3dlclR5cGU7CisgICAgVXBwZXJCb3VuZFR5cGUgbV91cHBlclR5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCS2V5
UmFuZ2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVJhbmdlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQktleVJhbmdlIHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIElEQktleSBsb3dlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IElEQktleSB1cHBlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbG93ZXJP
cGVuOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9wZW47CisKKyAg
ICAgICAgc3RhdGljIElEQktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQorICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHN0YXRpYyBJREJLZXlS
YW5nZSBsb3dlckJvdW5kKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9w
ZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAg
c3RhdGljIElEQktleVJhbmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gb3BlbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOworICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5IGxvd2VyLCBp
biBJREJLZXkgdXBwZXIsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4sIGluIFtPcHRp
b25hbF0gYm9vbGVhbiB1cHBlck9wZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUz
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVW
RUxEQikKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCisjaW5jbHVkZSAiTGV2ZWxEQkNv
bXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZXZl
bERCSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlICJMZXZl
bERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nOworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZElu
dCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghZGItPmdldChrZXksIHJl
c3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvdW5kSW50ID0gZGVjb2RlSW50
KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0SW50KERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlSW50KHZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRTdHJpbmco
REJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91
bmRTdHJpbmcpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIWRiLT5nZXQo
a2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZFN0cmluZyA9
IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBi
b29sIHB1dFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXksIGVuY29kZVN0
cmluZyh2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBpbnQgY29tcGFyZUtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBM
ZXZlbERCU2xpY2UmIGIpCit7CisgICAgcmV0dXJuIGNvbXBhcmUoYSwgYik7Cit9CisKK3N0YXRp
YyBpbnQgY29tcGFyZUluZGV4S2V5cyhjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVs
REJTbGljZSYgYikKK3sKKyAgICByZXR1cm4gY29tcGFyZShhLCBiLCB0cnVlKTsKK30KKworY2xh
c3MgQ29tcGFyYXRvciA6IHB1YmxpYyBMZXZlbERCQ29tcGFyYXRvciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBpbnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJT
bGljZSYgYikgY29uc3QgeyByZXR1cm4gSURCTGV2ZWxEQkNvZGluZzo6Y29tcGFyZShhLCBiKTsg
fQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuICJpZGJfY21w
MSI7IH0KK307CisKK3N0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBk
YikKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hlbWFWZXJzaW9u
S2V5OjplbmNvZGUoKTsKKworICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CisgICAgaWYg
KCFnZXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgeworICAgICAgICBzY2hl
bWFWZXJzaW9uID0gMDsKKyAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hl
bWFWZXJzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBG
SVhNRTogRXZlbnR1YWxseSwgd2UnbGwgbmVlZCB0byBiZSBhYmxlIHRvIHRyYW5zaXRpb24gYmV0
d2VlbiBzY2hlbWFzLgorICAgIGlmIChzY2hlbWFWZXJzaW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMgdmVyc2lvbi4KKworICAgIHJl
dHVybiB0cnVlOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCisgICAgOiBtX2lkZW50aWZp
ZXIoaWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV9kYihkYikK
K3sKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsK
K30KKworSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUoKQor
eworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRpZmllcik7CisK
KyAgICAvLyBtX2RiJ3MgZGVzdHJ1Y3RvciB1c2VzIG1fY29tcGFyYXRvci4gVGhlIG9yZGVyIG9m
IGRlc3RydWN0aW9uIGlzIGltcG9ydGFudC4KKyAgICBtX2RiLmNsZWFyKCk7CisgICAgbV9jb21w
YXJhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQoreworICAgIFN0cmluZyBwYXRoQmFzZSA9IHBh
dGhCYXNlQXJnOworCisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0g
YWRvcHRQdHIobmV3IENvbXBhcmF0b3IoKSk7CisgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4g
ZGI7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICBkYiA9IExldmVsREJE
YXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAg
ICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBh
dGhCYXNlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPigpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMu
CisgICAgICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNl
LCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZl
bGRiIik7CisKKyAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFy
YXRvci5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKCFkYikKKyAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJh
dG9yIG5hbWUgY2hhbmdlcy4KKworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkxldmVsREJCYWNraW5nU3RvcmUoZmlsZUlkZW50
aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBiYWNraW5nU3RvcmUtPm1fY29t
cGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOworCisgICAgaWYgKCFzZXRVcE1ldGFkYXRh
KGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4oKTsKKworICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwor
fQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5
ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2Rl
U3RvcEtleUZvck9yaWdpbihtX2lkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGZvdW5kTmFtZXMu
aXNFbXB0eSgpKTsKKworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQo
KSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewor
ICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0
IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIERhdGFiYXNlTmFtZUtl
eSBkYXRhYmFzZU5hbWVLZXk7CisgICAgICAgIHAgPSBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShw
LCBsaW1pdCwgJmRhdGFiYXNlTmFtZUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAg
ICBmb3VuZE5hbWVzLmFwcGVuZChkYXRhYmFzZU5hbWVLZXkuZGF0YWJhc2VOYW1lKCkpOworICAg
IH0KK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZv
dW5kSWQpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6
ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CisKKyAgICBib29sIG9rID0gZ2V0SW50KG1fZGIu
Z2V0KCksIGtleSwgZm91bmRJZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiksIGZvdW5k
VmVyc2lvbik7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRh
dGFiYXNlKiBkYikKK3sKKyAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsKKyAgICBpZiAo
IWdldEludChkYiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQpKQor
ICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKKworICAgIEFTU0VSVChtYXhEYXRhYmFzZUlkID49
IDApOworCisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbWF4RGF0YWJhc2VJZCArIDE7CisgICAg
aWYgKCFwdXRJbnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBkYXRhYmFzZUlkKSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGRhdGFiYXNlSWQ7Cit9CisKK2Jvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCit7Cisg
ICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOworICAgIGlmIChyb3dJZCA8
IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkg
PSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworICAgIGlmICgh
cHV0SW50KG1fZGIuZ2V0KCksIGtleSwgcm93SWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlv
bik7CisgICAgaWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJW
ZXJzaW9uKSwgdmVyc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGVuZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgp
ICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
ID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKKyAg
ICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZDsKKyAgICBT
dHJpbmcgdmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVy
c2lvbiwgZGF0YWJhc2VJZCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFy
dEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkg
PSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCArIDEsIERhdGFiYXNlTWV0
YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSkpIHsKKyAgICAgICAgdHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25z
dCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVy
LCBuYW1lKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7CisKKyAgICB0
cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBp
dCwgY29uc3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbWV0YURhdGFUeXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJl
S2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciog
cCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQt
PmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkpOworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7Cisg
ICAgaWYgKG1ldGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSAhPSBvYmplY3RTdG9yZUlkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9
IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBm
b3VuZEF1dG9JbmNyZW1lbnRGbGFncykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRL
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7Cisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpl
bmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CisKKyAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEtl
eVBhdGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmlz
RW1wdHkoKSk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0
ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsoc3RhcnRLZXkpOworICAgIHdoaWxlIChpdC0+aXNW
YWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CisgICAgICAg
IGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hhciAq
bGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eSBtZXRhRGF0YUtleTsKKyAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29k
ZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworICAgICAgICBp
ZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFEYXRhS2V5Lm9iamVj
dFN0b3JlSWQoKTsKKyAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IGRlY29kZVN0cmlu
ZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaXQt
Pm5leHQoKTsKKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0
LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAxKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1
ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgYm9vbCBoYXNLZXlQYXRo
ID0gdHJ1ZTsKKworICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICBpZiAoIWNoZWNrT2JqZWN0
U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDIp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBl
bmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgIGJvb2wgYXV0b0luY3Jl
bWVudCA9ICppdC0+dmFsdWUoKS5iZWdpbigpOworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIElz
IGV2aWNhdGJsZS4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBl
KGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAzKSkgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2ZXJzaW9uLgorICAg
ICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BL
ZXksIG9iamVjdFN0b3JlSWQsIDQpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpdW0gaW5kZXggaWQgYWxsb2NhdGVkLgorICAgICAg
ICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXks
IG9iamVjdFN0b3JlSWQsIDUpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIGhhcyBrZXkgcGF0aCAoaXMgbm90IG51bGwp
CisgICAgICAgIGlmIChjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCA2KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBl
bmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgICAgICBoYXNLZXlQYXRo
ID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYg
IWtleVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBmb3Vu
ZElkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKG9i
amVjdFN0b3JlTmFtZSk7CisgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGhhc0tleVBhdGgg
PyBrZXlQYXRoIDogU3RyaW5nKCkpOworICAgICAgICBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5h
cHBlbmQoYXV0b0luY3JlbWVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50NjRfdCBnZXROZXdP
YmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCkKK3sKKyAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKKyAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4T2JqZWN0U3RvcmVJ
ZCk7CisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1h
eE9iamVjdFN0b3JlSWQpKQorICAgICAgICBtYXhPYmplY3RTdG9yZUlkID0gMDsKKworICAgIEFT
U0VSVChtYXhPYmplY3RTdG9yZUlkID49IDApOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlk
ID0gbWF4T2JqZWN0U3RvcmVJZCArIDE7CisgICAgaWYgKCFwdXRJbnQodHJhbnNhY3Rpb24sIG1h
eE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpKQorICAgICAgICByZXR1cm4gLTE7CisK
KyAgICByZXR1cm4gb2JqZWN0U3RvcmVJZDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3Qm
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQpOworICAgIGlmIChvYmplY3RTdG9y
ZUlkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG5hbWVLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMSk7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGF1dG9JbmNyZW1lbnRLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMik7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGV2aWN0YWJsZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAzKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4
SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgNSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tleVBhdGhLZXkgID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDYp
OworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lc0tleSA9IE9iamVjdFN0b3JlTmFtZXNLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBuYW1lKTsKKworICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGlmICghb2spIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBtYXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKCFvaykgewor
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhc3NpZ25lZE9iamVjdFN0b3JlSWQgPSBvYmpl
Y3RTdG9yZUlkOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAg
IFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCksIG9iamVjdFN0b3JlTmFtZSk7CisKKyAgICBpZiAoIWRlbGV0ZVJhbmdl
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgICAgIHJldHVy
bjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KKworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5y
ZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
TmFtZSkpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAp
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCkpKQorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgaWYgKCFk
ZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAgICAgICByZXR1
cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisKKyAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQpOworfQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
ZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwga2V5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxl
dmVsZGJLZXksIGRhdGEpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpbnQ2NF90
IHZlcnNpb247CisgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCksIHZlcnNpb24pOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICh2b2lkKSB2ZXJzaW9uOworCisgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBk
YXRhLmVuZCgpKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIExldmVsREJSZWNvcmRJZGVudGlm
aWVyIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmll
cj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9u
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIocHJpbWFyeUtl
eSwgdmVyc2lvbikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50
aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRp
ZmllcigpKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9CisgICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2b2lkIHNldFByaW1hcnlLZXkoY29u
c3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7
IH0KKyAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAg
ICB2b2lkIHNldFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247
IH0KKworcHJpdmF0ZToKKyAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8
Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFy
eUtleSksIG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkp
OyB9CisgICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3Zl
cnNpb24oLTEpIHt9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTog
TWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2Yg
dGhlIGtleS4KKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307Cit9CisKK3N0YXRpYyBpbnQ2NF90
IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDQpOworCisgICAgaW50NjRfdCBsYXN0VmVyc2lv
biA9IC0xOworICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFz
dFZlcnNpb24pKQorICAgICAgICBsYXN0VmVyc2lvbiA9IDA7CisKKyAgICBBU1NFUlQobGFzdFZl
cnNpb24gPj0gMCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVyc2lvbiArIDE7Cisg
ICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIHZlcnNpb24p
OworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKworICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFz
dFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRo
ZSBvdmVyZmxvdyBzY2VuYXJpby4KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCitib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVy
KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJz
aW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0
b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChlbmNv
ZGVWYXJJbnQodmVyc2lvbikpOworICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwor
CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwg
dikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlz
dHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwga2V5KTsKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50
cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRp
Y19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CisgICAg
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkp
OworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2Rl
KCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOworCisgICAgZGVsZXRlUmFuZ2UobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKK30KKworUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQoreworICAg
IHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOworICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3Jk
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4o
cmVjb3JkSWRlbnRpZmllcik7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVE
YXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgbV9jdXJy
ZW50VHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOworCisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtl
eSgpKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsK
K30KKworZG91YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVt
YmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgbWluSURCS2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5
KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKworICAgIGludCBtYXhOdW1lcmljS2V5ID0gMDsKKwor
ICAgIC8vIEZJWE1FOiBCZSBtb3JlIGVmZmljaWVudDogc2VlayB0byBzb21ldGhpbmcgYWZ0ZXIg
dGhlIG9iamVjdCBzdG9yZSBkYXRhLCB0aGVuIHJldmVyc2UuCisKKyAgICBmb3IgKGl0LT5zZWVr
KHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BL
ZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgp
LmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwor
CisgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJU
KHApOworCisgICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElEQktleTo6
TnVtYmVyVHlwZSkgeworICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJlcigpKTsKKyAgICAgICAgICAgIGlmIChuID4gbWF4
TnVtZXJpY0tleSkKKyAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBtYXhOdW1lcmljS2V5ICsgMTsKK30KKworYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5z
YWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCksIHZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMZXZl
bERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2Fz
dDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisgICAg
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkp
OworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5J
REJLZXkoKSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxp
ZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29u
c3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisgICAgICAgIE9iamVjdFN0b3JlRGF0
YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwg
bGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAgICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBkYXRhS2V5LnVzZXJLZXkoKTsKKworICAgICAgICBpbnQ2NF90
IHZlcnNpb247CisgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVl
KCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgICAgICBpZiAoIXEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPExldmVsREJSZWNv
cmRJZGVudGlmaWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2Rl
SURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lvbik7CisgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9
IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaWYgKCFjYWxs
YmFjay5jYWxsYmFjayhyaS5nZXQoKSwgaWRiVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjaGVja0lu
ZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9y
PGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEluZGV4TWV0YURh
dGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0YURhdGFLZXk6
OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkp
OworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7CisgICAgaWYgKG1ldGFEYXRhS2V5LmluZGV4SWQo
KSAhPSBpbmRleElkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5
Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZl
Y3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpCit7CisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIDAsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsK
KworICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE5hbWVz
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE11bHRp
RW50cnlGbGFncy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQg
PSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKKyAgICB3
aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwg
MCkgeworICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAg
IGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIEluZGV4TWV0
YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNv
ZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAg
ICBpbnQ2NF90IGluZGV4SWQgPSBtZXRhRGF0YUtleS5pbmRleElkKCk7CisgICAgICAgIEFTU0VS
VCghbWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpOworCisgICAgICAgIFN0cmluZyBpbmRleE5h
bWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkp
OworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCisgICAgICAgIGlmICghY2hl
Y2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCAxKSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2Rl
L2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgorICAgICAgICBib29sIGluZGV4VW5pcXVlID0g
Kml0LT52YWx1ZSgpLmJlZ2luKCk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8ga2V5UGF0aAor
ICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwg
aW5kZXhJZCwgMikpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJp
bmcga2V5UGF0aCA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUo
KS5lbmQoKSk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBtdWx0aUVudHJ5
IGZsYWcKKyAgICAgICAgYm9vbCBpbmRleE11bHRpRW50cnkgPSBmYWxzZTsKKyAgICAgICAgaWYg
KGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgMykp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9y
IGJvb2xzLgorICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gKml0LT52YWx1ZSgpLmJlZ2lu
KCk7CisgICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgZm91bmRJ
ZHMuYXBwZW5kKGluZGV4SWQpOworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChpbmRleE5hbWUp
OworICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChrZXlQYXRoKTsKKyAgICAgICAgZm91bmRV
bmlxdWVGbGFncy5hcHBlbmQoaW5kZXhVbmlxdWUpOworICAgICAgICBmb3VuZE11bHRpRW50cnlG
bGFncy5hcHBlbmQoaW5kZXhNdWx0aUVudHJ5KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQ2NF90
IGdldE5ld0luZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgaW50NjRfdCBtYXhJbmRl
eElkID0gLTE7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7Cisg
ICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQpKQor
ICAgICAgICBtYXhJbmRleElkID0ga01pbmltdW1JbmRleElkOworCisgICAgQVNTRVJUKG1heElu
ZGV4SWQgPj0gMCk7CisKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtYXhJbmRleElkICsgMTsKKyAg
ICBpZiAoIXB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCkpCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBpbmRleElkOworfQorCitib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5k
ZXhJZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgaWYgKGluZGV4SWQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIDEpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIDIpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDMp
OworCisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
bmFtZUtleSwgbmFtZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgdW5pcXVlS2V5LCBp
c1VuaXF1ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBv
ayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5
UGF0aCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9
IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbXVsdGlFbnRyeUtleSwgaXNNdWx0
aUVudHJ5KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiB1bmlx
dWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgMSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBJbmRl
eE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
Mik7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUobmFtZUtleSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZSh1
bmlxdWVLZXkpKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0
aW9uLT5yZW1vdmUoa2V5UGF0aEtleSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGluZGV4RGF0YVN0YXJ0ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGluZGV4RGF0YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0YUVuZCkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4
RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpbmRleElkID49
IGtNaW5pbXVtSW5kZXhJZCk7CisgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlE
QktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKworICAg
IFZlY3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERC
UmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CisgICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisKKyAgICByZXR1cm4gbV9jdXJyZW50VHJh
bnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOworfQorCitzdGF0aWMgYm9vbCBmaW5k
R3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCit7
CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBpdC0+c2Vlayh0YXJnZXQpOworCisgICAgaWYgKCFpdC0+aXNWYWxpZCgp
KSB7CisgICAgICAgIGl0LT5zZWVrVG9MYXN0KCk7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aGlsZSAoY29tcGFy
ZUluZGV4S2V5cyhpdC0+a2V5KCksIHRhcmdldCkgPiAwKSB7CisgICAgICAgIGl0LT5wcmV2KCk7
CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGZvdW5kS2V5LmNsZWFyKCk7CisgICAgICAgIGZv
dW5kS2V5LmFwcGVuZChpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpIC0gaXQtPmtl
eSgpLmJlZ2luKCkpOworCisgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzZXZlcmFsIGluZGV4IGtl
eXMgdGhhdCBjb21wYXJlIGVxdWFsLiBXZSB3YW50IHRoZSBsYXN0IG9uZS4KKyAgICAgICAgaXQt
Pm5leHQoKTsKKyAgICB9IHdoaWxlIChpdC0+aXNWYWxpZCgpICYmICFjb21wYXJlSW5kZXhLZXlz
KGl0LT5rZXkoKSwgdGFyZ2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwgaW50
NjRfdCwgaW50NjRfdCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0ZSBpbmRleCBk
YXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgorICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiBrZXkpCit7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGdl
dFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXkpOworICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
ICpwcmltYXJ5S2V5KTsKK30KKworc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmlt
YXJ5S2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKKyAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRh
dGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEu
YmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKK30KKworc3RhdGljIGJvb2wgZmluZEtl
eUluSW5kZXgoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKK3sKKyAgICBBU1NF
UlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOworCisgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsobGV2ZWxkYktl
eSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMoaXQtPmtl
eSgpLCBsZXZlbGRiS2V5KSA+IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaW50NjRfdCB2ZXJzaW9uOworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKKyAgICAg
ICAgaWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3VuZEVuY29k
ZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOworCisgICAgICAg
IGlmICghdmVyc2lvbkV4aXN0cyh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgICAgIC8vIERl
bGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIGl0LT5uZXh0KCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQo
bV9jdXJyZW50VHJhbnNhY3Rpb24pOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXk7CisgICAgaWYgKGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXkpKSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7CisgICAg
ICAgIGRlY29kZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5j
b2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOworICAgICAgICByZXR1cm4gcHJpbWFy
eUtleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQoreworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFy
eUtleTsKKyAgICBpZiAoIWZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpbmRleEtleSwgZm91bmRFbmNv
ZGVkUHJpbWFyeUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlY29kZUlEQktl
eShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXku
ZW5kKCksIGZvdW5kUHJpbWFyeUtleSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFj
ZSB7CisKK3N0cnVjdCBDdXJzb3JPcHRpb25zIHsKKyAgICBWZWN0b3I8Y2hhcj4gbG93S2V5Owor
ICAgIGJvb2wgbG93T3BlbjsKKyAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAgICBib29sIGhp
Z2hPcGVuOworICAgIGJvb2wgZm9yd2FyZDsKKyAgICBib29sIHVuaXF1ZTsKK307CisKK2NsYXNz
IEN1cnNvckltcGxDb21tb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgeworcHVi
bGljOgorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBib29sIGNv
bnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3Vy
cmVudFJvdygpID0gMDsKKyAgICBib29sIGZpcnN0U2VlaygpOworCitwcm90ZWN0ZWQ6CisgICAg
Q3Vyc29ySW1wbENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBD
dXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCisgICAg
eworICAgIH0KKworICAgIEN1cnNvckltcGxDb21tb24oY29uc3QgQ3Vyc29ySW1wbENvbW1vbiog
b3RoZXIpCisgICAgICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKKyAg
ICAgICAgLCBtX2N1cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykKKyAgICAgICAg
LCBtX2N1cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKKyAgICB7CisgICAgICAgIGlmIChv
dGhlci0+bV9pdGVyYXRvcikgeworICAgICAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRv
ci0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+
bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5p
c1ZhbGlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVh
bCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9CisKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJh
bnNhY3Rpb247CisgICAgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7CisgICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJl
bnRLZXk7Cit9OworCitib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCit7CisgICAg
bV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICBpZiAo
bV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCisgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9jdXJz
b3JPcHRpb25zLmxvd0tleSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1f
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCFt
X2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMu
aGlnaEtleSkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1f
Y3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29t
cGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkp
ID4gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2N1cnNvck9w
dGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3
YXJkICYmICFtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1f
Y3Vyc29yT3B0aW9ucy5sb3dPcGVuKSB7CisgICAgICAgICAgICAvLyBsb3dLZXkgbm90IGluY2x1
ZGVkIGluIHRoZSByYW5nZS4KKyAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKSB7CisgICAgICAgICAg
ICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndh
cmQgJiYgbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuKSB7CisgICAgICAgICAgICAvLyBoaWdoS2V5
IG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UuCisgICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIHsK
KyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxvYWRDdXJy
ZW50Um93KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKKyAg
ICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ3Vyc29y
SW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSkKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBzaGFyZXMgYSBsb3Qgb2YgY29kZSB3aXRoIGZpcnN0U2Vlay4KKyAgICBS
ZWZQdHI8SURCS2V5PiBwcmV2aW91c0tleSA9IG1fY3VycmVudEtleTsKKworICAgIGZvciAoOzsp
IHsKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgbV9p
dGVyYXRvci0+bmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2l0ZXJhdG9yLT5w
cmV2KCk7CisKKyAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IHRyYXNoOworICAgICAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gpKQorICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAm
JiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9y
LT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIC8vIGhpZ2gga2V5IG5vdCBp
bmNsdWRlZCBpbiByYW5nZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBj
b21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtl
eSkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29y
T3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJbmRl
eEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDApIC8v
IGxvdyBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9u
cy5sb3dPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29y
T3B0aW9ucy5sb3dLZXkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoIWxvYWRDdXJyZW50Um93KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoa2V5KSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtleSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtleS5nZXQoKSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy51bmlxdWUgJiYgbV9jdXJyZW50S2V5LT5pc0VxdWFsKHBy
ZXZpb3VzS2V5LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBPYmplY3RTdG9yZUN1cnNv
ckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0aGlzKSk7CisgICAgfQorCisgICAg
Ly8gQ3Vyc29ySW1wbENvbW1vbgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4g
bV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cigpIE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0K
KyAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitwcml2
YXRlOgorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IEN1
cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0K
KworICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUN1cnNvckltcGwq
IG90aGVyKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgICwgbV9j
dXJyZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBT
dHJpbmcgbV9jdXJyZW50VmFsdWU7CisgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVy
PiBtX2lkZW50aWZpZXI7Cit9OworCitib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdp
bigpOworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7
CisKKyAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OworICAgIHAgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtl
eSk7CisgICAgQVNTRVJUKHApOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKKworICAg
IGludDY0X3QgdmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRl
cmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lv
bik7CisgICAgQVNTRVJUKHEpOworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRy
eSBhbmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworCisgICAg
bV9jdXJyZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQo
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDog
cHVibGljIEN1cnNvckltcGxDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29y
T3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bmRleEtleUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIEN1cnNvckltcGxDb21t
b24KKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToK
KyAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bmRleEtleUN1cnNvckltcGwoY29uc3QgSW5kZXhLZXlDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAg
ICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhl
ci0+bV9wcmltYXJ5S2V5KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBtX3By
aW1hcnlLZXk7Cit9OworCitib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3co
KQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOworICAg
IGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisgICAgSW5k
ZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUocCwg
a2V5TGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0gaW5kZXhEYXRh
S2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKKyAgICBjb25z
dCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9p
dGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHEp
OworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcSA9IGRlY29kZUlE
QktleShxLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOworICAgIEFT
U0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rv
cjxjaGFyPiBwcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGlu
ZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICpt
X3ByaW1hcnlLZXkpOworCisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmdldChwcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0
IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5k
ZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRv
ci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0
ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1
cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMpKTsKKyAgICB9
CisKKyAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gMDsgfQorICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToKKyAgICBJ
bmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleEN1cnNv
ckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5
KQorICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAgICAgICwgbV9wcmltYXJ5
TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5OworICAgIFN0cmluZyBtX3ZhbHVlOworICAg
IFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OworfTsKKworYm9vbCBJbmRleEN1cnNv
ckltcGw6OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyICpwID0gbV9pdGVyYXRv
ci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyICpsaW1pdCA9IG1faXRlcmF0b3ItPmtl
eSgpLmVuZCgpOworCisgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5k
ZXhEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJy
ZW50S2V5ID0gaW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGNvbnN0IGNoYXIgKnEgPSBt
X2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciAqdmFsdWVMaW1pdCA9
IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCk7CisKKyAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNp
b247CisgICAgcSA9IGRlY29kZVZhckludChxLCB2YWx1ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9u
KTsKKyAgICBBU1NFUlQocSk7CisgICAgaWYgKCFxKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcSA9IGRlY29kZUlEQktleShxLCB2YWx1ZUxpbWl0LCBtX3ByaW1hcnlLZXkpOworICAgIEFT
U0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcHJp
bWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXku
ZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5
KTsKKworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5n
ZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHQg
PSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVE
YXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVy
c2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV92YWx1ZSA9IGRlY29kZVN0
cmluZyh0LCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK1Bhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JP
cHRpb25zIGN1cnNvck9wdGlvbnM7CisKKyAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+bG93ZXIoKTsKKyAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBw
ZXIoKTsKKyAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Cisg
ICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9O
T19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUp
OworCisgICAgaWYgKCFsb3dlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bWluSURCS2V5KCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSB0cnVlOyAvLyBO
b3QgaW5jbHVkZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAq
cmFuZ2UtPmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+
bG93ZXJPcGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1
cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBpZiAoY3Vyc29yT3B0
aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHRydWU7
IC8vIE5vdCBpbmNsdWRlZC4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVk
IGEga2V5IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNz
VGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGln
aEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5nZS0+dXBwZXIo
KSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7
CisKKyAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAgICAgICAgIC8v
IEZvciByZXZlcnNlIGN1cnNvcnMsIHdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OworICAgICAgICAgICAgaWYgKCFmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRl
IHRoYXQuCisgICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJl
SW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAg
ICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOworCisgICAgICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9y
ZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0
aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JP
cHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPmxvd2VyKCk7CisgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVy
KCk7CisgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOworICAg
IGN1cnNvck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsK
KworICAgIGlmICghbG93ZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9
IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsgLy8gSW5jbHVk
ZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2Ut
Pmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJP
cGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9w
dGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0g
ZmFsc2U7IC8vIEluY2x1ZGVkLgorCisgICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJk
KSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgKnJhbmdlLT51cHBlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJh
bmdlLT51cHBlck9wZW4oKTsKKworICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5Owor
ICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBT
ZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAg
ICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNo
b3VsZCBpbmNsdWRlIHRoYXQuCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYm
IGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwg
MCkKKyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKworICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgfQorCisgICAgUmVm
UHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVh
dGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIGlmICgh
Y3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3Vy
c29yLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25z
OworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJv
b2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOworICAgIGN1cnNvck9wdGlv
bnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8
fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKKyAgICBjdXJzb3JPcHRpb25zLnVuaXF1
ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7CisKKyAgICBpZiAoIWxvd2VyQm91
bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29k
ZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAgICAgICAgY3Vy
c29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsKKyAgICAgICAg
Y3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOworICAgIH0KKworICAg
IGlmICghdXBwZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRl
eERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
KTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4K
KworICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5
IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9y
RXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7
CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisK
KyAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKKyAgICAgICAgaWYgKCFmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtl
eSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJldHVybiAwOwor
CisgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1
dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0Lgor
ICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKGZv
dW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAgICAgICAgICBjdXJz
b3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7CisKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
S2V5ID0gZm91bmRIaWdoS2V5OworICAgIH0KKworICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+
IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRl
KHRoaXMpOworfQorCitQYXNzUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkxldmVs
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkpOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQoreworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCit7CisgICAgQVNT
RVJUKCFtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2lu
Z1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50
VHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFu
c2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5j
bGVhcigpOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4
aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcGF0aEJhc2VBcmcpCit7CisgICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VB
cmc7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBzYW1lIExldmVs
REIgZGF0YWJhc2UgZm9yIGFsbCBvcmlnaW5zLgorICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CisKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBj
aGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgdGhlIGRvbWFpbiwgbm90IHRoZSBkYXRhYmFzZSBpdHNl
bGYKKyAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxE
QikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKK2Ns
YXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2NsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJh
c2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCop
OworICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZs
YWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0
QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKworICAgIHZpcnR1
YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRV
bmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7CisgICAgdmly
dHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBp
c1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2Jq
ZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
PiBjcmVhdGVUcmFuc2FjdGlvbigpOworCisgICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhp
c3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBh
dGhCYXNlKTsKKworcHJpdmF0ZToKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZl
bERCRGF0YWJhc2U+KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElE
QkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxMZXZlbERCRGF0YWJh
c2U+IG1fZGI7CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Cisg
ICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAg
ICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW4oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcm9sbGJhY2soKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxl
dmVsREJCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9i
YWNraW5nU3RvcmU7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisj
ZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNlbmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNv
ZGluZy5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQorCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCisvLyBMZXZlbERCIHN0b3JlcyBrZXkvdmFsdWUgcGFpcnMu
IEtleXMgYW5kIHZhbHVlcyBhcmUgc3RyaW5ncyBvZiBieXRlcywgbm9ybWFsbHkgb2YgdHlwZSBW
ZWN0b3I8Y2hhcj4uCisvLworLy8gVGhlIGtleXMgaW4gdGhlIGJhY2tpbmcgc3RvcmUgYXJlIHZh
cmlhYmxlLWxlbmd0aCB0dXBsZXMgd2l0aCBkaWZmZXJlbnQgdHlwZXMKKy8vIG9mIGZpZWxkcy4g
RWFjaCBrZXkgaW4gdGhlIGJhY2tpbmcgc3RvcmUgc3RhcnRzIHdpdGggYSB0ZXJuYXJ5IHByZWZp
eDogKGRhdGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkKS4gRm9yIGVhY2gsIDAg
aXMgcmVzZXJ2ZWQgZm9yIG1ldGEtZGF0YS4KKy8vIFRoZSBwcmVmaXggbWFrZXMgc3VyZSB0aGF0
IGRhdGEgZm9yIGEgc3BlY2lmaWMgZGF0YWJhc2UsIG9iamVjdCBzdG9yZSwgYW5kIGluZGV4IGFy
ZSBncm91cGVkIHRvZ2V0aGVyLiBUaGUgbG9jYWxpdHkgaXMgaW1wb3J0YW50IGZvciBwZXJmb3Jt
YW5jZTogY29tbW9uCisvLyBvcGVyYXRpb25zIHNob3VsZCBvbmx5IG5lZWQgYSBtaW5pbWFsIG51
bWJlciBvZiBzZWVrIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBhbGwgdGhlIG1ldGEtZGF0YSBm
b3IgYSBkYXRhYmFzZSBpcyBncm91cGVkIHRvZ2V0aGVyIHNvIHRoYXQgcmVhZGluZyB0aGF0Cisv
LyBtZXRhLWRhdGEgb25seSByZXF1aXJlcyBvbmUgc2Vlay4KKy8vCisvLyBFYWNoIGtleSB0eXBl
IGhhcyBhIGNsYXNzIChpbiBzcXVhcmUgYnJhY2tldHMgYmVsb3cpIHdoaWNoIGtub3dzIGhvdyB0
byBlbmNvZGUsIGRlY29kZSwgYW5kIGNvbXBhcmUgdGhhdCBrZXkgdHlwZS4KKy8vCisvLyBHbG9i
YWwgbWV0YS1kYXRhIGhhdmUga2V5cyB3aXRoIHByZWZpeCAoMCwwLDApLCBmb2xsb3dlZCBieSBh
IHR5cGUgYnl0ZToKKy8vCisvLyAgICAgPDAsIDAsIDAsIDA+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0+IEluZGV4ZWREQi9MZXZlbERCIHNjaGVtYSB2ZXJzaW9u
ICgwIGZvciBub3cpIFtTY2hlbWFWZXJzaW9uS2V5XQorLy8gICAgIDwwLCAwLCAwLCAxPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUaGUgbWF4aW11bSBkYXRh
YmFzZSBpZCBldmVyIGFsbG9jYXRlZCBbTWF4RGF0YWJhc2VJZEtleV0KKy8vICAgICA8MCwgMCwg
MCwgMTAwLCBkYXRhYmFzZSBpZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gRXhpc3Rl
bmNlIGltcGxpZXMgdGhlIGRhdGFiYXNlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW0RhdGFiYXNl
RnJlZUxpc3RLZXldCisvLyAgICAgPDAsIDAsIDAsIDIwMSwgdXRmMTYgb3JpZ2luIG5hbWUsIHV0
ZjE2IGRhdGFiYXNlIG5hbWU+ID0+IERhdGFiYXNlIGlkIFtEYXRhYmFzZU5hbWVLZXldCisvLwor
Ly8KKy8vIERhdGFiYXNlIG1ldGEtZGF0YToKKy8vCisvLyAgICAgQWdhaW4sIHRoZSBwcmVmaXgg
aXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgMD4gPT4gdXRmMTYgb3JpZ2luIG5hbWUgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCAxPiA9PiB1dGYxNiBkYXRhYmFzZSBuYW1lIFtEYXRhYmFzZU1l
dGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMj4gPT4gdXRmMTYgdXNlciB2
ZXJzaW9uIGRhdGEgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCAzPiA9PiBtYXhpbXVtIG9iamVjdCBzdG9yZSBpZCBldmVyIGFsbG9jYXRlZCBbRGF0YWJh
c2VNZXRhRGF0YUtleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIG1ldGEtZGF0YToKKy8vCisv
LyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiBhIHZhcmlh
YmxlLWxlbmd0aCBpbnRlZ2VyLCBhbmQgdGhlbiBhbm90aGVyIHZhcmlhYmxlLWxlbmd0aCBpbnRl
Z2VyIChGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBieXRlKS4KKy8vCisvLyAgICAgPGRhdGFiYXNl
IGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAwPiA9PiB1dGYxNiBvYmplY3Qgc3RvcmUg
bmFtZSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAs
IDUwLCBvYmplY3Qgc3RvcmUgaWQsIDE+ID0+IHV0ZjE2IGtleSBwYXRoIFtPYmplY3RTdG9yZU1l
dGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBp
ZCwgMj4gPT4gaGFzIGF1dG8gaW5jcmVtZW50IFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8g
ICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMz4gPT4gaXMgZXZp
Y3RhYmxlIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgND4gPT4gbGFzdCAidmVyc2lvbiIgbnVtYmVyIFtPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVj
dCBzdG9yZSBpZCwgNT4gPT4gbWF4aW11bSBpbmRleCBpZCBldmVyIGFsbG9jYXRlZCBbT2JqZWN0
U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qg
c3RvcmUgaWQsIDY+ID0+IGhhcyBrZXkgcGF0aCAodnMuIG51bGwpIFtPYmplY3RTdG9yZU1ldGFE
YXRhS2V5XQorLy8KKy8vCisvLyBJbmRleCBtZXRhLWRhdGE6CisvLworLy8gICAgIFRoZSBwcmVm
aXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gdHdvIHZhcmlhYmxlLWxlbmd0aCBp
bnRlZ2VycywgYW5kIHRoZW4gYW5vdGhlciB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFz
ZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAwPiA9PiB1dGYxNiBp
bmRleCBuYW1lIFtJbmRleE1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwg
MTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAxPiA9PiBhcmUgaW5kZXgga2V5cyB1bmlx
dWUgW0luZGV4TWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9i
amVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDI+ID0+IHV0ZjE2IGtleSBwYXRoIFtJbmRleE1ldGFE
YXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQs
IGluZGV4IGlkLCAzPiA9PiBpcyBpbmRleCBtdWx0aS1lbnRyeSBbSW5kZXhNZXRhRGF0YUtleV0K
Ky8vCisvLworLy8gT3RoZXIgb2JqZWN0IHN0b3JlIGFuZCBpbmRleCBtZXRhLWRhdGE6CisvLwor
Ly8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSBvYmplY3Qg
c3RvcmUgYW5kIGluZGV4IGlkIGFyZSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlcnMsIHRoZSB1dGYx
NiBzdHJpbmdzIGFyZSB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncy4KKy8vCisvLyAgICAgPGRhdGFi
YXNlIGlkLCAwLCAwLCAxNTAsIG9iamVjdCBzdG9yZSBpZD4gICAgICAgICAgICAgICAgICAgPT4g
ZXhpc3RlbmNlIGltcGxpZXMgdGhlIG9iamVjdCBzdG9yZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0
IFtPYmplY3RTdG9yZUZyZWVMaXN0S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTUx
LCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkPiAgICAgICAgID0+IGV4aXN0ZW5jZSBpbXBsaWVz
IHRoZSBpbmRleCBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtJbmRleEZyZWVMaXN0S2V5XQorLy8g
ICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMjAwLCB1dGYxNiBvYmplY3Qgc3RvcmUgbmFtZT4gICAg
ICAgICAgID0+IG9iamVjdCBzdG9yZSBpZCBbT2JqZWN0U3RvcmVOYW1lc0tleV0KKy8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDIwMSwgb2JqZWN0IHN0b3JlIGlkLCB1dGYxNiBpbmRleCBuYW1l
PiA9PiBpbmRleCBpZCBbSW5kZXhOYW1lc0tleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIGRh
dGE6CisvLworLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRo
ZSB1c2VyIGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlk
LCBvYmplY3Qgc3RvcmUgaWQsIDEsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIsIHNlcmlhbGl6ZWQg
c2NyaXB0IHZhbHVlIFtPYmplY3RTdG9yZURhdGFLZXldCisvLworLy8KKy8vICJFeGlzdHMiIGVu
dHJ5OgorLy8KKy8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBU
aGUgdXNlciBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCisvLworLy8gICAgIDxkYXRhYmFzZSBp
ZCwgb2JqZWN0IHN0b3JlIGlkLCAyLCB1c2VyIGtleT4gPT4gInZlcnNpb24iIFtFeGlzdHNFbnRy
eUtleV0KKy8vCisvLworLy8gSW5kZXggZGF0YToKKy8vCisvLyAgICAgVGhlIHByZWZpeCBpcyBm
b2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIGluZGV4IGtleSBpcyBhbiBlbmNvZGVkIElEQktl
eS4gVGhlIHNlcXVlbmNlIG51bWJlciBpcyBhIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VyLgorLy8g
ICAgIFRoZSBwcmltYXJ5IGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRh
dGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCBpbmRleCBrZXksIHNlcXVlbmNl
IG51bWJlciwgcHJpbWFyeSBrZXk+ID0+ICJ2ZXJzaW9uIiwgcHJpbWFyeSBrZXkgW0luZGV4RGF0
YUtleV0KKy8vCisvLyAgICAgKFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgb2Jzb2xldGU7IGl0IHdh
cyB1c2VkIHRvIGFsbG93IHR3byBlbnRyaWVzIHdpdGgKKy8vICAgICB0aGUgc2FtZSB1c2VyIChp
bmRleCkga2V5IGluIG5vbi11bmlxdWUgaW5kZXhlcyBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9m
CisvLyAgICAgdGhlIHByaW1hcnkga2V5IGluIHRoZSBkYXRhLiBUaGUgInZlcnNpb24iIGZpZWxk
IGlzIHVzZWQgdG8gd2VlZCBvdXQgc3RhbGUKKy8vICAgICBpbmRleCBkYXRhLiBXaGVuZXZlciBu
ZXcgb2JqZWN0IHN0b3JlIGRhdGEgaXMgaW5zZXJ0ZWQsIGl0IGdldHMgYSBuZXcKKy8vICAgICAi
dmVyc2lvbiIgbnVtYmVyLCBhbmQgbmV3IGluZGV4IGRhdGEgaXMgd3JpdHRlbiB3aXRoIHRoaXMg
bnVtYmVyLiBXaGVuCisvLyAgICAgdGhlIGluZGV4IGlzIHVzZWQgZm9yIGxvb2stdXBzLCBlbnRy
aWVzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUKKy8vICAgICAiZXhpc3RzIiBlbnRyaWVzLCBh
bmQgcmVjb3JkcyB3aXRoIG9sZCAidmVyc2lvbiIgbnVtYmVycyBhcmUgZGVsZXRlZAorLy8gICAg
IHdoZW4gdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LAorLy8g
ICAgIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3csIGFuZCBJbmRleEtleUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KS4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElE
QkxldmVsREJDb2RpbmcgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TnVs
bFR5cGVCeXRlID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlTdHJpbmdU
eXBlQnl0ZSA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5RGF0ZVR5cGVC
eXRlID0gMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlOdW1iZXJUeXBlQnl0
ZSA9IDM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5QXJyYXlUeXBlQnl0ZSA9
IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TWluS2V5VHlwZUJ5dGUgPSA1
OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCA9
IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRXhpc3RzRW50cnlJbmRleElkID0gMjsK
Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga1NjaGVtYVZlcnNpb25UeXBlQnl0ZSA9IDA7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrTWF4RGF0YWJhc2VJZFR5cGVCeXRlID0gMTsK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZUZyZWVMaXN0VHlwZUJ5dGUgPSAx
MDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRGF0YWJhc2VOYW1lVHlwZUJ5dGUgPSAy
MDE7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZU1ldGFEYXRhVHlw
ZUJ5dGUgPSA1MDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleE1ldGFEYXRhVHlw
ZUJ5dGUgPSAxMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVGcmVl
TGlzdFR5cGVCeXRlID0gMTUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4RnJl
ZUxpc3RUeXBlQnl0ZSA9IDE1MTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RT
dG9yZU5hbWVzVHlwZUJ5dGUgPSAyMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5k
ZXhOYW1lc0tleVR5cGVCeXRlID0gMjAxOworCisjaWZuZGVmIElOVDY0X01BWAorI2RlZmluZSBJ
TlQ2NF9NQVggMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgK
KyNkZWZpbmUgSU5UMzJfTUFYIDB4N2ZmZmZmZmZMCisjZW5kaWYKKworCitWZWN0b3I8Y2hhcj4g
ZW5jb2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAg
di5hcHBlbmQoYyk7CisgICAgcmV0dXJuIHY7Cit9CisKK1ZlY3RvcjxjaGFyPiBtYXhJREJLZXko
KQoreworICAgIHJldHVybiBlbmNvZGVCeXRlKGtJREJLZXlOdWxsVHlwZUJ5dGUpOworfQorCitW
ZWN0b3I8Y2hhcj4gbWluSURCS2V5KCkKK3sKKyAgICByZXR1cm4gZW5jb2RlQnl0ZShrSURCS2V5
TWluS2V5VHlwZUJ5dGUpOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlSW50KGludDY0X3QgbikK
K3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTog
U2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFy
IGMgPSBuOworICAgICAgICByZXQuYXBwZW5kKGMpOworICAgICAgICBuID4+PSA4OworICAgIH0g
d2hpbGUgKG4pOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50NjRfdCBkZWNvZGVJbnQoY29u
c3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBBU1NFUlQoYmVnaW4gPD0g
ZW5kKTsKKyAgICBpbnQ2NF90IHJldCA9IDA7CisKKyAgICBpbnQgc2hpZnQgPSAwOworICAgIHdo
aWxlIChiZWdpbiA8IGVuZCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnaW4rKzsK
KyAgICAgICAgcmV0IHw9IHN0YXRpY19jYXN0PGludDY0X3Q+KGMpIDw8IHNoaWZ0OworICAgICAg
ICBzaGlmdCArPSA4OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg
Y29tcGFyZUludHMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgQVNTRVJUKGEgPj0gMCk7
CisgICAgQVNTRVJUKGIgPj0gMCk7CisKKyAgICBpbnQ2NF90IGRpZmYgPSBhIC0gYjsKKyAgICBp
ZiAoZGlmZiA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZGlmZiA+IDApCisgICAg
ICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlVmFy
SW50KGludDY0X3QgbikKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTogU2l6ZSB0
aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBu
ICYgMHg3ZjsKKyAgICAgICAgbiA+Pj0gNzsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBj
IHw9IDB4ODA7CisgICAgICAgIHJldC5hcHBlbmQoYyk7CisgICAgfSB3aGlsZSAobik7CisKKyAg
ICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyKiBkZWNvZGVWYXJJbnQoY29uc3QgY2hhciAq
cCwgY29uc3QgY2hhciogbGltaXQsIGludDY0X3QmIGZvdW5kSW50KQoreworICAgIEFTU0VSVChs
aW1pdCA+PSBwKTsKKyAgICBmb3VuZEludCA9IDA7CisgICAgaW50IHNoaWZ0ID0gMDsKKworICAg
IGRvIHsKKyAgICAgICAgaWYgKHAgPj0gbGltaXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqcDsKKyAgICAgICAgZm91bmRJbnQgfD0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oYyAmIDB4N2YpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSA3Owor
ICAgIH0gd2hpbGUgKCpwKysgJiAweDgwKTsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNo
YXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit7CisgICAgVmVjdG9yPGNoYXI+IHJl
dDsgLy8gRklYTUU6IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4KKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgdSA9IHNbaV07Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSB1ID4+IDg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
bG8gPSB1OworICAgICAgICByZXQuYXBwZW5kKGhpKTsKKyAgICAgICAgcmV0LmFwcGVuZChsbyk7
CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworU3RyaW5nIGRlY29kZVN0cmluZyhjb25z
dCBjaGFyKiBwLCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgQVNTRVJUKGVuZCA+PSBwKTsKKyAg
ICBBU1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7CisKKyAgICBzaXplX3QgbGVuID0gKGVuZCAtIHAp
IC8gMjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KGxlbik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgaGkgPSAqcCsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0g
KnArKzsKKworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoaGkgPDwg
OCkgfCBsbykpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwor
VmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIFZlY3RvcjxjaGFyPiByZXQgPSBlbmNvZGVWYXJJbnQocy5sZW5ndGgoKSk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVTdHJpbmcocykpOworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNo
YXIqIGRlY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGlt
aXQsIFN0cmluZyYgZm91bmRTdHJpbmcpCit7CisgICAgQVNTRVJUKGxpbWl0ID49IHApOworICAg
IGludDY0X3QgbGVuOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbik7CisgICAg
aWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocCArIGxlbiAqIDIgPiBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0cmluZyhwLCBw
ICsgbGVuICogMik7CisgICAgcCArPSBsZW4gKiAyOworICAgIHJldHVybiBwOworfQorCitpbnQg
Y29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hh
ciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKQoreworICAgIEFT
U0VSVCgmcCAhPSAmcSk7CisgICAgQVNTRVJUKGxpbWl0UCA+PSBwKTsKKyAgICBBU1NFUlQobGlt
aXRRID49IHEpOworICAgIGludDY0X3QgbGVuUCwgbGVuUTsKKyAgICBwID0gZGVjb2RlVmFySW50
KHAsIGxpbWl0UCwgbGVuUCk7CisgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1pdFEsIGxlblEp
OworICAgIEFTU0VSVChwICYmIHEpOworICAgIEFTU0VSVChsZW5QID49IDApOworICAgIEFTU0VS
VChsZW5RID49IDApOworICAgIEFTU0VSVChwICsgbGVuUCAqIDIgPD0gbGltaXRQKTsKKyAgICBB
U1NFUlQocSArIGxlblEgKiAyIDw9IGxpbWl0USk7CisKKyAgICBjb25zdCBjaGFyKiBzdGFydFAg
PSBwOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0USA9IHE7CisgICAgcCArPSBsZW5QICogMjsKKyAg
ICBxICs9IGxlblEgKiAyOworCisgICAgaWYgKHAgPiBsaW1pdFAgfHwgcSA+IGxpbWl0USkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBzaXplX3QgbG1pbiA9IHN0YXRpY19jYXN0PHNp
emVfdD4obGVuUCA8IGxlblEgPyBsZW5QIDogbGVuUSk7CisgICAgaWYgKGludCB4ID0gbWVtY21w
KHN0YXJ0UCwgc3RhcnRRLCBsbWluICogMikpCisgICAgICAgIHJldHVybiB4OworCisgICAgaWYg
KGxlblAgPT0gbGVuUSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKGxlblAgPiBs
ZW5RKSA/IDEgOiAtMTsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZURvdWJsZShkb3VibGUgeCkK
K3sKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBiZSBieXRlIG9y
ZGVyIGluZGVwZW5kZW50LgorICAgIGNvbnN0IGNoYXIqIHAgPSByZWludGVycHJldF9jYXN0PGNo
YXIqPigmeCk7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQocCwgc2l6ZW9mKHgp
KTsKKyAgICBBU1NFUlQodi5zaXplKCkgPT0gc2l6ZW9mKHgpKTsKKyAgICByZXR1cm4gdjsKK30K
KworY29uc3QgY2hhciogZGVjb2RlRG91YmxlKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxp
bWl0LCBkb3VibGUqIGQpCit7CisgICAgaWYgKHAgKyBzaXplb2YoKmQpID4gbGltaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgY2hhciogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGQp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCpkKTsgKytpKQorICAgICAgICAq
eCsrID0gKnArKzsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktl
eShjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OworICAgIGVuY29k
ZUlEQktleShrZXksIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBlbmNvZGVJREJL
ZXkoY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgaW50bykKK3sKKyAgICBzaXplX3Qg
cHJldmlvdXNTaXplID0gaW50by5zaXplKCk7CisgICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Cisg
ICAgY2FzZSBJREJLZXk6OkludmFsaWRUeXBlOgorICAgIGNhc2UgSURCS2V5OjpNaW5UeXBlOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2Rl
Qnl0ZShrSURCS2V5TnVsbFR5cGVCeXRlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElE
QktleTo6QXJyYXlUeXBlOgorICAgICAgICB7CisgICAgICAgICAgICBpbnRvLmFwcGVuZChlbmNv
ZGVCeXRlKGtJREJLZXlBcnJheVR5cGVCeXRlKSk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0ga2V5LmFycmF5KCkuc2l6ZSgpOworICAgICAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlVmFy
SW50KGxlbmd0aCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgICAgICAgICBlbmNvZGVJREJLZXkoKmtleS5hcnJheSgpW2ldLCBpbnRv
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSA+
IHByZXZpb3VzU2l6ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURC
S2V5U3RyaW5nVHlwZUJ5dGUpKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlU3RyaW5nV2l0
aExlbmd0aChrZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1Np
emUsIGludG8uc2l6ZSgpID4gcHJldmlvdXNTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSURCS2V5OjpEYXRlVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURC
S2V5RGF0ZVR5cGVCeXRlKSk7CisgICAgICAgIGludG8uYXBwZW5kKGVuY29kZURvdWJsZShrZXku
ZGF0ZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUo
KSAtIHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSURCS2V5
OjpOdW1iZXJUeXBlOgorICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJREJLZXlOdW1i
ZXJUeXBlQnl0ZSkpOworICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUoa2V5Lm51bWJl
cigpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSAt
IHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2NvbnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBj
aGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5KQorewor
ICAgIEFTU0VSVChsaW1pdCA+PSBwKTsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgICAgICBmb3VuZEtleSA9
IElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAgICByZXR1cm4gcDsKKworICAgIGNhc2Ug
a0lEQktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDY0X3QgbGVu
Z3RoOworICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
SURCS2V5OjpLZXlBcnJheSBhcnJheTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICAgICAgICAgICAgICBwID0g
ZGVjb2RlSURCS2V5KHAsIGxpbWl0LCBrZXkpOworICAgICAgICAgICAgICAgIGlmICghcCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5k
KGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3Jl
YXRlQXJyYXkoYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICBj
YXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5n
IHM7CisgICAgICAgICAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcyk7
CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHMpOworICAgICAgICAgICAgcmV0
dXJuIHA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgcCA9IGRlY29kZURvdWJsZShw
LCBsaW1pdCwgJmQpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUoZCk7CisgICAg
ICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVC
eXRlOgorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgIHAgPSBk
ZWNvZGVEb3VibGUocCwgbGltaXQsICZkKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVO
dW1iZXIoZCk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyKiBl
eHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQs
IFZlY3RvcjxjaGFyPiogcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOworICAgIGNvbnN0
IGNoYXIqIHAgPSBzdGFydDsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgIGNhc2Uga0lEQktleU1pbktleVR5
cGVCeXRlOgorICAgICAgICAqcmVzdWx0ID0gZW5jb2RlQnl0ZSh0eXBlKTsKKyAgICAgICAgcmV0
dXJuIHA7CisgICAgY2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50NjRfdCBsZW5ndGg7CisgICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxp
bWl0LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChzdGFydCwgcCAtIHN0YXJ0KTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewor
ICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBzdWJrZXk7CisgICAgICAgICAgICAgICAgcCA9
IGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGxpbWl0LCAmc3Via2V5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKKyAgICAgICAgICAgIHAgPSBkZWNvZGVW
YXJJbnQocCwgbGltaXQsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAocCArIGxlbmd0aCAqIDIgPiBsaW1pdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0YXJ0LCBwIC0gc3RhcnQgKyBsZW5ndGggKiAy
KTsKKyAgICAgICAgICAgIHJldHVybiBwICsgbGVuZ3RoICogMjsKKyAgICAgICAgfQorICAgIGNh
c2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToK
KyAgICAgICAgaWYgKHAgKyBzaXplb2YoZG91YmxlKSA+IGxpbWl0KQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQo
c3RhcnQsIDEgKyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHJldHVybiBwICsgc2l6ZW9mKGRv
dWJsZSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgSURCS2V5OjpUeXBlIGtleVR5cGVCeXRlVG9LZXlUeXBlKHVuc2lnbmVkIGNo
YXIgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtJREJLZXlOdWxsVHlw
ZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworICAgIGNhc2Uga0lE
QktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkFycmF5VHlwZTsKKyAg
ICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgcmV0dXJuIElEQktleTo6U3Ry
aW5nVHlwZTsKKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJ
REJLZXk6OkRhdGVUeXBlOworICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgorICAgICAg
ICByZXR1cm4gSURCS2V5OjpOdW1iZXJUeXBlOworICAgIGNhc2Uga0lEQktleU1pbktleVR5cGVC
eXRlOgorICAgICAgICByZXR1cm4gSURCS2V5OjpNaW5UeXBlOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworfQorCitp
bnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBsaW1p
dEEsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdEIpCit7CisgICAgQVNTRVJUKCZw
ICE9ICZxKTsKKyAgICBBU1NFUlQocCA8IGxpbWl0QSk7CisgICAgQVNTRVJUKHEgPCBsaW1pdEIp
OworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUEgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlw
ZUIgPSAqcSsrOworCisgICAgaWYgKGludCB4ID0gSURCS2V5Ojpjb21wYXJlVHlwZXMoa2V5VHlw
ZUJ5dGVUb0tleVR5cGUodHlwZUEpLCBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh0eXBlQikpKQorICAg
ICAgICByZXR1cm4geDsKKworICAgIHN3aXRjaCAodHlwZUEpIHsKKyAgICBjYXNlIGtJREJLZXlO
dWxsVHlwZUJ5dGU6CisgICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5dGU6CisgICAgICAgIC8v
IE51bGwgdHlwZSBvciBtYXggdHlwZTsgbm8gcGF5bG9hZCB0byBjb21wYXJlLgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQ2NF90IGxlbmd0aEEsIGxlbmd0aEI7CisgICAgICAgICAgICBwID0gZGVjb2Rl
VmFySW50KHAsIGxpbWl0QSwgbGVuZ3RoQSk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBxID0gZGVjb2RlVmFySW50KHEsIGxpbWl0
QiwgbGVuZ3RoQik7CisgICAgICAgICAgICBpZiAoIXEpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBpZiAobGVuZ3RoQSA8IDAgfHwgbGVuZ3RoQiA8IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCBs
ZW5ndGhBICYmIGkgPCBsZW5ndGhCOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IGNt
cCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwLCBsaW1pdEEsIHEsIGxpbWl0QikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjbXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bGVuZ3RoQSA8IGxlbmd0aEIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgaWYgKGxlbmd0aEEgPiBsZW5ndGhCKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBl
Qnl0ZToKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkU3RyaW5nc1dpdGhMZW5ndGgocCwg
bGltaXRBLCBxLCBsaW1pdEIpOworICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBj
YXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgZG91Ymxl
IGQsIGU7CisgICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxpbWl0QSwgJmQpOworICAg
ICAgICAgICAgQVNTRVJUKHApOworICAgICAgICAgICAgcSA9IGRlY29kZURvdWJsZShxLCBsaW1p
dEIsICZlKTsKKyAgICAgICAgICAgIEFTU0VSVChxKTsKKyAgICAgICAgICAgIGlmIChkIDwgZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoZCA+IGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitp
bnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5QSwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBrZXlCKQoreworICAgIEFTU0VSVChrZXlBLnNpemUoKSA+PSAxKTsKKyAg
ICBBU1NFUlQoa2V5Qi5zaXplKCkgPj0gMSk7CisKKyAgICBjb25zdCBjaGFyKiBwID0ga2V5QS5k
YXRhKCk7CisgICAgY29uc3QgY2hhciogbGltaXRBID0gcCArIGtleUEuc2l6ZSgpOworICAgIGNv
bnN0IGNoYXIqIHEgPSBrZXlCLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBsaW1pdEIgPSBxICsg
a2V5Qi5zaXplKCk7CisKKyAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKHAsIGxpbWl0
QSwgcSwgbGltaXRCKTsKK30KKworbmFtZXNwYWNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5
cGU+CitpbnQgZGVjb2RlQW5kQ29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExl
dmVsREJTbGljZSYgYikKK3sKKyAgICBLZXlUeXBlIGtleUE7CisgICAgS2V5VHlwZSBrZXlCOwor
CisgICAgY29uc3QgY2hhciogcHRyQSA9IEtleVR5cGU6OmRlY29kZShhLmJlZ2luKCksIGEuZW5k
KCksICZrZXlBKTsKKyAgICBBU1NFUlRfVU5VU0VEKHB0ckEsIHB0ckEpOworICAgIGNvbnN0IGNo
YXIqIHB0ckIgPSBLZXlUeXBlOjpkZWNvZGUoYi5iZWdpbigpLCBiLmVuZCgpLCAma2V5Qik7Cisg
ICAgQVNTRVJUX1VOVVNFRChwdHJCLCBwdHJCKTsKKworICAgIHJldHVybiBrZXlBLmNvbXBhcmUo
a2V5Qik7Cit9Cit9CisKK2ludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3Qg
TGV2ZWxEQlNsaWNlJiBiLCBib29sIGluZGV4S2V5cykKK3sKKyAgICBjb25zdCBjaGFyKiBwdHJB
ID0gYS5iZWdpbigpOworICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBiLmJlZ2luKCk7CisgICAgY29u
c3QgY2hhciogZW5kQSA9IGEuZW5kKCk7CisgICAgY29uc3QgY2hhciogZW5kQiA9IGIuZW5kKCk7
CisKKyAgICBLZXlQcmVmaXggcHJlZml4QTsKKyAgICBLZXlQcmVmaXggcHJlZml4QjsKKworICAg
IHB0ckEgPSBLZXlQcmVmaXg6OmRlY29kZShwdHJBLCBlbmRBLCAmcHJlZml4QSk7CisgICAgcHRy
QiA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckIsIGVuZEIsICZwcmVmaXhCKTsKKyAgICBBU1NFUlQo
cHRyQSk7CisgICAgQVNTRVJUKHB0ckIpOworCisgICAgaWYgKGludCB4ID0gcHJlZml4QS5jb21w
YXJlKHByZWZpeEIpKQorICAgICAgICByZXR1cm4geDsKKworICAgIGlmIChwcmVmaXhBLnR5cGUo
KSA9PSBLZXlQcmVmaXg6OmtHbG9iYWxNZXRhRGF0YSkgeworICAgICAgICBBU1NFUlQocHRyQSAh
PSBlbmRBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7CisKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciB0eXBlQnl0ZUEgPSAqcHRyQSsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlQiA9ICpwdHJCKys7CisKKyAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVBIC0gdHlwZUJ5
dGVCKQorICAgICAgICAgICAgcmV0dXJuIHg7CisKKyAgICAgICAgaWYgKHR5cGVCeXRlQSA8PSAx
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga0RhdGFi
YXNlRnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJl
PERhdGFiYXNlRnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtE
YXRhYmFzZU5hbWVUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJl
PERhdGFiYXNlTmFtZUtleT4oYSwgYik7CisgICAgfQorCisgICAgaWYgKHByZWZpeEEudHlwZSgp
ID09IEtleVByZWZpeDo6a0RhdGFiYXNlTWV0YURhdGEpIHsKKyAgICAgICAgQVNTRVJUKHB0ckEg
IT0gZW5kQSk7CisgICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOworCisgICAgICAgIHVuc2ln
bmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckErKzsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0eXBl
Qnl0ZUIgPSAqcHRyQisrOworCisgICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVC
eXRlQikKKyAgICAgICAgICAgIHJldHVybiB4OworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPD0g
MykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga09i
amVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
b21wYXJlPE9iamVjdFN0b3JlTWV0YURhdGFLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5
dGVBID09IGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ29tcGFyZTxJbmRleE1ldGFEYXRhS2V5PihhLCBiKTsKKyAgICAgICAgaWYgKHR5cGVCeXRl
QSA9PSBrT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKQorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVGcmVlTGlzdEtleT4oYSwgYik7CisgICAgICAgIGlm
ICh0eXBlQnl0ZUEgPT0ga0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDb21wYXJlPEluZGV4RnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAo
dHlwZUJ5dGVBID09IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9yZU5hbWVzS2V5PihhLCBiKTsKKyAgICAgICAg
aWYgKHR5cGVCeXRlQSA9PSBrSW5kZXhOYW1lc0tleVR5cGVCeXRlKQorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENvbXBhcmU8SW5kZXhOYW1lc0tleT4oYSwgYik7CisKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChw
cmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtPYmplY3RTdG9yZURhdGEpIHsKKyAgICAgICAg
aWYgKHB0ckEgPT0gZW5kQSAmJiBwdHJCID09IGVuZEIpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgaWYgKHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhp
cyBjYXNlIG9mIG5vbi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhh
bmRsZWQgdGhpcyB3YXkuCisKKyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8T2JqZWN0
U3RvcmVEYXRhS2V5PihhLCBiKTsKKyAgICB9CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtl
eVByZWZpeDo6a0V4aXN0c0VudHJ5KSB7CisgICAgICAgIGlmIChwdHJBID09IGVuZEEgJiYgcHRy
QiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChwdHJBID09IGVu
ZEEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChwdHJCID09IGVuZEIpCisg
ICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRoaXMgY2FzZSBvZiBub24tZXhpc3Rpbmcg
dXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5LgorCisgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPEV4aXN0c0VudHJ5S2V5PihhLCBiKTsKKyAgICB9
CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6a0luZGV4RGF0YSkgeworICAg
ICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1F
OiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8g
YmUgaGFuZGxlZCB0aGlzIHdheS4KKworICAgICAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5
QTsKKyAgICAgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleUI7CisKKyAgICAgICAgcHRyQSA9
IEluZGV4RGF0YUtleTo6ZGVjb2RlKGEuYmVnaW4oKSwgZW5kQSwgJmluZGV4RGF0YUtleUEpOwor
ICAgICAgICBwdHJCID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoYi5iZWdpbigpLCBlbmRCLCAmaW5k
ZXhEYXRhS2V5Qik7CisgICAgICAgIEFTU0VSVChwdHJBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIp
OworCisgICAgICAgIGJvb2wgaWdub3JlRHVwbGljYXRlcyA9IGluZGV4S2V5czsKKyAgICAgICAg
cmV0dXJuIGluZGV4RGF0YUtleUEuY29tcGFyZShpbmRleERhdGFLZXlCLCBpZ25vcmVEdXBsaWNh
dGVzKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworCitLZXlQcmVmaXg6OktleVByZWZpeCgpCisgICAgOiBtX2RhdGFiYXNlSWQoa0ludmFs
aWRUeXBlKQorICAgICwgbV9vYmplY3RTdG9yZUlkKGtJbnZhbGlkVHlwZSkKKyAgICAsIG1faW5k
ZXhJZChrSW52YWxpZFR5cGUpCit7Cit9CisKK0tleVByZWZpeDo6S2V5UHJlZml4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAg
OiBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQorICAgICwgbV9pbmRleElkKGluZGV4SWQpCit7Cit9CisKK2NvbnN0IGNoYXIqIEtl
eVByZWZpeDo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgS2V5
UHJlZml4KiByZXN1bHQpCit7CisgICAgaWYgKHN0YXJ0ID09IGxpbWl0KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKnN0YXJ0Kys7CisKKyAgICBp
bnQgZGF0YWJhc2VJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gNSkgJiAweDcpICsgMTsKKyAgICBp
bnQgb2JqZWN0U3RvcmVJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gMikgJiAweDcpICsgMTsKKyAg
ICBpbnQgaW5kZXhJZEJ5dGVzID0gKGZpcnN0Qnl0ZSAmIDB4MykgKyAxOworCisgICAgaWYgKHN0
YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzICsgb2JqZWN0U3RvcmVJZEJ5dGVzICsgaW5kZXhJZEJ5dGVz
ID4gbGltaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzdWx0LT5tX2RhdGFiYXNlSWQg
PSBkZWNvZGVJbnQoc3RhcnQsIHN0YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzKTsKKyAgICBzdGFydCAr
PSBkYXRhYmFzZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBkZWNvZGVJ
bnQoc3RhcnQsIHN0YXJ0ICsgb2JqZWN0U3RvcmVJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBvYmpl
Y3RTdG9yZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX2luZGV4SWQgPSBkZWNvZGVJbnQoc3RhcnQs
IHN0YXJ0ICsgaW5kZXhJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBpbmRleElkQnl0ZXM7CisKKyAg
ICByZXR1cm4gc3RhcnQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlQcmVmaXg6OmVuY29kZSgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElkKTsKKyAgICBBU1NF
UlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VSVChtX2luZGV4SWQg
IT0ga0ludmFsaWRJZCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YWJhc2VJZFN0cmluZyA9IGVu
Y29kZUludChtX2RhdGFiYXNlSWQpOworICAgIFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZUlkU3Ry
aW5nID0gZW5jb2RlSW50KG1fb2JqZWN0U3RvcmVJZCk7CisgICAgVmVjdG9yPGNoYXI+IGluZGV4
SWRTdHJpbmcgPSBlbmNvZGVJbnQobV9pbmRleElkKTsKKworICAgIEFTU0VSVChkYXRhYmFzZUlk
U3RyaW5nLnNpemUoKSA8PSA4KTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZFN0cmluZy5zaXpl
KCkgPD0gOCk7CisgICAgQVNTRVJUKGluZGV4SWRTdHJpbmcuc2l6ZSgpIDw9IDQpOworCisKKyAg
ICB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSA9IChkYXRhYmFzZUlkU3RyaW5nLnNpemUoKSAtIDEp
IDw8IDUgfCAob2JqZWN0U3RvcmVJZFN0cmluZy5zaXplKCkgLSAxKSA8PCAyIHwgKGluZGV4SWRT
dHJpbmcuc2l6ZSgpIC0gMSk7CisgICAgVmVjdG9yPGNoYXI+IHJldDsKKyAgICByZXQuYXBwZW5k
KGZpcnN0Qnl0ZSk7CisgICAgcmV0LmFwcGVuZChkYXRhYmFzZUlkU3RyaW5nKTsKKyAgICByZXQu
YXBwZW5kKG9iamVjdFN0b3JlSWRTdHJpbmcpOworICAgIHJldC5hcHBlbmQoaW5kZXhJZFN0cmlu
Zyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgS2V5UHJlZml4Ojpjb21wYXJlKGNvbnN0
IEtleVByZWZpeCYgb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBr
SW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOwor
ICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZUlkICE9IG90aGVyLm1fZGF0YWJhc2VJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1f
ZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKKyAgICBpZiAobV9vYmplY3RTdG9yZUlk
ICE9IG90aGVyLm1fb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1f
b2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAobV9pbmRleElk
ICE9IG90aGVyLm1faW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1faW5kZXhJ
ZCwgb3RoZXIubV9pbmRleElkKTsKKyAgICByZXR1cm4gMDsKK30KKworS2V5UHJlZml4OjpUeXBl
IEtleVByZWZpeDo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBr
SW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOwor
ICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAoIW1fZGF0YWJh
c2VJZCkKKyAgICAgICAgcmV0dXJuIGtHbG9iYWxNZXRhRGF0YTsKKyAgICBpZiAoIW1fb2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGtEYXRhYmFzZU1ldGFEYXRhOworICAgIGlmIChtX2lu
ZGV4SWQgPT0ga09iamVjdFN0b3JlRGF0YUluZGV4SWQpCisgICAgICAgIHJldHVybiBrT2JqZWN0
U3RvcmVEYXRhOworICAgIGlmIChtX2luZGV4SWQgPT0ga0V4aXN0c0VudHJ5SW5kZXhJZCkKKyAg
ICAgICAgcmV0dXJuIGtFeGlzdHNFbnRyeTsKKyAgICBpZiAobV9pbmRleElkID49IGtNaW5pbXVt
SW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGtJbmRleERhdGE7CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4ga0ludmFsaWRUeXBlOworfQorCitWZWN0b3I8Y2hhcj4gU2No
ZW1hVmVyc2lvbktleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDAp
OworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVu
ZChlbmNvZGVCeXRlKGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUpKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCitWZWN0b3I8Y2hhcj4gTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQ
cmVmaXggcHJlZml4KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5j
b2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtNYXhEYXRhYmFzZUlkVHlwZUJ5dGUp
KTsKKyAgICByZXR1cm4gcmV0OworfQorCitEYXRhYmFzZUZyZWVMaXN0S2V5OjpEYXRhYmFzZUZy
ZWVMaXN0S2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgtMSkKK3sKK30KKworY29uc3QgY2hhciog
RGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgRGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtleVByZWZpeCBw
cmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1p
dCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQo
IXByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJ
ZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7Cisg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0RhdGFiYXNlRnJlZUxpc3RU
eXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZUlkKTsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4g
cmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrRGF0YWJh
c2VGcmVlTGlzdFR5cGVCeXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQoZGF0YWJh
c2VJZCkpOworICAgIHJldHVybiByZXQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZUZyZWVM
aXN0S2V5OjplbmNvZGVNYXhLZXkoKQoreworICAgIHJldHVybiBlbmNvZGUoSU5UNjRfTUFYKTsK
K30KKworaW50NjRfdCBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDApOworICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7
Cit9CisKK2ludCBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJl
ZUxpc3RLZXkmIG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7
CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlk
KTsKK30KKworY29uc3QgY2hhciogRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUoY29uc3QgY2hhciog
c3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3VsdCkKK3sKKyAg
ICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29k
ZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIHA7
CisgICAgQVNTRVJUKCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5t
X29iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CisgICAgaWYg
KHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5
dGUgPSAqcCsrOworICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtEYXRh
YmFzZU5hbWVUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAw
OworICAgIHAgPSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fb3Jp
Z2luKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVT
dHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VOYW1lKTsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAs
IDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSkpOworICAgIHJldC5hcHBl
bmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChvcmlnaW4pKTsKKyAgICByZXQuYXBwZW5kKGVuY29k
ZVN0cmluZ1dpdGhMZW5ndGgoZGF0YWJhc2VOYW1lKSk7CisgICAgcmV0dXJuIHJldDsKK30KKwor
VmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9CisK
K1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4gaW4gY29sbGF0
aW9uIG9yZGVyCisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmlnaW4gKyAiXHgw
MSIpOworfQorCitpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFt
ZUtleSYgb3RoZXIpCit7CisgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFyZShtX29yaWdp
biwgb3RoZXIubV9vcmlnaW4pKQorICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBv
aW50Q29tcGFyZShtX2RhdGFiYXNlTmFtZSwgb3RoZXIubV9kYXRhYmFzZU5hbWUpOworfQorCitW
ZWN0b3I8Y2hhcj4gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgTWV0YURhdGFUeXBlIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRh
dGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7
CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlwZSkpOworICAgIHJldHVybiBy
ZXQ7Cit9CisKK09iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXko
KQorICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQorICAgICwgbV9tZXRhRGF0YVR5cGUoLTEpCit7
Cit9CisKK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBj
aGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJl
c3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQ
cmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VS
VCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElk
KTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQg
Y2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5
dGUgPT0ga09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQp
CisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3Vs
dC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAg
IEFTU0VSVChyZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKHAgPT0gbGltaXQpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3Vs
dC0+bV9tZXRhRGF0YVR5cGUpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQs
IDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICBy
ZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQobWV0YURhdGFUeXBlKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9y
PGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFi
YXNlSWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgsIElOVDY0
X01BWCk7Cit9CisKK1ZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVN
YXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAg
cmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgpOworfQor
CitpbnQ2NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJuIG1fb2JqZWN0
U3RvcmVJZDsKK30KK2ludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7CisgICAgcmV0dXJu
IG1fbWV0YURhdGFUeXBlOworfQorCitpbnQgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6Y29tcGFy
ZShjb25zdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlkID49IDApOworICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+PSAwKTsKKyAg
ICBpZiAoaW50IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0
U3RvcmVJZCkpCisgICAgICAgIHJldHVybiB4OworICAgIHJldHVybiBtX21ldGFEYXRhVHlwZSAt
IG90aGVyLm1fbWV0YURhdGFUeXBlOworfQorCitJbmRleE1ldGFEYXRhS2V5OjpJbmRleE1ldGFE
YXRhS2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkK
KyAgICAsIG1fbWV0YURhdGFUeXBlKDApCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4TWV0YURh
dGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4
TWV0YURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0
IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAg
IGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNl
SWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFw
cmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0
eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAg
PT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGlt
aXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVy
biAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsK
KyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwID09IGxpbWl0KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXN1bHQtPm1fbWV0YURhdGFUeXBlID0gKnArKzsKKyAgICBy
ZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1
bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFi
YXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICBy
ZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQoaW5kZXhJZCkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0
YVR5cGUpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5U
NjRfTUFYLCAyNTUpOworfQorCitpbnQgSW5kZXhNZXRhRGF0YUtleTo6Y29tcGFyZShjb25zdCBJ
bmRleE1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49
IDApOworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisKKyAgICBpZiAoaW50IHggPSBjb21w
YXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAg
IHJldHVybiB4OworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIu
bV9pbmRleElkKSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIG1fbWV0YURhdGFUeXBl
IC0gb3RoZXIubV9tZXRhRGF0YVR5cGU7Cit9CisKK2ludDY0X3QgSW5kZXhNZXRhRGF0YUtleTo6
aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICByZXR1
cm4gbV9pbmRleElkOworfQorCitPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpPYmplY3RTdG9yZUZy
ZWVMaXN0S2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKK3sKK30KKworY29uc3QgY2hh
ciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25z
dCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtl
eVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0
YXJ0LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09
IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0g
KnArKzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrT2JqZWN0U3Rv
cmVGcmVlTGlzdFR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0
b3JlSWQpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEtleVBy
ZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHBy
ZWZpeC5lbmNvZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlRnJl
ZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3Jl
SWQpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVl
TGlzdEtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAgICByZXR1cm4g
ZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCk7Cit9CisKK2ludDY0X3QgT2JqZWN0U3RvcmVG
cmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0
U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQgT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5
JiBvdGhlcikKK3sKKyAgICAvLyBGSVhNRTogSXQgbWF5IHNlZW0gc3RyYW5nZSB0aGF0IHdlJ3Jl
IG5vdCBjb21wYXJpbmcgZGF0YWJhc2UgaWQncywKKyAgICAvLyBidXQgdGhhdCBjb21wYXJpc29u
IHdpbGwgaGF2ZSBiZWVuIG1hZGUgZWFybGllci4KKyAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkg
bWFrZSB0aGlzIG1vcmUgY2xlYXIsIHRob3VnaC4uLgorICAgIEFTU0VSVChtX29iamVjdFN0b3Jl
SWQgPj0gMCk7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIu
bV9vYmplY3RTdG9yZUlkKTsKK30KKworSW5kZXhGcmVlTGlzdEtleTo6SW5kZXhGcmVlTGlzdEtl
eSgpCisgICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCisgICAgLCBtX2luZGV4SWQoLTEpCit7Cit9
CisKK2NvbnN0IGNoYXIqIEluZGV4RnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCkKK3sKKyAgICBL
ZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShz
dGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9
PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4RnJl
ZUxpc3RUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsK
KyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQo
cCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RnJl
ZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwg
MCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKKyAgICByZXQu
YXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBl
bmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZh
ckludChpbmRleElkKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4
RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3sKKyAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIElOVDY0X01BWCk7Cit9CisKK2ludCBJbmRleEZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0
IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQg
Pj0gMCk7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICBpZiAoaW50IHggPSBjb21w
YXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAg
IHJldHVybiB4OworICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVyLm1faW5k
ZXhJZCk7Cit9CisKK2ludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9v
YmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6OmluZGV4SWQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisgICAgcmV0dXJuIG1faW5kZXhJ
ZDsKK30KKworLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0
b3JlIGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKy8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFiYXNl
QmFja2VuZEltcGwuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUgdW5yZWxpYWJsZT8KKy8vIENhbiB3
ZSByZW1vdmUgdGhpcz8KK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTmFtZXNLZXkq
IHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBL
ZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFT
U0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRl
eElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWdu
ZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlw
ZUJ5dGUgPT0ga09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CisgICAgcmV0dXJuIGRlY29kZVN0
cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOworfQor
CitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCit7CisgICAgS2V5UHJlZml4IHBy
ZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVu
Y29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVOYW1lc1R5cGVC
eXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9iamVjdFN0b3Jl
TmFtZSkpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBPYmplY3RTdG9yZU5hbWVzS2V5Ojpj
b21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKQoreworICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlKG1fb2JqZWN0U3RvcmVOYW1lLCBvdGhlci5tX29iamVjdFN0b3JlTmFt
ZSk7Cit9CisKK0luZGV4TmFtZXNLZXk6OkluZGV4TmFtZXNLZXkoKQorICAgIDogbV9vYmplY3RT
dG9yZUlkKC0xKQoreworfQorCisvLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1
cCBpbmRleCBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCisvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxl
dmVsLgorY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW1lc0tleSogcmVzdWx0KQoreworICAgIEtleVBy
ZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0
LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBB
U1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RT
dG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09IGxp
bWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnAr
KzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhOYW1lc0tl
eVR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOworICAg
IGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhM
ZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleE5hbWUpOworfQorCitWZWN0b3I8Y2hhcj4g
SW5kZXhOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4
KGRhdGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2Rl
KCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUpKTsK
KyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFw
cGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGluZGV4TmFtZSkpOworICAgIHJldHVybiByZXQ7
Cit9CisKK2ludCBJbmRleE5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4TmFtZXNLZXkmIG90
aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgaWYgKGludCB4
ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQor
ICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShtX2luZGV4TmFt
ZSwgb3RoZXIubV9pbmRleE5hbWUpOworfQorCitjb25zdCBjaGFyKiBPYmplY3RTdG9yZURhdGFL
ZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9y
ZURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNo
YXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJlZml4KTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsK
KyAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5t
X2luZGV4SWQgPT0ga1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgaWYgKHAgPT0gZW5kKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgZW5kLCAm
cmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworVmVjdG9yPGNoYXI+IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBWZWN0b3I8Y2hhcj4gZW5jb2RlZFVzZXJLZXkpCit7CisgICAgS2V5UHJlZml4IHBy
ZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrU3BlY2lhbEluZGV4TnVtYmVyKTsKKyAg
ICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5j
b2RlZFVzZXJLZXkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOworfQorCitpbnQg
T2JqZWN0U3RvcmVEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRGF0YUtleSYgb3Ro
ZXIpCit7CisgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRVc2VyS2V5
LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IE9iamVj
dFN0b3JlRGF0YUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4ga2V5
OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVz
ZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRfdCBP
YmplY3RTdG9yZURhdGFLZXk6OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrT2JqZWN0U3RvcmVEYXRh
SW5kZXhJZDsKKworY29uc3QgY2hhciogRXhpc3RzRW50cnlLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0KQoreworICAg
IEtleVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2Rl
KHN0YXJ0LCBlbmQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVChwcmVmaXgubV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA9PSBrU3BlY2lhbEluZGV4
TnVtYmVyKTsKKyAgICBpZiAocCA9PSBlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBleHRyYWN0RW5jb2RlZElEQktleShwLCBlbmQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkp
OworfQorCitWZWN0b3I8Y2hhcj4gRXhpc3RzRW50cnlLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVk
S2V5KQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
a1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNv
ZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRLZXkpOworICAgIHJldHVybiByZXQ7Cit9CisK
K1ZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0
dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktl
eSkpOworfQorCitpbnQgRXhpc3RzRW50cnlLZXk6OmNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlL
ZXkmIG90aGVyKQoreworICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVk
VXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5
PiBFeGlzdHNFbnRyeUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4g
a2V5OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2Rl
ZFVzZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRf
dCBFeGlzdHNFbnRyeUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtFeGlzdHNFbnRyeUluZGV4
SWQ7CisKK0luZGV4RGF0YUtleTo6SW5kZXhEYXRhS2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgt
MSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkKKyAgICAs
IG1fc2VxdWVuY2VOdW1iZXIoLTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4RGF0YUtleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5
KiByZXN1bHQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeDsKKyAgICBjb25zdCBjaGFyKiBwID0g
S2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBB
U1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5tX2luZGV4
SWQgPj0ga01pbmltdW1JbmRleElkKTsKKyAgICByZXN1bHQtPm1fZGF0YWJhc2VJZCA9IHByZWZp
eC5tX2RhdGFiYXNlSWQ7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBwcmVmaXgubV9v
YmplY3RTdG9yZUlkOworICAgIHJlc3VsdC0+bV9pbmRleElkID0gcHJlZml4Lm1faW5kZXhJZDsK
KyAgICByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIgPSAtMTsKKyAgICByZXN1bHQtPm1fZW5jb2Rl
ZFByaW1hcnlLZXkgPSBtaW5JREJLZXkoKTsKKworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktl
eShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7CisgICAgaWYgKCFwKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIFtvcHRpb25hbF0gc2VxdWVuY2UgbnVtYmVyCisgICAg
aWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSAgZGVjb2RlVmFySW50
KHAsIGxpbWl0LCByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIpOworICAgIGlmICghcCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBbb3B0aW9uYWxdIHByaW1hcnkga2V5CisgICAgaWYgKHAg
PT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktl
eShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkUHJpbWFyeUtleSk7CisgICAgaWYgKCFwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwOworfQorCitWZWN0b3I8Y2hhcj4gSW5k
ZXhEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkVXNlcktleSwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCBzZXF1ZW5jZU51
bWJlcikKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAg
cmV0LmFwcGVuZChlbmNvZGVkVXNlcktleSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQo
c2VxdWVuY2VOdW1iZXIpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRQcmltYXJ5S2V5KTsKKyAg
ICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiB1c2VyS2V5KQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpLCBtaW5JREJLZXko
KSk7Cit9CisKK1ZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorewor
ICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgbWlu
SURCS2V5KCksIG1pbklEQktleSgpKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6
ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBtYXhJREJLZXkoKSwgbWF4SURCS2V5KCksIElOVDY0X01BWCk7Cit9
CisKK2ludCBJbmRleERhdGFLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhEYXRhS2V5JiBvdGhlciwg
Ym9vbCBpZ25vcmVEdXBsaWNhdGVzKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7
CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICBBU1NFUlQobV9pbmRleElk
ID49IDApOworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRV
c2VyS2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAg
aWYgKGlnbm9yZUR1cGxpY2F0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChpbnQgeCA9
IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRQcmltYXJ5S2V5LCBvdGhlci5tX2VuY29k
ZWRQcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRz
KG1fc2VxdWVuY2VOdW1iZXIsIG90aGVyLm1fc2VxdWVuY2VOdW1iZXIpOworfQorCitpbnQ2NF90
IEluZGV4RGF0YUtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUlkOworfQorCitpbnQ2NF90IEluZGV4
RGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3Rv
cmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IElu
ZGV4RGF0YUtleTo6aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAw
KTsKKyAgICByZXR1cm4gbV9pbmRleElkOworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5kZXhE
YXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAg
ZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVkVXNlcktleS5l
bmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5k
ZXhEYXRhS2V5OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7
CisgICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgbV9lbmNvZGVk
UHJpbWFyeUtleS5lbmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCit9IC8vIG5hbWVz
cGFjZSBJREJMZXZlbERCQ29kaW5nCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29k
aW5nLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJMZXZlbERCQ29kaW5nX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkNvZGlu
Z19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxEQikKKwor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCS2V5OworY2xhc3MgTGV2ZWxEQlNsaWNlOworCituYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGlu
ZyB7CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIga01pbmltdW1JbmRleElkID0gMzA7CisKK1ZlY3Rv
cjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworVmVjdG9yPGNoYXI+IG1heElEQktl
eSgpOworVmVjdG9yPGNoYXI+IG1pbklEQktleSgpOworVmVjdG9yPGNoYXI+IGVuY29kZUludChp
bnQ2NF90KTsKK2ludDY0X3QgZGVjb2RlSW50KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFy
KiBlbmQpOworVmVjdG9yPGNoYXI+IGVuY29kZVZhckludChpbnQ2NF90KTsKK2NvbnN0IGNoYXIq
IGRlY29kZVZhckludChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYg
Zm91bmRJbnQpOworVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKK1N0
cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogZW5kKTsKK1ZlY3Rv
cjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYpOworY29uc3QgY2hh
ciogZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1p
dCwgU3RyaW5nJiBmb3VuZFN0cmluZyk7CitpbnQgY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExl
bmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwg
Y29uc3QgY2hhciogbGltaXRRKTsKK1ZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlKTsK
K2NvbnN0IGNoYXIqIGRlY29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1p
dCwgZG91YmxlKik7Cit2b2lkIGVuY29kZUlEQktleShjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hh
cj4mIGludG8pOworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktleShjb25zdCBJREJLZXkmKTsKK2Nv
bnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwg
UmVmUHRyPElEQktleT4mIGZvdW5kS2V5KTsKK2NvbnN0IGNoYXIqIGV4dHJhY3RFbmNvZGVkSURC
S2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVjdG9yPGNoYXI+KiBy
ZXN1bHQpOworaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBj
b25zdCBWZWN0b3I8Y2hhcj4mKTsKKworaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiwg
Y29uc3QgTGV2ZWxEQlNsaWNlJiwgYm9vbCBpbmRleEtleXMgPSBmYWxzZSk7CisKK2NsYXNzIEtl
eVByZWZpeCB7CitwdWJsaWM6CisgICAgS2V5UHJlZml4KCk7CisgICAgS2V5UHJlZml4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3Qg
Y2hhciogbGltaXQsIEtleVByZWZpeCogcmVzdWx0KTsKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2Rl
KCkgY29uc3Q7CisgICAgaW50IGNvbXBhcmUoY29uc3QgS2V5UHJlZml4JiBvdGhlcikgY29uc3Q7
CisKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBrR2xvYmFsTWV0YURhdGEsCisgICAgICAgIGtE
YXRhYmFzZU1ldGFEYXRhLAorICAgICAgICBrT2JqZWN0U3RvcmVEYXRhLAorICAgICAgICBrRXhp
c3RzRW50cnksCisgICAgICAgIGtJbmRleERhdGEsCisgICAgICAgIGtJbnZhbGlkVHlwZQorICAg
IH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGludDY0X3QgbV9kYXRhYmFzZUlk
OworICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGludDY0X3QgbV9pbmRleElkOwor
CisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga0ludmFsaWRJZCA9IC0xOworfTsKKworY2xhc3Mg
U2NoZW1hVmVyc2lvbktleSB7CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoKTsKK307CisKK2NsYXNzIE1heERhdGFiYXNlSWRLZXkgeworcHVibGljOgorICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUZyZWVMaXN0S2V5
IHsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZUZyZWVMaXN0S2V5KCk7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFi
YXNlRnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtl
eSgpOworICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNv
bnN0IERhdGFiYXNlRnJlZUxpc3RLZXkmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKK307CisKK2NsYXNzIERhdGFiYXNlTmFtZUtleSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29u
c3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0
b3BLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOworICAgIFN0cmluZyBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQorICAgIGludCBjb21wYXJlKGNvbnN0IERh
dGFiYXNlTmFtZUtleSYgb3RoZXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX29yaWdpbjsg
Ly8gRklYTUU6IFN0b3JlIGVuY29kZWQgc3RyaW5ncywgb3IganVzdCBwb2ludGVycy4KKyAgICBT
dHJpbmcgbV9kYXRhYmFzZU5hbWU7Cit9OworCitjbGFzcyBEYXRhYmFzZU1ldGFEYXRhS2V5IHsK
K3B1YmxpYzoKKyAgICBlbnVtIE1ldGFEYXRhVHlwZSB7CisgICAgICAgIGtPcmlnaW5OYW1lID0g
MCwKKyAgICAgICAga0RhdGFiYXNlTmFtZSA9IDEsCisgICAgICAgIGtVc2VyVmVyc2lvbiA9IDIs
CisgICAgICAgIGtNYXhPYmplY3RTdG9yZUlkID0gMworICAgIH07CisKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSk7Cit9Owor
CitjbGFzcyBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IHsKK3B1YmxpYzoKKyAgICBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJlc3Vs
dCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOworICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKKyAgICBp
bnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVj
dFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1fbWV0YURhdGFUeXBlOyAvLyBGSVhNRTogTWFrZSB0
aGlzIGEgYnl0ZS4KK307CisKK2NsYXNzIEluZGV4TWV0YURhdGFLZXkgeworcHVibGljOgorICAg
IEluZGV4TWV0YURhdGFLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0
IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtleSogcmVzdWx0
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFE
YXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJlKGNvbnN0
IEluZGV4TWV0YURhdGFLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YURh
dGFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAg
aW50NjRfdCBtX2luZGV4SWQ7CisgICAgdW5zaWduZWQgY2hhciBtX21ldGFEYXRhVHlwZTsKK307
CisKK2NsYXNzIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkgeworcHVibGljOgorICAgIE9iamVjdFN0
b3JlRnJlZUxpc3RLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVz
dWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVN
YXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBj
b25zdDsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhl
cik7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Cit9OworCitjbGFz
cyBJbmRleEZyZWVMaXN0S2V5IHsKK3B1YmxpYzoKKyAgICBJbmRleEZyZWVMaXN0S2V5KCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJl
KGNvbnN0IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKK307CisK
K2NsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBXZSBu
ZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBw
aW5nCisgICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRo
ZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8K
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBj
aGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZU5hbWVzS2V5JiBv
dGhlcik7CisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1l
OyAvLyBGSVhNRTogU3RvcmUgdGhlIGVuY29kZWQgc3RyaW5nLCBvciBqdXN0IHBvaW50ZXJzIHRv
IGl0LgorfTsKKworY2xhc3MgSW5kZXhOYW1lc0tleSB7CitwdWJsaWM6CisgICAgSW5kZXhOYW1l
c0tleSgpOworICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIGluZGV4
IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKyAgICAvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVs
LgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpOworICAgIHN0YXRpYyBWZWN0b3I8
Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhOYW1l
c0tleSYgb3RoZXIpOworICAgIFN0cmluZyBpbmRleE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4TmFtZTsgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IFN0cmluZyBtX2luZGV4TmFtZTsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlRGF0YUtleSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCk7CisgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSk7CisgICAgc3RhdGljIFZl
Y3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0
U3RvcmVEYXRhS2V5JiBvdGhlcik7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBj
b25zdDsKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrU3BlY2lhbEluZGV4TnVtYmVyOworCitw
cml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OworfTsKKworY2xhc3Mg
RXhpc3RzRW50cnlLZXkgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3Vs
dCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZEtleSk7Cisg
ICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUo
Y29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVyKTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gdXNl
cktleSgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga1NwZWNpYWxJbmRleE51
bWJlcjsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKK307
CisKK2NsYXNzIEluZGV4RGF0YUtleSB7CitwdWJsaWM6CisgICAgSW5kZXhEYXRhS2V5KCk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIEluZGV4RGF0YUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVtYmVyID0gMCk7
CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1pbktleShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBJbmRl
eERhdGFLZXkmIG90aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMpOworICAgIGludDY0X3QgZGF0
YWJhc2VJZCgpIGNvbnN0OworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OworICAg
IGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNv
ZGVkVXNlcktleTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJpbWFyeUtleTsKKyAgICBp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJREJMZXZlbERC
Q29kaW5nCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMRVZFTERC
KQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCTGV2
ZWxEQkNvZGluZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
REJPYmplY3RTdG9yZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgor
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOworCitJREJPYmplY3RTdG9y
ZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBt
X2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsK
KyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworU3RyaW5n
IElEQk9iamVjdFN0b3JlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpuYW1lIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOworfQorCitTdHJp
bmcgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmU6OmtleVBhdGgiKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXlQYXRoKCk7
Cit9CisKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFt
ZXMoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMi
KTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5pbmRleE5hbWVzKCk7Cit9CisKK0lEQlRyYW5zYWN0
aW9uKiBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uIik7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rp
b24uZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpn
ZXQiKTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBl
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVx
dWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOworICAg
IGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30K
KworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7CisgICAgaWYgKGtleSAmJiAoa2V5LT50
eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQt
PnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBk
YXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIp
OworICAgIGlmICgha2V5UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1
bmN0aW9uKGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRl
Iik7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFj
a2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0
LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
cmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCIpOworICAg
IGlmICghSURCSXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQoInVuaXF1ZSIs
IHVuaXF1ZSk7CisKKyAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dCgibXVsdGlFbnRyeSIsIG11bHRpRW50cnkpOworCisgICAgLy8gRklYTUU6IFdoZW4gQXJyYXkt
dHlwZSBrZXlQYXRocyBhcmUgc3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBp
cyBBcnJheSBhbmQgbXVsdGlFbnRyeSBpcyB0cnVlLgorCisgICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJbmRleChuYW1l
LCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2Vu
ZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOworfQorCitQYXNz
UmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpp
bmRleCIpOworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5m
aW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQorICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIEFTU0VSVCghaW5k
ZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYg
KCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwor
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6OmRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
bV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7CisgICAgaWYgKGRp
cmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVY
VF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgeworICAgICAgICAvLyBGSVhNRTog
TWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9Q
dWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+
c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNv
cik7CisgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBy
ZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2Uo
KSwgZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkK
K3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7CisKKyAgICAvLyBCcmVh
ayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSURCT2JqZWN0U3RvcmVfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZV9oCisK
KyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFzcyBJ
REJBbnk7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2Jq
ZWN0U3RvcmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJP
YmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShpZGJPYmplY3RTdG9yZSwgdHJhbnNh
Y3Rpb24pKTsKKyAgICB9CisgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CisKKyAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OworICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBh
ZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29u
dGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIE9wdGlvbnNPYmpl
Y3QoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfSAKKworICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVj
dCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7IAor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKworcHJpdmF0ZToKKyAgICBJREJP
YmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElE
QlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZyb21QZW5kaW5nTGlz
dCgpOworCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNr
ZW5kOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4gPiBJREJJbmRleE1hcDsKKyAg
ICBJREJJbmRleE1hcCBtX2luZGV4TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKKwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVY
RURfREFUQUJBU0UKKyAgICBdIElEQk9iamVjdFN0b3JlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBuYW1lOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVs
bF0gRE9NU3RyaW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmdMaXN0IGluZGV4TmFtZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbjsKKworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBb
T3B0aW9uYWxdIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJ
REJLZXkga2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Cisg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRl
bGV0ZUZ1bmN0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZSBrZXlSYW5nZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlv
bl0gSURCUmVxdWVzdCBkZWxldGUoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCBjbGVhcigpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdl
LCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKKyAgICAgICAgICAgIHJh
aXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRl
eChpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0g
T3B0aW9uc09iamVjdCBvcHRpb25zKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7CisgICAgICAgIElEQkluZGV4IGluZGV4KGluIERPTVN0cmluZyBuYW1lKQorICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZGVs
ZXRlSW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkKKyAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkga2V5KQor
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQktleS5o
IgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZElt
cGwuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIK
KyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQoreworfQor
CitJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElE
QkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkK
KyAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNy
ZW1lbnQpCisgICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCit7CisgICAgbG9hZEluZGV4
ZXMoKTsKK30KKworSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9kYXRh
YmFzZUlkKGRhdGFiYXNlSWQpCisgICAgLCBtX2lkKEludmFsaWRJZCkKKyAgICAsIG1fbmFtZShu
YW1lKQorICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0
b0luY3JlbWVudCkKKyAgICAsIG1fYXV0b0luY3JlbWVudE51bWJlcigtMSkKK3sKK30KKworUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5h
bWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERP
TVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKKyAg
ICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAgaW5kZXhOYW1lcy0+c29y
dCgpOworICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCBrZXksIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOworICAgIFN0cmlu
ZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkp
OworICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOworfQorCitzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOworICAgIFZlY3RvcjxSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKKyAgICB2YWx1ZXMuYXBwZW5kKHZhbHVl
KTsKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgIElEQktleVBhdGhCYWNr
ZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1
ZXMsIGtleVBhdGgsIGtleXMpOworICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOworICAgIHJldHVybiBrZXlzWzBd
LnJlbGVhc2UoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluamVjdEtleUludG9L
ZXlQYXRoIik7CisgICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKK30KKwordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgaWYgKHRy
YW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0
cjsKKworICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgeworICAgICAgICBjb25zdCBi
b29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOworICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKKworICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKKyAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVudCAmJiAha2V5
KSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewor
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBh
dGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYg
KGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWF1dG9JbmNyZW1lbnQgJiYgIWtl
eVBhdGhLZXkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoLTEpOworICAg
ICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmpl
Y3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwgdmFsdWUsIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikg
eworICAgICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5ICYmICFrZXktPnZhbGlkKCkpIHsK
KyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewor
ICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5
RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOworICAgICAgICAgICAg
aWYgKGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VS
VChrZXkpOworICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1f
a2V5UGF0aC5pc051bGwoKTsKKyAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdl
dCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgLy8gRklY
TUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5
IGEgY2FjaGUgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9i
amVjdFN0b3JlKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgb2Jq
ZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Cit9CisKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCIpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFs
dWU7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKHB1dE1vZGUg
IT0gQ3Vyc29yVXBkYXRlKSB7CisgICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9i
amVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0
aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOworICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVj
dFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkpCisgICAgICAg
ICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0b0lu
Y3JlbWVudCkgeworICAgICAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXko
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5q
ZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBh
dGgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMg
c2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2Vz
IG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGlu
c2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRlIGdlbmVyYXRvciBzdGF0ZSBz
aG91bGQgZ28gaGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2FuLgorICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGtleSAmJiBrZXktPnZhbGlkKCkpOwor
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYg
b2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVj
dFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKSkgeworICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFk
eSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleXM7CisgICAgZm9yIChJbmRl
eE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgp
LCBpbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKCFpbmRleEtleSkgeworICAgICAgICAg
ICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGluZGV4S2V5LT52YWxpZCgpKTsKKwor
ICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBlKCkgIT0g
SURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5n
ZXQoKSwga2V5LmdldCgpKSkgeworICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwg
Ik9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRv
ZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleC0+bXVsdGlFbnRyeSgp
ICYmIGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXktPmFy
cmF5KClbal0uZ2V0KCksIGtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5
UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyBy
ZXF1aXJlbWVudHMuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhLZXlzLmFw
cGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBv
aW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0
aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKworICAgIGlmICghb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRh
YmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Ig
d3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaSA9IDA7CisgICAg
Zm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkgeworICAg
ICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgY29udGludWU7IC8v
IFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGlu
IHRoZSBkYXRhYmFzZSB5ZXQuCisKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5n
U3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlk
LCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNh
dGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMu
CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0
byBzdGFibGUgc3RvcmFnZS4iKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5kZXhLZXlz
W2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gaW5kZXhLZXlzW2ldOworCisgICAgICAgIGlmICghaW5kZXgtPm11bHRpRW50cnkoKSB8
fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAgICAgICAgICBp
ZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG9i
amVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSwg
KmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUg
YW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KKyAgICAgICAgICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKSk7CisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKGluZGV4LT5tdWx0aUVudHJ5KCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4
LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVj
aWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVy
cm9ycy4KKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBwcnBLZXk7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6
b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0
ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwg
ZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAg
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNr
cykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50
aWZpZXI7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7
CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdT
dG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBk
b2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgorCisgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFG
b3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0
LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpOworCisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9z
ZSgpOworICAgIH0KKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwor
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBvYmplY3RTdG9yZS0+bV9iYWNr
aW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBQb3B1
bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFj
a2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOworICAgICAgICBSZWZQdHI8SURCS2V5
PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1faW5k
ZXgtPmtleVBhdGgoKSk7CisKKyAgICAgICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGlmICghbV9pbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4
S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAgIGlmICghbV9p
bmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERh
dGFGb3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCks
ICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXgtPm11bHRp
RW50cnkoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6
OkFycmF5VHlwZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4S2V5
LT5hcnJheSgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5h
ZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUucHV0SW5kZXhE
YXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgp
LCAqaW5kZXhLZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIElEQkJhY2tpbmdTdG9yZSYgbV9i
YWNraW5nU3RvcmU7CisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Cit9
OworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorewor
ICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5mb3JFYWNo
T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2spKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5hbWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIHRoaXMs
IG5hbWUsIG1fbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBBU1NFUlQo
aW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rp
b25QdHIpLAorICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBpZDsKKyAgICBpZiAoIW9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4
LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5kZXgtPnNldElk
KGlkKTsKKworICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgp
KSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOworfQorCitQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFt
ZSk7CisgICAgaWYgKCFpbmRleCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICh0cmFuc2FjdGlv
bi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KG5hbWUpOworICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25Q
dHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisg
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbmRleGVzLnJlbW92ZShuYW1l
KTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit7CisgICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwor
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKwordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSA9IHBycFJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0
aW9uUHRyKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOworICAgIH0KK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih0bXBEaXJl
Y3Rpb24pOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2Uu
Z2V0KCksIGRpcmVjdGlvbik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5n
U3RvcmVDdXJzb3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0
KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOworfQorCit2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNr
cywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAg
dWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlk
KCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRvIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3It
PmNvbnRpbnVlRnVuY3Rpb24oMCkpOworCisgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgp
OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVy
VmFsdWUoY291bnQpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcygpCit7CisgICAgVmVjdG9yPGludDY0X3Q+IGlkczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBuYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4g
dW5pcXVlRmxhZ3M7CisgICAgVmVjdG9yPGJvb2w+IG11bHRpRW50cnlGbGFnczsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywgbmFtZXMsIGtl
eVBhdGhzLCB1bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsKKworICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBp
ZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkp
OworICAgIEFTU0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1faW5k
ZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUs
IGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRyeUZsYWdzW2ldKSk7Cit9CisK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorewor
ICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkp
KTsKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQoreworICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OworICAgIEFTU0VS
VCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Cisg
ICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIp
OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
QXV0b0luY3JlbWVudEtleSgpCit7CisgICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDAp
CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1i
ZXIrKyk7CisKKyAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
YmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihtX2RhdGFiYXNlSWQsIGlkKCkp
KTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVy
KyspOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAorCisj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJC
YWNraW5nU3RvcmU7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgSURCSW5k
ZXhCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0
b0luY3JlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIGlkLCBuYW1lLCBrZXlQ
YXRoLCBhdXRvSW5jcmVtZW50KSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
ZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJ
bnZhbGlkSWQgPSAwOworICAgIGludDY0X3QgaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1faWQgIT0gSW52YWxpZElkKTsKKyAgICAgICAgcmV0dXJuIG1faWQ7CisgICAgfQorICAg
IHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICBpbnQ2NF90IGRhdGFi
YXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWQ7IH0KKworICAgIHZpcnR1YWwgU3Ry
aW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBr
ZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
YXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3JlbWVudDsgfQorCisgICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVh
bCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4pOworCitwcml2YXRlOgorICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsK
KyAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2b2lkIGxvYWRJbmRleGVzKCk7CisgICAgUGFzc1Jl
ZlB0cjxJREJLZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICB2b2lkIHJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQorCisgICAg
c3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworICAgIHN0YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVJbmRleEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisKKyAgICAvLyBU
aGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgorICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkSW5kZXhUb01hcChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0QXV0
b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOworCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRf
dCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBi
b29sIG1fYXV0b0luY3JlbWVudDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOworICAgIEluZGV4TWFwIG1faW5kZXhl
czsKKyAgICBpbnQgbV9hdXRvSW5jcmVtZW50TnVtYmVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorI2Rl
ZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdM
aXN0OworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
OworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisK
KyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBBZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25s
eSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8v
IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgorI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgorCit1c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOworCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGhyZWFkU3BlY2lm
aWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9u
cygpCit7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAorICAgIC8vIHRocmVhZC1sb2NhbCBzdG9yYWdl
LgorICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxWZWN0b3I8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0aW9ucyA9IG5ldyBU
aHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPik7
CisgICAgcmV0dXJuICp0cmFuc2FjdGlvbnM7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgdHJhbnNhY3Rpb25zKCktPmFwcGVuZCh0cmFu
c2FjdGlvbik7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3Zl
UGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24pCit7CisgICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9ucygpOworICAgIHNp
emVfdCBwb3MgPSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24pOworICAgIGlmIChw
b3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uTGlzdC0+
cmVtb3ZlKHBvcyk7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWJv
cnRQZW5kaW5nVHJhbnNhY3Rpb25zKCkKK3sKKyAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJhbnNh
Y3Rpb25zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbnMoKS0+c2l6
ZSgpOyArK2kpCisgICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFib3J0KCk7CisgICAg
Ly8gRklYTUU6IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEgbGF5b3V0IHRlc3Qu
CisgICAgdHJhbnNhY3Rpb25MaXN0LT5jbGVhcigpOworfQorCit9OworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAko
cmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cl9oCisjZGVmaW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOworCisvLyBUaGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9m
IHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKKy8vIEphdmFzY3Jp
cHQgZXhlY3V0aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rpb24gaXMgJ3BlbmRpbmcnIGlmIG5vIGFz
eW5jaHJvbm91cworLy8gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBxdWV1ZWQgZm9yIGl0IChlLmcu
IGFuIElEQk9iamVjdFN0b3JlOjpwdXQoKSBvciBzaW1pbGFyKS4KKy8vIEFsbCBwZW5kaW5nIHRy
YW5zYWN0aW9ucyBhcmUgYWJvcnRlZCBhcyBzb29uIGFzIGV4ZWN1dGlvbiByZXR1cm5zIGZyb20K
Ky8vIHRoZSBzY3JpcHQgZW5naW5lLgorCitjbGFzcyBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGVu
ZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHN0
YXRpYyB2b2lkIGFib3J0UGVuZGluZ1RyYW5zYWN0aW9ucygpOworCitwcml2YXRlOgorICAgIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlJlcXVl
c3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXZlbnRF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRo
VmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlz
cGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKyNp
bmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlJl
cXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCB0
cmFuc2FjdGlvbikpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCisgICAgLCBtX2Vycm9yQ29kZSgwKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5H
KQorICAgICwgbV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2N1cnNvckZpbmlzaGVk
KGZhbHNlKQorICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKKyAgICAsIG1fY3Vyc29yVHlw
ZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKKyAgICAsIG1f
Y3Vyc29yKDApCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV90cmFuc2Fj
dGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2Vu
ZCgpKTsKKyAgICB9Cit9CisKK0lEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5RGVhdGggfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworfQorCitQYXNzUmVm
UHRyPElEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
eworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gbV9yZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVy
cm9yQ29kZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IERPTkUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9X
RURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JDb2Rl
OworfQorCitTdHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworfQorCitQ
YXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zb3VyY2U7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6
OnRyYW5zYWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKK30KKwor
dW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om1hcmtFYXJseURl
YXRoKCkKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOworICAgIG1fcmVh
ZHlTdGF0ZSA9IEVhcmx5RGVhdGg7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0
YXRlKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVz
dEZpbmlzaGVkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBB
U1NFUlQodHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSAhPSBET05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3JlYWR5U3RhdGUgPSBM
T0FESU5HOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgbV9lcnJvckNvZGUgPSAwOworICAg
IG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CisKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitJREJBbnkqIElEQlJlcXVlc3Q6OnNvdXJjZSgp
Cit7CisgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmFi
b3J0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IExPQURJ
TkcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gZXZl
bnRRdWV1ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorICAgIG1fZW5xdWV1ZWRF
dmVudHMuY2xlYXIoKTsKKworICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICBtX2Vycm9yTWVzc2Fn
ZSA9IFN0cmluZygpOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgb25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIlRoZSB0
cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJlIGZ1bGZpbGxl
ZC4iKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQVNTRVJUKG1fY3Vy
c29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7
CisgICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojpz
ZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKK3sKKyAgICBBU1NFUlQoIW1f
Y3Vyc29yKTsKKyAgICBtX2N1cnNvciA9IGN1cnNvcjsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojpm
aW5pc2hDdXJzb3IoKQoreworICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOworICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gTE9BRElORykKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVl
OworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvcikKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdl
LmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgp
OworICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKKyAgICBtX2N1cnNvci5j
bGVhcigpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVh
dGVTdWNjZXNzRXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIpOworICAgIEFT
U0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0
KTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOworICAgIGVu
cXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Cisg
ICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9y
ZXN1bHQpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOworICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsK
KyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5Q3Vyc29yKQorICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0
aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBt
X3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisKKyAgICBzZXRSZXN1bHRDdXJz
b3IoY3Vyc29yLCBtX2N1cnNvclR5cGUpOworCisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nl
c3NFdmVudCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCit7CisgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7CisgICAgQVNTRVJUKCFtX2Vycm9y
Q29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGlmICht
X2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJREJEYXRhYmFz
ZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7CisgICAgaWRiRGF0
YWJhc2UtPm9wZW4oKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJh
c2UucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwor
fQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5
KQoreworICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKKyAg
ICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jl
c3VsdCk7CisgICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCisgICAgICAgIG1fcmVz
dWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5KTsKKyAgICBlbHNlCisgICAgICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgp
KTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIElE
QlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gcHJwQmFja2VuZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhJREJUcmFuc2FjdGlvbikiKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JN
ZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgIGJhY2tl
bmQtPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAg
ICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rp
b24gPSBmcm9udGVuZDsKKworICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6
SURCRGF0YWJhc2VUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisgICAgbV9zb3VyY2UtPmlkYkRhdGFiYXNl
KCktPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7CisKKyAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
ZnJvbnRlbmQucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50
KCkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQoreworICAgIElEQl9UUkFDRSgi
SURCUmVxdWVzdDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsKKyAgICBBU1NF
UlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7
CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpOwor
ICAgIG1fY3Vyc29yLmNsZWFyKCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVu
dCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24i
KTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYm
ICFtX3Jlc3VsdCk7CisgICAgQVNTRVJUKG1fY3Vyc29yKTsKKyAgICBzZXRSZXN1bHRDdXJzb3Io
bV9jdXJzb3IsIG1fY3Vyc29yVHlwZSk7CisgICAgbV9jdXJzb3IuY2xlYXIoKTsKKyAgICBlbnF1
ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCitib29sIElEQlJlcXVlc3Q6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdv
cmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2Fu
CisgICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBsaXN0
ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCisgICAgLy8gICAgICAgIHVzZXIgZ2VuZXJh
dGVkIGV2ZW50cyBwcm9wZXJseS4KKyAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8IEFj
dGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK3ZvaWQgSURCUmVxdWVz
dDo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAgaWYgKG1fY29u
dGV4dFN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dFN0b3BwZWQgPSB0
cnVlOworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKKyAgICAgICAgbWFya0Vhcmx5
RGVhdGgoKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIElEQlJlcXVlc3Q6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9ySURCUmVxdWVzdDsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9i
amVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCitib29sIElEQlJlcXVlc3Q6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hl
ZCk7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQobV9lbnF1ZXVl
ZEV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwor
ICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAl
ZCIsIERPTkUsIG1fcmVhZHlTdGF0ZSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnRO
YW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOworICAgIH0KKworICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFwcGVuZCh0aGlz
KTsKKyAgICBpZiAobV90cmFuc2FjdGlvbikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3Ry
YW5zYWN0aW9uKTsKKyAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJl
IGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0IGRvIG5vdCBo
YXZlIGEgdHJhbnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCisg
ICAgICAgIC8vIHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhl
IGRhdGFiYXNlICh0byBlbnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgorICAgICAg
ICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCQ3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBpZiAobV9yZXN1bHQpIHsKKyAgICAg
ICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQorICAgICAg
ICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7CisgICAgICAgIGVs
c2UgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBl
KQorICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZh
bHVlKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50
IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCisgICAgQVNT
RVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCk7CisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKworICAg
IC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tlZCBl
dmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZp
bmlzaGVkKSkKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOworCisgICAgaWYgKGN1
cnNvclRvTm90aWZ5KQorICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nlc3NIYW5kbGVy
Q2FsbGJhY2soKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CisgICAgICAgIC8vIElmIGFu
IGVycm9yIGV2ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCisgICAgICAg
IGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKS0+YWJvcnQo
KTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBJ
REJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAo
bV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgp
OworfQorCit2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKKworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKworICAgIEV2ZW50UXVldWUq
IGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworCisgICAgaWYgKGV2ZW50UXVldWUtPmVucXVldWVF
dmVudChldmVudC5nZXQoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50
KTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQor
eworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSog
SURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZl
bnRUYXJnZXREYXRhOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpD
dXJzb3JUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlDdXJzb3IpIHsKKyAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZShwcnBDdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXN1bHQgPSBJ
REJBbnk6OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJwQ3Vyc29yKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAxMDk0NjEp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oOjEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUmVxdWVzdF9oCisjZGVmaW5lIElEQlJl
cXVlc3RfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZl
bnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVk
ZSAiSURCQ2FsbGJhY2tzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJh
bnNhY3Rpb247CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQlJlcXVl
c3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJj
ZSwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7CisKKyAgICBQ
YXNzUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFN0cmluZyB3
ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
SURCQW55PiBzb3VyY2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbigpIGNvbnN0OworCisgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCisgICAgZW51
bSBSZWFkeVN0YXRlIHsKKyAgICAgICAgTE9BRElORyA9IDEsCisgICAgICAgIERPTkUgPSAyLAor
ICAgICAgICBFYXJseURlYXRoID0gMworICAgIH07CisgICAgdW5zaWduZWQgc2hvcnQgcmVhZHlT
dGF0ZSgpIGNvbnN0OworCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNj
ZXNzKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAg
IHZvaWQgbWFya0Vhcmx5RGVhdGgoKTsKKyAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFu
c2FjdGlvbiopOworICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlKTsKKyAgICB2b2lkIHNldEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNv
cj4pOworICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgSURCQW55KiBzb3VyY2UoKTsKKyAg
ICB2b2lkIGFib3J0KCk7CisKKyAgICAvLyBJREJDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQg
b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKyAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGlu
dWF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBW
ZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+
ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gPiYgdmFsdWVzKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIE5vdCBpbXBsZW1lbnRl
ZC4gQ2FsbGJhY2sgc2hvdWxkIG5vdCByZWFjaCB0aGUgcmVuZGVyZXIgc2lkZS4KKyAgICB2aXJ0
dWFsIHZvaWQgb25CbG9ja2VkKCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSBPVkVSUklERTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CisKKyAg
ICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7CisgICAgdXNp
bmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKKyAgICB1bnNp
Z25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKK3By
aXZhdGU6CisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJn
ZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRl
cmVmKCk7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7
CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwor
CisgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+LCBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKworICAgIFJlZlB0cjxJREJBbnk+IG1f
c291cmNlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9yZXF1ZXN0RmluaXNoZWQ7IC8v
IElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHM/IElmIG5vdCwg
d2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOworICAgIGJvb2wgbV9j
b250ZXh0U3RvcHBlZDsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5xdWV1ZWRFdmVu
dHM7CisKKyAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJz
b3IuCisgICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5
cGU7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7CisKKyAgICBFdmVudFRhcmdldERh
dGEgbV9ldmVudFRhcmdldERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlJlcXVlc3Rf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJS
ZXF1ZXN0LmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9y
YWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRXZlbnRUYXJnZXQKKyAg
ICBdIElEQlJlcXVlc3QgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJlc3Vs
dAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlCisgICAgICAg
ICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERPTVN0
cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3Vy
Y2U7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bjsKKworICAgICAgICAvLyBTdGF0ZXMKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9B
RElORyA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAyOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKKworICAgICAg
ICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdWNjZXNzOwor
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9N
U3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFs
XSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIo
aW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBF
dmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3Bh
dGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9u
KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhY2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYWNpbmcuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYWNpbmcuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIElEQlRyYWNpbmdfaAorI2RlZmluZSBJREJUcmFjaW5nX2gKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisKKyNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCisjZGVmaW5lIElEQl9UUkFDRShhKSBUUkFDRV9FVkVOVDAoIkluZGV4ZWREQiIs
IChhKSk7CisKKyNlbHNlCisKKyNkZWZpbmUgSURCX1RSQUNFKGEpICgodm9pZCkwKQorCisjZW5k
aWYgLy8gIFBMQVRGT1JNKENIUk9NSVVNKQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFjaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHA6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZl
bnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRl
ICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCit7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNh
Y3Rpb24oY29udGV4dCwgYmFja2VuZCwgZGIpKSk7CisgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJ
Zk5lZWRlZCgpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK0lEQlRy
YW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURC
RGF0YWJhc2UqIGRiKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAg
LCBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fZGF0YWJhc2UoZGIpCisgICAgLCBtX21vZGUo
bV9iYWNrZW5kLT5tb2RlKCkpCisgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2UpCisg
ICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
ICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFuc2FjdGlvbiht
X2JhY2tlbmQuZ2V0KCkpOworfQorCitJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkK
K3sKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2FjdGlvbjo6
YmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKK30KKworYm9v
bCBJREJUcmFuc2FjdGlvbjo6ZmluaXNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5z
YWN0aW9uRmluaXNoZWQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlRyYW5zYWN0aW9uOjptb2Rl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb2RlOworfQorCitJREJEYXRhYmFzZSogSURCVHJh
bnNhY3Rpb246OmRiKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKK30K
KworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fdHJh
bnNhY3Rpb25GaW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIElEQk9iamVj
dFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBp
ZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9
IElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBv
YmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RT
dG9yZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3Jl
YXRlZChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBtX29i
amVjdFN0b3JlTWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNT
RVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3Zl
KG5hbWUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCit7CisgICAgaWYgKG1f
dHJhbnNhY3Rpb25GaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7CisgICAgaWYgKG1fYmFja2VuZCkKKyAgICAgICAgbV9i
YWNrZW5kLT5hYm9ydCgpOworfQorCitJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVy
OjpPcGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24sIElEQkN1cnNvciogY3Vyc29yKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiks
CisgICAgICBtX2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJP
cGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKworSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3Rp
Zmllcjo6fk9wZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdp
c3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5h
ZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAg
SGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJz
b3JzKTsKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkgPSBjdXJzb3Jz
LmJlZ2luKCk7IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT5jbG9zZSgp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBtX2NoaWxkUmVxdWVzdHMuYWRkKHJlcXVlc3QpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIC8vIElmIHdlIGFib3J0ZWQgdGhlIHJlcXVlc3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZl
IGJlZW4gcmVtb3ZlZC4KKyAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb25GaW5pc2hlZCk7CisgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3RzLmJlZ2luKCk7
CisgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAgICAgIHJlcXVl
c3QtPmFib3J0KCk7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRl
KCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAgaWYgKG1fbW9k
ZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNv
cnMoKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBJ
REJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFu
eW9uZSBoYXMgYSBvciBjYW4KKyAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFu
eSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKKyAgICAvLyAgICAg
ICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5l
cmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAgIHJldHVybiAhbV90cmFuc2FjdGlvbkZpbmlzaGVk
IHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK2NvbnN0IEF0
b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVHJhbnNhY3Rpb247Cit9CisKK1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbjo6
ZGlzcGF0Y2hFdmVudCIpOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAg
ICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoZXZlbnQtPnRh
cmdldCgpID09IHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25GaW5pc2hlZCA9IHRydWU7CisKKyAg
ICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0
b3JlTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworCisgICAgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOworICAg
IHRhcmdldHMuYXBwZW5kKGRiKCkpOworCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3Vz
dG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2Uu
CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgcmV0dXJu
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworfQor
Citib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0IGlz
IHNjaGVkdWxlCisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0aGUgY29tcGxldGUvYWJvcnQgZXZl
bnQgaXMgZW5xdWV1ZWQuCisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9w
KCk7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAgICBhYm9ydCgpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV90cmFuc2FjdGlvbkZpbmlzaGVkLCAiQSBm
aW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUgJXMu
IiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1
ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQpOworfQorCitFdmVudFRhcmdldERhdGEqIElEQlRyYW5z
YWN0aW9uOjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERh
dGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0
aW9uX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25DYWxsYmFja3MuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vy
c29yOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3Mg
SURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25DYWxsYmFja3MsIHB1YmxpYyBF
dmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFz
ZSopOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uKCk7CisKKyAgICBlbnVtIE1vZGUgewor
ICAgICAgICBSRUFEX09OTFkgPSAwLAorICAgICAgICBSRUFEX1dSSVRFID0gMSwKKyAgICAgICAg
VkVSU0lPTl9DSEFOR0UgPSAyCisgICAgfTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OworICAgIGJvb2wgZmluaXNoZWQoKSBjb25zdDsKKwor
ICAgIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZSogZGIoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICBj
bGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3BlbkN1cnNv
ck5vdGlmaWVyKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+LCBJREJDdXJzb3IqKTsKKyAgICAg
ICAgfk9wZW5DdXJzb3JOb3RpZmllcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICAgICAgSURCQ3Vyc29yKiBtX2N1cnNv
cjsKKyAgICB9OworCisgICAgdm9pZCByZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAg
IHZvaWQgdW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAgIHZvaWQgb2JqZWN0U3Rv
cmVDcmVhdGVkKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+KTsKKyAg
ICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmKTsKKworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY29tcGxldGUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoZXJyb3IpOworCisgICAgLy8gSURCVHJhbnNhY3Rpb25DYWxsYmFja3MKKyAgICB2aXJ0dWFs
IHZvaWQgb25BYm9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7CisKKyAgICAv
LyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZp
cnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCkgT1ZFUlJJREU7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzPjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFj
a3M+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJEYXRhYmFzZSopOworCisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoSURCQ3Vyc29yKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJz
b3IqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBk
ZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgp
OworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsK
KworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsK
KyAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgc2hvcnQg
bV9tb2RlOworICAgIGJvb2wgbV90cmFuc2FjdGlvbkZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJs
ZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzIG9yIGFsbG93IGFueSBuZXcgcmVxdWVz
dHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOwor
CisgICAgTGlzdEhhc2hTZXQ8SURCUmVxdWVzdCo+IG1fY2hpbGRSZXF1ZXN0czsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gPiBJREJPYmplY3RT
dG9yZU1hcDsKKyAgICBJREJPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlTWFwOworCisgICAg
SGFzaFNldDxJREJDdXJzb3IqPiBtX29wZW5DdXJzb3JzOworCisgICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlv
bl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3Qs
CisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJUcmFuc2FjdGlvbiB7CisgICAgICAgIC8v
IE1vZGVzCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9IDA7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAxOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7CisKKyAgICAgICAgLy8gUHJvcGVydGll
cworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgbW9kZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOworICAgICAgICAvLyBNZXRob2Rz
CisgICAgICAgIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChpbiBET01TdHJpbmcgbmFtZSkK
KyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICB2b2lk
IGFib3J0ICgpOworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25hYm9ydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0
ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgLy8g
RXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlz
cGF0Y2hFdmVudChpbiBFdmVudCBldnQpIAorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0
aW9uKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlz
aW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBs
LmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRh
dGFiYXNlKSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3Rv
cmVOYW1lcyhvYmplY3RTdG9yZXMpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fc3RhdGUo
VW51c2VkKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24o
ZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVUcmFuc2FjdGlvbigpKQorICAgICwgbV90
YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVk
KQorICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6dGFza0V2ZW50VGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQoreworICAg
IEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOworICAgIEFTU0VSVChtX21vZGUgPT0gSURCVHJh
bnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlzRW1wdHko
KSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVU
cmFuc2FjdGlvbih0aGlzKTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJs
ZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxl
dGUgb3IgYWJvcnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Cit9CisKK1Bh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8gRG9lcyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxk
bid0IGJlIHRoYXQgc2xvdyBpbiBwcmFjdGljZS4KKyAgICBpZiAobV9tb2RlICE9IElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhu
YW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5h
bWUpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0IG5vdyBiZWFj
dXNlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdzCisgICAgLy8g
ICAgICAgIGJldHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNrIG9jY3Vycykg
YW5kIHRoZSAub2JqZWN0U3RvcmUgY2FsbC4KKyAgICAvLyAgICAgICAgVGhlcmUncyBhIGJ1ZyB0
byBtYWtlIHRoaXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtlIGl0IGltcG9z
c2libGUgaGVyZSwgd2UKKyAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgorICAg
IGlmICghb2JqZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvYmpl
Y3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spCit7
CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoYWJvcnRUYXNrKQorICAgICAg
ICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlmIChtX3N0YXRl
ID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0Iik7CisgICAgaWYgKG1fc3RhdGUgPT0g
RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3Rh
dGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBhYm9ydCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKworICAgIG1fc3RhdGUg
PSBGaW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisgICAgbV90YXNrRXZlbnRUaW1l
ci5zdG9wKCk7CisKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgaWYgKHdhc1J1bm5pbmcp
CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBSdW4gdGhlIGFi
b3J0IHRhc2tzLCBpZiBhbnkuCisgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzayht
X2Fib3J0VGFza1F1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgbV9hYm9ydFRhc2tR
dWV1ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICB9
CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7
CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFu
c2FjdGlvbih0aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmlu
aXNoZWQodGhpcyk7CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBj
dXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNr
ZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWRkUGVuZGluZ0V2ZW50cyhpbnQg
bikKK3sKKyAgICBtX3BlbmRpbmdFdmVudHMgKz0gbjsKKyAgICBBU1NFUlQobV9wZW5kaW5nRXZl
bnRzID49IDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRpZENvbXBs
ZXRlVGFza0V2ZW50cygpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOworICAgIEFTU0VSVCht
X3BlbmRpbmdFdmVudHMpOworICAgIG1fcGVuZGluZ0V2ZW50cy0tOworCisgICAgaWYgKCFtX3Rh
c2tFdmVudFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGFza0V2ZW50VGltZXIuc3RhcnRP
bmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJ1bigpCit7
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmlu
Zyk7CisgICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAgIG1fdGFza1Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3Rh
dGUgPSBTdGFydFBlbmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uU3RhcnRlZCh0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQoKQoreworICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29t
bWl0Iik7CisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSBy
ZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4g
V2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAg
IC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBS
dW5uaW5nKTsKKyAgICBBU1NFUlQobV90YXNrUXVldWUuaXNFbXB0eSgpKTsKKworICAgIG1fc3Rh
dGUgPSBGaW5pc2hlZDsKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlv
bi0+Y29tbWl0KCk7CisgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMp
OworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisgICAgbV9kYXRh
YmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKQoreworICAgIElEQl9UUkFD
RSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQiKTsKKyAgICBBU1NF
UlQoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBl
bmRpbmcpIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV9zdGF0
ZSA9IFJ1bm5pbmc7CisgICAgfQorCisgICAgVGFza1F1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3
YXAobV90YXNrUXVldWUpOworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpICYmIG1fc3RhdGUg
IT0gRmluaXNoZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAg
ICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHF1ZXVlLmZpcnN0
KCkucmVsZWFzZSgpKTsKKyAgICAgICAgcXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgbV9w
ZW5kaW5nRXZlbnRzKys7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgIH0KK30K
Kwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkKFRp
bWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQiKTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBSdW5uaW5nKTsKKworICAgIGlmICghbV9wZW5kaW5nRXZlbnRzICYmIG1fdGFz
a1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgbGFzdCB0YXNrIGV2ZW50IGhhcyBj
b21wbGV0ZWQgYW5kIHRoZSB0YXNrCisgICAgICAgIC8vIHF1ZXVlIGlzIGVtcHR5LiBDb21taXQg
dGhlIHRyYW5zYWN0aW9uLgorICAgICAgICBjb21taXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBvdGhlciBldmVudHMgdG8gY29t
cGxldGUuIEhvd2V2ZXIsCisgICAgLy8gdGhlIHRhc2sgcXVldWUgaXMgbm9uLWVtcHR5IGFuZCB0
aGUgdGltZXIgaXMgaW5hY3RpdmUuCisgICAgLy8gV2UgY2FuIHRoZXJmb3JlIHNjaGVkdWxlIHRo
ZSB0aW1lciBhZ2Fpbi4KKyAgICBpZiAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSAmJiAhbV90YXNr
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3NlT3BlbkN1cnNvcnMoKQor
eworICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+OjppdGVyYXRvciBpID0g
bV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKKyAg
ICAgICAgKCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Cit9CisKK307
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiBhYm9ydFRhc2spOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fs
bGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3Mg
PSBjYWxsYmFja3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1
cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVu
dHMoaW50KTsKKworICAgIHZvaWQgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0
IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKworICAgIGVudW0gU3RhdGUgeworICAg
ICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFN0YXJ0
UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHll
dCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRl
ZCBidXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9y
dGVkIG9yIGNvbW1pdHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQg
Y29tbWl0KCk7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+Kik7CisgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisK
KyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOworICAgIHVuc2ln
bmVkIHNob3J0IG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3Rh
c2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworCisgICAgLy8gRklY
TUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KKyAgICBU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKKyAgICBUaW1lcjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOworICAgIGludCBtX3Bl
bmRpbmdFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVu
Q3Vyc29yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisj
ZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
REJDdXJzb3JCYWNrZW5kSW1wbDsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzOworCit0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJUcmFuc2FjdGlvbiAoYXN5
bmMpIGFuZCBJREJUcmFuc2FjdGlvblN5bmMgKHN5bmMpLgorLy8gVGhpcyBpcyBpbXBsZW1lbnRl
ZCBieSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4g
b3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNh
bGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKKy8vIHRyaWdn
ZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2NsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNo
b3J0IG1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3MqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFkZFBlbmRpbmdFdmVudHMoaW50KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmg6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNh
bGxiYWNrc19oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25D
YWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBvbkNvbXBsZXRlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6MTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkpOworfQorCitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
KSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIG1fc3RhcnRlZFRyYW5z
YWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25z
KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBpZiAobV9z
dGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NF
UlQoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAg
ICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2Ug
aWYgKG1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAg
IG1fcnVubmluZ1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFu
c2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNh
Y3Rpb25zKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25z
aXN0aWVuY3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29s
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBpZiAo
bV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgZm91
bmQgPSB0cnVlOworICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNh
Y3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgfQorICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbikpOworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZgorCit2b2lkIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKK3sKKyAgICAv
LyBGSVhNRTogRm9yIG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rpb24gdG8gcnVuIGF0
IGEgdGltZS4KKyAgICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9ICptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICBtX3N0YXJ0ZWRUcmFu
c2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICBtX3J1bm5pbmdUcmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uKTsKKyAgICB0cmFuc2FjdGlvbi0+cnVuKCk7Cit9CisKK307CisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Jf
aAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxs
YmFja3M7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworCisvLyBUcmFuc2FjdGlvbnMg
YXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgorY2xhc3MgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCk7CisKKyAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQg
YW5kIGZpbmlzaC4KKyAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworCisgICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5z
YWN0aW9ucygpOworCisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3YXkgdG8ga2Vl
cCByZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCisgICAgSGFzaE1hcDxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+ID4gbV90
cmFuc2FjdGlvbnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBzdGF0ZXMgYXJl
IGdyb3VwZWQgYmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8v
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gSURCVmVyc2lvbkNoYW5nZUV2ZW50
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudCh2
ZXJzaW9uLCBldmVudFR5cGUpKTsKK30KKworSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJz
aW9uQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSkKKyAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypjYW5CdWJibGUqLywg
ZmFsc2UgLypjYW5jZWxhYmxlKi8pCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKwor
SURCVmVyc2lvbkNoYW5nZUV2ZW50Ojp+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCkKK3sKK30KKwor
U3RyaW5nIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6dmVyc2lvbigpCit7CisgICAgcmV0dXJuIG1f
dmVyc2lvbjsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9ySURCVmVyc2lvbkNoYW5nZUV2ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnRfaAorI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55Owor
CitjbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgdmVyc2lvbiA9IFN0cmluZygpLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSA9IEF0b21pY1N0cmluZygpKTsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZlbnQo
KTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKTsKKworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSURC
VmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOworCisgICAgU3RyaW5nIG1fdmVyc2lvbjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
ZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmlk
bAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSURCVmVyc2lvbkNoYW5nZUV2
ZW50IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNp
b247CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q+IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKQoreworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdChhZG9w
dFJlZihuZXcgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoY29udGV4dCwgc291cmNlLCB2ZXJzaW9u
KSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiByZXF1ZXN0
LnJlbGVhc2UoKTsKKworfQorCitJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6SURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorICAgIDogSURCUmVxdWVzdChj
b250ZXh0LCBzb3VyY2UsIDApCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKworSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q6On5JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpCit7Cit9CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmludGVyZmFjZU5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6Om9u
QmxvY2tlZCgpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5p
c051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdl
RXZlbnQ6OmNyZWF0ZShtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdF9oCisjZGVm
aW5lIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogcHVibGljIElEQlJlcXVlc3QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCB+SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QoKTsKKworICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKKworICAgIC8vIEV2ZW50VGFy
Z2V0CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tlZCk7CisKK3By
aXZhdGU6CisgICAgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisK
KyAgICBTdHJpbmcgbV92ZXJzaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJSZXF1ZXN0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVE
X0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0
CisgICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgeworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CisgICAgfTsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtOTg3
LDYgKzk4Nyw3IEBACiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewogICAg
ICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAgICctLWlu
Y2x1ZGUnLCAnLi4vTW9kdWxlcy9pbmRleGVkZGInLAogICAgICAgICAgICAgICAnLS1pbmNsdWRl
JywgJy4uL01vZHVsZXMvbWVkaWFzdHJlYW0nLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywg
Jy4uL2NzcycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vZG9tJywKQEAgLTE4Mzks
NiArMTg0MCw4IEBACiAKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwuY3BwJCddLAog
CisgICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZVxcLmNwcCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywg
J2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAn
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxcXC5jcHAkJ10sCiAgICAgICAg
IFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFteL10qXFwuY3BwJCddLApAQCAtMTg1
Nyw4ICsxODYwLDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsdWdpbnMvbnBhcGlcXC5jcHAk
J10sCiAgICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudFxc
LmgkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlclxcLmNw
cCQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2VcXC5jcHAkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0lEQktleVBhdGhC
YWNrZW5kSW1wbFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2Uv
T3JpZ2luVXNhZ2VSZWNvcmRcXC4oY3BwfGgpJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudFxcLmNwcCQnXSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjQxMTAsNiArMjQxMTAsMTY2IEBACiAJCQkJPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJ
CQk8RmlsdGVyCisJCQkJTmFtZT0iaW5kZXhlZGRiIgorCQkJCT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkFueS5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJBbnkuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkNhbGxiYWNrcy5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCQ3Vyc29yLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xp
bmRleGVkZGJcSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vy
c29yQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkRhdGFiYXNlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJh
c2VFcnJvci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
aW5kZXhlZGRiXElEQkZhY3RvcnkuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeS5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQklu
ZGV4LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJJbmRleEJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5k
ZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFj
a2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5LmNwcCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhl
ZGRiXElEQktleS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuY3BwIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCS2V5UmFuZ2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cTW9kdWxlc1xpbmRleGVkZGJcSURCUmVxdWVzdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJS
ZXF1ZXN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJUcmFuc2FjdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJPC9GaWx0ZXI+
CisJCQk8RmlsdGVyCiAJCQkJTmFtZT0id2Vic29ja2V0cyIKIAkJCQk+CiAJCQkJPEZpbGUKQEAg
LTcwNzM0LDE2MiArNzA4OTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkFueS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQW55LmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ2Fs
bGJhY2tzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3IuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2UuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlRXJyb3IuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnkuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkluZGV4LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2VuZEltcGwuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkluZGV4QmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxJREJLZXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQktleS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQktleVJhbmdlLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJLZXlSYW5n
ZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dG9yYWdlXElEQk9iamVjdFN0b3JlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJPYmplY3RTdG9yZS5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJSZXF1ZXN0LmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJS
ZXF1ZXN0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcSURCVHJhbnNhY3Rpb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQlRyYW5zYWN0aW9uLmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3Rv
cmFnZVRhc2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTkzMCwxNCArMTkzMCw5IEBACiAJCTgwOUREMUUwMTMwREUyQUQwMENB
RTNFRCAvKiBDU1NTdHlsZUFwcGx5UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwOUREMURFMTMwREUyQUQwMENBRTNFRCAvKiBDU1NTdHls
ZUFwcGx5UHJvcGVydHkuaCAqLzsgfTsKIAkJODEwMkM1ODgxMzI1QkIxMTAwRERFNjdBIC8qIFN0
cmluZ0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgxMDJDNTg3MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAgKi87
IH07CiAJCTgxNUU2MTY3MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxNUU2MTY2MTMy
NTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmNwcCAqLzsgfTsKLQkJODFBNzMyNUUx
MjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNv
ci5oICovOyB9OwotCQk4MUE3MzI2MDEyMTAxOEE0MDBGQzBEOUUgLyogSURCQ3Vyc29yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQTczMjVGMTIx
MDE4QTQwMEZDMEQ5RSAvKiBJREJDdXJzb3IuY3BwICovOyB9OwotCQk4MUE3MzI3ODEyMTAxOUUx
MDBGQzBEOUUgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQTczMjc3MTIxMDE5RTEwMEZDMEQ5RSAvKiBJREJD
dXJzb3JCYWNrZW5kSW1wbC5oICovOyB9OwogCQk4MUFDNTk5OTEzMTYzNkU2MDAwOUE3RTAgLyog
RGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODFBQzU5OTcxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW0uaCAq
LzsgfTsKIAkJODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUFDNTk5
ODEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaCAqLzsgfTsKIAkJODFB
QzZDMzYxMzFDNTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUFDNkMzNTEzMUM1N0QzMDAwOUE3RTAg
LyogU3RyaW5nQ2FsbGJhY2suaCAqLzsgfTsKLQkJODFCRTIwOTgxMUY0QUI4RDAwOTE1REZBIC8q
IElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAgKi87IH07Ci0JCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oICovOyB9OwogCQk4MUJFMjBEMjExRjRCQzMyMDA5MTVERkEgLyogSlNJREJDdXJz
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFC
RTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLzsgfTsKIAkJODFCRTIw
RDMxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBODExRjRCNjZGMDA5MTVERkEgLyogSlNJ
REJDdXJzb3IuaCAqLzsgfTsKIAkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJEIC8qIERyYWdTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFGNjVG
RjUxMzc4OEZBQTAwRkY2RjJEIC8qIERyYWdTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzA1LDYgKzMzMDAsNzkgQEAKIAkJOTcwQjcy
QTYxNDUwMDhFQjAwRjAwQTM3IC8qIEV2ZW50SGVhZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwQjcyQTUxNDUwMDhFQjAwRjAwQTM3IC8qIEV2
ZW50SGVhZGVycy5oICovOyB9OwogCQk5NzExNDYwMzE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdh
dG9yR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMTQ2MDAxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdlb2xvY2F0aW9u
LmNwcCAqLzsgfTsKIAkJOTcxMTQ2MDQxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdlb2xv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzExNDYwMTE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uaCAqLzsgfTsK
KwkJOTcxMkE1QUQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1
NDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLzsgfTsK
KwkJOTcxMkE1QUUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTUx
NTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICovOyB9OworCQk5
NzEyQTVCMDE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJBbnkuY3BwICovOyB9OworCQk5NzEyQTVCMTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1ODE1
MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi87IH07CisJCTk3MTJBNUIzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3Rv
cmUuaCAqLzsgfTsKKwkJOTcxMkE1QjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovOyB9OworCQk5NzEyQTVCNTE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3Iu
Y3BwICovOyB9OworCQk5NzEyQTVCNjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1RDE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi87IH07CisJCTk3MTJBNUI4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVCOTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5k
SW1wbC5oICovOyB9OworCQk5NzEyQTVCQTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1NjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCAqLzsgfTsKKwkJOTcxMkE1QkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU2MjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLzsgfTsK
KwkJOTcxMkE1QkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovOyB9OworCQk5NzEyQTVCRTE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFi
YXNlLmNwcCAqLzsgfTsKKwkJOTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLzsgfTsKKwkJOTcxMkE1QzExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVDMjE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1QzMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVDNDE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrcy5oICovOyB9OworCQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwICovOyB9OworCQk5NzEyQTVDNjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzEyQTU2RDE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsLmggKi87IH07CisJCTk3MTJBNUM3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU2RTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFcnJvci5oICovOyB9OworCQk5
NzEyQTVDOTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzAxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLzsgfTsKKwkJOTcxMkE1Q0Ex
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MTE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLzsgfTsKKwkJOTcxMkE1Q0MxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MzE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnRE
aXNwYXRjaGVyLmNwcCAqLzsgfTsKKwkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2
ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICov
OyB9OworCQk5NzEyQTVDRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3NTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgKi87IH07CisJCTk3MTJBNUNGMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovOyB9
OworCQk5NzEyQTVEMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovOyB9OworCQk5
NzEyQTVEMjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3OTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi87IH07CisJCTk3MTJBNUQzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QTE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovOyB9OworCQk5NzEyQTVE
NDE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdCMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVE
NTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0MxNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4LmNwcCAqLzsgfTsKKwkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3RDE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLzsgfTsKKwkJOTcxMkE1RDgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4QmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEyQTVEOTE1MDA0RURBMDA0OEFGMTAgLyog
SURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZElt
cGwuaCAqLzsgfTsKKwkJOTcxMkE1REExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
ICovOyB9OworCQk5NzEyQTVEQjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgyMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXkuY3BwICovOyB9OworCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi87IH07CisJCTk3MTJBNURF
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXlQYXRoLmNwcCAqLzsgfTsKKwkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTg2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi87IH07CisJCTk3MTJBNUUwMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODcxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUUxMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXlQYXRoQmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1RTIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTg5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgKi87IH07
CisJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQktleVJhbmdlLmggKi87IH07CisJCTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcCAqLzsgfTsKKwkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlLmggKi87IH07CisJCTk3MTJBNUU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLzsgfTsK
KwkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThGMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi87IH07CisJCTk3MTJBNUU5MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0
U3RvcmUuY3BwICovOyB9OworCQk5NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0
U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9OworCQk5NzEy
QTVFQzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MzE1MDA0
RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3
MTJBNUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NDE1MDA0
RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEy
QTVFRTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NTE1
MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07
CisJCTk3MTJBNUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNTk2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cCAqLzsgfTsKKwkJOTcxMkE1RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmggKi87IH07CisJCTk3MTJBNUYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKKwkJOTcxMkE1RjIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0
LmggKi87IH07CisJCTk3MTJBNUY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5QjE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhY2luZy5oICovOyB9OworCQk5NzEyQTVGNTE1MDA0RURBMDA0
OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uLmNwcCAqLzsgfTsKKwkJOTcxMkE1RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKKwkJOTcxMkE1
RjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwICovOyB9OworCQk5NzEy
QTVGOTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTAxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1
RkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovOyB9Owor
CQk5NzEyQTVGQjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUEyMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oICovOyB9OworCQk5NzEy
QTVGQzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBMzE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCTk3
MTJBNUZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBNDE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OworCQk5NzEy
QTVGRTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE1MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovOyB9OworCQk5NzEyQTVGRjE1
MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBNjE1MDA0RURBMDA0OEFGMTAg
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi87IH07CisJCTk3MTJBNjAxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBODE1MDA0RURBMDA0OEFGMTAgLyogSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwICovOyB9OworCQk5NzEyQTYwMjE1MDA0RURBMDA0OEFG
MTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oICovOyB9OworCQk5NzEyQTYwNDE1MDA0RURBMDA0OEFGMTAgLyog
UGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuY3BwICovOyB9OworCQk5NzEyQTYwNTE1MDA0RURBMDA0OEFGMTAgLyog
UGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBQzE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5k
ZXhlZERhdGFiYXNlLmggKi87IH07CiAJCTk3MjA1QUFGMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBE
aXJlY3RvcnlEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzIwNUFBRDEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1l
bnQuY3BwICovOyB9OwogCQk5NzIwNUFCMDEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MjA1QUFFMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5oICovOyB9
OwogCQk5NzIwNUFCNTEyMzkyOTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzIwNUFCMTEyMzkyOTEw
MDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgKi87IH07CkBAIC0zNDE5LDcgKzM0ODcsNiBA
QAogCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc3RTJFMEMxMkYwRkM5QzAwQzEz
Mzc5IC8qIFhTU0F1ZGl0b3IuaCAqLzsgfTsKIAkJOTc4QUQ2NzQxNDEzMEE4RDAwQzdDQUUzIC8q
IEhUTUxTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzhBRDY3MTE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNw
cCAqLzsgfTsKIAkJOTc4QUQ2NzUxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4QUQ2NzIx
NDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5oICovOyB9OwotCQk5NzhEMDdCMjE0
NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4RDA3QjExNDVBMEVCRDAwOTY5MDhE
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJOTc4RDA3QjQxNDVBMEVDRDAw
OTY5MDhEIC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCMzE0NUEwRUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9u
LmNwcCAqLzsgfTsKIAkJOTc4RDA3QjYxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4RDA3
QjUxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhEMDdC
ODE0NUEwRjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCNzE0NUEw
RjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgKi87IH07CkBA
IC01MDAzLDEzICs1MDcwLDggQEAKIAkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1RDMxREY4MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAg
Ki87IH07CiAJCUI1RDMxREZCMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjkx
MUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggKi87IH07CiAJCUI1RDM2MDFB
MTEyRjhCNTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQzNjAxOTExMkY4QjU2MDA0OERFQTggLyog
RGF0YWJhc2VDYWxsYmFjay5oICovOyB9OwotCQlCNjE3NjI1NDEyMDMzNzRGMDBFRjkxMTQgLyog
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNjE3NjI1MzEyMDMzNzRGMDBFRjkxMTQgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07Ci0JCUI2MTc2MjYyMTIwMzQ5MDgwMEVGOTExNCAv
KiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNjE3NjI2MTEyMDM0OTA4MDBFRjkxMTQgLyogSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oICovOyB9OwotCQlCNjU2NjI2QTEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJh
bnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsK
LQkJQjY1NjYyNkIxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2ODEyMEIxMTVBMDA2
RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKIAkJQjY1NjYyNzAxMjBCMTIyNzAwNkVB
ODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0
aW9uLmggKi87IH07CiAJCUI2NTY2MjcxMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2
NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKLQkJ
QjY5MUMxRjkxMjA2RDRBMDAwMjVEOTgwIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkEzMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07CiAJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAv
KiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNzM0QjE4MTExOUI5
OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZvbnRU
cmFuc2NvZGVyLmNwcCAqLzsgfTsKIAkJQjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZvbnRU
cmFuc2NvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNzM0QjE4MjExOUI5OTFEMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCAqLzsgfTsKQEAg
LTU1NDgsMTEgKzU2MTAsNiBAQAogCQlDNTU2MTBGMTExQTcwNEVCMDBCODJEMjcgLyogRE9NU3Ry
aW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CiAJ
CUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1
RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IH07CiAJCUM1NUUzOEMwMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIg
LyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwotCQlDNTcyRUUwQTEyMDFDNzM2MDA3
RDhGODIgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU3MkVFMDQxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmNwcCAqLzsg
fTsKLQkJQzU3MkVFMEIxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNTEyMDFDNzM2MDA3RDhG
ODIgLyogSURCSW5kZXguaCAqLzsgfTsKLQkJQzU3MkVFMEQxMjAxQzczNjAwN0Q4RjgyIC8qIElE
QkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU3MkVFMDcxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZElt
cGwuY3BwICovOyB9OwotCQlDNTcyRUUwRTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNr
ZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU3MkVFMDgxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLzsgfTsK
LQkJQzU3MkVFMEYxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MkVFMDkx
MjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQlD
NTcyRUUxRTEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUxQzEyMDFDOUJDMDA3RDhGODIg
LyogSlNJREJJbmRleC5jcHAgKi87IH07CiAJCUM1NzJFRTFGMTIwMUM5QkMwMDdEOEY4MiAvKiBK
U0lEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovOyB9OwogCQlDNTdG
RURFMTEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyog
RmlsZVN5c3RlbS5jcHAgKi87IH07CkBAIC01NTc4LDMwICs1NjM1LDYgQEAKIAkJQzU4NUE2OTEx
MUQ0RkIwODAwNEMzRTRCIC8qIEpTSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2NzkxMUQ0RkIwNzAwNEMzRTRCIC8qIEpTSURC
UmVxdWVzdC5oICovOyB9OwogCQlDNTg1QTY5NjExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0
b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
ODVBNjk0MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuY3BwICovOyB9OwogCQlDNTg1
QTY5NzExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY5NTExRDRGQjEzMDA0QzNFNEIgLyog
SlNJREJGYWN0b3J5LmggKi87IH07Ci0JCUM1ODVBNkNDMTFENEZCM0QwMDRDM0U0QiAvKiBJREJB
bnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4
NUE2OTgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgKi87IH07Ci0JCUM1ODVBNkNEMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLzsg
fTsKLQkJQzU4NUE2Q0YxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OUIxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkNhbGxiYWNrcy5oICovOyB9OwotCQlDNTg1QTZEMTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU4NUE2OUQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXJy
b3IuaCAqLzsgfTsKLQkJQzU4NUE2RDMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTg1QTY5RjExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLzsgfTsK
LQkJQzU4NUE2RDUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QTEx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OwotCQlD
NTg1QTZEODExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkE0MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZS5oICovOyB9OwotCQlDNTg1QTZFNjExRDRGQjNEMDA0QzNFNEIgLyogSURC
S2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwICovOyB9OwotCQlDNTg1QTZFNzEx
RDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCMzExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmggKi87
IH07Ci0JCUM1ODVBNkU5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCNTExRDRGQjNE
MDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuY3BwICovOyB9OwotCQlDNTg1QTZFQTExRDRGQjNEMDA0
QzNFNEIgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1ODVBNkI2MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5oICov
OyB9OwotCQlDNTg1QTZFRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkI5MTFENEZC
M0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9OwotCQlDNTg1QTZFRTExRDRGQjNE
MDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCQTExRDRGQjNEMDA0QzNFNEIg
LyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCUM1ODVBNkVGMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCQjExRDRGQjNEMDA0QzNFNEIg
LyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9OwotCQlDNTg1QTZGMDExRDRGQjNE
MDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVj
dFN0b3JlLmNwcCAqLzsgfTsKLQkJQzU4NUE2RjExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU4NUE2QkQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oICovOyB9OwotCQlDNTg1QTZGMzExRDRGQjNEMDA0QzNFNEIgLyog
SURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTg1QTZCRjExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5jcHAgKi87IH07Ci0J
CUM1ODVBNkY0MTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDMDExRDRGQjNEMDA0QzNFNEIg
LyogSURCUmVxdWVzdC5oICovOyB9OwotCQlDNTg1QTZGOTExRDRGQjNEMDA0QzNFNEIgLyogSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QzUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmNwcCAqLzsgfTsKLQkJQzU4NUE2RkExMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDNjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKLQkJQzU4NUE2RkIxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDNzExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJQzU4NUE2RkMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU4NUE2QzgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oICovOyB9OwotCQlDNTg1QTZGRDExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDOTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5jcHAgKi87IH07Ci0JCUM1ODVBNkZFMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDQTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5o
ICovOyB9OwogCQlDNTk4OTAyRTE0RTlCMEY4MDBFOEQxOEIgLyogUGxhdGZvcm1QYXN0ZWJvYXJk
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVG
NzY1QkExNEUxRUNGNDAwNkM4OTlCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSAqLzsgfTsK
IAkJQzU5ODkwNTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVGNzY1QjQxNEUxRDQx
NDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM1OTg5MDU4MTRFOUMyOTkwMEU4RDE4QiAvKiBQ
bGF0Zm9ybVBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1QkFDMTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTkw
MCw3ICs1OTMzLDYgQEAKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1
NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsgfTsKIAkJRTRENjg3NzcwRUQ3
QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyog
UHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLzsgfTsKIAkJRTRENjg3NzkwRUQ3QUU0RjAwNkVBOTc4
IC8qIFB1cmdlYWJsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5o
ICovOyB9OwotCQlFQjQ5REI4RjE0RjQ2RThCMDAyMjk5RDkgLyogSURCVHJhY2luZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI0OURCOEUxNEY0NkU4
QjAwMjI5OUQ5IC8qIElEQlRyYWNpbmcuaCAqLzsgfTsKIAkJRUQyQkE4M0MwOUEyNEI5MTAwNkMw
QUM0IC8qIERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFRDJCQTgzQjA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRNYXJrZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFRDUw
MURDNjBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVk
aXRvck1hYy5tbSAqLzsgfTsKIAkJRURFM0E1MDAwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFREUzQTRG
RjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODg0NSwxOCArODg3NywxMiBAQAogCQk4MDlERDFE
RTEzMERFMkFEMDBDQUUzRUQgLyogQ1NTU3R5bGVBcHBseVByb3BlcnR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1N0eWxlQXBwbHlQcm9wZXJ0eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MTAyQzU4NzEzMjVCQjExMDBEREU2N0EgLyogU3RyaW5nQ2Fs
bGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQ2Fs
bGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MTVFNjE2NjEzMjU4N0FB
MDBCNjIyQjAgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8qIElEQkN1cnNvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI3NzEyMTAxOUUxMDBGQzBEOUUgLyogSURCQ3Vy
c29yQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vy
c29yQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFBQzU5OTcx
MzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MUFDNTk5ODEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFBQzVBRTgxMzE2MzkyRTAwMDlBN0Uw
IC8qIERhdGFUcmFuc2Zlckl0ZW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERhdGFUcmFu
c2Zlckl0ZW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUFDNUFFOTEzMTYz
OTJFMDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODFBQzZDMzQxMzFDNTdDMjAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTdHJpbmdDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgxQUM2QzM1MTMxQzU3RDMwMDA5QTdFMCAvKiBTdHJpbmdDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUJFMjA5MzExRjRBQjhEMDA5MTVERkEgLyogSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgxQkUyMDlDMTFGNEFCQkQwMDkx
NURGQSAvKiBJREJDdXJzb3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkN1cnNvci5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMEE3MTFGNEI2NkYwMDkxNURG
QSAvKiBKU0lEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMEE4
MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0lEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MUY2NUZGNTEzNzg4RkFBMDBGRjZGMkQgLyogRHJhZ1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERyYWdTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTAxNzUsNiArMTAyMDEsOTUgQEAKIAkJOTcxMTQ2MDAxNEVGMDA5QTAwNjc0RkQ5IC8qIE5h
dmlnYXRvckdlb2xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5hdmlnYXRvckdlb2xvY2F0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24v
TmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzExNDYwMTE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmF2aWdhdG9yR2VvbG9jYXRpb24uaDsgcGF0aCA9
IE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMTQ2MDIxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdl
b2xvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBOYXZpZ2F0b3JHZW9sb2NhdGlv
bi5pZGw7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0aW9uLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NTQxNTAwNEVEQTAwNDhBRjEw
IC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NjE1MDA0
RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1NTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJBbnkuY3BwOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1NTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJBbnkuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQW55LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJBbnkuaWRsOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkNhbGxiYWNrcy5oOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTVEMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCQ3Vyc29yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQ3Vyc29yLmlkbDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTYwMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1NjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2MjE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yV2l0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2
MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkN1cnNvcldpdGhWYWx1ZS5pZGw7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU2NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRGF0YWJhc2UuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU2NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gSURCRGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2ODE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTZBMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRh
dGFiYXNlQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2QzE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2RDE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlRXJyb3IuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1NkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlRXJyb3IuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTcwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5j
cHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTcxMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTczMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRXZlbnREaXNwYXRjaGVyLmNwcDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVu
dERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRXZlbnRE
aXNwYXRjaGVyLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzUxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SURCRmFjdG9yeS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRmFjdG9y
eS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzEyQTU3NzE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRmFjdG9yeS5pZGw7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJGYWN0b3J5QmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3QjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJJbmRleC5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0UxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJJ
bmRleC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTdGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElE
QkluZGV4QmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTgwMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IElEQkluZGV4QmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTcxMkE1ODExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4MjE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQktl
eS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzEyQTU4MzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg0
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElE
QktleS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4NTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0
aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJLZXlQYXRoLmNw
cDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzEyQTU4NjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXlQYXRoLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTg3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCS2V5UGF0aEJhY2tlbmRJ
bXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg4MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQktleVJhbmdlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IElEQktleVJhbmdlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4QjE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElE
QktleVJhbmdlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RTE1MDA0RURBMDA0OEFGMTAgLyog
SURCTGV2ZWxEQkNvZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBJREJMZXZlbERCQ29kaW5nLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJDb2RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RjE1MDA0
RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5nLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTkw
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1OTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU5NjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU5NzE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IElEQlJlcXVlc3QuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk5MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlJl
cXVlc3QuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVl
c3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQlJlcXVlc3QuaWRsOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYWNpbmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OUMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NzEyQTU5RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1
OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTAxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTVBMTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNUEyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBNTE1MDA0
RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzEyQTVBNjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlZlcnNpb25D
aGFuZ2VFdmVudC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE3MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTVBODE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBOTE1MDA0RURBMDA0OEFGMTAg
LyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNUFBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBQjE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdy
b3VwSW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTVBQzE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBhZ2VHcm91cEluZGV4ZWREYXRh
YmFzZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MjA1QUFEMTIzOTI4Q0EwMEIxNzM4
MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MjA1QUFFMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGVFBEaXJlY3RvcnlEb2N1bWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzIwNUFCMTEyMzkyOTEwMDBCMTcz
ODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZURvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEw
MzAzLDcgKzEwNDE4LDYgQEAKIAkJOTc4QUQ2NzExNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFu
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3Bh
bkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhBRDY3MjE0MTMw
QThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhUTUxTcGFuRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzhBRDY3MzE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBIVE1MU3BhbkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NzhEMDdCMTE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VF
eGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhEMDdCMzE0NUEw
RUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk3OEQwN0I1MTQ1QTBGMDMwMDk2OTA4RCAvKiBGaWxlRXhjZXB0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVFeGNlcHRpb24uY3BwOyBwYXRoID0g
ZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTc4RDA3QjcxNDVBMEYxQjAwOTY5MDhEIC8qIE9wZXJhdGlvbk5vdEFsbG93ZWRFeGNlcHRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlcmF0aW9uTm90QWxs
b3dlZEV4Y2VwdGlvbi5jcHA7IHBhdGggPSBmaWxlYXBpL09wZXJhdGlvbk5vdEFsbG93ZWRFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE5NDcsMTIgKzEyMDYx
LDYgQEAKIAkJQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFjdGl2ZURPTUNhbGxiYWNr
LmNwcDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWN0aXZlRE9NQ2FsbGJh
Y2suaDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VDYWxsYmFjay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNjE3NjI1MzEyMDMzNzRGMDBFRjkxMTQg
LyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCNjE3NjI2MTEyMDM0OTA4MDBFRjkxMTQgLyogSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NTY2MjY3MTIwQjEx
NUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUI2NTY2MjY4MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCNjU2NjI2OTEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNh
Y3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYyNkQxMjBCMTE2QjAwNkVBODVDIC8qIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjY1NjYyNkUxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJUcmFuc2FjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjU2NjI2RjEyMEIxMjI3MDA2RUE4NUMg
LyogSlNJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0lEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjczNEIxODAxMTlCOTkxMTAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZvbnRUcmFuc2NvZGVyLmNwcDsgcGF0aCA9IHRy
YW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI1MzAsMTIgKzEyNjM4LDYgQEAKIAkJQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERP
TVN0cmluZ0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9N
U3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUUzOEJCMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5h
bWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTcyRUUwNDEy
MDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCSW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NTcyRUUwNTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzU3MkVFMDYxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBJREJJbmRleC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NzJF
RTA3MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4QmFja2VuZEltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTcyRUUwODEyMDFDNzM2MDA3RDhGODIgLyogSURC
SW5kZXhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJ
bmRleEJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NzJFRTA5
MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzJFRTFDMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lE
QkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCSW5k
ZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTcyRUUxRDEyMDFDOUJDMDA3
RDhGODIgLyogSlNJREJJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1N0ZFREUwMTIxMkVF
OUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTI1NjEsNDAgKzEyNjYzLDYgQEAKIAkJQzU4NUE2NzkxMUQ0RkIwNzAwNEMzRTRCIC8qIEpTSURC
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQlJlcXVlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2OTQxMUQ0RkIxMzAwNEMzRTRC
IC8qIEpTSURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0lEQkZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTg1QTY5
NTExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDNTg1QTY5ODExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkFueS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUM1ODVBNjk5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM1ODVBNjlBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IElEQkFueS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVB
NjlCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM1ODVBNjlEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlRXJyb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFi
YXNlRXJyb3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlRXJyb3IuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTY5RjExRDRGQjNEMDA0QzNFNEIg
LyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCRGF0YWJhc2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzU4NUE2QTAxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkExMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NTg1QTZBMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNTg1QTZBNDExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QTUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFi
YXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJEYXRhYmFzZS5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCS2V5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjMxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QktleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktl
eS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCS2V5LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQktleVJhbmdlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjYxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQktleVJh
bmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkI3MTFENEZCM0QwMDRD
M0U0QiAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCS2V5UmFu
Z2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCOTExRDRGQjNEMDA0
QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2
QkExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkJCMTFENEZCM0QwMDRD
M0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3Jl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9iamVjdFN0b3Jl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkQxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9i
amVjdFN0b3JlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJPYmplY3RTdG9yZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkJGMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElE
QlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZDMDExRDRG
QjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkMx
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBJREJSZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzUx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzYxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM1ODVBNkM3MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2
QzgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3Rv
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRmFjdG9yeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkNBMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkZh
Y3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2Q0IxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkZhY3Rv
cnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUJBQzE2RjE0RTMwRTQ3MDAw
MDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoTWV0cmljc01hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
OTUyLDcgKzEzMDIwLDYgQEAKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1l
ZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQ
dXJnZWFibGVCdWZmZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQdXJnZWFibGVCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRUI0OURCOEUxNEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRyYWNpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhY2luZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFRDJCQTgzQjA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRN
YXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5
IC8qIEVkaXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBFZGl0b3JNYWMubW07IHBhdGggPSBtYWMvRWRpdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEzOTE2LDYwICsxMzk4Myw2IEBACiAJCQkJQThGNDU3OUQxNEJDMTNF
QzAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCAqLywKIAkJCQlBOEY0NTc5RTE0
QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaCAqLywKIAkJCQlBOEY0NTc5
RjE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsICovLAotCQkJCUM1
ODVBNjk4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuY3BwICovLAotCQkJCUM1ODVBNjk5MTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaCAqLywKLQkJCQlDNTg1QTY5QTExRDRGQjNEMDA0QzNF
NEIgLyogSURCQW55LmlkbCAqLywKLQkJCQlDNTg1QTY5QjExRDRGQjNEMDA0QzNFNEIgLyogSURC
Q2FsbGJhY2tzLmggKi8sCi0JCQkJODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8qIElEQkN1cnNv
ci5jcHAgKi8sCi0JCQkJODFBNzMyNUQxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oICov
LAotCQkJCTgxQkUyMDlDMTFGNEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRsICovLAotCQkJ
CTgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi8s
Ci0JCQkJODFBNzMyNzcxMjEwMTlFMTAwRkMwRDlFIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmgg
Ki8sCi0JCQkJODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2UuaCAqLywKLQkJCQlDNTg1QTZBMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2Uu
Y3BwICovLAotCQkJCUM1ODVBNkE0MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5oICov
LAotCQkJCUM1ODVBNkE1MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCi0J
CQkJQzU4NUE2QTExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
ICovLAotCQkJCUI2MTc2MjYxMTIwMzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmggKi8sCi0JCQkJQjYxNzYyNTMxMjAzMzc0RjAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oICovLAotCQkJCUM1ODVBNjlEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJE
YXRhYmFzZUVycm9yLmggKi8sCi0JCQkJQzU4NUE2OUUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRh
dGFiYXNlRXJyb3IuaWRsICovLAotCQkJCTk3OEQwN0IxMTQ1QTBFQkQwMDk2OTA4RCAvKiBJREJE
YXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8sCi0JCQkJQzU4NUE2OUYxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi8sCi0JCQkJQzU4NUE2QTAxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLywKLQkJCQlDNTg1QTZDOTExRDRGQjNEMDA0
QzNFNEIgLyogSURCRmFjdG9yeS5jcHAgKi8sCi0JCQkJQzU4NUE2Q0ExMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQkZhY3RvcnkuaCAqLywKLQkJCQlDNTg1QTZDQjExRDRGQjNEMDA0QzNFNEIgLyogSURC
RmFjdG9yeS5pZGwgKi8sCi0JCQkJQzU4NUE2QzcxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJQzU4NUE2QzgxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1ODVBNkM1MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi8sCi0JCQkJQzU4NUE2QzYxMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi8sCi0JCQkJQzU3MkVF
MDQxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmNwcCAqLywKLQkJCQlDNTcyRUUwNTEyMDFD
NzM2MDA3RDhGODIgLyogSURCSW5kZXguaCAqLywKLQkJCQlDNTcyRUUwNjEyMDFDNzM2MDA3RDhG
ODIgLyogSURCSW5kZXguaWRsICovLAotCQkJCUM1NzJFRTA3MTIwMUM3MzYwMDdEOEY4MiAvKiBJ
REJJbmRleEJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQlDNTcyRUUwODEyMDFDNzM2MDA3RDhGODIg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1NzJFRTA5MTIwMUM3MzYwMDdEOEY4
MiAvKiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlDNTg1QTZCMjExRDRGQjNE
MDA0QzNFNEIgLyogSURCS2V5LmNwcCAqLywKLQkJCQlDNTg1QTZCMzExRDRGQjNEMDA0QzNFNEIg
LyogSURCS2V5LmggKi8sCi0JCQkJQzU4NUE2QjQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleS5p
ZGwgKi8sCi0JCQkJQzU4NUE2QjUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmNwcCAq
LywKLQkJCQlDNTg1QTZCNjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaCAqLywKLQkJ
CQlDNTg1QTZCNzExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaWRsICovLAotCQkJCUM1
ODVBNkJDMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8sCi0JCQkJQzU4
NUE2QjkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmggKi8sCi0JCQkJQzU4NUE2
QkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLywKLQkJCQlDNTg1QTZC
QTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8sCi0J
CQkJQzU4NUE2QkIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aCAqLywKLQkJCQlDNTg1QTZCRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmggKi8sCi0JCQkJQzU4NUE2QkYxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJl
cXVlc3QuY3BwICovLAotCQkJCUM1ODVBNkMwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0
LmggKi8sCi0JCQkJQzU4NUE2QzExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuaWRsICov
LAotCQkJCUVCNDlEQjhFMTRGNDZFOEIwMDIyOTlEOSAvKiBJREJUcmFjaW5nLmggKi8sCi0JCQkJ
QjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLywKLQkJCQlC
NjU2NjI2ODEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCAqLywKLQkJCQlCNjU2
NjI2OTEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaWRsICovLAotCQkJCUI2NTY2
MjZEMTIwQjExNkIwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAq
LywKIAkJCQk1MUE5MjY3ODBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmNw
cCAqLywKIAkJCQk1MUE5MjY3OTBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFNYW5hZ2Vy
LmggKi8sCiAJCQkJNTFBOTI2N0EwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3Jk
LmNwcCAqLywKQEAgLTE3MDY0LDYgKzE3MDc3LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJOTcxMTQ1RkYxNEVGMDA3OTAwNjc0RkQ5IC8qIGdlb2xvY2F0aW9u
ICovLAorCQkJCTk3MTJBNTUzMTUwMDRFM0MwMDQ4QUYxMCAvKiBpbmRleGVkZGIgKi8sCiAJCQkJ
OTdBQUJDRjcxNEZBMDlCNTAwNzQ1N0FFIC8qIHdlYnNvY2tldHMgKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IE1vZHVsZXM7CkBAIC0xNzA5NSw2ICsxNzEwOSwxMDIgQEAKIAkJCW5hbWUgPSBnZW9sb2Nh
dGlvbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTk3MTJBNTUzMTUwMDRF
M0MwMDQ4QUYxMCAvKiBpbmRleGVkZGIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwICovLAorCQkJCTk3MTJBNTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2UuaCAqLywKKwkJCQk5NzEyQTU1NjE1MDA0RURBMDA0OEFGMTAg
LyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbCAqLywKKwkJCQk5NzEyQTU1NzE1MDA0RURB
MDA0OEFGMTAgLyogSURCQW55LmNwcCAqLywKKwkJCQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAg
LyogSURCQW55LmggKi8sCisJCQkJOTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5p
ZGwgKi8sCisJCQkJOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5o
ICovLAorCQkJCTk3MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLywK
KwkJCQk5NzEyQTU1QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCAqLywKKwkJCQk5
NzEyQTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi8sCisJCQkJOTcxMkE1NUUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5pZGwgKi8sCisJCQkJOTcxMkE1NUYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU2MDE1
MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU2
MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovLAorCQkJ
CTk3MTJBNTYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICovLAor
CQkJCTk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLywK
KwkJCQk5NzEyQTU2NDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCAq
LywKKwkJCQk5NzEyQTU2NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwICovLAor
CQkJCTk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICovLAorCQkJCTk3
MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCisJCQkJOTcxMkE1
NjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovLAorCQkJ
CTk3MTJBNTY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8s
CisJCQkJOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oICovLAorCQkJCTk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrcy5oICovLAorCQkJCTk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuY3BwICovLAorCQkJCTk3MTJBNTZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLywKKwkJCQk5NzEyQTU2RTE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2VFcnJvci5oICovLAorCQkJCTk3MTJBNTZGMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJEYXRhYmFzZUVycm9yLmlkbCAqLywKKwkJCQk5NzEyQTU3MDE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovLAorCQkJCTk3MTJBNTcxMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovLAorCQkJCTk3MTJBNTcyMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwgKi8sCisJCQkJOTcxMkE1NzMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJOTcxMkE1
NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovLAorCQkJCTk3MTJB
NTc1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmNwcCAqLywKKwkJCQk5NzEyQTU3NjE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovLAorCQkJCTk3MTJBNTc3MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAqLywKKwkJCQk5NzEyQTU3ODE1MDA0RURBMDA0OEFG
MTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU3OTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcxMkE1N0ExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLywKKwkJCQk5
NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAq
LywKKwkJCQk5NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICovLAorCQkJ
CTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovLAorCQkJCTk3MTJBNTdF
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5pZGwgKi8sCisJCQkJOTcxMkE1N0YxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3MTJBNTgwMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcxMkE1ODEx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTk3
MTJBNTgyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovLAorCQkJCTk3MTJBNTgzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCAqLywKKwkJCQk5NzEyQTU4NDE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5LmlkbCAqLywKKwkJCQk5NzEyQTU4NTE1MDA0RURBMDA0OEFGMTAgLyogSURC
S2V5UGF0aC5jcHAgKi8sCisJCQkJOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGguaCAqLywKKwkJCQk5NzEyQTU4NzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aEJhY2tl
bmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU4ODE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVJhbmdlLmNwcCAqLywKKwkJCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFu
Z2UuaCAqLywKKwkJCQk5NzEyQTU4QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaWRs
ICovLAorCQkJCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcCAqLywKKwkJCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oICovLAorCQkJCTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZl
bERCQ29kaW5nLmNwcCAqLywKKwkJCQk5NzEyQTU4RjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2
ZWxEQkNvZGluZy5oICovLAorCQkJCTk3MTJBNTkwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmpl
Y3RTdG9yZS5jcHAgKi8sCisJCQkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlLmggKi8sCisJCQkJOTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0
b3JlLmlkbCAqLywKKwkJCQk5NzEyQTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgKi8sCisJCQkJOTcxMkE1OTQxNTAwNEVEQTAwNDhBRjEwIC8qIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU5NTE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJOTcxMkE1OTYx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovLAor
CQkJCTk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmggKi8sCisJCQkJOTcxMkE1OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3Bw
ICovLAorCQkJCTk3MTJBNTk5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmggKi8sCisJ
CQkJOTcxMkE1OUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaWRsICovLAorCQkJCTk3
MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8sCisJCQkJOTcxMkE1OUMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLywKKwkJCQk5NzEyQTU5RDE1
MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLywKKwkJCQk5NzEyQTU5RTE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICovLAorCQkJCTk3MTJBNTlGMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEy
QTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovLAor
CQkJCTk3MTJBNUExMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UuaCAqLywKKwkJCQk5NzEyQTVBMjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rp
b25DYWxsYmFja3MuaCAqLywKKwkJCQk5NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk5NzEyQTVBNTE1MDA0RURB
MDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKKwkJCQk5NzEyQTVBNjE1
MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCisJCQkJOTcxMkE1
QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgKi8sCisJCQkJ
OTcxMkE1QTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcCAq
LywKKwkJCQk5NzEyQTVBOTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaCAqLywKKwkJCQk5NzEyQTVBQTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaWRsICovLAorCQkJCTk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3Jv
dXBJbmRleGVkRGF0YWJhc2UuY3BwICovLAorCQkJCTk3MTJBNUFDMTUwMDRFREEwMDQ4QUYxMCAv
KiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCAqLywKKwkJCSk7CisJCQluYW1lID0gaW5kZXhl
ZGRiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJOTc2RDZDNTcxMjJCOEEx
ODAwMUZEMUY3IC8qIGZpbGVhcGkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMTk5NDEsOCArMjAwNTEsOCBAQAogCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhC
MTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAv
KiBTY3JvbGxiYXIuaCAqLywKIAkJCQkwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xs
YmFyVGhlbWUuY3BwICovLAotCQkJCUM2OTE2MTQ3MTRGNkVCQTcwMDQ2Mzc1QyAvKiBTY3JvbGxi
YXJUaGVtZUNsaWVudC5oICovLAogCQkJCUJDOEI4NTRBMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3Jv
bGxiYXJUaGVtZS5oICovLAorCQkJCUM2OTE2MTQ3MTRGNkVCQTcwMDQ2Mzc1QyAvKiBTY3JvbGxi
YXJUaGVtZUNsaWVudC5oICovLAogCQkJCUJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgKi8sCiAJCQkJQkMxNDAyODkwRTgzNjgwODAwMzE5NzE3
IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi8sCiAJCQkJOTNDMDlDODUwQjA2NTdBQTAw
NUFCRDREIC8qIFNjcm9sbFR5cGVzLmggKi8sCkBAIC0yMjIyMiw2ICsyMjMzMiw3IEBACiAJCQkJ
ODVDN0Y1RTcwQUFGQkFGQjAwNDAxNEREIC8qIERPTVdoZWVsRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1OTg5REQxMEFDQzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5k
b3cuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUFFMTUwMDRFREEwMDQ4QUYxMCAvKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RDJBRDA0MTRCODIz
QTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThG
NDU3QTExNEJDMUE5NDAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGMzVBRTVBQzE0OTI1RjVCMDA0RDU3NzYgLyogRE9NV3JhcHBlclZpc2l0b3Iu
aCBpbiBIZWFkZXJzICovLApAQCAtMjI1OTUsMzEgKzIyNzA2LDQ3IEBACiAJCQkJNTEzRjE0NTQw
QUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTFF
Q0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzU4NUE2Q0QxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzU4NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkNGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJDYWxs
YmFja3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTgxQTczMjVFMTIxMDE4OUIwMEZDMEQ5RSAvKiBJ
REJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTgxQTczMjc4MTIxMDE5RTEwMEZDMEQ5RSAv
KiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODFCRTIwOTkxMUY0
QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCUM1ODVBNkQ4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjYxNzYyNjIxMjAzNDkwODAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUI2MTc2MjU0MTIwMzM3NEYwMEVGOTExNCAvKiBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkQx
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDNTg1QTZEMzExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBI
ZWFkZXJzICovLAotCQkJCUM1ODVBNkZFMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGQzExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGQTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1
NzJFRTBCMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzU3MkVFMEUxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUM1NzJFRTBGMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkU3MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJLZXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkVBMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RUQxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZFRjExRDRG
QjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzU4NUE2RjExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RjQxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUVCNDlEQjhGMTRGNDZFOEIwMDIyOTlE
OSAvKiBJREJUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNjU2NjI2QjEyMEIxMTVBMDA2
RUE4NUMgLyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUI0MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJB
NUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTcxMkE1QkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUJDMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUJGMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QzIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk3MTJBNUMzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUM0MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QzYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTcxMkE1QzcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTk3MTJBNUNBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0YxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUQyMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVEOTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5k
ZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1REExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcx
MkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcx
MkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3MTJBNUUxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVs
REJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUU4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVFQTE1
MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5NzEyQTVFRTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGMDE1MDA0RURB
MDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTcxMkE1RjIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3MTJBNUY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzEyQTVGNjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGQTE1MDA0RURB
MDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5NzEyQTVGQjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25DYWxsYmFj
a3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGRjE1MDA0
RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5NzEyQTYwMjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNzFENTdDMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVy
UmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTEzQTI0MjEzRDQ5RUJBMDBGNUIwNUMgLyogSWRl
bnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTFDNTBFRjg2RDQ3MDA5
RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MjM0MTgsNiArMjM1NDUsNyBAQAogCQkJCUYzODIwODkzMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdl
Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJERDEzNDM2MkYwMDA1MzFC
QzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDJCMEJGMEQ3
OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNjA1
MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdBNjc0QkRDMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODk1MTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdl
UnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJFNTEzNDM2MzNDMDA1MzFC
QzIgLyogUGFnZVNjcmlwdERlYnVnU2VydmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzE3LDgg
KzIzODQ1LDggQEAKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAyNiAvKiBTY3Jv
bGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QjgwODI0NUU1OTAwMUU5
QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzZCMzFCMkUxNEY4NDFGQjAw
ODlGMjNGIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhC
ODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUM2QjMxQjJFMTRGODQxRkIwMDg5RjIzRiAvKiBTY3JvbGxiYXJUaGVtZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODUzRTBFN0M3RjExMDBBQjY5
ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTcxNDA2MTQy
MTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBIZWFkZXJzICovLApAQCAt
MjUzMzcsNiArMjU0NjUsNyBAQAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01X
ZWJLaXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjVFODBBQUZC
QUZCMDA0MDE0REQgLyogRE9NV2hlZWxFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MDNC
OTk4MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTcxMkE1QUQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5N0QyQUQwMzE0QjgyM0E2MDA5M0RGMzIgLyogRE9NV2luZG93
UHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThGNDU3QTAxNEJDMUE4ODAwMENFQTU5
IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTNEQTQ4
MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yNTY1NywyNCArMjU3ODYsMzYgQEAKIAkJCQlCMjc1MzU4RTBCMDUzQTY2MDAyQ0U2NEYgLyog
SWNvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAv
KiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4
RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkNDMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QjAxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjExRDRG
QUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk4MUE3MzI2MDEyMTAxOEE0MDBGQzBEOUUgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTgxQkUyMDk4MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlCNjkxQzFGOTEyMDZENEEwMDAyNUQ5ODAgLyogSURCRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RDUxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTc4RDA3QjIx
NDVBMEVCRDAwOTY5MDhEIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUM1ODVBNkZEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUM1ODVBNkZCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RjkxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1NzJF
RTBBMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlD
NTcyRUUwRDEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlDNTg1QTZFNjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUM1ODVBNkU5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZGMDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2Jq
ZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RUUxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4
NUE2RjMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjY1NjYyNkExMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTk3MTJBNUI1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUJCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QkUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3
MTJBNUMxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3MTJBNUM1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QzkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJB
NUNDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1Q0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTcxMkE1RDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVEMzE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcx
MkE1RDUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTk3MTJBNUQ4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3MTJBNURCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1REUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVBhdGhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFMjE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1RTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJB
NUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTk3MTJBNUYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUY1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJU
cmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVGODE1MDA0RURBMDA0OEFG
MTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
NzEyQTVGQzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVGRTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNjAxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTcxRDU3QjBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1OTEzQTI0MTEzRDQ5RUJBMDBGNUIwNUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTZGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI2NTYxLDYgKzI2NzAyLDcgQEAKIAkJCQlGMzgyMDg5MjE0
N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGMzQ3NDJEQzEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTYwNDE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3Vw
SW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNjc0QkRCMEY5RUJGNEUw
MDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjM4MjA4OTQxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VSdW50aW1lQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SURCQW55LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklE
QkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
SURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkFueT4gSURCQW55OjpjcmVhdGVJbnZhbGlkKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueSgpKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJBbnk+IElEQkFueTo6Y3JlYXRlTnVsbCgpCi17Ci0gICAgUmVmUHRyPElEQkFueT4gaWRiQW55
ID0gYWRvcHRSZWYobmV3IElEQkFueSgpKTsKLSAgICBpZGJBbnktPnNldE51bGwoKTsKLSAgICBy
ZXR1cm4gaWRiQW55LnJlbGVhc2UoKTsKLX0KLQotSURCQW55OjpJREJBbnkoKQotICAgIDogbV90
eXBlKFVuZGVmaW5lZFR5cGUpCi17Ci19Ci0KLUlEQkFueTo6fklEQkFueSgpCi17Ci19Ci0KLVBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKLXsKLSAgICBB
U1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBlKTsKLSAgICByZXR1cm4gbV9kb21TdHJp
bmdMaXN0OwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcj4gSURCQW55OjppZGJDdXJzb3IoKQot
ewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQ3Vyc29yVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRi
Q3Vyc29yOwotfQotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQW55OjppZGJD
dXJzb3JXaXRoVmFsdWUoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQ3Vyc29yV2l0aFZh
bHVlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiQ3Vyc29yV2l0aFZhbHVlOwotfQotCi1QYXNzUmVm
UHRyPElEQkRhdGFiYXNlPiBJREJBbnk6OmlkYkRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV90
eXBlID09IElEQkRhdGFiYXNlVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiRGF0YWJhc2U7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCRmFjdG9yeT4gSURCQW55OjppZGJGYWN0b3J5KCkKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IElEQkZhY3RvcnlUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJGYWN0b3J5Owot
fQotCi1QYXNzUmVmUHRyPElEQkluZGV4PiBJREJBbnk6OmlkYkluZGV4KCkKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IElEQkluZGV4VHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiSW5kZXg7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCS2V5PiBJREJBbnk6OmlkYktleSgpCi17Ci0gICAgQVNTRVJUKG1fdHlw
ZSA9PSBJREJLZXlUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJLZXk7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQotewotICAgIEFTU0VSVCht
X3R5cGUgPT0gSURCT2JqZWN0U3RvcmVUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJPYmplY3RTdG9y
ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCQW55OjppZGJUcmFuc2FjdGlv
bigpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJUcmFuc2FjdGlvblR5cGUpOwotICAgIHJl
dHVybiBtX2lkYlRyYW5zYWN0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gSURCQW55OjpzZXJpYWxpemVkU2NyaXB0VmFsdWUoKQotewotICAgIEFTU0VSVChtX3R5
cGUgPT0gU2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZSk7Ci0gICAgcmV0dXJuIG1fc2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0TnVsbCgpCi17Ci0gICAgQVNTRVJU
KG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBOdWxsVHlwZTsKLX0KLQot
dm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlKQotewotICAg
IEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gRE9NU3RyaW5n
TGlzdFR5cGU7Ci0gICAgbV9kb21TdHJpbmdMaXN0ID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IHZhbHVlKQotewotICAgIEFTU0VS
VChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCQ3Vyc29yV2l0aFZh
bHVlVHlwZTsKLSAgICBtX2lkYkN1cnNvcldpdGhWYWx1ZSA9IHZhbHVlOwotfQotCi12b2lkIElE
QkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90
eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQkN1cnNvclR5cGU7Ci0gICAg
bV9pZGJDdXJzb3IgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUp
OwotICAgIG1fdHlwZSA9IElEQkRhdGFiYXNlVHlwZTsKLSAgICBtX2lkYkRhdGFiYXNlID0gdmFs
dWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJGYWN0b3J5PiB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElE
QkZhY3RvcnlUeXBlOwotICAgIG1faWRiRmFjdG9yeSA9IHZhbHVlOwotfQotCi12b2lkIElEQkFu
eTo6c2V0KFBhc3NSZWZQdHI8SURCSW5kZXg+IHZhbHVlKQotewotICAgIEFTU0VSVChtX3R5cGUg
PT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCSW5kZXhUeXBlOwotICAgIG1faWRi
SW5kZXggPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQktleT4g
dmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5
cGUgPSBJREJLZXlUeXBlOwotICAgIG1faWRiS2V5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJUcmFuc2FjdGlvblR5cGU7
Ci0gICAgbV9pZGJUcmFuc2FjdGlvbiA9IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHZhbHVlKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
VW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCT2JqZWN0U3RvcmVUeXBlOwotICAgIG1f
aWRiT2JqZWN0U3RvcmUgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBV
bmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlOwot
ICAgIG1fc2VyaWFsaXplZFNjcmlwdFZhbHVlID0gdmFsdWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkFueV9oCi0jZGVmaW5lIElE
QkFueV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlzdDsK
LWNsYXNzIElEQkN1cnNvcjsKLWNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZTsKLWNsYXNzIElEQkRh
dGFiYXNlOwotY2xhc3MgSURCRmFjdG9yeTsKLWNsYXNzIElEQkluZGV4OwotY2xhc3MgSURCS2V5
OwotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLWNsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCQW55IDogcHVibGljIFJlZkNvdW50ZWQ8
SURCQW55PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGVJ
bnZhbGlkKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGVOdWxsKCk7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNy
ZWF0ZShUKiBpZGJPYmplY3QpCi0gICAgewotICAgICAgICBSZWZQdHI8SURCQW55PiBhbnkgPSBJ
REJBbnk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICAgICAgYW55LT5zZXQoaWRiT2JqZWN0KTsKLSAg
ICAgICAgcmV0dXJuIGFueS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQW55PiBjcmVhdGUoUGFzc1JlZlB0cjxUPiBp
ZGJPYmplY3QpCi0gICAgewotICAgICAgICBSZWZQdHI8SURCQW55PiBhbnkgPSBJREJBbnk6OmNy
ZWF0ZUludmFsaWQoKTsKLSAgICAgICAgYW55LT5zZXQoaWRiT2JqZWN0KTsKLSAgICAgICAgcmV0
dXJuIGFueS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIH5JREJBbnkoKTsKLQotICAgIGVudW0gVHlw
ZSB7Ci0gICAgICAgIFVuZGVmaW5lZFR5cGUgPSAwLAotICAgICAgICBOdWxsVHlwZSwKLSAgICAg
ICAgRE9NU3RyaW5nTGlzdFR5cGUsCi0gICAgICAgIElEQkN1cnNvclR5cGUsCi0gICAgICAgIElE
QkN1cnNvcldpdGhWYWx1ZVR5cGUsCi0gICAgICAgIElEQkRhdGFiYXNlVHlwZSwKLSAgICAgICAg
SURCRmFjdG9yeVR5cGUsCi0gICAgICAgIElEQkluZGV4VHlwZSwKLSAgICAgICAgSURCS2V5VHlw
ZSwKLSAgICAgICAgSURCT2JqZWN0U3RvcmVUeXBlLAotICAgICAgICBJREJUcmFuc2FjdGlvblR5
cGUsCi0gICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUKLSAgICB9OwotCi0gICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgLy8gVXNlIHR5cGUoKSB0byBm
aWd1cmUgb3V0IHdoaWNoIG9uZSBvZiB0aGVzZSB5b3UncmUgYWxsb3dlZCB0byBjYWxsLgotICAg
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpOwotICAgIFBhc3NSZWZQ
dHI8SURCQ3Vyc29yPiBpZGJDdXJzb3IoKTsKLSAgICBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhW
YWx1ZT4gaWRiQ3Vyc29yV2l0aFZhbHVlKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4g
aWRiRGF0YWJhc2UoKTsKLSAgICBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGlkYkZhY3RvcnkoKTsK
LSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCgpOwotICAgIFBhc3NSZWZQdHI8SURC
S2V5PiBpZGJLZXkoKTsKLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RT
dG9yZSgpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uKCk7
Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSgpOwotCi0gICAgLy8gU2V0IGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLgotICAgIHZvaWQg
c2V0TnVsbCgpOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwotICAg
IHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yPik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0
cjxJREJDdXJzb3JXaXRoVmFsdWU+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlPik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJGYWN0b3J5Pik7Ci0gICAgdm9pZCBz
ZXQoUGFzc1JlZlB0cjxJREJJbmRleD4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCS2V5
Pik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pOwotICAgIHZvaWQg
c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwotCi1wcml2YXRlOgotICAgIElEQkFueSgpOwotCi0g
ICAgVHlwZSBtX3R5cGU7Ci0KLSAgICAvLyBPbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNob3Vs
ZCBldmVyIGJlIGluIHVzZSBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gbV9kb21TdHJpbmdMaXN0OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1faWRiQ3Vyc29y
OwotICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IG1faWRiQ3Vyc29yV2l0aFZhbHVlOwot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9pZGJEYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCRmFj
dG9yeT4gbV9pZGJGYWN0b3J5OwotICAgIFJlZlB0cjxJREJJbmRleD4gbV9pZGJJbmRleDsKLSAg
ICBSZWZQdHI8SURCS2V5PiBtX2lkYktleTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1f
aWRiT2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX2lkYlRyYW5zYWN0
aW9uOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZFNjcmlw
dFZhbHVlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJBbnlfaApJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQW55LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBbnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1t
b2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBDdXN0b21Ub0pTT2JqZWN0Ci0gICAgXSBJREJBbnkg
ewotICAgICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4KLSAg
ICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCShy
ZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJC
YWNraW5nU3RvcmVfaAotI2RlZmluZSBJREJCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFz
cyBTZWN1cml0eU9yaWdpbjsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCQmFja2lu
Z1N0b3JlKCkge307Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShp
bnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+
JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKSA9IDA7Ci0KLSAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwotICAgICAgICB2
aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7fQotICAgIH07Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxp
ZFJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUg
bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsK
LQotICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0gICAgICAgICB2aXJ0dWFsIH5PYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307Ci0gICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgZm9y
RWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZs
YWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1Vu
aXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERh
dGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwg
U3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0
YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKLQot
ICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsKLSAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpID0gMDsKLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0g
MDsKLSAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsK
LSAgICB9OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbikgPSAwOwotCi0gICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxU
cmFuc2FjdGlvbj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24o
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5z
YWN0aW9uKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQot
I2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
Q2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SURCQ2FsbGJhY2tzX2gKLSNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKLQotI2luY2x1ZGUgIkRPTVN0
cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VFcnJvci5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBBbGwgY2hpbGQgY2xhc3NlcyBuZWVkIHRvIGJlIG1h
ZGUgdGhyZWFkc2FmZS4KLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJREJDYWxsYmFja3M+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJDYWxsYmFj
a3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGlu
dWF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29u
c3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURC
S2V5PiA+JiBwcmltYXJ5S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+ID4mIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURC
Q2FsbGJhY2tzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAJKHJldmlz
aW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0j
aW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkN1cnNvcjo6Y3JlYXRlKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURC
QW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQkN1cnNvcihiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0
aW9uKSk7Ci19Ci0KLUlEQkN1cnNvcjo6SURCQ3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3Vy
Y2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IG1fYmFja2VuZChiYWNrZW5k
KQotICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV90cmFuc2FjdGlvbk5vdGlmaWVy
KHRyYW5zYWN0aW9uLCB0aGlzKQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwotICAgIEFTU0VS
VChtX3JlcXVlc3QpOwotICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURC
T2JqZWN0U3RvcmVUeXBlIHx8IG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJJbmRleFR5
cGUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLX0KLQotSURCQ3Vyc29yOjp+SURCQ3Vy
c29yKCkKLXsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCQ3Vyc29yOjpkaXJlY3Rpb24oKSBjb25z
dAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpkaXJlY3Rpb24iKTsKLSAgICByZXR1cm4g
bV9iYWNrZW5kLT5kaXJlY3Rpb24oKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNv
cjo6a2V5KCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6a2V5Iik7Ci0gICAg
cmV0dXJuIG1fYmFja2VuZC0+a2V5KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJz
b3I6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpwcmlt
YXJ5S2V5Iik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+cHJpbWFyeUtleSgpOwotfQotCi1QYXNz
UmVmUHRyPElEQkFueT4gSURCQ3Vyc29yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNF
KCJJREJDdXJzb3I6OnZhbHVlIik7Ci0gICAgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1fYmFja2Vu
ZC0+dmFsdWUoKSk7Ci19Ci0KLUlEQkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp1cGRhdGUiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT51cGRhdGUodmFsdWUs
IHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5
RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJD
dXJzb3I6OmNvbnRpbnVlIik7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5
OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVxdWVzdCkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFdlJ3JlIG5vdCB1c2lu
ZyB0aGUgY29udGV4dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hpY2ggbWVhbnMg
dGhlIGNhbGxiYWNrCi0gICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdpbmFsIGNvbnRl
eHQgb3BlbkN1cnNvciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAgIGlmIChtX3Jl
cXVlc3QtPnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0aW9uLmdldCgpKSkgewotICAgICAgICBt
X3JlcXVlc3QtPnNldEN1cnNvcih0aGlzKTsKLSAgICAgICAgbV9iYWNrZW5kLT5jb250aW51ZUZ1
bmN0aW9uKGtleSwgbV9yZXF1ZXN0LCBlYyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29y
OjpkZWxldGUiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVGdW5jdGlvbihyZXF1ZXN0LCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURC
Q3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpCi17Ci0gICAgbV9iYWNrZW5kLT5w
b3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwotfQotCi12b2lkIElEQkN1cnNvcjo6Y2xvc2Uo
KQotewotICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIG1fcmVxdWVzdC0+ZmluaXNoQ3Vyc29y
KCk7Ci0gICAgbV9yZXF1ZXN0LmNsZWFyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvci5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIElEQkN1cnNvcl9oCi0jZGVmaW5lIElEQkN1cnNvcl9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJBbnk7Ci1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCUmVxdWVzdDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci0KLXR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1
cnNvcj4gewotcHVibGljOgotICAgIGVudW0gRGlyZWN0aW9uIHsKLSAgICAgICAgTkVYVCA9IDAs
Ci0gICAgICAgIE5FWFRfTk9fRFVQTElDQVRFID0gMSwKLSAgICAgICAgUFJFViA9IDIsCi0gICAg
ICAgIFBSRVZfTk9fRFVQTElDQVRFID0gMywKLSAgICB9OwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkN1cnNvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4s
IElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0
dWFsIH5JREJDdXJzb3IoKTsKLQotICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2Rl
IGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgotICAgIHZvaWQgY29udGludWVGdW5jdGlv
bihFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9uKDAsIGVjKTsgfQotCi0gICAg
Ly8gSW1wbGVtZW50IHRoZSBJREwKLSAgICB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25z
dDsKLSAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQkFueT4gdmFsdWUo
KSBjb25zdDsKLSAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY29udGludWVG
dW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7
Ci0gICAgdm9pZCBjbG9zZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCQ3Vyc29yKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJj
ZSwgSURCVHJhbnNhY3Rpb24qKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3JlcXVl
c3Q7Ci0gICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIElEQlRyYW5zYWN0aW9uOjpPcGVuQ3Vyc29yTm90aWZp
ZXIgbV90cmFuc2FjdGlvbk5vdGlmaWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkN1cnNvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJDdXJzb3IuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCi0gICAgXSBJREJDdXJzb3IgewotICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBORVhUID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkVYVF9O
T19EVVBMSUNBVEUgPSAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWID0gMjsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUFJFVl9OT19EVVBMSUNBVEUgPSAzOwotCi0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb247Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkga2V5OwotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSURCS2V5IHByaW1hcnlLZXk7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJB
bnkgc291cmNlOwotCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IHVwZGF0ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUpCi0gICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0ltcGxlbWVudGVk
QXM9Y29udGludWVGdW5jdGlvbl0gdm9pZCBjb250aW51ZShpbiBbT3B0aW9uYWxdIElEQktleSBr
ZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVu
Y3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKCkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJv
ci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJDdXJzb3JCYWNrZW5kSW1wbDo6
SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
Y3Vyc29yLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKiBvYmplY3RTdG9yZSkKLSAgICA6IG1fY3Vyc29yKGN1
cnNvcikKLSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fY3Vyc29yVHlwZShj
dXJzb3JUeXBlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fb2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgLCBtX2Nsb3NlZChmYWxzZSkKLXsKLSAgICBtX3Ry
YW5zYWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Ci19Ci0KLUlEQkN1cnNvckJhY2tl
bmRJbXBsOjp+SURCQ3Vyc29yQmFja2VuZEltcGwoKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnVu
cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCwgdGhl
IGN1cnNvcnMgaGF2ZSB0byBiZSBkZXN0cnVjdGVkIGJlZm9yZSB0aGUgb2JqZWN0U3RvcmUuCi0g
ICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7Ci0KLSAgICBt
X29iamVjdFN0b3JlLmNsZWFyKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmRpcmVjdGlvbiIpOwotICAgIHJldHVybiBtX2RpcmVjdGlvbjsKLX0KLQotUGFz
c1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJhY2tlbmRJbXBsOjprZXkoKSBjb25zdAotewotICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSIpOwotICAgIHJldHVybiBtX2N1
cnNvci0+a2V5KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5k
SW1wbDo6cHJpbWFyeUtleSIpOwotICAgIHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOwot
fQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29yQmFja2VuZElt
cGw6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp2YWx1ZSIpOwotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJzb3IpCi0gICAg
ICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKLSAgICByZXR1cm4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtX2N1cnNvci0+dmFsdWUoKSk7
Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OnVwZGF0ZSIpOwotICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JUeXBlID09IElu
ZGV4S2V5Q3Vyc29yKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9B
TExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JqZWN0U3RvcmUt
PnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwg
ZWMpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5Owot
Ci0gICAgaWYgKG1fY3Vyc29yICYmIGtleSkgewotICAgICAgICBBU1NFUlQobV9jdXJzb3ItPmtl
eSgpKTsKLSAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBtX2Rp
cmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fY3Vyc29yLT5rZXkoKS0+aXNMZXNzVGhhbihrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKCFrZXktPmlzTGVzc1RoYW4obV9jdXJzb3ItPmtleSgpLmdldCgpKSkgewotICAgICAgICAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbCwgdGhpcywga2V5LCBwcnBDYWxs
YmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOwotfQotCi0vLyBJTVBPUlRBTlQ6IElmIHRoaXMgZXZlciAxKSBmaXJlcyBh
biAnZXJyb3InIGV2ZW50IGFuZCAyKSBpdCdzIHBvc3NpYmxlIHRvIGZpcmUgYW5vdGhlciBldmVu
dCBhZnRlcndhcmRzLAotLy8gICAgICAgICAgICBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZp
dHkoKSB3aWxsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gaGFuZGxlIHRoaXMhISEKLXZvaWQgSURC
Q3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCBQ
YXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlSW50
ZXJuYWwiKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBycEN1
cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0KLSAgICBpZiAoIWN1cnNv
ci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oa2V5Lmdl
dCgpKSkgewotICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKLSAgICAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhDb250aW51YXRp
b24oKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlIik7Ci0gICAgaWYg
KCFtX2N1cnNvciB8fCBtX2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJzb3IpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlRnVuY3Rpb24obV9jdXJzb3It
PnByaW1hcnlLZXkoKSwgcHJwQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7Ci19
Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUoaW50IG51bWJl
clRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZl
dGNoQ29udGludWUiKTsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50
ZXJuYWwsIHRoaXMsIG51bWJlclRvRmV0Y2gsIHBycENhbGxiYWNrcykpKQotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZv
aWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vy
c29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRp
bnVlSW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9
IHBycEN1cnNvcjsKLQotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGZvdW5kS2V5czsKLSAg
ICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZFByaW1hcnlLZXlzOwotICAgIFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IGZvdW5kVmFsdWVzOwotCi0gICAgaWYgKGN1
cnNvci0+bV9jdXJzb3IpCi0gICAgICAgIGN1cnNvci0+bV9zYXZlZEN1cnNvciA9IGN1cnNvci0+
bV9jdXJzb3ItPmNsb25lKCk7Ci0KLSAgICBjb25zdCBzaXplX3Qga01heFNpemVFc3RpbWF0ZSA9
IDEwICogMTAyNCAqIDEwMjQ7Ci0gICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bWJlclRvRmV0Y2g7ICsraSkgewotICAgICAgICBpZiAoIWN1
cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkp
IHsKLSAgICAgICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3VuZEtleXMuYXBwZW5kKGN1cnNvci0+bV9jdXJzb3It
PmtleSgpKTsKLSAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQoY3Vyc29yLT5tX2N1cnNv
ci0+cHJpbWFyeUtleSgpKTsKLQotICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0g
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBm
b3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShj
dXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZv
dW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpKTsKLQotICAg
ICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+a2V5KCktPnNpemVFc3RpbWF0
ZSgpOwotICAgICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtl
eSgpLT5zaXplRXN0aW1hdGUoKTsKLSAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQotICAgICAgICAgICAg
c2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpOwotCi0gICAgICAgIGlmIChzaXplRXN0aW1hdGUgPiBrTWF4U2l6ZUVzdGltYXRl
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgp
KSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
bnVsbFZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3Vyc29yLT5tX3Ry
YW5zYWN0aW9uLT5hZGRQZW5kaW5nRXZlbnRzKGZvdW5kS2V5cy5zaXplKCkgLSAxKTsKLSAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtl
eXMsIGZvdW5kVmFsdWVzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0
Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQcmVmZXRjaGVzKQotewotICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQiKTsKLSAgICBt
X3RyYW5zYWN0aW9uLT5hZGRQZW5kaW5nRXZlbnRzKC11bnVzZWRQcmVmZXRjaGVzKTsKLSAgICBt
X2N1cnNvciA9IG1fc2F2ZWRDdXJzb3I7Ci0gICAgbV9zYXZlZEN1cnNvciA9IDA7Ci0KLSAgICBp
ZiAobV9jbG9zZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJzb3IpIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkUHJlZmV0Y2hlczsgKytpKSB7Ci0gICAgICAgICAg
ICBib29sIG9rID0gbV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y2xvc2UoKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNsb3NlIik7Ci0gICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIGlmIChtX2N1cnNvcikK
LSAgICAgICAgbV9jdXJzb3ItPmNsb3NlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgSURCQ3Vyc29yQmFja2Vu
ZEltcGxfaAotI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
IklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw7Ci1jbGFzcyBJREJL
ZXlSYW5nZTsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTsKLWNsYXNzIElE
QkJhY2tpbmdTdG9yZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLWNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwg
OiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
biwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIG9iamVjdFN0b3Jl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1w
bChjdXJzb3IsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNz
UmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShp
bnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBp
bnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LQotcHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIEN1cnNvclR5cGUsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZSopOwotCi0gICAgc3RhdGljIHZvaWQgY29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lk
IHByZWZldGNoQ29udGludWVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4pOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBt
X2N1cnNvcjsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJz
b3I7Ci0gICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgQ3Vyc29yVHlw
ZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gbV90cmFuc2FjdGlvbjsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBtX29iamVjdFN0b3JlOwotICAgIAotICAgIGJvb2wgbV9jbG9zZWQ7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LQotI2VuZGlmIC8vIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQW55OwotY2xhc3Mg
SURCQ2FsbGJhY2tzOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCUmVxdWVzdDsKLWNsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xh
c3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZSgpIHt9Ci0KLSAgICBlbnVtIEN1cnNvclR5cGUgewotICAg
ICAgICBJbnZhbGlkQ3Vyc29yVHlwZSA9IDAsCi0gICAgICAgIEluZGV4Q3Vyc29yLAotICAgICAg
ICBJbmRleEtleUN1cnNvciwKLSAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKLSAgICB9OwotCi0g
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0
Y2hlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygp
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAv
LyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklE
QkN1cnNvcldpdGhWYWx1ZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+
IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkN1cnNvcldpdGhWYWx1ZShiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6
OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHBycEN1cnNvcikKLXsKLSAgICBSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjdXJzb3JXaXRoVmFsdWUoc3RhdGljX2Nhc3Q8SURCQ3Vy
c29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29yLmdldCgpKSk7Ci0gICAgcmV0dXJuIGN1cnNvcldpdGhW
YWx1ZS5yZWxlYXNlKCk7Ci19Ci0KLUlEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZh
bHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVx
dWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKLSAgICA6IElEQkN1cnNvcihiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9u
KQotewotfQotCi1JREJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQotewot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFs
dWUuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JXaXRoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJDdXJzb3JXaXRoVmFsdWVfaAotI2RlZmluZSBJREJDdXJzb3JXaXRoVmFsdWVfaAot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3IuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3JXaXRoVmFsdWUgOiBwdWJs
aWMgSURCQ3Vyc29yIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JX
aXRoVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJSZXF1ZXN0KiwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBmcm9tQ3Vyc29yKFBhc3NSZWZQdHI8SURC
Q3Vyc29yPik7Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVlKCk7Ci0KLSAgICAvLyBU
aGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkgaW1wbGVtZW50
ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCi0gICAgLy8gaXRzIElETCkuIFRo
aXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hpbGUgbWF0Y2hp
bmcgd2hhdCB0aGUgc3BlYyBzYXlzLgotCi1wcml2YXRlOgotICAgIElEQkN1cnNvcldpdGhWYWx1
ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+LCBJREJSZXF1ZXN0KiwgSURC
QW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCQ3Vyc29yV2l0aFZhbHVlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2Ug
ewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RQotICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsKLSAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV2ZW50UXVldWUu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgot
I2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
IgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNs
dWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDxsaW1p
dHM+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURC
RGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJhc2UpCi17Ci0gICAgUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcgSURCRGF0YWJhc2UoY29udGV4
dCwgZGF0YWJhc2UpKSk7Ci0gICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAg
IHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Ci19Ci0KLUlEQkRhdGFiYXNlOjpJREJEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2Nsb3NlUGVuZGlu
ZyhmYWxzZSkKLSAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCi17Ci0gICAgLy8gV2UgcGFz
cyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0g
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMpOwotfQotCi1JREJEYXRhYmFz
ZTo6fklEQkRhdGFiYXNlKCkKLXsKLSAgICBjbG9zZSgpOwotICAgIG1fZGF0YWJhc2VDYWxsYmFj
a3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6c2V0
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKLSAgICBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpj
bGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
Ci17Ci0gICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gPT0gdHJhbnNhY3Rpb24pOwotICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0g
MDsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFN0cmluZyBrZXlQYXRoOwotICAg
IGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KCJrZXlQYXRoIiwga2V5UGF0aCk7Ci0gICAgaWYgKGtleVBhdGhFeGlzdHMgJiYgIUlEQklzVmFs
aWRLZXlQYXRoKGtleVBhdGgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PTl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29s
IGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgiYXV0b0luY3JlbWVudCIs
IGF1dG9JbmNyZW1lbnQpOwotICAgIC8vIEZJWE1FOiBMb29rIHVwIGV2aWN0YWJsZSBhbmQgcGFz
cyB0aGF0IG9uIGFzIHdlbGwuCi0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3Jl
KG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgewotICAgICAg
ICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RT
dG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRlZChuYW1l
LCBvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3Rv
cmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAg
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkRhdGFiYXNlOjpzZXRW
ZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHZlcnNpb24uaXNOdWxsKCkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOwotICAgIG1fYmFja2VuZC0+c2V0VmVyc2lv
bih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7Ci0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKLSAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKLSAgICByZXR1cm4gdHJh
bnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOwotfQotCi1QYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBwcnBTdG9yZU5hbWVz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFtZXM7Ci0gICAgaWYgKCFzdG9y
ZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG1vZGUgIT0g
SURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJREJUcmFuc2FjdGlvbjo6UkVB
RF9PTkxZKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lF
TlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fY2xvc2VQZW5kaW5n
KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBu
ZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJv
bm91c2x5LiBPcGVyYXRpb25zCi0gICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFu
c2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBh
cyB0aGUKLSAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCi0gICAg
Ly8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25kcyB0byBleGFj
dGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5kLT50cmFuc2Fj
dGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbkJh
Y2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVjKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhpcyk7Ci0gICAgdHJhbnNhY3Rp
b25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKLXsK
LSAgICBpZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xvc2VQ
ZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3Mp
OwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIC8vIFJlbW92ZSBhbnkgcGVu
ZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCi0gICAg
Ly8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNr
ZW5kIHdoZW4gYW5vdGhlcgotICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1
dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwotICAgIC8vIGNsb3NlZCBiZWZvcmUg
dGhleSBjb3VsZCBmaXJlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2
ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLT5j
YW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6Om9u
VmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgaWYgKG1fY29udGV4
dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKHZlcnNpb24s
IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZTo6b3BlbigpCi17Ci0gICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0YWJhc2VDYWxsYmFja3MpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0
aGlzKTsKLSAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkpOwotICAgIG1f
ZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKLX0KLQotYm9vbCBJREJEYXRhYmFzZTo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJfVFJBQ0UoIklE
QkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVl
dWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAgfQotICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0
Y2hFdmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQotewot
ICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOwotICAgIC8vIFN0b3AgZmlyZXMgYXQgYSBkZXRl
cm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4KLSAgICBjbG9z
ZSgpOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci19Ci0KLWNvbnN0IEF0b21pY1N0
cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Ci19Ci0KLVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci19
Ci0KLUV2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0g
ICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJE
YXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
RGF0YWJhc2VfaAotI2RlZmluZSBJREJEYXRhYmFzZV9oCi0KLSNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIK
LSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgotI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNs
dWRlICJPcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCRGF0YWJhc2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJEYXRhYmFzZT4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U+KTsKLSAgICB+SURCRGF0YWJhc2UoKTsKLQotICAgIHZvaWQgc2V0VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCBjbGVhclZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiopOwotCi0gICAgLy8gSW1wbGVt
ZW50IHRoZSBJREwKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+
bmFtZSgpOyB9Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQt
PnZlcnNpb24oKTsgfQotICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVO
YW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+b2JqZWN0U3RvcmVOYW1lcygpOyB9Ci0K
LSAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBp
cyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVh
dGVPYmplY3RTdG9yZShuYW1lLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxET01TdHJpbmdMaXN0PiwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGVycm9yKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHZl
cnNpb25jaGFuZ2UpOwotCi0gICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKLSAgICB2aXJ0dWFs
IHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkVmVyc2lvbik7Ci0K
LSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURF
OwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCBvcGVuKCk7Ci0g
ICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0KLSAgICB1c2luZyBSZWZD
b3VudGVkPElEQkRhdGFiYXNlPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJh
c2U+OjpkZXJlZjsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYo
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0g
ICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwotICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKLQotICAgIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwotCi0gICAgYm9vbCBtX2Ns
b3NlUGVuZGluZzsKLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICBFdmVudFRhcmdl
dERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJz
aW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZpcmVkIG9uIHRoaXMKLSAgICAvLyBkYXRh
YmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgot
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50czsKLQotICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2Vf
aApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICAgICAg
QWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gSURCRGF0YWJhc2Ug
ewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKLSAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZ0xpc3Qgb2JqZWN0U3RvcmVOYW1lczsKLQotICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0OwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmVycm9yOwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnZlcnNpb25jaGFu
Z2U7Ci0KLSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3Ry
aW5nIG5hbWUsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQotICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IHNldFZlcnNpb24oaW4gRE9NU3RyaW5nIHZlcnNpb24p
Ci0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9u
KGluIERPTVN0cmluZ0xpc3Qgc3RvcmVOYW1lcywgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gdW5zaWduZWQgc2hvcnQgbW9kZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oaW4gRE9NU3RyaW5nW10gc3RvcmVOYW1lcywgaW4g
W09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgc2hvcnQgbW9kZSkKLSAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oaW4gRE9N
U3RyaW5nIHN0b3JlTmFtZSwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWdu
ZWQgc2hvcnQgbW9kZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24p
OwotICAgICAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJm
YWNlCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2Fw
dHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVu
dCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwotICAgIH07Ci0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkVGFzay5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJC
YWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCi0jaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuQ2FsbD4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVu
Q2FsbChjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGlu
Z09wZW5DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDog
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQ
ZW5kaW5nRGVsZXRlQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKLSAgICB9Ci0g
ICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJh
Y2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0g
ICAgewotICAgIH0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0K
LWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbCh2ZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIFN0cmluZyB2ZXJzaW9uKCkg
eyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJh
Y2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgUGVuZGluZ1NldFZlcnNpb25DYWxsKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgIDogbV92
ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAg
ICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgIH0K
LSAgICBTdHJpbmcgbV92ZXJzaW9uOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNr
czsKLX07Ci0KLUlEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCog
ZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotICAgIDogbV9iYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlKQotICAgICwgbV9pZChJbnZhbGlkSWQpCi0gICAgLCBtX25hbWUo
bmFtZSkKLSAgICAsIG1fdmVyc2lvbigiIikKLSAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVu
dGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoY29vcmRpbmF0b3IpCi17Ci0gICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOwot
ICAgIG9wZW5JbnRlcm5hbCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCgpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElE
QkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOwotICAgIEFTU0VSVChz
dWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAg
ICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJz
aW9uLCBtX2lkKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVk
IGJldHRlciBlcnJvciBoYW5kbGluZy4KLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklE
QkRhdGFiYXNlQmFja2VuZEltcGwoKQotewotICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJh
c2VCYWNrZW5kKG1faWRlbnRpZmllcik7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZTsKLX0KLQotUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKLXsKLSAgICBSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZSgpOwotICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmpl
Y3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCi0gICAg
ICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOwotICAgIG9iamVjdFN0b3Jl
TmFtZXMtPnNvcnQoKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBB
U1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UpOwotCi0gICAgaWYgKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5n
U3RvcmUuZ2V0KCksIG1faWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOwotICAgIEFT
U0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwotCi0gICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwotICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmpl
Y3RTdG9yZSwgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVj
dFN0b3JlRnJvbU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOwotICAg
IHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBpbnQ2NF90
IG9iamVjdFN0b3JlSWQ7Ci0KLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3Jl
YXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVj
dFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0
b3JlSWQpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgb2JqZWN0U3RvcmUtPnNldElkKG9iamVjdFN0b3JlSWQpOwotICAgIHRy
YW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMu
Z2V0KG5hbWUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5h
bWUpOwotICAgIGlmICghb2JqZWN0U3RvcmUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25Q
dHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0
YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
YWRkT2JqZWN0U3RvcmVUb01hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17
Ci0gICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFz
ZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0
ZVRhc2tFdmVudHMoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJz
aW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxs
YmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGRhdGFiYXNlQ2FsbGJhY2tzKSkgewotICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBQk9SVF9FUlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2
ZXJzaW9uIHRyYW5zYWN0aW9uIHdhcyBjcmVhdGVkIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCi0g
ICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwotICAgIH0KLSAgICAv
LyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9u
cyBhZnRlciB0aGUKLSAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90
IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgp
ID4gMSkgewotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwotICAgICAgICBSZWZQdHI8
UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0
VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tz
KTsKLSAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVy
c2lvbkNhbGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9u
Q2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVh
dGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIG1fcGVu
ZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9y
ZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UsIHRoaXMpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwg
ZGF0YWJhc2UsIHZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICB9Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKLSAgICBk
YXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tp
bmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+
bV92ZXJzaW9uKSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3Bl
Y2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBl
cnJvcnMuCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRh
IHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rp
b24pOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRl
ZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rp
b24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJ
REJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgQVNTRVJUKCFtX3J1bm5p
bmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsK
LSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7
Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5n
Q2FsbHMoKQotewotICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0
ZWQKLSAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHM7Ci0gICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ1Nl
dFZlcnNpb25DYWxscyk7Ci0gICAgd2hpbGUgKCFwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1w
dHkoKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gcGVuZGluZ1NldFZl
cnNpb25DYWxscy50YWtlRmlyc3QoKTsKLSAgICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVy
c2lvbkNhbGwtPnZlcnNpb24oKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwg
cGVuZGluZ1NldFZlcnNpb25DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7Ci0gICAgICAg
IEFTU0VSVCghZWMpOwotICAgIH0KLQotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgotICAgIERl
cXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7Ci0gICAg
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOwotICAgIHdoaWxl
ICghcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8UGVuZGlu
Z0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VG
aXJzdCgpOwotICAgICAgICBkZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJh
Y2tzKCkpOwotICAgIH0KLQotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0Rl
bGV0ZUNhbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKCFtX3Bl
bmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNh
bGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKLSAg
ICAgICAgb3BlbkNvbm5lY3Rpb24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7Ci0gICAg
fQotfQotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVO
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRl
bShpKSkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VO
RF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBSZXR1cm4gbm90IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4K
LSAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3Jl
TmFtZXMsIG1vZGUsIHRoaXMpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG1f
ZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2Fs
bGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBpZiAoIW1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
cGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tz
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkKLSAgICAgICAg
ICAgIG9wZW5JbnRlcm5hbCgpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2Uo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBpZiAobV9ydW5u
aW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5n
RGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxiYWNrcykpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAg
ICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVj
dGlvbiBpc24ndCBpbgotICAgIC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTI5Ci0gICAgZm9yIChEYXRh
YmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCi0g
ICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOwotICAgIC8vIEZJWE1FOiBPbmx5IGZp
cmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQotICAg
IC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8g
ZmlyZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEx
MzAKLSAgICBpZiAoIW1fZGF0YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNh
bGxiYWNrcykpOwotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFt
ZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV92ZXJzaW9uID0gIiI7Ci0gICAgbV9pZCA9
IEludmFsaWRJZDsKLSAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJl
bW92ZShjYWxsYmFja3MpOwotICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+
IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKLXsKLSAgICBW
ZWN0b3I8aW50NjRfdD4gaWRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhzOwotICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBpZHMsIG5hbWVzLCBr
ZXlQYXRocywgYXV0b0luY3JlbWVudEZsYWdzKTsKLQotICAgIEFTU0VSVChuYW1lcy5zaXplKCkg
PT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgp
KTsKLSAgICBBU1NFUlQoYXV0b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQotICAgICAgICBt
X29iamVjdFN0b3Jlcy5zZXQobmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNy
ZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9pZCwgaWRzW2ldLCBuYW1lc1tpXSwga2V5UGF0
aHNbaV0sIGF1dG9JbmNyZW1lbnRGbGFnc1tpXSkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLXsKLSAgICBBU1NFUlQo
ZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsK
LSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCi17Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlUHRyID0gb2JqZWN0U3RvcmU7Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVQdHItPm5hbWUoKSkpOwotICAgIGRhdGFiYXNlLT5tX29i
amVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2
ZXJzaW9uOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKLSNk
ZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJDYWxsYmFja3Mu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIDog
cHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFj
dG9yeSwgdW5pcXVlSWRlbnRpZmllcikpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAw
OwotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLSAgICAvLyBGSVhN
RTogUmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZSwgbGlrZSByZWdp
c3RlckZyb250RW5kQ2FsbGJhY2tzLgotICAgIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9u
OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5n
TGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9Ci0gICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2b2lkIHRyYW5z
YWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
KTsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7Ci0KLSAgICB2b2lkIG9wZW5JbnRlcm5hbCgpOwotICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jl
cygpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotCi0gICAgc3RhdGljIHZvaWQg
Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsK
LSAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2b2lkIHNldFZlcnNpb25JbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0KLSAgICAvLyBUaGVzZSBhcmUg
dXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgotICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgYWRkT2JqZWN0U3RvcmVUb01hcChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQg
cmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgaW50NjQgbV9pZDsKLSAgICBTdHJp
bmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3ZlcnNpb247Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOwotICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhl
IGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBi
ZXR0ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRyPElEQkZhY3Rv
cnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+ID4gT2JqZWN0U3RvcmVNYXA7Ci0gICAg
T2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZXM7Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKLQotICAgIGNsYXNzIFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDsKLSAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IG1fcGVuZGluZ1NldFZlcnNpb25DYWxsczsKLQot
ICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKLSAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5D
YWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKLQotICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxs
OwotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdEZWxldGVD
YWxsczsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwotICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1f
ZGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBET01TdHJpbmdMaXN0OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFz
cyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLQotdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKLQotLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCRGF0YWJh
c2UgKGFzeW5jKSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KLS8vIFRoaXMgaXMgaW1wbGVt
ZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGlu
IG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBj
YWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCi0vLyB0cmln
Z2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25z
dCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0
YWJhc2VDYWxsYmFja3NfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gSURCRGF0YWJhc2VDYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCi0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbChkYXRhYmFzZSkp
OwotfQotCi1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bChJREJEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotewot
fQotCi1JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwo
KQotewotfQotCi12b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6b25WZXJzaW9uQ2hhbmdl
KGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAgICAgICAg
bV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFiYXNlKElEQkRhdGFiYXNlKiBkYXRhYmFz
ZSkKLXsKLSAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9kYXRhYmFzZSk7Ci0gICAgbV9kYXRhYmFz
ZSA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURC
RGF0YWJhc2U7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCA6IHB1YmxpYyBJREJE
YXRhYmFzZUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsPiBjcmVhdGUoSURCRGF0YWJhc2UqKTsKLSAgICB2aXJ0dWFsIH5J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25D
aGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEYXRhYmFz
ZShJREJEYXRhYmFzZSopOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bChJREJEYXRhYmFzZSopOwotCi0gICAgLy8gbV9kYXRhYmFzZSBoYXMgYSBSZWZQdHIgdG8gdGhp
cywgc28gdXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCi0gICAgSURCRGF0YWJh
c2UqIG1fZGF0YWJhc2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUVycm9yX2gKLSNkZWZpbmUg
SURCRGF0YWJhc2VFcnJvcl9oCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VFcnJvciA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlRXJyb3I+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVhdGUodW5zaWduZWQgc2hvcnQgY29kZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvZGUgPj0gSURC
RGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0KTsKLSAgICAgICAg
QVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25N
YXgpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSAt
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCwgbWVzc2Fn
ZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGNy
ZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkpOwotICAgIH0KLQotICAgIH5JREJEYXRh
YmFzZUVycm9yKCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlOyB9Ci0gICAgdm9pZCBzZXRDb2RlKHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IG1f
Y29kZSA9IHZhbHVlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9tZXNzYWdlOyB9Ci0gICAgdm9pZCBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
IHsgbV9tZXNzYWdlID0gdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUVycm9y
KHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICAgICAgOiBt
X2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlKSB7IH0KLQotICAgIHVuc2lnbmVkIHNob3J0
IG1fY29kZTsKLSAgICBTdHJpbmcgbV9tZXNzYWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlRXJyb3JfaApJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCi0gICAg
XSBJREJEYXRhYmFzZUVycm9yIHsKLSAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGNv
ZGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbWVzc2FnZTsKLSAgICB9OwotCi19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMg
YW5kIGRlc2NyaXB0aW9ucy4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1l
c1tdID0gewotICAgICJVTktOT1dOX0VSUiIsCi0gICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwKLSAg
ICAiTk9UX0ZPVU5EX0VSUiIsCi0gICAgIkNPTlNUUkFJTlRfRVJSIiwKLSAgICAiREFUQV9FUlIi
LAotICAgICJOT1RfQUxMT1dFRF9FUlIiLAotICAgICJUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIi
LAotICAgICJBQk9SVF9FUlIiLAotICAgICJSRUFEX09OTFlfRVJSIiwKLSAgICAiVElNRU9VVF9F
UlIiLAotICAgICJRVU9UQV9FUlIiLAotICAgICJWRVJfRVJSIgotfTsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1tdID0gewotICAgICJBbiB1bmtub3du
IGVycm9yIG9jY3VycmVkIHdpdGhpbiBJbmRleGVkIERhdGFiYXNlLiIsCi0gICAgIk5PTl9UUkFO
U0lFTlRfRVJSIiwgLy8gRklYTUU6IFdyaXRlIGEgYmV0dGVyIG1lc3NhZ2UgaWYgaXQncyBldmVy
IHBvc3NpYmxlIHRoaXMgaXMgdGhyb3duLgotICAgICJUaGUgbmFtZSBzdXBwbGllZCBkb2VzIG5v
dCBtYXRjaCBhbnkgZXhpc3RpbmcgaXRlbS4iLAotICAgICJUaGUgcmVxdWVzdCBjYW5ub3QgYmUg
Y29tcGxldGVkIGR1ZSB0byBhIGZhaWxlZCBjb25zdHJhaW50LiIsCi0gICAgIlRoZSBkYXRhIHBy
b3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgZnVuY3Rpb24uIiwK
LSAgICAiVGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgaW4gc3VjaCBh
IGNvbnRleHQuIiwKLSAgICAiQSByZXF1ZXN0IHdhcyBwbGFjZWQgYWdhaW5zdCBhIHRyYW5zYWN0
aW9uIHdoaWNoIGlzIGVpdGhlciBjdXJyZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmlu
aXNoZWQuIiwKLSAgICAiVGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVz
dCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIsCi0gICAgIkEgd3JpdGUgb3BlcmF0aW9uIHdhcyBhdHRl
bXB0ZWQgaW4gYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24uIiwKLSAgICAiQSBsb2NrIGZvciB0aGUg
dHJhbnNhY3Rpb24gY291bGQgbm90IGJlIG9idGFpbmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIs
IC8vIEZJWE1FOiBUaGlzIGlzbid0IHVzZWQgeWV0LgotICAgICJUaGUgb3BlcmF0aW9uIGZhaWxl
ZCBiZWNhdXNlIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBv
ciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8g
Z2l2ZSBtb3JlIHNwYWNlIHRvIHRoZSBkYXRhYmFzZS4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1
c2VkIHlldAotICAgICJBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRhYmFzZSB1c2lu
ZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgZXhpc3RpbmcgdmVyc2lvbi4iLCAvLyBGSVhNRTog
VGhpcyBpc24ndCB1c2VkIHlldAotfTsKLQotQ09NUElMRV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdU
SChleGNlcHRpb25OYW1lcykgPT0gV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25EZXNjcmlwdGlv
bnMpLCBJREJEYXRhYmFzZUV4Y2VwdGlvblRhYmxlc011c3RNYXRjaCk7Ci0KLWJvb2wgSURCRGF0
YWJhc2VFeGNlcHRpb246OmluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlIGVjLCBF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQotewotICAgIGlmIChlYyA8IElE
QkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0IHx8IGVjID4gSURCRGF0YWJhc2VFeGNlcHRpb25NYXgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlc2NyaXB0aW9uLT50eXBlTmFtZSA9ICJE
T00gSURCRGF0YWJhc2UiOwotICAgIGRlc2NyaXB0aW9uLT5jb2RlID0gZWMgLSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbk9mZnNldDsKLSAgICBkZXNjcmlwdGlvbi0+dHlwZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uVHlwZTsKLQotICAgIHNpemVfdCB0YWJsZVNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4
Y2VwdGlvbk5hbWVzKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7
Ci0KLSAgICBkZXNjcmlwdGlvbi0+bmFtZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNl
cHRpb25OYW1lc1t0YWJsZUluZGV4XSA6IDA7Ci0gICAgZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9u
ID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1t0YWJsZUlu
ZGV4XSA6IDA7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VFeGNl
cHRpb25faAotI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlvbiA6IHB1YmxpYyBFeGNlcHRp
b25CYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUV4Y2Vw
dGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXhjZXB0aW9u
KGRlc2NyaXB0aW9uKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBJREJEYXRhYmFz
ZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7Ci0gICAgc3RhdGljIGNvbnN0IGludCBJREJEYXRhYmFz
ZUV4Y2VwdGlvbk1heCA9IDEyOTk7Ci0KLSAgICBlbnVtIElEQkRhdGFiYXNlRXhjZXB0aW9uQ29k
ZSB7Ci0gICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0LAotICAgICAg
ICBVTktOT1dOX0VSUiwKLSAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIsCi0gICAgICAgIE5PVF9G
T1VORF9FUlIsCi0gICAgICAgIENPTlNUUkFJTlRfRVJSLAotICAgICAgICBEQVRBX0VSUiwKLSAg
ICAgICAgTk9UX0FMTE9XRURfRVJSLAotICAgICAgICBUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIs
Ci0gICAgICAgIEFCT1JUX0VSUiwKLSAgICAgICAgUkVBRF9PTkxZX0VSUiwKLSAgICAgICAgVElN
RU9VVF9FUlIsCi0gICAgICAgIFFVT1RBX0VSUiwKLSAgICAgICAgVkVSX0VSUgotICAgIH07Ci0K
LSAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgZXJyb3JDb2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFlcnJvckNvZGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0OwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2Rl
LCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFz
ZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQot
ICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCi0gICAgewotICAgIH0KLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFz
ZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlRXhjZXB0aW9uLmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAg
IENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIERvTm90Q2hlY2tDb25zdGFu
dHMKLSAgICBdIElEQkRhdGFiYXNlRXhjZXB0aW9uIHsKLQotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgc2hvcnQgICBjb2RlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nICAgICAgICBtZXNzYWdlOwotCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAm
JiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIC8vIE92ZXJyaWRlIGluIGEgTW96aWxsYSBj
b21wYXRpYmxlIGZvcm1hdAotICAgICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3Ry
aW5nKCk7Ci0jZW5kaWYKLQotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT19FUlIgPSAw
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDE7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PTl9UUkFOU0lFTlRfRVJSID0gMjsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDM7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gNDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgREFUQV9FUlIgPSA1OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RfQUxMT1dF
RF9FUlIgPSA2OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlIgPSA3OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBQk9SVF9FUlIgPSA4
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBSRUFEX09OTFlfRVJSID0gOTsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVElNRU9VVF9FUlIgPSAxMDsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgUVVPVEFfRVJSID0gMTE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFZFUl9FUlIgPSAxMjsKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJFdmVu
dERpc3BhdGNoZXIuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChFdmVudCogZXZlbnQsIFZl
Y3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4mIGV2ZW50VGFyZ2V0cykKLXsKLSAgICBzaXplX3Qg
c2l6ZSA9IGV2ZW50VGFyZ2V0cy5zaXplKCk7Ci0gICAgQVNTRVJUKHNpemUpOwotCi0gICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IHNpemUgLSAxOyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQu
Ci0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7
Ci0gICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKLSAg
ICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgICAgIGdvdG8g
ZG9uZURpc3BhdGNoaW5nOwotICAgIH0KLQotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50
OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1sw
XS5nZXQoKSk7Ci0gICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQp
OwotICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LT5idWJibGVz
KCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQotICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGlu
ZzsKLQotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsgLy8gRG9uJ3QgZG8gdGhlIGZp
cnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0
c1tpXS5nZXQoKSk7Ci0gICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVu
dC0+Y2FuY2VsQnViYmxlKCkpCi0gICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogIi4uLkhvd2V2ZXIsIHdlIGFsc28gd2FudGVkIHRvIGludGVn
cmF0ZSB0aGUgd2luZG93Lm9uZXJyb3IgZmVhdHVyZSBpbgotICAgIC8vICAgICAgICBIVE1MNS4g
U28gYWZ0ZXIgd2UndmUgZmlyZWQgYW4gImVycm9yIiBldmVudCwgaWYgLnByZXZlbnREZWZhdWx0
KCkgd2FzCi0gICAgLy8gICAgICAgIG5ldmVyIGNhbGxlZCBvbiB0aGUgZXZlbnQsIHdlIGZpcmUg
YW4gZXJyb3IgZXZlbnQgb24gdGhlIHdpbmRvdyAoY2FuJ3QKLSAgICAvLyAgICAgICAgcmVtZW1i
ZXIgaWYgdGhpcyBoYXBwZW5zIGJlZm9yZSBvciBhZnRlciB3ZSBhYm9ydCB0aGUgdHJhbnNhY3Rp
b24pLgotICAgIC8vICAgICAgICBUaGlzIGlzIGEgc2VwYXJhdGUgZXZlbnQsIHdoaWNoIGZvciBl
eGFtcGxlIG1lYW5zIHRoYXQgZXZlbiBpZiB5b3UKLSAgICAvLyAgICAgICAgYXR0YWNoIGEgY2Fw
dHVyaW5nICJlcnJvciIgaGFuZGxlciBvbiB3aW5kb3csIHlvdSB3b24ndCBzZWUgYW55IGV2ZW50
cwotICAgIC8vICAgICAgICB1bmxlc3MgYW4gZXJyb3IgcmVhbGx5IHdlbnQgdW5oYW5kbGVkLiBB
bmQgeW91IGFsc28gY2FuJ3QgY2FsbAotICAgIC8vICAgICAgICAucHJldmVudERlZmF1bHQgb24g
dGhlIGVycm9yIGV2ZW50IGZpcmVkIG9uIHRoZSB3aW5kb3cgaW4gb3JkZXIgdG8KLSAgICAvLyAg
ICAgICAgcHJldmVudCB0aGUgdHJhbnNhY3Rpb24gZnJvbSBiZWluZyBhYm9ydGVkLiBJdCdzIHB1
cmVseSB0aGVyZSBmb3IKLSAgICAvLyAgICAgICAgZXJyb3IgcmVwb3J0aW5nIGFuZCBkaXN0aW5j
dGx5IGRpZmZlcmVudCBmcm9tIHRoZSBldmVudCBwcm9wYWdhdGluZyB0bwotICAgIC8vICAgICAg
ICB0aGUgd2luZG93LgotICAgIC8vICAgICAgICAKLSAgICAvLyAgICAgICAgVGhpcyBpcyBzaW1p
bGFyIHRvIGhvdyAiZXJyb3IiIGV2ZW50cyBhcmUgaGFuZGxlZCBpbiB3b3JrZXJzLgotICAgIC8v
ICAgICAgICAKLSAgICAvLyAgICAgICAgKEkgdGhpbmsgdGhhdCBzbyBmYXIgd2Via2l0IGhhc24n
dCBpbXBsZW1lbnRlZCB0aGUgd2luZG93Lm9uZXJyb3IKLSAgICAvLyAgICAgICAgZmVhdHVyZSB5
ZXQsIHNvIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGZpcmUgdGhlIHNlcGFyYXRlIGVycm9y
Ci0gICAgLy8gICAgICAgIGV2ZW50IG9uIHRoZSB3aW5kb3cgdW50aWwgdGhhdCBoYXMgYmVlbiBp
bXBsZW1lbnRlZCkuIiAtLSBKb25hcyBTaWNraW5nCi0KLWRvbmVEaXNwYXRjaGluZzoKLSAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsK
LSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2
ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCRXZlbnREaXNwYXRjaGVyX2gKLSNkZWZpbmUgSURCRXZlbnREaXNwYXRj
aGVyX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50VGFyZ2V0OwotCi1jbGFzcyBJREJFdmVudERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50KiwgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0
cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgotCi1wcml2YXRl
OgotICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJF
dmVudERpc3BhdGNoZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
R3JvdXBTZXR0aW5ncy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5j
bHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIldv
cmtlckxvYWRlclByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSURCRmFjdG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZSogZmFjdG9yeSkKLSAgICA6IG1fYmFja2VuZChmYWN0b3J5KQotewotICAgIC8vIFdl
IHBhc3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVk
LgotICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotfQotCi1JREJGYWN0b3J5Ojp+SURC
RmFjdG9yeSgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0
RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotewotICAgIGlm
ICghY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMg
d29yayB3aXRoIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYg
KCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIEdyb3VwU2V0dGluZ3Mq
IGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3Mo
KTsKLSAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVk
REJEYXRhYmFzZVBhdGgoKSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VS
VChjb250ZXh0LT5pc0RvY3VtZW50KCkgfHwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwot
Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQt
PmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3Qu
Z2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJpbmcoKSk7Ci0gICAg
ICAgIHJldHVybiByZXF1ZXN0OwotICAgIH0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1l
LCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsK
LSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBGSVhNRTog
bWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OwotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRl
TnVsbCgpLCAiIik7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50
LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRl
RGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3Vt
ZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7Ci0g
ICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXNob3J0IElEQkZhY3Rvcnk6OmNtcChQYXNzUmVmUHRy
PElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIEFTU0VSVChmaXJzdCk7Ci0gICAgQVNTRVJUKHNlY29uZCk7Ci0KLSAgICBp
ZiAoZmlyc3QtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlIHx8IHNlY29uZC0+dHlwZSgp
ID09IElEQktleTo6SW52YWxpZFR5cGUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gICAgCi0gICAgCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFyZShzZWNvbmQuZ2V0KCkpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlfaAotI2RlZmluZSBJREJG
YWN0b3J5X2gKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJL
ZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
OwotY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJGYWN0b3J5
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSog
ZmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeShm
YWN0b3J5KSk7Ci0gICAgfQotICAgIH5JREJGYWN0b3J5KCk7Ci0KLSAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzaG9ydCBjbXAo
UGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNl
cHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSopOwotCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBt
X2JhY2tlbmQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gSURCRmFjdG9yeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5p
ZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9y
YWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UKLSAgICBdIElEQkZhY3RvcnkgewotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dF0gSURCUmVxdWVzdCBnZXREYXRhYmFzZU5hbWVzKCk7Ci0KLSAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbihpbiBET01TdHJp
bmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QgZGVsZXRlRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUpCi0gICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLQotICAgICAgICBzaG9ydCBjbXAoaW4gSURCS2V5
IGZpcnN0LCBpbiBJREJLZXkgc2Vjb25kKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7Ci0gICAgfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgU3RyaW5nIGNvbXB1dGVGaWxlSWRlbnRpZmllcihTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIga0xldmVsREJGaWxlU3Vm
Zml4W10gPSAiQDEiOwotICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCkgKyBrTGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9y
aWdpbikgKyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZhY3RvcnlCYWNr
ZW5kSW1wbCgpCi0gICAgOiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6Y3JlYXRlKCkpCi17Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklE
QkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpyZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVy
KQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1bmlxdWVJZGVu
dGlmaWVyKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZp
ZXIpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6YWRkSURCQmFja2luZ1N0b3Jl
KGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0
b3JlKQotewotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmVNYXAuY29udGFpbnMoZmlsZUlkZW50
aWZpZXIpKTsKLSAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJhY2tp
bmdTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNr
aW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmVNYXAuY29udGFpbnMoZmlsZUlkZW50aWZpZXIpKTsKLSAgICBtX2JhY2tpbmdT
dG9yZU1hcC5yZW1vdmUoZmlsZUlkZW50aWZpZXIpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURp
cmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VOYW1lcyA9IERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsKLSAgICBiYWNraW5n
U3RvcmUtPmdldERhdGFiYXNlTmFtZXMoZm91bmROYW1lcyk7Ci0gICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5hbWVzLmJlZ2luKCk7IGl0ICE9IGZvdW5k
TmFtZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFiYXNlTmFtZXMtPmFwcGVuZCgqaXQpOwot
Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwotfQot
Ci12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0
eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgb3Bl
bkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXJlY3RvcnkpCi17Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJp
dHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
biwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgY29uc3QgU3Ry
aW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1
cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5IGRlbGV0ZSB0
aGUKLSAgICAgICAgLy8gZGF0YWJhc2UuCi0gICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZURhdGFi
YXNlKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
RXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4K
LSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0
b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9y
ZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFt
ZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRo
aXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlx
dWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgIGRhdGFiYXNlQmFja2Vu
ZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0
b3J5KQotewotICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRl
bnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmU7Ci0gICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIg
PSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQyICE9
IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNl
Y29uZDsKLSAgICBlbHNlIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgYmFja2luZ1N0b3Jl
ID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0
YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwotI2Vsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoYmFja2luZ1N0b3JlKQot
ICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLQotICAgIHJldHVybiAwOwot
fQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHBycFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0g
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IHBycFNlY3VyaXR5T3Jp
Z2luOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlk
ZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0YWJhc2VC
YWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVl
SWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7
Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0
IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRl
LgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24g
c2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0
YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0g
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwg
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsK
LSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlPihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7Ci0gICAgbV9kYXRhYmFzZUJh
Y2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lm
bmRlZiBJREJGYWN0b3J5QmFja2VuZEltcGxfaAotI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZElt
cGxfaAotCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IERPTVN0cmluZ0xpc3Q7Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi1jbGFz
cyBJREJGYWN0b3J5QmFja2VuZEltcGwgOiBwdWJsaWMgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1w
bD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZElt
cGwoKTsKLQotICAgIC8vIE5vdGlmaWNhdGlvbnMgZnJvbSB3ZWFrIHBvaW50ZXJzLgotICAgIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7Ci0gICAgdm9pZCBhZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRp
ZmllciwgSURCQmFja2luZ1N0b3JlKik7Ci0gICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUo
Y29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVh
bCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotcHJpdmF0ZToKLSAgICBJREJG
YWN0b3J5QmFja2VuZEltcGwoKTsKLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3Bl
bkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKTsKLSAgICB2b2lkIG9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9k
YXRhYmFzZUJhY2tlbmRNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJCYWNr
aW5nU3RvcmUqPiBJREJCYWNraW5nU3RvcmVNYXA7Ci0gICAgSURCQmFja2luZ1N0b3JlTWFwIG1f
YmFja2luZ1N0b3JlTWFwOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+
IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKLQotICAgIC8vIE9ubHkgb25lIGluc3RhbmNlIG9m
IHRoZSBmYWN0b3J5IHNob3VsZCBleGlzdCBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBzdGF0aWMg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKiBpZGJGYWN0b3J5QmFja2VuZEltcGw7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tl
bmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oIgotCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmgiCi0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNlcnJvciAiQ2hyb21pdW0gc2hvdWxkIG5v
dCBjb21waWxlIHRoaXMgZmlsZSBhbmQgaW5zdGVhZCBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9m
IHRoaXMgZmFjdG9yeSB0aGF0IG5hdmlnYXRlcyB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6Y3JlYXRlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZV9oCi0jZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2lu
Y2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZy
YW1lOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFdv
cmtlckNvbnRleHQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIFRoaXMgY2xh
c3MgaXMgc2hhcmVkIGJ5IElEQkZhY3RvcnkgKGFzeW5jKSBhbmQgSURCRmFjdG9yeVN5bmMgKHN5
bmMpLgotLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2VuZEltcGwgYW5k
IG9wdGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQotLy8gY2FsbHMgYWNyb3NzIHBy
b2Nlc3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9u
LWJsb2NraW5nIGFuZAotLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYg
bmVjZXNzYXJ5LgotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRl
KCk7Ci0gICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBX
b3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklE
QlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
c2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKLQotSURCSW5kZXg6OklE
QkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJP
YmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAg
ICA6IG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
LSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fYmFja2Vu
ZCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
KTsKLX0KLQotSURCSW5kZXg6On5JREJJbmRleCgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleDo6b3Bl
bkN1cnNvciIpOwotICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVj
dGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJD
dXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUp
IHsKLSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0
dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMTQwNgotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhDdXJzb3IpOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihrZXlSYW5nZSwg
ZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChrZXlSYW5nZSwg
cmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJ
bmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRl
eDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoa2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwotICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vy
c29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYm
IGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6
UFJFVl9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5n
ZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNn
aT9pZD0xMTQwNgotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5U
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhp
cyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOwotICAgIG1fYmFja2VuZC0+
b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vh
cmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0
OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleDo6Z2V0Iik7Ci0gICAgaWYgKGtleSAm
JiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBt
X2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKLSAgICBpZiAoa2V5ICYmIChrZXktPnR5
cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+
Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCSW5kZXhfaAotI2RlZmluZSBJREJJbmRleF9oCi0KLSNpbmNsdWRlICJJ
REJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJPYmpl
Y3RTdG9yZTsKLQotY2xhc3MgSURCSW5kZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQk9iamVjdFN0b3JlKiBv
YmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleChiYWNrZW5kLCBvYmplY3RTdG9yZSwgdHJhbnNh
Y3Rpb24pKTsKLSAgICB9Ci0gICAgfklEQkluZGV4KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhl
IElETAotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7
IH0KLSAgICBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlLmdldCgpOyB9Ci0gICAgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmQtPmtleVBhdGgoKTsgfQotICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kLT51bmlxdWUoKTsgfQotICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZC0+bXVsdGlFbnRyeSgpOyB9Ci0KLSAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgMCwgZWMp
OyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURC
Q3Vyc29yOjpORVhULCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5n
ZSo+KDApLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIDAs
IGVjKTsgfSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtl
eVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBJREJJbmRleChQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24q
KTsKLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkluZGV4X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXguaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXguaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkluZGV4LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9k
dWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRQotICAgIF0gSURCSW5kZXggewotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJPYmplY3RT
dG9yZSBvYmplY3RTdG9yZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBr
ZXlQYXRoOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1bmlxdWU7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIG11bHRpRW50cnk7Ci0KLSAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihpbiBb
T3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwot
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVu
S2V5Q3Vyc29yKGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0g
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IGdldChpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRh
YmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJSZXF1ZXN0IGdldEtleShpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2Up
Ci0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gSURCS2V5
IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgIH07
Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRl
ICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBp
bnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi0gICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJh
c2VJZCkKLSAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKLSAg
ICAsIG1faWQoaWQpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fc3RvcmVOYW1lKHN0b3Jl
TmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV91bmlxdWUodW5pcXVlKQot
ICAgICwgbV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCi17Ci19Ci0KLUlEQkluZGV4QmFja2VuZElt
cGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0
U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi0g
ICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2RhdGFiYXNlSWQoZGF0
YWJhc2VJZCkKLSAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkK
LSAgICAsIG1faWQoSW52YWxpZElkKQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX3N0b3Jl
TmFtZShzdG9yZU5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKLSAgICAsIG1fdW5pcXVl
KHVuaXF1ZSkKLSAgICAsIG1fbXVsdGlFbnRyeShtdWx0aUVudHJ5KQotewotfQotCi1JREJJbmRl
eEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVjdGlvbik7
Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
cjsKLQotICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFi
YXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJh
bmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcihpbmRleC0+bV9kYXRh
YmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBy
YW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKLSAgICBjYXNlIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpudWxsVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZShpbmRleC0+bV9zdG9y
ZU5hbWUsIGVjKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUgJiYgIWVjKTsKLQotICAgIFJlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBl
LCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOwotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZElt
cGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVu
Q3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsK
LSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7Ci0gICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25Q
dHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24p
KSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJ
VkVfRVJSOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7Ci0gICAg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKLSAgICBSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvcklu
dGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQot
Ci12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24p
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7
Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEtleUN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAgfSB3aGls
ZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLSAgICBiYWNraW5n
U3RvcmVDdXJzb3ItPmNsb3NlKCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkpOwotfQotCi12b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24pKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6
OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGdldE9iamVj
dCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7Ci0gICAgLy8gRklYTUU6IFNwbGl0
IGdldEludGVybmFsIGludG8gdHdvIGZ1bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmpl
Y3R8LgotICAgIGlmIChnZXRPYmplY3QpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgt
Pm1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBp
bmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUt
PmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKLSAgICAgICAgaWYgKCFr
ZXlSZXN1bHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PElEQktleSo+KDApKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJu
YWwsIGluZGV4LCBrZXksIHRydWUsIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgi
SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5Iik7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4ID0gdGhpczsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0g
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVy
bmFsLCBpbmRleCwga2V5LCBmYWxzZSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotYm9vbCBJREJJ
bmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXks
IGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKLXsKLSAgICBpZiAoIW1fdW5pcXVlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKLSAg
ICBib29sIGZvdW5kID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luSW5kZXgobV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pZCwgKmluZGV4S2V5LCBmb3VuZFBy
aW1hcnlLZXkpOwotICAgIGlmICghZm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCSW5kZXhC
YWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkluZGV4QmFja2VuZEltcGxfaAotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCS2V5OwotY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5k
LCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwoYmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUJhY2tlbmQsIGlkLCBuYW1lLCBzdG9y
ZU5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwotICAgIH0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4
QmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUJhY2tlbmQs
IG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKLQotICAgIGludDY0X3QgaWQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAg
cmV0dXJuIG1faWQ7Ci0gICAgfQotICAgIHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lkID0g
aWQ7IH0KLSAgICBib29sIGhhc1ZhbGlkSWQoKSBjb25zdCB7IHJldHVybiBtX2lkICE9IEludmFs
aWRJZDsgfTsKLQotICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChjb25zdCBJREJLZXkqIGluZGV4
S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwKTsKLQotICAgIC8vIEltcGxlbWVudHMg
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLgotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSB7IHJl
dHVybiBtX25hbWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBzdG9yZU5hbWUoKSB7IHJldHVybiBt
X3N0b3JlTmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSB7IHJldHVybiBtX2tl
eVBhdGg7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdW5pcXVlKCkgeyByZXR1cm4gbV91bmlxdWU7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpIHsgcmV0dXJuIG1fbXVsdGlFbnRyeTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2
b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVh
bCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi1w
cml2YXRlOgotICAgIElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBp
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKLSAgICBJREJJbmRl
eEJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICBzdGF0aWMgdm9p
ZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwot
ICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4sIGJvb2wgZ2V0
T2JqZWN0LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgc3RhdGljIGNvbnN0IGlu
dDY0X3QgSW52YWxpZElkID0gMDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOwotCi0gICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogbV9vYmplY3RTdG9yZUJhY2tlbmQ7Ci0gICAgaW50NjRfdCBt
X2lkOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fc3RvcmVOYW1lOwotICAgIFN0
cmluZyBtX2tleVBhdGg7Ci0gICAgYm9vbCBtX3VuaXF1ZTsKLSAgICBib29sIG1fbXVsdGlFbnRy
eTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJJbmRleEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2VfaAotI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xhc3MgSURCS2V5
OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2UoKSB7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgc3RvcmVOYW1lKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHVuaXF1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbXVsdGlF
bnRyeSgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURC
S2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQktl
eTo6SURCS2V5KCkKLSAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkKLSAgICAsIG1fc2l6ZUVzdGlt
YXRlKGtPdmVyaGVhZFNpemUpCi17Ci19Ci0KLUlEQktleTo6fklEQktleSgpCi17Ci19Ci0KLWlu
dCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NF
UlQob3RoZXIpOwotICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1fdHlwZSkKLSAgICAgICAgcmV0
dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7Ci0KLSAgICBzd2l0Y2ggKG1fdHlw
ZSkgewotICAgIGNhc2UgQXJyYXlUeXBlOgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5jb21wYXJlKG90aGVyLT5tX2Fy
cmF5W2ldLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5tX2FycmF5LnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgpID4gb3RoZXIt
Pm1fYXJyYXkuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIGNhc2UgU3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuIC1jb2RlUG9pbnRDb21wYXJl
KG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOwotICAgIGNhc2UgRGF0ZVR5cGU6Ci0gICAgICAg
IHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6Ci0gICAgICAgICAgICAgICAg
KG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7Ci0gICAgY2FzZSBOdW1iZXJUeXBlOgot
ICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVtYmVyKSA/IC0xIDoKLSAgICAg
ICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVyKSA/IDEgOiAwOwotICAgIGNh
c2UgSW52YWxpZFR5cGU6Ci0gICAgY2FzZSBNaW5UeXBlOgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSURCS2V5Ojppc0xlc3NUaGFuKGNvbnN0
IElEQktleSogb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG90aGVyKTsKLSAgICByZXR1cm4g
Y29tcGFyZShvdGhlcikgPT0gLTE7Ci19Ci0KLWJvb2wgSURCS2V5Ojppc0VxdWFsKGNvbnN0IElE
QktleSogb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCFvdGhlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaAkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCS2V5X2gKLSNkZWZpbmUgSURC
S2V5X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCS2V5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT4gewot
cHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gS2V5QXJyYXk7Ci0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUludmFsaWQoKQotICAgIHsKLSAg
ICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktleSgpKTsKLSAg
ICAgICAgaWRiS2V5LT5tX3R5cGUgPSBJbnZhbGlkVHlwZTsKLSAgICAgICAgcmV0dXJuIGlkYktl
eS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVOdW1iZXIoZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGlk
YktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7Ci0gICAgICAgIGlkYktleS0+bV90eXBlID0g
TnVtYmVyVHlwZTsKLSAgICAgICAgaWRiS2V5LT5tX251bWJlciA9IG51bWJlcjsKLSAgICAgICAg
aWRiS2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKLSAgICAgICAgcmV0dXJu
IGlkYktleS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOwotICAgICAgICBpZGJL
ZXktPm1fdHlwZSA9IFN0cmluZ1R5cGU7Ci0gICAgICAgIGlkYktleS0+bV9zdHJpbmcgPSBzdHJp
bmc7Ci0gICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc3RyaW5nLmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVEYXRlKGRvdWJsZSBkYXRlKQot
ICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktl
eSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBEYXRlVHlwZTsKLSAgICAgICAgaWRiS2V5
LT5tX2RhdGUgPSBkYXRlOwotICAgICAgICBpZGJLZXktPm1fc2l6ZUVzdGltYXRlICs9IHNpemVv
Zihkb3VibGUpOwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUFycmF5KGNvbnN0IEtleUFycmF5JiBh
cnJheSkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IGFkb3B0UmVmKG5l
dyBJREJLZXkoKSk7Ci0gICAgICAgIGlkYktleS0+bV90eXBlID0gQXJyYXlUeXBlOwotICAgICAg
ICBpZGJLZXktPm1fYXJyYXkgPSBhcnJheTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFycmF5LnNpemUoKTsgKytpKQotICAgICAgICAgICAgaWRiS2V5LT5tX3NpemVFc3RpbWF0
ZSArPSBhcnJheVtpXS0+bV9zaXplRXN0aW1hdGU7Ci0KLSAgICAgICAgcmV0dXJuIGlkYktleS5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgfklEQktleSgpOwotCi0gICAgLy8gSW4gb3JkZXIgb2Yg
dGhlIGxlYXN0IHRvIHRoZSBoaWdoZXN0IHByZWNlZGVudCBpbiB0ZXJtcyBvZiBzb3J0IG9yZGVy
LgotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIEludmFsaWRUeXBlID0gMCwKLSAgICAgICAgQXJy
YXlUeXBlLAotICAgICAgICBTdHJpbmdUeXBlLAotICAgICAgICBEYXRlVHlwZSwKLSAgICAgICAg
TnVtYmVyVHlwZSwKLSAgICAgICAgTWluVHlwZQotICAgIH07Ci0KLSAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlICE9IEludmFsaWRUeXBlOyB9Ci0KLSAgICBjb25zdCBLZXlBcnJheSYgYXJyYXkoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBcnJheVR5cGUpOwotICAgICAg
ICByZXR1cm4gbV9hcnJheTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFN0cmluZ1R5cGUpOwotICAgICAg
ICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgfQotCi0gICAgZG91YmxlIGRhdGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBEYXRlVHlwZSk7Ci0gICAgICAgIHJldHVybiBt
X2RhdGU7Ci0gICAgfQotCi0gICAgZG91YmxlIG51bWJlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQobV90eXBlID09IE51bWJlclR5cGUpOwotICAgICAgICByZXR1cm4gbV9udW1iZXI7
Ci0gICAgfQotCi0gICAgaW50IGNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3Q7Ci0g
ICAgYm9vbCBpc0xlc3NUaGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0OwotICAgIGJvb2wg
aXNFcXVhbChjb25zdCBJREJLZXkqIG90aGVyKSBjb25zdDsKLQotICAgIHNpemVfdCBzaXplRXN0
aW1hdGUoKSBjb25zdCB7IHJldHVybiBtX3NpemVFc3RpbWF0ZTsgfQotCi0gICAgc3RhdGljIGlu
dCBjb21wYXJlVHlwZXMoVHlwZSBhLCBUeXBlIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYiAt
IGE7Ci0gICAgfQotCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5Pjo6cmVm
OwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OmRlcmVmOwotCi1wcml2
YXRlOgotICAgIElEQktleSgpOwotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAgS2V5QXJyYXkgbV9h
cnJheTsKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgZG91YmxlIG1fZGF0ZTsKLSAgICBkb3Vi
bGUgbV9udW1iZXI7Ci0KLSAgICBzaXplX3QgbV9zaXplRXN0aW1hdGU7Ci0KLSAgICAvLyBWZXJ5
IHJvdWdoIGVzdGltYXRlIG9mIG1pbmltdW0ga2V5IHNpemUgb3ZlcmhlYWQuCi0gICAgZW51bSB7
IGtPdmVyaGVhZFNpemUgPSAxNiB9OwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJLZXlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJLZXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJLZXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUg
c3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVE
X0RBVEFCQVNFLAotICAgICAgICBDdXN0b21Ub0pTT2JqZWN0Ci0gICAgXSBJREJLZXkgewotICAg
ICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4KLSAgICB9Owot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIklEQktleVBhdGguaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvZHRvYS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleVBhdGhMZXhlciB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBUb2tlblR5cGUgewotICAgICAgICBUb2tlbklkZW50aWZpZXIsCi0gICAgICAgIFRva2VuRG90
LAotICAgICAgICBUb2tlbkVuZCwKLSAgICAgICAgVG9rZW5FcnJvcgotICAgIH07Ci0KLSAgICBl
eHBsaWNpdCBJREJLZXlQYXRoTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQotICAgICAgICA6IG1fc3Ry
aW5nKHMpCi0gICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCi0gICAgICAgICwgbV9lbmQo
cy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQotICAgICAgICAsIG1fY3VycmVudFRva2VuVHlw
ZShUb2tlbkVycm9yKQotICAgIHsKLSAgICB9Ci0KLSAgICBUb2tlblR5cGUgY3VycmVudFRva2Vu
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRva2VuVHlwZTsgfQotCi0gICAgVG9rZW5U
eXBlIG5leHRUb2tlblR5cGUoKQotICAgIHsKLSAgICAgICAgbV9jdXJyZW50VG9rZW5UeXBlID0g
bGV4KG1fY3VycmVudEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBl
OwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYgY3VycmVudEVsZW1lbnQoKSB7IHJldHVybiBt
X2N1cnJlbnRFbGVtZW50OyB9Ci0KLXByaXZhdGU6Ci0gICAgVG9rZW5UeXBlIGxleChTdHJpbmcm
KTsKLSAgICBUb2tlblR5cGUgbGV4SWRlbnRpZmllcihTdHJpbmcmKTsKLSAgICBTdHJpbmcgbV9j
dXJyZW50RWxlbWVudDsKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgY29uc3QgVUNoYXIqIG1f
cHRyOwotICAgIGNvbnN0IFVDaGFyKiBtX2VuZDsKLSAgICBUb2tlblR5cGUgbV9jdXJyZW50VG9r
ZW5UeXBlOwotfTsKLQotSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVy
OjpsZXgoU3RyaW5nJiBlbGVtZW50KQotewotICAgIGlmIChtX3B0ciA+PSBtX2VuZCkKLSAgICAg
ICAgcmV0dXJuIFRva2VuRW5kOwotICAgIEFTU0VSVChtX3B0ciA8IG1fZW5kKTsKLQotICAgIGlm
ICgqbV9wdHIgPT0gJy4nKSB7Ci0gICAgICAgICsrbV9wdHI7Ci0gICAgICAgIHJldHVybiBUb2tl
bkRvdDsKLSAgICB9Ci0gICAgcmV0dXJuIGxleElkZW50aWZpZXIoZWxlbWVudCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoVUNoYXIgYykK
LXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQn
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoVUNo
YXIgYykKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCAoYyA9PSAnXycp
IHx8IChjID09ICckJyk7Ci19Ci0KLUlEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIElEQktleVBh
dGhMZXhlcjo6bGV4SWRlbnRpZmllcihTdHJpbmcmIGVsZW1lbnQpCi17Ci0gICAgY29uc3QgVUNo
YXIqIHN0YXJ0ID0gbV9wdHI7Ci0gICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRp
ZmllclN0YXJ0Q2hhcmFjdGVyKCptX3B0cikpCi0gICAgICAgICsrbV9wdHI7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gVG9rZW5FcnJvcjsKLQotICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYm
IGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKLSAgICAgICAgKyttX3B0cjsKLQot
ICAgIGVsZW1lbnQgPSBTdHJpbmcoc3RhcnQsIG1fcHRyIC0gc3RhcnQpOwotICAgIHJldHVybiBU
b2tlbklkZW50aWZpZXI7Ci19Ci0KLWJvb2wgSURCSXNWYWxpZEtleVBhdGgoY29uc3QgU3RyaW5n
JiBrZXlQYXRoKQotewotICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKLSAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Ci0gICAgcmV0dXJuIGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yTm9uZTsKLX0KLQotdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBWZWN0b3I8U3RyaW5nPiYgZWxlbWVudHMsIElEQktleVBhdGhQYXJzZUVycm9yJiBl
cnJvcikKLXsKLSAgICAvLyBJREJLZXlQYXRoIDo6PSBFTVBUWV9TVFJJTkcgfCBpZGVudGlmaWVy
ICgnLicgaWRlbnRpZmllcikqCi0gICAgLy8gVGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6Ci0g
ICAgLy8gICBTdGFydCA9PiB7SWRlbnRpZmllciwgRW5kfQotICAgIC8vICAgSWRlbnRpZmllciA9
PiB7RG90LCBFbmR9Ci0gICAgLy8gICBEb3QgPT4ge0lkZW50aWZpZXJ9Ci0gICAgLy8gSXQgYmFp
bHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMgYW4gZXJyb3IsIGJ1dCBkb2Vzbid0IGRpc2NhcmQg
dGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJzZS4KLSAgICBlbnVtIFBhcnNlclN0YXRlIHsgSWRl
bnRpZmllciwgRG90LCBFbmQgfTsKLQotICAgIElEQktleVBhdGhMZXhlciBsZXhlcihrZXlQYXRo
KTsKLSAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5uZXh0
VG9rZW5UeXBlKCk7Ci0gICAgUGFyc2VyU3RhdGUgc3RhdGU7Ci0gICAgaWYgKHRva2VuVHlwZSA9
PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRpZmllcikKLSAgICAgICAgc3RhdGUgPSBJZGVu
dGlmaWVyOwotICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
RW5kKQotICAgICAgICBzdGF0ZSA9IEVuZDsKLSAgICBlbHNlIHsKLSAgICAgICAgZXJyb3IgPSBJ
REJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
d2hpbGUgKDEpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIElkZW50
aWZpZXIgOiB7Ci0gICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5
cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBBU1NFUlQodG9rZW5U
eXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKTsKLQotICAgICAgICAgICAg
U3RyaW5nIGVsZW1lbnQgPSBsZXhlci5jdXJyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgZWxl
bWVudHMuYXBwZW5kKGVsZW1lbnQpOwotCi0gICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5u
ZXh0VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhM
ZXhlcjo6VG9rZW5Eb3QpCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBEb3Q7Ci0gICAgICAgICAg
ICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkVuZCkKLSAgICAg
ICAgICAgICAgICBzdGF0ZSA9IEVuZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JJZGVudGlmaWVyOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRG90OiB7Ci0gICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
VHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBB
U1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpOwotCi0gICAgICAg
ICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICBpZiAo
dG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQotICAgICAgICAg
ICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JEb3Q7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBFbmQ6IHsKLSAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJy
b3JOb25lOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmgJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQktleVBhdGhfaAotI2Rl
ZmluZSBJREJLZXlQYXRoX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIElEQktleVBhdGhQYXJzZUVycm9yIHsKLSAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmUsCi0gICAgSURCS2V5UGF0aFBhcnNlRXJyb3JTdGFydCwK
LSAgICBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXIsCi0gICAgSURCS2V5UGF0aFBhcnNl
RXJyb3JEb3QsCi19OwotCi1ib29sIElEQklzVmFsaWRLZXlQYXRoKGNvbnN0IFN0cmluZyYpOwot
dm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mLCBJREJL
ZXlQYXRoUGFyc2VFcnJvciYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCS2V5UGF0aF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVBhdGhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJREJLZXlQYXRoQmFja2VuZEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotI2Vy
cm9yICJDaHJvbWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBpbnN0ZWFkIGRl
ZmluZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBmYWN0b3J5IHRoYXQgbmF2aWdhdGVzIHRoZSBt
dWx0aS1wcm9jZXNzIGJvdW5kcnkuIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotdm9pZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2Vy
aWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+JiwgMD4gdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQ
dHI8SURCS2V5PiwgMD4mIGtleXMpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZCBvbmNlIEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0VmFs
dWUuCi19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJLZXlQYXRoQmFj
a2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBv
bmNlIEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFj
a2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBJREJLZXlQYXRoQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJLZXlQYXRoQmFja2VuZEltcGxf
aAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLWNsYXNzIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTsKLQotY2xhc3MgSURCS2V5UGF0aEJhY2tlbmRJbXBsIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRL
ZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgMD4mIHZh
bHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBr
ZXlzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQktl
eVBhdGhCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJh
bmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdl
LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlS
YW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQktleVJhbmdlOjpJREJL
ZXlSYW5nZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBl
ciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlwZSB1cHBlclR5cGUpCi0g
ICAgOiBtX2xvd2VyKGxvd2VyKQotICAgICwgbV91cHBlcih1cHBlcikKLSAgICAsIG1fbG93ZXJU
eXBlKGxvd2VyVHlwZSkKLSAgICAsIG1fdXBwZXJUeXBlKHVwcGVyVHlwZSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0g
cHJwS2V5OwotICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5
cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShr
ZXksIGtleSwgTG93ZXJCb3VuZENsb3NlZCwgVXBwZXJCb3VuZENsb3NlZCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpsb3dlckJvdW5kKFBhc3NSZWZQdHI8SURC
S2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYm91
bmQgJiYgKGJvdW5kLT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKGJvdW5kLCAwLCBvcGVuID8g
TG93ZXJCb3VuZE9wZW4gOiBMb3dlckJvdW5kQ2xvc2VkLCBVcHBlckJvdW5kQ2xvc2VkKTsKLX0K
LQotUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6OnVwcGVyQm91bmQoUGFzc1Jl
ZlB0cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmIChib3VuZCAmJiAoYm91bmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewot
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoMCwgYm91bmQs
IExvd2VyQm91bmRDbG9zZWQsIG9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVyQm91bmRDbG9z
ZWQpOwotfQotCi1QYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6Ym91bmQoUGFz
c1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93
ZXJPcGVuLCBib29sIHVwcGVyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKChs
b3dlciAmJiAobG93ZXItPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgfHwgKHVwcGVy
ICYmICh1cHBlci0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIGlmIChsb3dlciAmJiB1cHBlciAmJiB1cHBlci0+aXNMZXNzVGhhbihsb3dlci5n
ZXQoKSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobG93ZXIgJiYgdXBwZXIgJiYgdXBwZXIt
PmlzRXF1YWwobG93ZXIuZ2V0KCkpICYmIChsb3dlck9wZW4gfHwgdXBwZXJPcGVuKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUobG93ZXIsIHVwcGVy
LCBsb3dlck9wZW4gPyBMb3dlckJvdW5kT3BlbiA6IExvd2VyQm91bmRDbG9zZWQsIHVwcGVyT3Bl
biA/IFVwcGVyQm91bmRPcGVuIDogVXBwZXJCb3VuZENsb3NlZCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQktleVJhbmdlX2gKLSNkZWZpbmUgSURCS2V5UmFu
Z2VfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJLZXku
aCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCS2V5UmFuZ2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+IHsKLXB1YmxpYzoKLSAgICBlbnVtIExv
d2VyQm91bmRUeXBlIHsKLSAgICAgICAgTG93ZXJCb3VuZE9wZW4sCi0gICAgICAgIExvd2VyQm91
bmRDbG9zZWQKLSAgICB9OwotICAgIGVudW0gVXBwZXJCb3VuZFR5cGUgewotICAgICAgICBVcHBl
ckJvdW5kT3BlbiwKLSAgICAgICAgVXBwZXJCb3VuZENsb3NlZAotICAgIH07Ci0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dl
ciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5kVHlwZSBsb3dlclR5cGUsIFVw
cGVyQm91bmRUeXBlIHVwcGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCS2V5UmFuZ2UobG93ZXIsIHVwcGVyLCBsb3dlclR5cGUsIHVwcGVyVHlwZSkpOwotICAg
IH0KLSAgICB+SURCS2V5UmFuZ2UoKSB7IH0KLQotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBsb3dl
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG93ZXI7IH0KLSAgICBQYXNzUmVmUHRyPElEQktleT4gdXBw
ZXIoKSBjb25zdCB7IHJldHVybiBtX3VwcGVyOyB9Ci0gICAgYm9vbCBsb3dlck9wZW4oKSBjb25z
dCB7IHJldHVybiBtX2xvd2VyVHlwZSA9PSBMb3dlckJvdW5kT3BlbjsgfQotICAgIGJvb2wgdXBw
ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV91cHBlclR5cGUgPT0gVXBwZXJCb3VuZE9wZW47IH0K
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBvbmx5KFBhc3NSZWZQdHI8SURC
S2V5PiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGxvd2VyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBFeGNlcHRpb25D
b2RlJiBlYykKLSAgICB7Ci0gICAgICByZXR1cm4gbG93ZXJCb3VuZChib3VuZCwgZmFsc2UsIGVj
KTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGxvd2VyQm91bmQo
UGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiB1cHBlckJvdW5kKFBhc3NSZWZQdHI8
SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAgcmV0dXJuIHVw
cGVyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiB1cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBv
cGVuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBw
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIHsKLSAgICAgIHJldHVybiBib3VuZChsb3dlciwg
dXBwZXIsIGZhbHNlLCBmYWxzZSwgZWMpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElE
QktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0g
ICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVwcGVyLCBsb3dlck9wZW4sIGZhbHNlLCBlYyk7Ci0g
ICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBib3VuZChQYXNzUmVmUHRy
PElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgYm9vbCBsb3dlck9wZW4s
IGJvb2wgdXBwZXJPcGVuLCBFeGNlcHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgSURCS2V5
UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIs
IExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJCb3VuZFR5cGUgdXBwZXJUeXBlKTsKLQot
ICAgIFJlZlB0cjxJREJLZXk+IG1fbG93ZXI7Ci0gICAgUmVmUHRyPElEQktleT4gbV91cHBlcjsK
LSAgICBMb3dlckJvdW5kVHlwZSBtX2xvd2VyVHlwZTsKLSAgICBVcHBlckJvdW5kVHlwZSBtX3Vw
cGVyVHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBJREJLZXlSYW5nZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJh
bmdlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdl
LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlS
YW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBz
dG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UKLSAgICBdIElEQktleVJhbmdlIHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IElEQktleSBsb3dlcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSB1cHBlcjsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbG93ZXJPcGVuOwotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9wZW47Ci0KLSAgICAgICAgc3RhdGljIElE
QktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQotICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHN0YXRpYyBJREJLZXlSYW5nZSBsb3dlckJvdW5k
KGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pCi0gICAgICAgICAg
ICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgc3RhdGljIElEQktleVJh
bmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gb3Bl
bikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBz
dGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5IGxvd2VyLCBpbiBJREJLZXkgdXBwZXIs
IGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4sIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1
cHBlck9wZW4pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAg
ICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUz
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkxldmVs
REJCYWNraW5nU3RvcmUuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVT
RShMRVZFTERCKQotCi0jaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKLSNpbmNsdWRlICJMZXZl
bERCQ29tcGFyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgotI2luY2x1ZGUg
IkxldmVsREJJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1ZGUg
IkxldmVsREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBnZXRJbnQo
REJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZv
dW5kSW50KQotewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtl
eSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRJbnQgPSBkZWNv
ZGVJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBwdXRJ
bnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3Qg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGRiLT5wdXQoa2V5LCBlbmNvZGVJbnQodmFsdWUpKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdldFN0
cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgU3RyaW5n
JiBmb3VuZFN0cmluZykKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghZGIt
PmdldChrZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kU3Ry
aW5nID0gZGVjb2RlU3RyaW5nKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3Rh
dGljIGJvb2wgcHV0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFy
PiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKCFkYi0+cHV0KGtleSwgZW5j
b2RlU3RyaW5nKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGludCBjb21wYXJlS2V5cyhjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNv
bnN0IExldmVsREJTbGljZSYgYikKLXsKLSAgICByZXR1cm4gY29tcGFyZShhLCBiKTsKLX0KLQot
c3RhdGljIGludCBjb21wYXJlSW5kZXhLZXlzKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3Qg
TGV2ZWxEQlNsaWNlJiBiKQotewotICAgIHJldHVybiBjb21wYXJlKGEsIGIsIHRydWUpOwotfQot
Ci1jbGFzcyBDb21wYXJhdG9yIDogcHVibGljIExldmVsREJDb21wYXJhdG9yIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIGludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3QgTGV2
ZWxEQlNsaWNlJiBiKSBjb25zdCB7IHJldHVybiBJREJMZXZlbERCQ29kaW5nOjpjb21wYXJlKGEs
IGIpOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gImlk
Yl9jbXAxIjsgfQotfTsKLQotc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJh
c2UqIGRiKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtZXRhRGF0YUtleSA9IFNjaGVtYVZl
cnNpb25LZXk6OmVuY29kZSgpOwotCi0gICAgaW50NjRfdCBzY2hlbWFWZXJzaW9uID0gMDsKLSAg
ICBpZiAoIWdldEludChkYiwgbWV0YURhdGFLZXksIHNjaGVtYVZlcnNpb24pKSB7Ci0gICAgICAg
IHNjaGVtYVZlcnNpb24gPSAwOwotICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXks
IHNjaGVtYVZlcnNpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5LCB3ZSdsbCBuZWVkIHRvIGJlIGFibGUgdG8gdHJhbnNpdGlv
biBiZXR3ZWVuIHNjaGVtYXMuCi0gICAgaWYgKHNjaGVtYVZlcnNpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gRG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhpcyB2ZXJzaW9uLgotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZElt
cGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKLSAgICA6IG1faWRl
bnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX2Ri
KGRiKQotewotICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIHRo
aXMpOwotfQotCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZSgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVy
KTsKLQotICAgIC8vIG1fZGIncyBkZXN0cnVjdG9yIHVzZXMgbV9jb21wYXJhdG9yLiBUaGUgb3Jk
ZXIgb2YgZGVzdHJ1Y3Rpb24gaXMgaW1wb3J0YW50LgotICAgIG1fZGIuY2xlYXIoKTsKLSAgICBt
X2NvbXBhcmF0b3IuY2xlYXIoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi17Ci0gICAgU3RyaW5nIHBhdGhCYXNl
ID0gcGF0aEJhc2VBcmc7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0
b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKLSAgICBPd25QdHI8TGV2ZWxEQkRhdGFi
YXNlPiBkYjsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCi0gICAgICAgIGRiID0gTGV2
ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIEluZGV4ZWREQiBkYXRhYmFzZSBwYXRoICVz
IiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERCIGRhdGFiYXNlIGZvciBhbGwgb3Jp
Z2lucy4KLSAgICAgICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0
aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRi
LmxldmVsZGIiKTsKLQotICAgICAgICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCBj
b21wYXJhdG9yLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRiKQotICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIGNv
bXBhcmF0b3IgbmFtZSBjaGFuZ2VzLgotCi0gICAgUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihuZXcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShmaWxl
SWRlbnRpZmllciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkpOwotICAgIGJhY2tpbmdTdG9yZS0+
bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7Ci0KLSAgICBpZiAoIXNldFVwTWV0
YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPigpOwotCi0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNl
KCk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyhW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihtX2lkZW50aWZp
ZXIpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VOYW1lS2V5Ojpl
bmNvZGVTdG9wS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7Ci0KLSAgICBBU1NFUlQoZm91bmRO
YW1lcy5pc0VtcHR5KCkpOwotCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2Ri
LT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNW
YWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgp
KSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKLSAgICAgICAg
Y29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAgRGF0YWJhc2VO
YW1lS2V5IGRhdGFiYXNlTmFtZUtleTsKLSAgICAgICAgcCA9IERhdGFiYXNlTmFtZUtleTo6ZGVj
b2RlKHAsIGxpbWl0LCAmZGF0YWJhc2VOYW1lS2V5KTsKLSAgICAgICAgQVNTRVJUKHApOwotCi0g
ICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFzZU5hbWUoKSk7
Ci0gICAgfQotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRf
dCYgZm91bmRJZCkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1l
S2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKLQotICAgIGJvb2wgb2sgPSBnZXRJbnQo
bV9kYi5nZXQoKSwga2V5LCBmb3VuZElkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSwg
Zm91bmRWZXJzaW9uKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZl
bERCRGF0YWJhc2UqIGRiKQotewotICAgIGludDY0X3QgbWF4RGF0YWJhc2VJZCA9IC0xOwotICAg
IGlmICghZ2V0SW50KGRiLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4RGF0YWJhc2VJ
ZCkpCi0gICAgICAgIG1heERhdGFiYXNlSWQgPSAwOwotCi0gICAgQVNTRVJUKG1heERhdGFiYXNl
SWQgPj0gMCk7Ci0KLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtYXhEYXRhYmFzZUlkICsgMTsK
LSAgICBpZiAoIXB1dEludChkYiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFiYXNl
SWQpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICByZXR1cm4gZGF0YWJhc2VJZDsKLX0KLQot
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkK
LXsKLSAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7Ci0gICAgaWYgKHJv
d0lkIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+
IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7Ci0gICAg
aWYgKCFwdXRJbnQobV9kYi5nZXQoKSwga2V5LCByb3dJZCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIXB1dFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5Ojpl
bmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiksIHZlcnNpb24p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJv
d0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5z
YWN0aW9uKTsKLSAgICBpZiAoIXB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5Ojpr
VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZW5kKQotewotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1Zh
bGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewot
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24gPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMp
OwotICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOwotCi0gICAgaW50NjRfdCBkYXRhYmFzZUlkOwot
ICAgIFN0cmluZyB2ZXJzaW9uOwotICAgIGlmICghZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1l
LCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2so
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0YXJ0S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFi
YXNlTWV0YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rv
cEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkICsgMSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOwotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KSkgewotICAgICAgICB0cmFu
c2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50
aWZpZXIsIG5hbWUpOwotICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5KTsKLQot
ICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShjb25zdCBMZXZlbERCSXRlcmF0
b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBtZXRhRGF0YVR5cGUpCi17Ci0gICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNv
bXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICBjb25zdCBj
aGFyKiBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGl0LT5rZXkoKS5iZWdpbigp
LCBpdC0+a2V5KCkuZW5kKCksICZtZXRhRGF0YUtleSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwLCBw
KTsKLSAgICBpZiAobWV0YURhdGFLZXkub2JqZWN0U3RvcmVJZCgpICE9IG9iamVjdFN0b3JlSWQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBl
KCkgIT0gbWV0YURhdGFUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9v
bD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBz
dGFydEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAxLCAw
KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkKTsKLQotICAgIEFTU0VSVChmb3VuZElkcy5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZv
dW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRBdXRvSW5jcmVtZW50Rmxh
Z3MuaXNFbXB0eSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+
Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+c2VlayhzdGFydEtleSk7Ci0gICAgd2hpbGUgKGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDApIHsKLSAg
ICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBj
aGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5IG1ldGFEYXRhS2V5OwotICAgICAgICBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0gICAg
ICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSkgewotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWV0YURhdGFLZXku
b2JqZWN0U3RvcmVJZCgpOwotICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gZGVjb2Rl
U3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAg
ICBpdC0+bmV4dCgpOwotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDEpKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGtleVBhdGggPSBkZWNvZGVTdHJpbmcoaXQt
PnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotICAgICAgICBib29sIGhhc0tl
eVBhdGggPSB0cnVlOwotCi0gICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIGlmICghY2hlY2tP
YmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJ
ZCwgMikpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTog
QWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAgYm9vbCBhdXRv
SW5jcmVtZW50ID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsg
Ly8gSXMgZXZpY2F0YmxlLgotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0
YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDMpKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBMYXN0IHZlcnNpb24u
Ci0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwg
c3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgNCkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIE1heGl1bSBpbmRleCBpZCBhbGxvY2F0ZWQuCi0g
ICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3Rv
cEtleSwgb2JqZWN0U3RvcmVJZCwgNSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGl0LT5uZXh0KCk7IC8vIFtvcHRpb25hbF0gaGFzIGtleSBwYXRoIChpcyBub3Qg
bnVsbCkKLSAgICAgICAgaWYgKGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0
KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDYpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
QWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAgICAgIGhhc0tl
eVBhdGggPSAqaXQtPnZhbHVlKCkuYmVnaW4oKTsKLSAgICAgICAgICAgIGlmICghaGFzS2V5UGF0
aCAmJiAha2V5UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZvdW5kSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKLSAgICAgICAgZm91bmROYW1lcy5hcHBl
bmQob2JqZWN0U3RvcmVOYW1lKTsKLSAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQoaGFzS2V5
UGF0aCA/IGtleVBhdGggOiBTdHJpbmcoKSk7Ci0gICAgICAgIGZvdW5kQXV0b0luY3JlbWVudEZs
YWdzLmFwcGVuZChhdXRvSW5jcmVtZW50KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IGdl
dE5ld09iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkKQotewotICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwotICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0YWJhc2VNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtNYXhPYmplY3RT
dG9yZUlkKTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtl
eSwgbWF4T2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIG1heE9iamVjdFN0b3JlSWQgPSAwOwotCi0g
ICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0
b3JlSWQgPSBtYXhPYmplY3RTdG9yZUlkICsgMTsKLSAgICBpZiAoIXB1dEludCh0cmFuc2FjdGlv
biwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIHJldHVybiAt
MTsKLQotICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwotfQotCi1ib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50
NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7Ci0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gZ2V0TmV3T2JqZWN0U3RvcmVJ
ZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCk7Ci0gICAgaWYgKG9iamVj
dFN0b3JlSWQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gbmFtZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gYXV0b0luY3JlbWVudEtleSA9IE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAyKTsKLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gZXZpY3RhYmxlS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDMpOwotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4
SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCA1KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaGFzS2V5UGF0aEtleSAg
PSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgNik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1l
c0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9IHB1dFN0cmlu
ZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7Ci0gICAgaWYgKCFv
aykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dFN0cmluZyhtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7Ci0gICAgaWYg
KCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOwotICAgIGlmICghb2spIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIG1heEluZGV4SWRLZXksIGtNaW5pbXVtSW5kZXhJZCk7Ci0gICAgaWYgKCFvaykgewot
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOwotICAgIGlmICgh
b2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCA9
IG9iamVjdFN0b3JlSWQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwot
Ci0gICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCAwKSwgb2JqZWN0U3RvcmVOYW1lKTsKLQotICAgIGlmICghZGVsZXRl
UmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKLSAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rp
b24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVOYW1lKSk7Ci0KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKSkpCi0gICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBp
ZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURh
dGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCi0gICAgICAg
IHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLQotICAgIGNsZWFyT2JqZWN0U3RvcmUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLVN0cmluZyBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBrZXkpOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5n
ZXQobGV2ZWxkYktleSwgZGF0YSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlu
dDY0X3QgdmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50KGRhdGEuYmVn
aW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgKHZvaWQpIHZlcnNpb247Ci0KLSAgICByZXR1cm4gZGVjb2RlU3RyaW5n
KHAsIGRhdGEuZW5kKCkpOwotfQotCi1uYW1lc3BhY2UgewotY2xhc3MgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJSZWNvcmRJZGVu
dGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZl
cnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihwcmlt
YXJ5S2V5LCB2ZXJzaW9uKSk7IH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWFyeUtleS5pc0VtcHR5KCk7IH0KLSAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtl
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeUtl
eShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5ID0gcHJpbWFy
eUtleTsgfQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsg
fQotICAgIHZvaWQgc2V0VmVyc2lvbihpbnQ2NF90IHZlcnNpb24pIHsgbV92ZXJzaW9uID0gdmVy
c2lvbjsgfQotCi1wcml2YXRlOgotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSA6IG1fcHJpbWFyeUtleShw
cmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1w
dHkoKSk7IH0KLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpIDogbV9wcmltYXJ5S2V5KCks
IG1fdmVyc2lvbigtMSkge30KLQotICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJ
WE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lv
biBvZiB0aGUga2V5LgotICAgIGludDY0X3QgbV92ZXJzaW9uOwotfTsKLX0KLQotc3RhdGljIGlu
dDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7Ci0KLSAgICBpbnQ2NF90IGxhc3RW
ZXJzaW9uID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5
LCBsYXN0VmVyc2lvbikpCi0gICAgICAgIGxhc3RWZXJzaW9uID0gMDsKLQotICAgIEFTU0VSVChs
YXN0VmVyc2lvbiA+PSAwKTsKLQotICAgIGludDY0X3QgdmVyc2lvbiA9IGxhc3RWZXJzaW9uICsg
MTsKLSAgICBib29sIG9rID0gcHV0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgdmVy
c2lvbik7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgQVNTRVJUKHZlcnNpb24g
PiBsYXN0VmVyc2lvbik7IC8vIEZJWE1FOiBUaGluayBhYm91dCBob3cgd2Ugd2FudCB0byBoYW5k
bGUgdGhlIG92ZXJmbG93IHNjZW5hcmlvLgotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLWJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90
IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2Jq
ZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiB2OwotICAgIHYuYXBwZW5k
KGVuY29kZVZhckludCh2ZXJzaW9uKSk7Ci0gICAgdi5hcHBlbmQoZW5jb2RlU3RyaW5nKHZhbHVl
KSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRh
S2V5LCB2KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+
IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlz
dHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsK
LSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJREJLZXko
a2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVyc2lvbik7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xl
YXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
LXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBzdGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5l
bmNvZGUoKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7Ci0KLSAgICBkZWxldGVSYW5n
ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOwotfQotCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCi17
Ci0gICAgcmV0dXJuIExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKLX0KLQotdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRU
cmFuc2FjdGlvbik7Ci0gICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RT
dG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLSAgICBt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7Ci0KLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmlt
YXJ5S2V5KCkpOwotICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlL
ZXkpOwotfQotCi1kb3VibGUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1l
bnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJ
REJLZXkoKSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRy
YW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotCi0gICAgaW50IG1heE51bWVyaWNLZXkgPSAw
OwotCi0gICAgLy8gRklYTUU6IEJlIG1vcmUgZWZmaWNpZW50OiBzZWVrIHRvIHNvbWV0aGluZyBh
ZnRlciB0aGUgb2JqZWN0IHN0b3JlIGRhdGEsIHRoZW4gcmV2ZXJzZS4KLQotICAgIGZvciAoaXQt
PnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwg
c3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+
a2V5KCkuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5k
KCk7Ci0KLSAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAgICAgIHAgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJmRhdGFLZXkpOwotICAgICAgICBB
U1NFUlQocCk7Ci0KLSAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURC
S2V5OjpOdW1iZXJUeXBlKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG4gPSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihkYXRhS2V5LnVzZXJLZXkoKS0+bnVtYmVyKCkpOwotICAgICAgICAgICAgaWYgKG4g
PiBtYXhOdW1lcmljS2V5KQotICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heE51bWVyaWNLZXkgKyAxOwotfQotCi1ib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZl
bGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwga2V5KTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgIGlmICghbV9jdXJyZW50
VHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVn
aW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRp
Y19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4oZm91bmRSZWNvcmRJZGVudGlmaWVyKTsK
LSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJREJLZXko
a2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVyc2lvbik7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9y
RWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKLXsKLSAgICBBU1NF
UlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IG1pbklEQktleSgpKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgp
KTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5p
c1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0
KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAg
ICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLSAgICAgICAgT2JqZWN0U3Rv
cmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29k
ZShwLCBsaW1pdCwgJmRhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0KLSAgICAgICAgUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSA9IGRhdGFLZXkudXNlcktleSgpOwotCi0gICAgICAgIGlu
dDY0X3QgdmVyc2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZhckludChpdC0+
dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgICAgIGlm
ICghcSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBSZWZQdHI8TGV2ZWxE
QlJlY29yZElkZW50aWZpZXI+IHJpID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShl
bmNvZGVJREJLZXkoKnByaW1hcnlLZXkpLCB2ZXJzaW9uKTsKLSAgICAgICAgU3RyaW5nIGlkYlZh
bHVlID0gZGVjb2RlU3RyaW5nKHEsIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBpZiAo
IWNhbGxiYWNrLmNhbGxiYWNrKHJpLmdldCgpLCBpZGJWYWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNo
ZWNrSW5kZXhBbmRNZXRhRGF0YUtleShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3QgaW5kZXhJZCwgdW5zaWduZWQgY2hhciBtZXRh
RGF0YVR5cGUpCi17Ci0gICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBhcmVLZXlzKGl0LT5r
ZXkoKSwgc3RvcEtleSkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW5kZXhN
ZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICBjb25zdCBjaGFyKiBwID0gSW5kZXhNZXRhRGF0
YUtleTo6ZGVjb2RlKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCksICZtZXRhRGF0
YUtleSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwLCBwKTsKLSAgICBpZiAobWV0YURhdGFLZXkuaW5k
ZXhJZCgpICE9IGluZGV4SWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWV0YURh
dGFLZXkubWV0YURhdGFUeXBlKCkgIT0gbWV0YURhdGFUeXBlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBW
ZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFn
cywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncykKLXsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgMCwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBJ
bmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDAs
IDApOwotCi0gICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5k
TmFtZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRLZXlQYXRocy5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChmb3VuZFVuaXF1ZUZsYWdzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5k
TXVsdGlFbnRyeUZsYWdzLmlzRW1wdHkoKSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgaXQtPnNlZWsoc3RhcnRLZXkpOwot
ICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtl
eSkgPCAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKLSAg
ICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAgSW5k
ZXhNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICAgICAgcCA9IEluZGV4TWV0YURhdGFLZXk6
OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKLSAgICAgICAgQVNTRVJUKHApOwotCi0g
ICAgICAgIGludDY0X3QgaW5kZXhJZCA9IG1ldGFEYXRhS2V5LmluZGV4SWQoKTsKLSAgICAgICAg
QVNTRVJUKCFtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSk7Ci0KLSAgICAgICAgU3RyaW5nIGlu
ZGV4TmFtZSA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5l
bmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gdW5pcXVlIGZsYWcKLSAgICAgICAgaWYg
KCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQsIDEp
KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBl
bmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCi0gICAgICAgIGJvb2wgaW5kZXhVbmlx
dWUgPSAqaXQtPnZhbHVlKCkuYmVnaW4oKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBrZXlQ
YXRoCi0gICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9w
S2V5LCBpbmRleElkLCAyKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIG11bHRp
RW50cnkgZmxhZwotICAgICAgICBib29sIGluZGV4TXVsdGlFbnRyeSA9IGZhbHNlOwotICAgICAg
ICBpZiAoY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElk
LCAzKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9u
cyBmb3IgYm9vbHMuCi0gICAgICAgICAgICBpbmRleE11bHRpRW50cnkgPSAqaXQtPnZhbHVlKCku
YmVnaW4oKTsKLSAgICAgICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
b3VuZElkcy5hcHBlbmQoaW5kZXhJZCk7Ci0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKGluZGV4
TmFtZSk7Ci0gICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGtleVBhdGgpOwotICAgICAgICBm
b3VuZFVuaXF1ZUZsYWdzLmFwcGVuZChpbmRleFVuaXF1ZSk7Ci0gICAgICAgIGZvdW5kTXVsdGlF
bnRyeUZsYWdzLmFwcGVuZChpbmRleE11bHRpRW50cnkpOwotICAgIH0KLX0KLQotc3RhdGljIGlu
dDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBpbnQ2NF90IG1h
eEluZGV4SWQgPSAtMTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA1
KTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJ
ZCkpCi0gICAgICAgIG1heEluZGV4SWQgPSBrTWluaW11bUluZGV4SWQ7Ci0KLSAgICBBU1NFUlQo
bWF4SW5kZXhJZCA+PSAwKTsKLQotICAgIGludDY0X3QgaW5kZXhJZCA9IG1heEluZGV4SWQgKyAx
OwotICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBpbmRleElkKSkK
LSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcmV0dXJuIGluZGV4SWQ7Ci19Ci0KLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkK
LXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGluZGV4SWQgPSBnZXRO
ZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKLSAgICBpZiAoaW5kZXhJZCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOwotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiB1bmlxdWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMSk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBh
dGhLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgMik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG11bHRpRW50cnlLZXkgPSBJ
bmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgMyk7Ci0KLSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBuYW1lS2V5LCBuYW1lKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCB1bmlxdWVL
ZXksIGlzVW5pcXVlKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5
LCBrZXlQYXRoKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwg
SW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBtdWx0aUVudHJ5S2V5LCBp
c011bHRpRW50cnkpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotCi0gICAgY29u
c3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+
IHVuaXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9
IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCAyKTsKLQotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShuYW1lS2V5
KSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVt
b3ZlKHVuaXF1ZUtleSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9jdXJyZW50VHJh
bnNhY3Rpb24tPnJlbW92ZShrZXlQYXRoS2V5KSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1p
bktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkg
ewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKGluZGV4
SWQgPj0ga01pbmltdW1JbmRleElkKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmll
ciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVj
b3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5k
ZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5j
b2RlSURCS2V5KGtleSksIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwot
Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoZW5jb2RlVmFySW50KGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKLSAgICBkYXRhLmFwcGVuZChsZXZl
bERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLQotICAgIHJldHVybiBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBib29s
IGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtl
eSkKLXsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKHRhcmdldCk7Ci0KLSAgICBpZiAoIWl0LT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgaXQtPnNlZWtUb0xhc3QoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNW
YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChj
b21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSA+IDApIHsKLSAgICAgICAgaXQtPnBy
ZXYoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgZm91bmRLZXkuY2xlYXIoKTsKLSAgICAg
ICAgZm91bmRLZXkuYXBwZW5kKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCkgLSBp
dC0+a2V5KCkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUgY2FuIGJlIHNldmVyYWwgaW5k
ZXgga2V5cyB0aGF0IGNvbXBhcmUgZXF1YWwuIFdlIHdhbnQgdGhlIGxhc3Qgb25lLgotICAgICAg
ICBpdC0+bmV4dCgpOwotICAgIH0gd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgIWNvbXBhcmVJbmRl
eEtleXMoaXQtPmtleSgpLCB0YXJnZXQpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90
LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IG5lZWRlZCBzaW5jZSB3ZSBpbnZhbGlkYXRlIGlu
ZGV4IGRhdGEgdmlhIHRoZSB2ZXJzaW9uIG51bWJlciBtZWNoYW5pc20uCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRl
eChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
ID0gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGtleSk7Ci0gICAgaWYgKCFwcmltYXJ5S2V5KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gZ2V0T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgKnByaW1hcnlLZXkpOwotfQotCi1zdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2Rl
ZFByaW1hcnlLZXkpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IEV4aXN0c0VudHJ5
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlZFByaW1hcnlLZXkp
OwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+Z2V0KGtl
eSwgZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkZWNvZGVJbnQo
ZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9PSB2ZXJzaW9uOwotfQotCi1zdGF0aWMgYm9vbCBm
aW5kS2V5SW5JbmRleChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQotewotICAg
IEFTU0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSk7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+c2VlayhsZXZl
bGRiS2V5KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY29tcGFyZUluZGV4S2V5cyhp
dC0+a2V5KCksIGxldmVsZGJLZXkpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVW
YXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwot
ICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7Ci0KLSAg
ICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCB2ZXJzaW9uLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewotICAgICAgICAgICAg
Ly8gRGVsZXRlIHN0YWxlIGluZGV4IGRhdGEgZW50cnkgYW5kIGNvbnRpbnVlLgotICAgICAgICAg
ICAgdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwotICAgICAgICAgICAgaXQtPm5leHQo
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNv
ZGVkUHJpbWFyeUtleTsKLSAgICBpZiAoZmluZEtleUluSW5kZXgobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRF
bmNvZGVkUHJpbWFyeUtleSkpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsK
LSAgICAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91
bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgcHJpbWFyeUtleSk7Ci0gICAgICAgIHJldHVybiBw
cmltYXJ5S2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYg
aW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCi17Ci0gICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLQotICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGVjb2Rl
SURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFy
eUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotc3RydWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3RvcjxjaGFyPiBsb3dL
ZXk7Ci0gICAgYm9vbCBsb3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5OwotICAgIGJv
b2wgaGlnaE9wZW47Ci0gICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5pcXVlOwotfTsKLQot
Y2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7
Ci1wdWJsaWM6Ci0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIGJv
b2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0g
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCkgPSAwOwotICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLXByb3RlY3RlZDoK
LSAgICBDdXJzb3JJbXBsQ29tbW9uKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMoY3Vyc29yT3B0aW9ucykK
LSAgICB7Ci0gICAgfQotCi0gICAgQ3Vyc29ySW1wbENvbW1vbihjb25zdCBDdXJzb3JJbXBsQ29t
bW9uKiBvdGhlcikKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRpb25zKQotICAg
ICAgICAsIG1fY3VycmVudEtleShvdGhlci0+bV9jdXJyZW50S2V5KQotICAgIHsKLSAgICAgICAg
aWYgKG90aGVyLT5tX2l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBtX2l0ZXJhdG9yID0gbV90cmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLQotICAgICAgICAgICAgaWYgKG90aGVyLT5tX2l0
ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG90
aGVyLT5tX2l0ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1faXRlcmF0
b3ItPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkge30KLQotICAgIExldmVsREJUcmFuc2FjdGlvbiog
bV90cmFuc2FjdGlvbjsKLSAgICBDdXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsKLSAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwotICAgIFJlZlB0cjxJREJLZXk+IG1f
Y3VycmVudEtleTsKLX07Ci0KLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RTZWVrKCkKLXsK
LSAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLQotICAg
IGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgbV9pdGVyYXRvci0+c2Vlayht
X2N1cnNvck9wdGlvbnMubG93S2V5KTsKLSAgICBlbHNlCi0gICAgICAgIG1faXRlcmF0b3ItPnNl
ZWsobV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBp
ZiAoIW1faXRlcmF0b3ItPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmhp
Z2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAm
JiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGln
aEtleSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fY3Vy
c29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJ
bmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDAp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25z
LmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJbmRleEtleXMo
bV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDwgMCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQg
JiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4pIHsKLSAgICAgICAgICAgIC8vIGxvd0tleSBub3Qg
aW5jbHVkZWQgaW4gdGhlIHJhbmdlLgotICAgICAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMo
bV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDApIHsKLSAgICAg
ICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMu
Zm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4pIHsKLSAgICAgICAgICAgIC8vIGhp
Z2hLZXkgbm90IGluY2x1ZGVkIGluIHRoZSByYW5nZS4KLSAgICAgICAgICAgIGlmIChjb21wYXJl
SW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPj0g
MCkgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnByZXYoKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbG9h
ZEN1cnJlbnRSb3coKSkgewotICAgICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJk
KQotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPm5leHQoKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBD
dXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5KQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNoYXJlcyBhIGxvdCBvZiBjb2RlIHdpdGggZmlyc3RTZWVrLgot
ICAgIFJlZlB0cjxJREJLZXk+IHByZXZpb3VzS2V5ID0gbV9jdXJyZW50S2V5OwotCi0gICAgZm9y
ICg7OykgewotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCi0gICAgICAgICAg
ICBtX2l0ZXJhdG9yLT5uZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faXRlcmF0
b3ItPnByZXYoKTsKLQotICAgICAgICBpZiAoIW1faXRlcmF0b3ItPmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBWZWN0b3I8Y2hhcj4gdHJhc2g7Ci0gICAg
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1faXRlcmF0b3ItPmtleSgpLCB0cmFzaCkpCi0g
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3
YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPj0gMCkgLy8gaGlnaCBrZXkg
bm90IGluY2x1ZGVkIGluIHJhbmdlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVu
ICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5o
aWdoS2V5KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9j
dXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29tcGFy
ZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPD0g
MCkgLy8gbG93IGtleSBub3QgaW5jbHVkZWQgaW4gcmFuZ2UKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JP
cHRpb25zLmxvd09wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9j
dXJzb3JPcHRpb25zLmxvd0tleSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmICghbG9hZEN1cnJlbnRSb3coKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2Fy
ZCkgewotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRLZXktPmlzTGVzc1RoYW4oa2V5KSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmIChrZXktPmlzTGVzc1RoYW4obV9jdXJyZW50S2V5LmdldCgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLnVuaXF1ZSAmJiBtX2N1cnJlbnRLZXktPmlzRXF1
YWwocHJldmlvdXNLZXkuZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRoaXMpKTsKLSAgICB9Ci0K
LSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJl
dHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lkZW50aWZpZXI7Ci0g
ICAgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7Ci0K
LXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAg
IDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0g
ICAgfQotCi0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGNvbnN0IE9iamVjdFN0b3JlQ3Vyc29y
SW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKLSAgICAgICAg
LCBtX2N1cnJlbnRWYWx1ZShvdGhlci0+bV9jdXJyZW50VmFsdWUpCi0gICAgewotICAgIH0KLQot
ICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKLSAgICBSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50
aWZpZXI+IG1faWRlbnRpZmllcjsKLX07Ci0KLWJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0b3ItPmtleSgp
LmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5l
bmQoKTsKLQotICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7Ci0gICAg
cCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVE
YXRhS2V5KTsKLSAgICBBU1NFUlQocCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX2N1cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOwot
Ci0gICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQo
bV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2
ZXJzaW9uKTsKLSAgICBBU1NFUlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2Rl
ZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KLSAgICBtX2lkZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRl
bnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7Ci0K
LSAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmluZyhxLCBtX2l0ZXJhdG9yLT52YWx1ZSgp
LmVuZCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBJbmRleEtleUN1cnNvcklt
cGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0aGlzKSk7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1w
bENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0K
LSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwotCi1wcml2
YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNv
ckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgIH0KLQot
ICAgIEluZGV4S2V5Q3Vyc29ySW1wbChjb25zdCBJbmRleEtleUN1cnNvckltcGwqIG90aGVyKQot
ICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwgbV9wcmltYXJ5S2V5
KG90aGVyLT5tX3ByaW1hcnlLZXkpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+
IG1fcHJpbWFyeUtleTsKLX07Ci0KLWJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVu
dFJvdygpCi17Ci0gICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7
Ci0gICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKLSAg
ICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5OwotICAgIHAgPSBJbmRleERhdGFLZXk6OmRlY29k
ZShwLCBrZXlMaW1pdCwgJmluZGV4RGF0YUtleSk7Ci0KLSAgICBtX2N1cnJlbnRLZXkgPSBpbmRl
eERhdGFLZXkudXNlcktleSgpOwotCi0gICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwotICAg
IGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigp
LCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBpbmRleERhdGFWZXJzaW9uKTsKLSAgICBBU1NF
UlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBxID0gZGVj
b2RlSURCS2V5KHEsIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIG1fcHJpbWFyeUtleSk7Ci0g
ICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
VmVjdG9yPGNoYXI+IHByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNv
ZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQo
KSwgKm1fcHJpbWFyeUtleSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+Z2V0KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247Ci0gICAg
Y29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
LCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodCk7Ci0gICAgaWYgKCF0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAh
PSBpbmRleERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0
ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxD
b21tb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4g
Y3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
ZGV4Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwodGhpcykpOwot
ICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1
ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsg
fQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiAwOyB9Ci0gICAgYm9vbCBsb2FkQ3VycmVudFJvdygpOwotCi1wcml2YXRlOgot
ICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25z
dCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21t
b24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgIH0KLQotICAgIEluZGV4
Q3Vyc29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNv
ckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwgbV9wcmltYXJ5S2V5KG90aGVyLT5tX3ByaW1h
cnlLZXkpCi0gICAgICAgICwgbV92YWx1ZShvdGhlci0+bV92YWx1ZSkKLSAgICAgICAgLCBtX3By
aW1hcnlMZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlMZXZlbERCS2V5KQotICAgIHsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7Ci0gICAgU3RyaW5nIG1fdmFsdWU7
Ci0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUxldmVsREJLZXk7Ci19OwotCi1ib29sIEluZGV4
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQotewotICAgIGNvbnN0IGNoYXIgKnAgPSBtX2l0
ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gbV9pdGVyYXRv
ci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5OwotICAgIHAg
PSBJbmRleERhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJmluZGV4RGF0YUtleSk7Ci0KLSAgICBt
X2N1cnJlbnRLZXkgPSBpbmRleERhdGFLZXkudXNlcktleSgpOwotCi0gICAgY29uc3QgY2hhciAq
cSA9IG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFyICp2YWx1ZUxp
bWl0ID0gbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKTsKLQotICAgIGludDY0X3QgaW5kZXhEYXRh
VmVyc2lvbjsKLSAgICBxID0gZGVjb2RlVmFySW50KHEsIHZhbHVlTGltaXQsIGluZGV4RGF0YVZl
cnNpb24pOwotICAgIEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBxID0gZGVjb2RlSURCS2V5KHEsIHZhbHVlTGltaXQsIG1fcHJpbWFyeUtleSk7Ci0g
ICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9wcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0
YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1h
cnlLZXkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmdldChtX3ByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247Ci0gICAgY29uc3QgY2hh
ciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RT
dG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodCk7Ci0gICAgaWYgKCF0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERh
dGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5r
ZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3ZhbHVlID0gZGVj
b2RlU3RyaW5nKHQsIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQot
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIEN1
cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLQotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdl
LT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
KTsKLSAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpO
RVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJ
Q0FURSk7Ci0KLSAgICBpZiAoIWxvd2VyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5s
b3dLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHRydWU7
IC8vIE5vdCBpbmNsdWRlZC4KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxv
d0tleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsICpyYW5nZS0+bG93ZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHJh
bmdlLT5sb3dlck9wZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQpIHsKLSAgICAg
ICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwotCi0gICAgICAgIGlmIChjdXJz
b3JPcHRpb25zLmZvcndhcmQpCi0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0g
dHJ1ZTsgLy8gTm90IGluY2x1ZGVkLgotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdl
IG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtl
eUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9u
cy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgKnJhbmdlLT51
cHBlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51cHBlck9w
ZW4oKTsKLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgewotICAgICAgICAg
ICAgLy8gRm9yIHJldmVyc2UgY3Vyc29ycywgd2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgICAgICBpZiAoIWZp
bmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJl
IGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGlu
Y2x1ZGUgdGhhdC4KLSAgICAgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNv
bXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkK
LSAgICAgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVj
dFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJz
b3JPcHRpb25zKTsKLSAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtl
eUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIEN1
cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAm
JiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+
dXBwZXIoKTsKLSAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1
cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7
Ci0gICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVY
VF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNB
VEUpOwotCi0gICAgaWYgKCFsb3dlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93
S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IGZhbHNlOyAvLyBJ
bmNsdWRlZC4KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IElu
ZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpy
YW5nZS0+bG93ZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHJhbmdlLT5s
b3dlck9wZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQpIHsKLSAgICAgICAgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9w
ZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0KLSAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZv
cndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICgh
ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhp
Z2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVu
ID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0gICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hL
ZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkp
IC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMu
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBz
aG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwg
d2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9w
ZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtl
eSkgPCAwKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwotCi0g
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6
OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7Ci0gICAg
aWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9w
dGlvbnM7Ci0gICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0g
ICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0gICAgY3Vyc29y
T3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElD
QVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGN1cnNvck9wdGlvbnMu
dW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRp
cmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsKLQotICAgIGlmICghbG93
ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6
ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgICAg
ICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0gICAgfSBlbHNl
IHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPmxvd2VyKCkpOwotICAg
ICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJPcGVuKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCF1cHBlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9
IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7IC8vIEluY2x1
ZGVkLgotCi0gICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7IC8vIFdlIG5lZWQg
YSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NU
aGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdo
S2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT51cHBl
cigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51cHBlck9wZW4o
KTsKLQotICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OwotICAgICAgICBpZiAoIWZp
bmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFz
dCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRo
YXQuCi0gICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtl
eXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAgICAgICAgICAg
IGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLQotICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEluZGV4Q3Vyc29y
SW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwotICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIFRyYW5zYWN0aW9uOjpj
cmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi17Ci19Ci0K
LXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKCkKLXsKLSAg
ICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgbV9i
YWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpj
cmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwotfQotCi12b2lkIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQotewotICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbi0+Y29tbWl0KCk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVu
dFRyYW5zYWN0aW9uLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNh
Y3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0
aW9uLmNsZWFyKCk7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0
b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZykKLXsKLSAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRo
QmFzZUFyZzsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUg
TGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMuCi0gICAgU3RyaW5nIHBhdGggPSBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlk
ZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKLQotICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGNoZWNraW5nIGZvciBwcmVzZW5jZSBvZiB0aGUgZG9tYWluLCBub3QgdGhlIGRhdGFiYXNl
IGl0c2VsZgotICAgIHJldHVybiBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
X2gKLSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKLWNsYXNzIExldmVsREJEYXRhYmFzZTsKLWNsYXNzIExl
dmVsREJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKLQotY2xhc3Mg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZp
ZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNr
aW5nU3RvcmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0
cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8
Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRl
T2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9i
amVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50
aWZpZXIoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAg
dmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmpl
Y3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4
aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNv
cmRJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3Jl
UmVjb3JkQ2FsbGJhY2smKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5k
SWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5
UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3Vu
ZE11bHRpRW50cnlGbGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGlu
dDY0X3QmIGluZGV4SWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7
Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29y
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwotCi0gICAg
c3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsKLQotcHJpdmF0ZToKLSAgICBJREJM
ZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKLQotICAgIFN0cmluZyBt
X2lkZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5
OwotICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7Ci0gICAgT3duUHRyPExldmVsREJD
b21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Ci0gICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4g
bV9jdXJyZW50VHJhbnNhY3Rpb247Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSop
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7Ci0gICAgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJMZXZlbERCQmFja2lu
Z1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5n
LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTA1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkNvZGluZy5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+Ci0KLS8vIExldmVsREIgc3RvcmVzIGtleS92YWx1ZSBwYWlycy4gS2V5
cyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzIG9mIGJ5dGVzLCBub3JtYWxseSBvZiB0eXBlIFZlY3Rv
cjxjaGFyPi4KLS8vCi0vLyBUaGUga2V5cyBpbiB0aGUgYmFja2luZyBzdG9yZSBhcmUgdmFyaWFi
bGUtbGVuZ3RoIHR1cGxlcyB3aXRoIGRpZmZlcmVudCB0eXBlcwotLy8gb2YgZmllbGRzLiBFYWNo
IGtleSBpbiB0aGUgYmFja2luZyBzdG9yZSBzdGFydHMgd2l0aCBhIHRlcm5hcnkgcHJlZml4OiAo
ZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQpLiBGb3IgZWFjaCwgMCBpcyBy
ZXNlcnZlZCBmb3IgbWV0YS1kYXRhLgotLy8gVGhlIHByZWZpeCBtYWtlcyBzdXJlIHRoYXQgZGF0
YSBmb3IgYSBzcGVjaWZpYyBkYXRhYmFzZSwgb2JqZWN0IHN0b3JlLCBhbmQgaW5kZXggYXJlIGdy
b3VwZWQgdG9nZXRoZXIuIFRoZSBsb2NhbGl0eSBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNl
OiBjb21tb24KLS8vIG9wZXJhdGlvbnMgc2hvdWxkIG9ubHkgbmVlZCBhIG1pbmltYWwgbnVtYmVy
IG9mIHNlZWsgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGFsbCB0aGUgbWV0YS1kYXRhIGZvciBh
IGRhdGFiYXNlIGlzIGdyb3VwZWQgdG9nZXRoZXIgc28gdGhhdCByZWFkaW5nIHRoYXQKLS8vIG1l
dGEtZGF0YSBvbmx5IHJlcXVpcmVzIG9uZSBzZWVrLgotLy8KLS8vIEVhY2gga2V5IHR5cGUgaGFz
IGEgY2xhc3MgKGluIHNxdWFyZSBicmFja2V0cyBiZWxvdykgd2hpY2gga25vd3MgaG93IHRvIGVu
Y29kZSwgZGVjb2RlLCBhbmQgY29tcGFyZSB0aGF0IGtleSB0eXBlLgotLy8KLS8vIEdsb2JhbCBt
ZXRhLWRhdGEgaGF2ZSBrZXlzIHdpdGggcHJlZml4ICgwLDAsMCksIGZvbGxvd2VkIGJ5IGEgdHlw
ZSBieXRlOgotLy8KLS8vICAgICA8MCwgMCwgMCwgMD4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPT4gSW5kZXhlZERCL0xldmVsREIgc2NoZW1hIHZlcnNpb24gKDAg
Zm9yIG5vdykgW1NjaGVtYVZlcnNpb25LZXldCi0vLyAgICAgPDAsIDAsIDAsIDE+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRoZSBtYXhpbXVtIGRhdGFiYXNl
IGlkIGV2ZXIgYWxsb2NhdGVkIFtNYXhEYXRhYmFzZUlkS2V5XQotLy8gICAgIDwwLCAwLCAwLCAx
MDAsIGRhdGFiYXNlIGlkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBFeGlzdGVuY2Ug
aW1wbGllcyB0aGUgZGF0YWJhc2UgaWQgaXMgaW4gdGhlIGZyZWUgbGlzdCBbRGF0YWJhc2VGcmVl
TGlzdEtleV0KLS8vICAgICA8MCwgMCwgMCwgMjAxLCB1dGYxNiBvcmlnaW4gbmFtZSwgdXRmMTYg
ZGF0YWJhc2UgbmFtZT4gPT4gRGF0YWJhc2UgaWQgW0RhdGFiYXNlTmFtZUtleV0KLS8vCi0vLwot
Ly8gRGF0YWJhc2UgbWV0YS1kYXRhOgotLy8KLS8vICAgICBBZ2FpbiwgdGhlIHByZWZpeCBpcyBm
b2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAw
PiA9PiB1dGYxNiBvcmlnaW4gbmFtZSBbRGF0YWJhc2VNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0
YWJhc2UgaWQsIDAsIDAsIDE+ID0+IHV0ZjE2IGRhdGFiYXNlIG5hbWUgW0RhdGFiYXNlTWV0YURh
dGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAyPiA9PiB1dGYxNiB1c2VyIHZlcnNp
b24gZGF0YSBbRGF0YWJhc2VNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAs
IDM+ID0+IG1heGltdW0gb2JqZWN0IHN0b3JlIGlkIGV2ZXIgYWxsb2NhdGVkIFtEYXRhYmFzZU1l
dGFEYXRhS2V5XQotLy8KLS8vCi0vLyBPYmplY3Qgc3RvcmUgbWV0YS1kYXRhOgotLy8KLS8vICAg
ICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEgdmFyaWFibGUt
bGVuZ3RoIGludGVnZXIsIGFuZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIg
KEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGJ5dGUpLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQs
IDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDA+ID0+IHV0ZjE2IG9iamVjdCBzdG9yZSBuYW1l
IFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAs
IG9iamVjdCBzdG9yZSBpZCwgMT4gPT4gdXRmMTYga2V5IHBhdGggW09iamVjdFN0b3JlTWV0YURh
dGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAy
PiA9PiBoYXMgYXV0byBpbmNyZW1lbnQgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAzPiA9PiBpcyBldmljdGFi
bGUgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1
MCwgb2JqZWN0IHN0b3JlIGlkLCA0PiA9PiBsYXN0ICJ2ZXJzaW9uIiBudW1iZXIgW09iamVjdFN0
b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0
b3JlIGlkLCA1PiA9PiBtYXhpbXVtIGluZGV4IGlkIGV2ZXIgYWxsb2NhdGVkIFtPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9y
ZSBpZCwgNj4gPT4gaGFzIGtleSBwYXRoICh2cy4gbnVsbCkgW09iamVjdFN0b3JlTWV0YURhdGFL
ZXldCi0vLwotLy8KLS8vIEluZGV4IG1ldGEtZGF0YToKLS8vCi0vLyAgICAgVGhlIHByZWZpeCBp
cyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiB0d28gdmFyaWFibGUtbGVuZ3RoIGludGVn
ZXJzLCBhbmQgdGhlbiBhbm90aGVyIHR5cGUgYnl0ZS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlk
LCAwLCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDA+ID0+IHV0ZjE2IGluZGV4
IG5hbWUgW0luZGV4TWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAs
IG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDE+ID0+IGFyZSBpbmRleCBrZXlzIHVuaXF1ZSBb
SW5kZXhNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0
IHN0b3JlIGlkLCBpbmRleCBpZCwgMj4gPT4gdXRmMTYga2V5IHBhdGggW0luZGV4TWV0YURhdGFL
ZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5k
ZXggaWQsIDM+ID0+IGlzIGluZGV4IG11bHRpLWVudHJ5IFtJbmRleE1ldGFEYXRhS2V5XQotLy8K
LS8vCi0vLyBPdGhlciBvYmplY3Qgc3RvcmUgYW5kIGluZGV4IG1ldGEtZGF0YToKLS8vCi0vLyAg
ICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIG9iamVjdCBzdG9y
ZSBhbmQgaW5kZXggaWQgYXJlIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VycywgdGhlIHV0ZjE2IHN0
cmluZ3MgYXJlIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmdzLgotLy8KLS8vICAgICA8ZGF0YWJhc2Ug
aWQsIDAsIDAsIDE1MCwgb2JqZWN0IHN0b3JlIGlkPiAgICAgICAgICAgICAgICAgICA9PiBleGlz
dGVuY2UgaW1wbGllcyB0aGUgb2JqZWN0IHN0b3JlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW09i
amVjdFN0b3JlRnJlZUxpc3RLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxNTEsIG9i
amVjdCBzdG9yZSBpZCwgaW5kZXggaWQ+ICAgICAgICAgPT4gZXhpc3RlbmNlIGltcGxpZXMgdGhl
IGluZGV4IGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW0luZGV4RnJlZUxpc3RLZXldCi0vLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCAyMDAsIHV0ZjE2IG9iamVjdCBzdG9yZSBuYW1lPiAgICAgICAg
ICAgPT4gb2JqZWN0IHN0b3JlIGlkIFtPYmplY3RTdG9yZU5hbWVzS2V5XQotLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgMjAxLCBvYmplY3Qgc3RvcmUgaWQsIHV0ZjE2IGluZGV4IG5hbWU+ID0+
IGluZGV4IGlkIFtJbmRleE5hbWVzS2V5XQotLy8KLS8vCi0vLyBPYmplY3Qgc3RvcmUgZGF0YToK
LS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIHVz
ZXIga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIG9i
amVjdCBzdG9yZSBpZCwgMSwgdXNlciBrZXk+ID0+ICJ2ZXJzaW9uIiwgc2VyaWFsaXplZCBzY3Jp
cHQgdmFsdWUgW09iamVjdFN0b3JlRGF0YUtleV0KLS8vCi0vLwotLy8gIkV4aXN0cyIgZW50cnk6
Ci0vLwotLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSB1
c2VyIGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlkLCBv
YmplY3Qgc3RvcmUgaWQsIDIsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIgW0V4aXN0c0VudHJ5S2V5
XQotLy8KLS8vCi0vLyBJbmRleCBkYXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxv
d2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgaW5kZXgga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LiBU
aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGludGVnZXIuCi0vLyAgICAg
VGhlIHByaW1hcnkga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJh
c2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIGluZGV4IGtleSwgc2VxdWVuY2UgbnVt
YmVyLCBwcmltYXJ5IGtleT4gPT4gInZlcnNpb24iLCBwcmltYXJ5IGtleSBbSW5kZXhEYXRhS2V5
XQotLy8KLS8vICAgICAoVGhlIHNlcXVlbmNlIG51bWJlciBpcyBvYnNvbGV0ZTsgaXQgd2FzIHVz
ZWQgdG8gYWxsb3cgdHdvIGVudHJpZXMgd2l0aAotLy8gICAgIHRoZSBzYW1lIHVzZXIgKGluZGV4
KSBrZXkgaW4gbm9uLXVuaXF1ZSBpbmRleGVzIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YKLS8v
ICAgICB0aGUgcHJpbWFyeSBrZXkgaW4gdGhlIGRhdGEuIFRoZSAidmVyc2lvbiIgZmllbGQgaXMg
dXNlZCB0byB3ZWVkIG91dCBzdGFsZQotLy8gICAgIGluZGV4IGRhdGEuIFdoZW5ldmVyIG5ldyBv
YmplY3Qgc3RvcmUgZGF0YSBpcyBpbnNlcnRlZCwgaXQgZ2V0cyBhIG5ldwotLy8gICAgICJ2ZXJz
aW9uIiBudW1iZXIsIGFuZCBuZXcgaW5kZXggZGF0YSBpcyB3cml0dGVuIHdpdGggdGhpcyBudW1i
ZXIuIFdoZW4KLS8vICAgICB0aGUgaW5kZXggaXMgdXNlZCBmb3IgbG9vay11cHMsIGVudHJpZXMg
YXJlIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZQotLy8gICAgICJleGlzdHMiIGVudHJpZXMsIGFuZCBy
ZWNvcmRzIHdpdGggb2xkICJ2ZXJzaW9uIiBudW1iZXJzIGFyZSBkZWxldGVkCi0vLyAgICAgd2hl
biB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgsCi0vLyAgICAg
SW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdywgYW5kIEluZGV4S2V5Q3Vyc29ySW1wbDo6
bG9hZEN1cnJlbnRSb3cpLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCTGV2
ZWxEQkNvZGluZyB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlOdWxsVHlw
ZUJ5dGUgPSAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleVN0cmluZ1R5cGVC
eXRlID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlEYXRlVHlwZUJ5dGUg
PSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleU51bWJlclR5cGVCeXRlID0g
MzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlBcnJheVR5cGVCeXRlID0gNDsK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlNaW5LZXlUeXBlQnl0ZSA9IDU7Ci0K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZURhdGFJbmRleElkID0gMTsK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtFeGlzdHNFbnRyeUluZGV4SWQgPSAyOwotCi1z
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrU2NoZW1hVmVyc2lvblR5cGVCeXRlID0gMDsKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtNYXhEYXRhYmFzZUlkVHlwZUJ5dGUgPSAxOwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0RhdGFiYXNlRnJlZUxpc3RUeXBlQnl0ZSA9IDEwMDsK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSA9IDIwMTsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0
ZSA9IDUwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4TWV0YURhdGFUeXBlQnl0
ZSA9IDEwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZUZyZWVMaXN0
VHlwZUJ5dGUgPSAxNTA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5kZXhGcmVlTGlz
dFR5cGVCeXRlID0gMTUxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3Jl
TmFtZXNUeXBlQnl0ZSA9IDIwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleE5h
bWVzS2V5VHlwZUJ5dGUgPSAyMDE7Ci0KLSNpZm5kZWYgSU5UNjRfTUFYCi0jZGVmaW5lIElOVDY0
X01BWCAweDdmZmZmZmZmZmZmZmZmZmZMTAotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2Rl
ZmluZSBJTlQzMl9NQVggMHg3ZmZmZmZmZkwKLSNlbmRpZgotCi0KLVZlY3RvcjxjaGFyPiBlbmNv
ZGVCeXRlKHVuc2lnbmVkIGNoYXIgYykKLXsKLSAgICBWZWN0b3I8Y2hhcj4gdjsKLSAgICB2LmFw
cGVuZChjKTsKLSAgICByZXR1cm4gdjsKLX0KLQotVmVjdG9yPGNoYXI+IG1heElEQktleSgpCi17
Ci0gICAgcmV0dXJuIGVuY29kZUJ5dGUoa0lEQktleU51bGxUeXBlQnl0ZSk7Ci19Ci0KLVZlY3Rv
cjxjaGFyPiBtaW5JREJLZXkoKQotewotICAgIHJldHVybiBlbmNvZGVCeXRlKGtJREJLZXlNaW5L
ZXlUeXBlQnl0ZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVJbnQoaW50NjRfdCBuKQotewot
ICAgIEFTU0VSVChuID49IDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQ7IC8vIEZJWE1FOiBTaXpl
IHRoaXMgYXQgY3JlYXRpb24uCi0KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9
IG47Ci0gICAgICAgIHJldC5hcHBlbmQoYyk7Ci0gICAgICAgIG4gPj49IDg7Ci0gICAgfSB3aGls
ZSAobik7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQ2NF90IGRlY29kZUludChjb25zdCBj
aGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kKQotewotICAgIEFTU0VSVChiZWdpbiA8PSBlbmQp
OwotICAgIGludDY0X3QgcmV0ID0gMDsKLQotICAgIGludCBzaGlmdCA9IDA7Ci0gICAgd2hpbGUg
KGJlZ2luIDwgZW5kKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpiZWdpbisrOwotICAg
ICAgICByZXQgfD0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oYykgPDwgc2hpZnQ7Ci0gICAgICAgIHNo
aWZ0ICs9IDg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjb21w
YXJlSW50cyhpbnQ2NF90IGEsIGludDY0X3QgYikKLXsKLSAgICBBU1NFUlQoYSA+PSAwKTsKLSAg
ICBBU1NFUlQoYiA+PSAwKTsKLQotICAgIGludDY0X3QgZGlmZiA9IGEgLSBiOwotICAgIGlmIChk
aWZmIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChkaWZmID4gMCkKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVWYXJJbnQo
aW50NjRfdCBuKQotewotICAgIFZlY3RvcjxjaGFyPiByZXQ7IC8vIEZJWE1FOiBTaXplIHRoaXMg
YXQgY3JlYXRpb24uCi0KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG4gJiAw
eDdmOwotICAgICAgICBuID4+PSA3OwotICAgICAgICBpZiAobikKLSAgICAgICAgICAgIGMgfD0g
MHg4MDsKLSAgICAgICAgcmV0LmFwcGVuZChjKTsKLSAgICB9IHdoaWxlIChuKTsKLQotICAgIHJl
dHVybiByZXQ7Ci19Ci0KLWNvbnN0IGNoYXIqIGRlY29kZVZhckludChjb25zdCBjaGFyICpwLCBj
b25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYgZm91bmRJbnQpCi17Ci0gICAgQVNTRVJUKGxpbWl0
ID49IHApOwotICAgIGZvdW5kSW50ID0gMDsKLSAgICBpbnQgc2hpZnQgPSAwOwotCi0gICAgZG8g
ewotICAgICAgICBpZiAocCA+PSBsaW1pdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpwOwotICAgICAgICBmb3VuZEludCB8PSBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihjICYgMHg3ZikgPDwgc2hpZnQ7Ci0gICAgICAgIHNoaWZ0ICs9IDc7Ci0gICAg
fSB3aGlsZSAoKnArKyAmIDB4ODApOwotICAgIHJldHVybiBwOwotfQotCi1WZWN0b3I8Y2hhcj4g
ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0OyAv
LyBGSVhNRTogU2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBVQ2hhciB1ID0gc1tpXTsKLSAgICAg
ICAgdW5zaWduZWQgY2hhciBoaSA9IHUgPj4gODsKLSAgICAgICAgdW5zaWduZWQgY2hhciBsbyA9
IHU7Ci0gICAgICAgIHJldC5hcHBlbmQoaGkpOwotICAgICAgICByZXQuYXBwZW5kKGxvKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1TdHJpbmcgZGVjb2RlU3RyaW5nKGNvbnN0IGNo
YXIqIHAsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBBU1NFUlQoZW5kID49IHApOwotICAgIEFT
U0VSVCghKChlbmQgLSBwKSAlIDIpKTsKLQotICAgIHNpemVfdCBsZW4gPSAoZW5kIC0gcCkgLyAy
OwotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
bGVuKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
dW5zaWduZWQgY2hhciBoaSA9ICpwKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbG8gPSAqcCsr
OwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KChoaSA8PCA4KSB8
IGxvKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1WZWN0
b3I8Y2hhcj4gZW5jb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAg
VmVjdG9yPGNoYXI+IHJldCA9IGVuY29kZVZhckludChzLmxlbmd0aCgpKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZVN0cmluZyhzKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotY29uc3QgY2hhciog
ZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwg
U3RyaW5nJiBmb3VuZFN0cmluZykKLXsKLSAgICBBU1NFUlQobGltaXQgPj0gcCk7Ci0gICAgaW50
NjRfdCBsZW47Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuKTsKLSAgICBpZiAo
IXApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwICsgbGVuICogMiA+IGxpbWl0KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGZvdW5kU3RyaW5nID0gZGVjb2RlU3RyaW5nKHAsIHAgKyBs
ZW4gKiAyKTsKLSAgICBwICs9IGxlbiAqIDI7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLWludCBjb21w
YXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBs
aW1pdFAsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdFEpCi17Ci0gICAgQVNTRVJU
KCZwICE9ICZxKTsKLSAgICBBU1NFUlQobGltaXRQID49IHApOwotICAgIEFTU0VSVChsaW1pdFEg
Pj0gcSk7Ci0gICAgaW50NjRfdCBsZW5QLCBsZW5ROwotICAgIHAgPSBkZWNvZGVWYXJJbnQocCwg
bGltaXRQLCBsZW5QKTsKLSAgICBxID0gZGVjb2RlVmFySW50KHEsIGxpbWl0USwgbGVuUSk7Ci0g
ICAgQVNTRVJUKHAgJiYgcSk7Ci0gICAgQVNTRVJUKGxlblAgPj0gMCk7Ci0gICAgQVNTRVJUKGxl
blEgPj0gMCk7Ci0gICAgQVNTRVJUKHAgKyBsZW5QICogMiA8PSBsaW1pdFApOwotICAgIEFTU0VS
VChxICsgbGVuUSAqIDIgPD0gbGltaXRRKTsKLQotICAgIGNvbnN0IGNoYXIqIHN0YXJ0UCA9IHA7
Ci0gICAgY29uc3QgY2hhciogc3RhcnRRID0gcTsKLSAgICBwICs9IGxlblAgKiAyOwotICAgIHEg
Kz0gbGVuUSAqIDI7Ci0KLSAgICBpZiAocCA+IGxpbWl0UCB8fCBxID4gbGltaXRRKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGNvbnN0IHNpemVfdCBsbWluID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZW5QIDwgbGVuUSA/IGxlblAgOiBsZW5RKTsKLSAgICBpZiAoaW50IHggPSBtZW1jbXAoc3Rh
cnRQLCBzdGFydFEsIGxtaW4gKiAyKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAgICBpZiAobGVu
UCA9PSBsZW5RKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiAobGVuUCA+IGxlblEp
ID8gMSA6IC0xOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlRG91YmxlKGRvdWJsZSB4KQotewot
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIGJlIGJ5dGUgb3JkZXIg
aW5kZXBlbmRlbnQuCi0gICAgY29uc3QgY2hhciogcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCZ4KTsKLSAgICBWZWN0b3I8Y2hhcj4gdjsKLSAgICB2LmFwcGVuZChwLCBzaXplb2YoeCkpOwot
ICAgIEFTU0VSVCh2LnNpemUoKSA9PSBzaXplb2YoeCkpOwotICAgIHJldHVybiB2OwotfQotCi1j
b25zdCBjaGFyKiBkZWNvZGVEb3VibGUoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGltaXQs
IGRvdWJsZSogZCkKLXsKLSAgICBpZiAocCArIHNpemVvZigqZCkgPiBsaW1pdCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBjaGFyKiB4ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoKmQpOyArK2kpCi0gICAgICAgICp4Kysg
PSAqcCsrOwotICAgIHJldHVybiBwOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlSURCS2V5KGNv
bnN0IElEQktleSYga2V5KQotewotICAgIFZlY3RvcjxjaGFyPiByZXQ7Ci0gICAgZW5jb2RlSURC
S2V5KGtleSwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi12b2lkIGVuY29kZUlEQktleShj
b25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBpbnRvKQotewotICAgIHNpemVfdCBwcmV2
aW91c1NpemUgPSBpbnRvLnNpemUoKTsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKLSAgICBj
YXNlIElEQktleTo6SW52YWxpZFR5cGU6Ci0gICAgY2FzZSBJREJLZXk6Ok1pblR5cGU6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRl
KGtJREJLZXlOdWxsVHlwZUJ5dGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSURCS2V5
OjpBcnJheVR5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5
dGUoa0lEQktleUFycmF5VHlwZUJ5dGUpKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBr
ZXkuYXJyYXkoKS5zaXplKCk7Ci0gICAgICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVWYXJJbnQo
bGVuZ3RoKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICAgICAgICAgIGVuY29kZUlEQktleSgqa2V5LmFycmF5KClbaV0sIGludG8pOwot
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6ZSgpID4gcHJl
dmlvdXNTaXplKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJREJLZXlT
dHJpbmdUeXBlQnl0ZSkpOwotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVu
Z3RoKGtleS5zdHJpbmcoKSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwg
aW50by5zaXplKCkgPiBwcmV2aW91c1NpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
REJLZXk6OkRhdGVUeXBlOgotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJREJLZXlE
YXRlVHlwZUJ5dGUpKTsKLSAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlRG91YmxlKGtleS5kYXRl
KCkpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6ZSgpIC0g
cHJldmlvdXNTaXplID09IDkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJREJLZXk6Ok51
bWJlclR5cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lEQktleU51bWJlclR5
cGVCeXRlKSk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZURvdWJsZShrZXkubnVtYmVyKCkp
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6ZSgpIC0gcHJl
dmlvdXNTaXplID09IDkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLQotY29uc3QgY2hhciogZGVjb2RlSURCS2V5KGNvbnN0IGNoYXIq
IHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBSZWZQdHI8SURCS2V5PiYgZm91bmRLZXkpCi17Ci0gICAg
QVNTRVJUKGxpbWl0ID49IHApOwotICAgIGlmIChwID49IGxpbWl0KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHVuc2lnbmVkIGNoYXIgdHlwZSA9ICpwKys7Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5dGU6Ci0gICAgICAgIGZvdW5kS2V5ID0gSURC
S2V5OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgICAgIHJldHVybiBwOwotCi0gICAgY2FzZSBrSURC
S2V5QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgaW50NjRfdCBsZW5ndGg7
Ci0gICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW5ndGgpOwotICAgICAg
ICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYg
KGxlbmd0aCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBJREJL
ZXk6OktleUFycmF5IGFycmF5OwotICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgICAgICAgICAgICAgIHAgPSBkZWNv
ZGVJREJLZXkocCwgbGltaXQsIGtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoa2V5
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVB
cnJheShhcnJheSk7Ci0gICAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfQotICAgIGNhc2Ug
a0lEQktleVN0cmluZ1R5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgczsK
LSAgICAgICAgICAgIHAgPSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCBzKTsKLSAg
ICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcocyk7Ci0gICAgICAgICAgICByZXR1cm4g
cDsKLSAgICAgICAgfQotICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKLSAgICAgICAgewot
ICAgICAgICAgICAgZG91YmxlIGQ7Ci0gICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxp
bWl0LCAmZCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlRGF0ZShkKTsKLSAgICAgICAg
ICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBkOwotICAgICAgICAgICAgcCA9IGRlY29k
ZURvdWJsZShwLCBsaW1pdCwgJmQpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZU51bWJl
cihkKTsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIqIGV4dHJh
Y3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVj
dG9yPGNoYXI+KiByZXN1bHQpCi17Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgY29uc3QgY2hh
ciogcCA9IHN0YXJ0OwotICAgIGlmIChwID49IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHVuc2lnbmVkIGNoYXIgdHlwZSA9ICpwKys7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5dGU6Ci0gICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5
dGU6Ci0gICAgICAgICpyZXN1bHQgPSBlbmNvZGVCeXRlKHR5cGUpOwotICAgICAgICByZXR1cm4g
cDsKLSAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQ2NF90IGxlbmd0aDsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQs
IGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
KHN0YXJ0LCBwIC0gc3RhcnQpOwotICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAg
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IHN1YmtleTsKLSAgICAgICAgICAgICAgICBwID0gZXh0
cmFjdEVuY29kZWRJREJLZXkocCwgbGltaXQsICZzdWJrZXkpOwotICAgICAgICAgICAgICAgIGlm
ICghcCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmQoc3Via2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBw
OwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5U3RyaW5nVHlwZUJ5dGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGludDY0X3QgbGVuZ3RoOwotICAgICAgICAgICAgcCA9IGRlY29kZVZhcklu
dChwLCBsaW1pdCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChwICsgbGVuZ3RoICogMiA+IGxpbWl0KQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmVzdWx0LT5jbGVhcigpOwotICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3RhcnQsIHAgLSBzdGFydCArIGxlbmd0aCAqIDIpOwot
ICAgICAgICAgICAgcmV0dXJuIHAgKyBsZW5ndGggKiAyOwotICAgICAgICB9Ci0gICAgY2FzZSBr
SURCS2V5RGF0ZVR5cGVCeXRlOgotICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgotICAg
ICAgICBpZiAocCArIHNpemVvZihkb3VibGUpID4gbGltaXQpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmVzdWx0LT5jbGVhcigpOwotICAgICAgICByZXN1bHQtPmFwcGVuZChzdGFy
dCwgMSArIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgcmV0dXJuIHAgKyBzaXplb2YoZG91Ymxl
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyBJREJLZXk6OlR5cGUga2V5VHlwZUJ5dGVUb0tleVR5cGUodW5zaWduZWQgY2hhciB0
eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Uga0lEQktleU51bGxUeXBlQnl0
ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6SW52YWxpZFR5cGU7Ci0gICAgY2FzZSBrSURCS2V5
QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6QXJyYXlUeXBlOwotICAgIGNh
c2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpTdHJpbmdU
eXBlOwotICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktl
eTo6RGF0ZVR5cGU7Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6Ci0gICAgICAgIHJl
dHVybiBJREJLZXk6Ok51bWJlclR5cGU7Ci0gICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5dGU6
Ci0gICAgICAgIHJldHVybiBJREJLZXk6Ok1pblR5cGU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIElEQktleTo6SW52YWxpZFR5cGU7Ci19Ci0KLWludCBj
b21wYXJlRW5jb2RlZElEQktleXMoY29uc3QgY2hhciomIHAsIGNvbnN0IGNoYXIqIGxpbWl0QSwg
Y29uc3QgY2hhciomIHEsIGNvbnN0IGNoYXIqIGxpbWl0QikKLXsKLSAgICBBU1NFUlQoJnAgIT0g
JnEpOwotICAgIEFTU0VSVChwIDwgbGltaXRBKTsKLSAgICBBU1NFUlQocSA8IGxpbWl0Qik7Ci0g
ICAgdW5zaWduZWQgY2hhciB0eXBlQSA9ICpwKys7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQiA9
ICpxKys7Ci0KLSAgICBpZiAoaW50IHggPSBJREJLZXk6OmNvbXBhcmVUeXBlcyhrZXlUeXBlQnl0
ZVRvS2V5VHlwZSh0eXBlQSksIGtleVR5cGVCeXRlVG9LZXlUeXBlKHR5cGVCKSkpCi0gICAgICAg
IHJldHVybiB4OwotCi0gICAgc3dpdGNoICh0eXBlQSkgewotICAgIGNhc2Uga0lEQktleU51bGxU
eXBlQnl0ZToKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlUeXBlQnl0ZToKLSAgICAgICAgLy8gTnVs
bCB0eXBlIG9yIG1heCB0eXBlOyBubyBwYXlsb2FkIHRvIGNvbXBhcmUuCi0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2Uga0lEQktleUFycmF5VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludDY0X3QgbGVuZ3RoQSwgbGVuZ3RoQjsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVWYXJJ
bnQocCwgbGltaXRBLCBsZW5ndGhBKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHEgPSBkZWNvZGVWYXJJbnQocSwgbGltaXRCLCBs
ZW5ndGhCKTsKLSAgICAgICAgICAgIGlmICghcSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgIGlmIChsZW5ndGhBIDwgMCB8fCBsZW5ndGhCIDwgMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gMDsgaSA8IGxlbmd0
aEEgJiYgaSA8IGxlbmd0aEI7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpbnQgY21wID0g
Y29tcGFyZUVuY29kZWRJREJLZXlzKHAsIGxpbWl0QSwgcSwgbGltaXRCKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsZW5n
dGhBIDwgbGVuZ3RoQikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBp
ZiAobGVuZ3RoQSA+IGxlbmd0aEIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRl
OgotICAgICAgICByZXR1cm4gY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChwLCBsaW1p
dEEsIHEsIGxpbWl0Qik7Ci0gICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgIGNhc2Ug
a0lEQktleU51bWJlclR5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUgZCwg
ZTsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVEb3VibGUocCwgbGltaXRBLCAmZCk7Ci0gICAgICAg
ICAgICBBU1NFUlQocCk7Ci0gICAgICAgICAgICBxID0gZGVjb2RlRG91YmxlKHEsIGxpbWl0Qiwg
JmUpOwotICAgICAgICAgICAgQVNTRVJUKHEpOwotICAgICAgICAgICAgaWYgKGQgPCBlKQotICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChkID4gZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBj
b21wYXJlRW5jb2RlZElEQktleXMoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlBLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGtleUIpCi17Ci0gICAgQVNTRVJUKGtleUEuc2l6ZSgpID49IDEpOwotICAgIEFT
U0VSVChrZXlCLnNpemUoKSA+PSAxKTsKLQotICAgIGNvbnN0IGNoYXIqIHAgPSBrZXlBLmRhdGEo
KTsKLSAgICBjb25zdCBjaGFyKiBsaW1pdEEgPSBwICsga2V5QS5zaXplKCk7Ci0gICAgY29uc3Qg
Y2hhciogcSA9IGtleUIuZGF0YSgpOwotICAgIGNvbnN0IGNoYXIqIGxpbWl0QiA9IHEgKyBrZXlC
LnNpemUoKTsKLQotICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMocCwgbGltaXRBLCBx
LCBsaW1pdEIpOwotfQotCi1uYW1lc3BhY2UgewotdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZT4K
LWludCBkZWNvZGVBbmRDb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3QgTGV2ZWxE
QlNsaWNlJiBiKQotewotICAgIEtleVR5cGUga2V5QTsKLSAgICBLZXlUeXBlIGtleUI7Ci0KLSAg
ICBjb25zdCBjaGFyKiBwdHJBID0gS2V5VHlwZTo6ZGVjb2RlKGEuYmVnaW4oKSwgYS5lbmQoKSwg
JmtleUEpOwotICAgIEFTU0VSVF9VTlVTRUQocHRyQSwgcHRyQSk7Ci0gICAgY29uc3QgY2hhciog
cHRyQiA9IEtleVR5cGU6OmRlY29kZShiLmJlZ2luKCksIGIuZW5kKCksICZrZXlCKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHB0ckIsIHB0ckIpOwotCi0gICAgcmV0dXJuIGtleUEuY29tcGFyZShrZXlC
KTsKLX0KLX0KLQotaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZl
bERCU2xpY2UmIGIsIGJvb2wgaW5kZXhLZXlzKQotewotICAgIGNvbnN0IGNoYXIqIHB0ckEgPSBh
LmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciogcHRyQiA9IGIuYmVnaW4oKTsKLSAgICBjb25zdCBj
aGFyKiBlbmRBID0gYS5lbmQoKTsKLSAgICBjb25zdCBjaGFyKiBlbmRCID0gYi5lbmQoKTsKLQot
ICAgIEtleVByZWZpeCBwcmVmaXhBOwotICAgIEtleVByZWZpeCBwcmVmaXhCOwotCi0gICAgcHRy
QSA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckEsIGVuZEEsICZwcmVmaXhBKTsKLSAgICBwdHJCID0g
S2V5UHJlZml4OjpkZWNvZGUocHRyQiwgZW5kQiwgJnByZWZpeEIpOwotICAgIEFTU0VSVChwdHJB
KTsKLSAgICBBU1NFUlQocHRyQik7Ci0KLSAgICBpZiAoaW50IHggPSBwcmVmaXhBLmNvbXBhcmUo
cHJlZml4QikpCi0gICAgICAgIHJldHVybiB4OwotCi0gICAgaWYgKHByZWZpeEEudHlwZSgpID09
IEtleVByZWZpeDo6a0dsb2JhbE1ldGFEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChwdHJBICE9IGVu
ZEEpOwotICAgICAgICBBU1NFUlQocHRyQiAhPSBlbmRCKTsKLQotICAgICAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlQSA9ICpwdHJBKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVC
ID0gKnB0ckIrKzsKLQotICAgICAgICBpZiAoaW50IHggPSB0eXBlQnl0ZUEgLSB0eXBlQnl0ZUIp
Ci0gICAgICAgICAgICByZXR1cm4geDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVBIDw9IDEpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrRGF0YWJhc2VG
cmVlTGlzdFR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8RGF0
YWJhc2VGcmVlTGlzdEtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga0RhdGFi
YXNlTmFtZVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8RGF0
YWJhc2VOYW1lS2V5PihhLCBiKTsKLSAgICB9Ci0KLSAgICBpZiAocHJlZml4QS50eXBlKCkgPT0g
S2V5UHJlZml4OjprRGF0YWJhc2VNZXRhRGF0YSkgewotICAgICAgICBBU1NFUlQocHRyQSAhPSBl
bmRBKTsKLSAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7Ci0KLSAgICAgICAgdW5zaWduZWQg
Y2hhciB0eXBlQnl0ZUEgPSAqcHRyQSsrOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRl
QiA9ICpwdHJCKys7Ci0KLSAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVBIC0gdHlwZUJ5dGVC
KQotICAgICAgICAgICAgcmV0dXJuIHg7Ci0KLSAgICAgICAgaWYgKHR5cGVCeXRlQSA8PSAzKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrT2JqZWN0
U3RvcmVNZXRhRGF0YVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBh
cmU8T2JqZWN0U3RvcmVNZXRhRGF0YUtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEg
PT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
b21wYXJlPEluZGV4TWV0YURhdGFLZXk+KGEsIGIpOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09
IGtPYmplY3RTdG9yZUZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ29tcGFyZTxPYmplY3RTdG9yZUZyZWVMaXN0S2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5
cGVCeXRlQSA9PSBrSW5kZXhGcmVlTGlzdFR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENvbXBhcmU8SW5kZXhGcmVlTGlzdEtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBl
Qnl0ZUEgPT0ga09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDb21wYXJlPE9iamVjdFN0b3JlTmFtZXNLZXk+KGEsIGIpOwotICAgICAgICBpZiAo
dHlwZUJ5dGVBID09IGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ29tcGFyZTxJbmRleE5hbWVzS2V5PihhLCBiKTsKLQotICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKHByZWZp
eEEudHlwZSgpID09IEtleVByZWZpeDo6a09iamVjdFN0b3JlRGF0YSkgewotICAgICAgICBpZiAo
cHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBpZiAocHRyQSA9PSBlbmRBKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBp
ZiAocHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1FOiBUaGlzIGNh
c2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8gYmUgaGFuZGxl
ZCB0aGlzIHdheS4KLQotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9y
ZURhdGFLZXk+KGEsIGIpOwotICAgIH0KLSAgICBpZiAocHJlZml4QS50eXBlKCkgPT0gS2V5UHJl
Zml4OjprRXhpc3RzRW50cnkpIHsKLSAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSAmJiBwdHJCID09
IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHB0ckIgPT0gZW5kQikKLSAgICAg
ICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhpcyBjYXNlIG9mIG5vbi1leGlzdGluZyB1c2Vy
IGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgdGhpcyB3YXkuCi0KLSAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENvbXBhcmU8RXhpc3RzRW50cnlLZXk+KGEsIGIpOwotICAgIH0KLSAg
ICBpZiAocHJlZml4QS50eXBlKCkgPT0gS2V5UHJlZml4OjprSW5kZXhEYXRhKSB7Ci0gICAgICAg
IGlmIChwdHJBID09IGVuZEEgJiYgcHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgIGlmIChwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRo
aXMgY2FzZSBvZiBub24tZXhpc3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBo
YW5kbGVkIHRoaXMgd2F5LgotCi0gICAgICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXlBOwot
ICAgICAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5QjsKLQotICAgICAgICBwdHJBID0gSW5k
ZXhEYXRhS2V5OjpkZWNvZGUoYS5iZWdpbigpLCBlbmRBLCAmaW5kZXhEYXRhS2V5QSk7Ci0gICAg
ICAgIHB0ckIgPSBJbmRleERhdGFLZXk6OmRlY29kZShiLmJlZ2luKCksIGVuZEIsICZpbmRleERh
dGFLZXlCKTsKLSAgICAgICAgQVNTRVJUKHB0ckEpOwotICAgICAgICBBU1NFUlQocHRyQik7Ci0K
LSAgICAgICAgYm9vbCBpZ25vcmVEdXBsaWNhdGVzID0gaW5kZXhLZXlzOwotICAgICAgICByZXR1
cm4gaW5kZXhEYXRhS2V5QS5jb21wYXJlKGluZGV4RGF0YUtleUIsIGlnbm9yZUR1cGxpY2F0ZXMp
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci0KLUtleVByZWZpeDo6S2V5UHJlZml4KCkKLSAgICA6IG1fZGF0YWJhc2VJZChrSW52YWxpZFR5
cGUpCi0gICAgLCBtX29iamVjdFN0b3JlSWQoa0ludmFsaWRUeXBlKQotICAgICwgbV9pbmRleElk
KGtJbnZhbGlkVHlwZSkKLXsKLX0KLQotS2V5UHJlZml4OjpLZXlQcmVmaXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICA6IG1f
ZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3Jl
SWQpCi0gICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLXsKLX0KLQotY29uc3QgY2hhciogS2V5UHJl
Zml4OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBLZXlQcmVm
aXgqIHJlc3VsdCkKLXsKLSAgICBpZiAoc3RhcnQgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGUgPSAqc3RhcnQrKzsKLQotICAgIGludCBk
YXRhYmFzZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiA1KSAmIDB4NykgKyAxOwotICAgIGludCBv
YmplY3RTdG9yZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiAyKSAmIDB4NykgKyAxOwotICAgIGlu
dCBpbmRleElkQnl0ZXMgPSAoZmlyc3RCeXRlICYgMHgzKSArIDE7Ci0KLSAgICBpZiAoc3RhcnQg
KyBkYXRhYmFzZUlkQnl0ZXMgKyBvYmplY3RTdG9yZUlkQnl0ZXMgKyBpbmRleElkQnl0ZXMgPiBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXN1bHQtPm1fZGF0YWJhc2VJZCA9IGRl
Y29kZUludChzdGFydCwgc3RhcnQgKyBkYXRhYmFzZUlkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IGRh
dGFiYXNlSWRCeXRlczsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IGRlY29kZUludChz
dGFydCwgc3RhcnQgKyBvYmplY3RTdG9yZUlkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IG9iamVjdFN0
b3JlSWRCeXRlczsKLSAgICByZXN1bHQtPm1faW5kZXhJZCA9IGRlY29kZUludChzdGFydCwgc3Rh
cnQgKyBpbmRleElkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IGluZGV4SWRCeXRlczsKLQotICAgIHJl
dHVybiBzdGFydDsKLX0KLQotVmVjdG9yPGNoYXI+IEtleVByZWZpeDo6ZW5jb2RlKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkICE9IGtJbnZhbGlkSWQpOwotICAgIEFTU0VSVCht
X29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZCAhPSBr
SW52YWxpZElkKTsKLQotICAgIFZlY3RvcjxjaGFyPiBkYXRhYmFzZUlkU3RyaW5nID0gZW5jb2Rl
SW50KG1fZGF0YWJhc2VJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlSWRTdHJpbmcg
PSBlbmNvZGVJbnQobV9vYmplY3RTdG9yZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gaW5kZXhJZFN0
cmluZyA9IGVuY29kZUludChtX2luZGV4SWQpOwotCi0gICAgQVNTRVJUKGRhdGFiYXNlSWRTdHJp
bmcuc2l6ZSgpIDw9IDgpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkU3RyaW5nLnNpemUoKSA8
PSA4KTsKLSAgICBBU1NFUlQoaW5kZXhJZFN0cmluZy5zaXplKCkgPD0gNCk7Ci0KLQotICAgIHVu
c2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKGRhdGFiYXNlSWRTdHJpbmcuc2l6ZSgpIC0gMSkgPDwg
NSB8IChvYmplY3RTdG9yZUlkU3RyaW5nLnNpemUoKSAtIDEpIDw8IDIgfCAoaW5kZXhJZFN0cmlu
Zy5zaXplKCkgLSAxKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0OwotICAgIHJldC5hcHBlbmQoZmly
c3RCeXRlKTsKLSAgICByZXQuYXBwZW5kKGRhdGFiYXNlSWRTdHJpbmcpOwotICAgIHJldC5hcHBl
bmQob2JqZWN0U3RvcmVJZFN0cmluZyk7Ci0gICAgcmV0LmFwcGVuZChpbmRleElkU3RyaW5nKTsK
LQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludCBLZXlQcmVmaXg6OmNvbXBhcmUoY29uc3QgS2V5
UHJlZml4JiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkICE9IGtJbnZh
bGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAg
QVNTRVJUKG1faW5kZXhJZCAhPSBrSW52YWxpZElkKTsKLQotICAgIGlmIChtX2RhdGFiYXNlSWQg
IT0gb3RoZXIubV9kYXRhYmFzZUlkKQotICAgICAgICByZXR1cm4gY29tcGFyZUludHMobV9kYXRh
YmFzZUlkLCBvdGhlci5tX2RhdGFiYXNlSWQpOwotICAgIGlmIChtX29iamVjdFN0b3JlSWQgIT0g
b3RoZXIubV9vYmplY3RTdG9yZUlkKQotICAgICAgICByZXR1cm4gY29tcGFyZUludHMobV9vYmpl
Y3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmIChtX2luZGV4SWQgIT0g
b3RoZXIubV9pbmRleElkKQotICAgICAgICByZXR1cm4gY29tcGFyZUludHMobV9pbmRleElkLCBv
dGhlci5tX2luZGV4SWQpOwotICAgIHJldHVybiAwOwotfQotCi1LZXlQcmVmaXg6OlR5cGUgS2V5
UHJlZml4Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkICE9IGtJbnZh
bGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAg
QVNTRVJUKG1faW5kZXhJZCAhPSBrSW52YWxpZElkKTsKLQotICAgIGlmICghbV9kYXRhYmFzZUlk
KQotICAgICAgICByZXR1cm4ga0dsb2JhbE1ldGFEYXRhOwotICAgIGlmICghbV9vYmplY3RTdG9y
ZUlkKQotICAgICAgICByZXR1cm4ga0RhdGFiYXNlTWV0YURhdGE7Ci0gICAgaWYgKG1faW5kZXhJ
ZCA9PSBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCkKLSAgICAgICAgcmV0dXJuIGtPYmplY3RTdG9y
ZURhdGE7Ci0gICAgaWYgKG1faW5kZXhJZCA9PSBrRXhpc3RzRW50cnlJbmRleElkKQotICAgICAg
ICByZXR1cm4ga0V4aXN0c0VudHJ5OwotICAgIGlmIChtX2luZGV4SWQgPj0ga01pbmltdW1JbmRl
eElkKQotICAgICAgICByZXR1cm4ga0luZGV4RGF0YTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBrSW52YWxpZFR5cGU7Ci19Ci0KLVZlY3RvcjxjaGFyPiBTY2hlbWFW
ZXJzaW9uS2V5OjplbmNvZGUoKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoMCwgMCwgMCk7Ci0g
ICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVu
Y29kZUJ5dGUoa1NjaGVtYVZlcnNpb25UeXBlQnl0ZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0K
LVZlY3RvcjxjaGFyPiBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKQotewotICAgIEtleVByZWZp
eCBwcmVmaXgoMCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUo
KTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa01heERhdGFiYXNlSWRUeXBlQnl0ZSkpOwot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLURhdGFiYXNlRnJlZUxpc3RLZXk6OkRhdGFiYXNlRnJlZUxp
c3RLZXkoKQotICAgIDogbV9kYXRhYmFzZUlkKC0xKQotewotfQotCi1jb25zdCBjaGFyKiBEYXRh
YmFzZUZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBEYXRhYmFzZUZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZp
eDsKLSAgICBjb25zdCBjaGFyICpwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAm
cHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVCghcHJl
Zml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsK
LSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBB
U1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrRGF0YWJhc2VGcmVlTGlzdFR5cGVC
eXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2RhdGFiYXNlSWQpOwotfQotCi1WZWN0
b3I8Y2hhcj4gRGF0YWJhc2VGcmVlTGlzdEtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCkK
LXsKLSAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQg
PSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtEYXRhYmFzZUZy
ZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChkYXRhYmFzZUlk
KSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IERhdGFiYXNlRnJlZUxpc3RL
ZXk6OmVuY29kZU1heEtleSgpCi17Ci0gICAgcmV0dXJuIGVuY29kZShJTlQ2NF9NQVgpOwotfQot
Ci1pbnQ2NF90IERhdGFiYXNlRnJlZUxpc3RLZXk6OmRhdGFiYXNlSWQoKSBjb25zdAotewotICAg
IEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VJZDsKLX0K
LQotaW50IERhdGFiYXNlRnJlZUxpc3RLZXk6OmNvbXBhcmUoY29uc3QgRGF0YWJhc2VGcmVlTGlz
dEtleSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+PSAwKTsKLSAg
ICByZXR1cm4gY29tcGFyZUludHMobV9kYXRhYmFzZUlkLCBvdGhlci5tX2RhdGFiYXNlSWQpOwot
fQotCi1jb25zdCBjaGFyKiBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KQotewotICAgIEtl
eVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0
YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gcDsKLSAg
ICBBU1NFUlQoIXByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9
PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
ICpwKys7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0RhdGFiYXNl
TmFtZVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcCA9IGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vcmlnaW4p
OwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmlu
Z1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZU5hbWUpOwotfQotCi1WZWN0
b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoMCwgMCwg
MCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZUJ5dGUoa0RhdGFiYXNlTmFtZVR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChl
bmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9yaWdpbikpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlU3Ry
aW5nV2l0aExlbmd0aChkYXRhYmFzZU5hbWUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0
b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIGVuY29kZShvcmlnaW4sICIiKTsKLX0KLQotVmVj
dG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlU3RvcEtleUZvck9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbikKLXsKLSAgICAvLyBqdXN0IGFmdGVyIG9yaWdpbiBpbiBjb2xsYXRpb24g
b3JkZXIKLSAgICByZXR1cm4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG9yaWdpbiArICJceDAxIik7
Ci19Ci0KLWludCBEYXRhYmFzZU5hbWVLZXk6OmNvbXBhcmUoY29uc3QgRGF0YWJhc2VOYW1lS2V5
JiBvdGhlcikKLXsKLSAgICBpZiAoaW50IHggPSBjb2RlUG9pbnRDb21wYXJlKG1fb3JpZ2luLCBv
dGhlci5tX29yaWdpbikpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBjb2RlUG9pbnRD
b21wYXJlKG1fZGF0YWJhc2VOYW1lLCBvdGhlci5tX2RhdGFiYXNlTmFtZSk7Ci19Ci0KLVZlY3Rv
cjxjaGFyPiBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBN
ZXRhRGF0YVR5cGUgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJh
c2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAg
ICByZXQuYXBwZW5kKGVuY29kZUJ5dGUobWV0YURhdGFUeXBlKSk7Ci0gICAgcmV0dXJuIHJldDsK
LX0KLQotT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6T2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpCi0g
ICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCi0gICAgLCBtX21ldGFEYXRhVHlwZSgtMSkKLXsKLX0K
LQotY29uc3QgY2hhciogT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSogcmVzdWx0
KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZp
eDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFw
cmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwot
ICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFy
IHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9
PSBrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5t
X29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNT
RVJUKHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5t
X21ldGFEYXRhVHlwZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwg
MCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkpOwotICAgIHJldC5h
cHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICByZXQuYXBwZW5kKGVuY29k
ZVZhckludChtZXRhRGF0YVR5cGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hh
cj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJ
ZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCwgSU5UNjRfTUFY
KTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICByZXR1
cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCk7Ci19Ci0KLWlu
dDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9y
ZUlkOwotfQotaW50NjRfdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjptZXRhRGF0YVR5cGUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+PSAwKTsKLSAgICByZXR1cm4gbV9t
ZXRhRGF0YVR5cGU7Ci19Ci0KLWludCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpjb21wYXJlKGNv
bnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKQotewotICAgIEFTU0VSVChtX29iamVj
dFN0b3JlSWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1fbWV0YURhdGFUeXBlID49IDApOwotICAgIGlm
IChpbnQgeCA9IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9y
ZUlkKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIG1fbWV0YURhdGFUeXBlIC0gb3Ro
ZXIubV9tZXRhRGF0YVR5cGU7Ci19Ci0KLUluZGV4TWV0YURhdGFLZXk6OkluZGV4TWV0YURhdGFL
ZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQotICAg
ICwgbV9tZXRhRGF0YVR5cGUoMCkKLXsKLX0KLQotY29uc3QgY2hhciogSW5kZXhNZXRhRGF0YUtl
eTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRh
RGF0YUtleSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hh
ciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYg
KCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7
Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZp
eC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAg
ICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVC
eXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhNZXRhRGF0YVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwg
cmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4SWQpOwotICAg
IGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUgPSAqcCsrOwotICAgIHJldHVy
biBwOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIHVuc2ln
bmVkIGNoYXIgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJ
ZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICBy
ZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4TWV0YURhdGFUeXBlQnl0ZSkpOwotICAgIHJldC5h
cHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICByZXQuYXBwZW5kKGVuY29k
ZVZhckludChpbmRleElkKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlw
ZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
Ci17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9N
QVgsIDI1NSk7Ci19Ci0KLWludCBJbmRleE1ldGFEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4
TWV0YURhdGFLZXkmIG90aGVyKQotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7
Ci0gICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKLQotICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJ
bnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0
dXJuIHg7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9pbmRleElkLCBvdGhlci5tX2lu
ZGV4SWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gbV9tZXRhRGF0YVR5cGUgLSBv
dGhlci5tX21ldGFEYXRhVHlwZTsKLX0KLQotaW50NjRfdCBJbmRleE1ldGFEYXRhS2V5OjppbmRl
eElkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAgIHJldHVybiBt
X2luZGV4SWQ7Ci19Ci0KLU9iamVjdFN0b3JlRnJlZUxpc3RLZXk6Ok9iamVjdFN0b3JlRnJlZUxp
c3RLZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotewotfQotCi1jb25zdCBjaGFyKiBP
YmplY3RTdG9yZUZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNo
YXIqIGxpbWl0LCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJl
Zml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyICpwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQs
IGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFT
U0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0
b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGlt
aXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsr
OwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtPYmplY3RTdG9yZUZy
ZWVMaXN0VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJ
ZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgS2V5UHJlZml4
IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4
LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVGcmVlTGlz
dFR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkp
OwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZUZyZWVMaXN0
S2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIHJldHVybiBlbmNv
ZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYKTsKLX0KLQotaW50NjRfdCBPYmplY3RTdG9yZUZyZWVM
aXN0S2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlSWQ7Ci19Ci0KLWludCBPYmplY3RT
dG9yZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRnJlZUxpc3RLZXkmIG90
aGVyKQotewotICAgIC8vIEZJWE1FOiBJdCBtYXkgc2VlbSBzdHJhbmdlIHRoYXQgd2UncmUgbm90
IGNvbXBhcmluZyBkYXRhYmFzZSBpZCdzLAotICAgIC8vIGJ1dCB0aGF0IGNvbXBhcmlzb24gd2ls
bCBoYXZlIGJlZW4gbWFkZSBlYXJsaWVyLgotICAgIC8vIFdlIHNob3VsZCBwcm9iYWJseSBtYWtl
IHRoaXMgbW9yZSBjbGVhciwgdGhvdWdoLi4uCi0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+
PSAwKTsKLSAgICByZXR1cm4gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29i
amVjdFN0b3JlSWQpOwotfQotCi1JbmRleEZyZWVMaXN0S2V5OjpJbmRleEZyZWVMaXN0S2V5KCkK
LSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAgICAsIG1faW5kZXhJZCgtMSkKLXsKLX0KLQot
Y29uc3QgY2hhciogSW5kZXhGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBj
b25zdCBjaGFyKiBsaW1pdCwgSW5kZXhGcmVlTGlzdEtleSogcmVzdWx0KQotewotICAgIEtleVBy
ZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0
LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBB
U1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RT
dG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxp
bWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnAr
KzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhGcmVlTGlz
dFR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAg
IGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZhckludChwLCBs
aW1pdCwgcmVzdWx0LT5tX2luZGV4SWQpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhGcmVlTGlz
dEtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAw
KTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBl
bmQoZW5jb2RlQnl0ZShrSW5kZXhGcmVlTGlzdFR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50
KGluZGV4SWQpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhGcmVl
TGlzdEtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
SU5UNjRfTUFYKTsKLX0KLQotaW50IEluZGV4RnJlZUxpc3RLZXk6OmNvbXBhcmUoY29uc3QgSW5k
ZXhGcmVlTGlzdEtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAw
KTsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJ
bnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0
dXJuIHg7Ci0gICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIubV9pbmRleElk
KTsKLX0KLQotaW50NjRfdCBJbmRleEZyZWVMaXN0S2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVj
dFN0b3JlSWQ7Ci19Ci0KLWludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJZCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9pbmRleElkOwot
fQotCi0vLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBvYmplY3Qgc3RvcmUg
aWRzLCBiZWNhdXNlIGEgbWFwcGluZwotLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwotLy8gQ2FuIHdlIHJl
bW92ZSB0aGlzPwotY29uc3QgY2hhciogT2JqZWN0U3RvcmVOYW1lc0tleTo6ZGVjb2RlKGNvbnN0
IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVz
dWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVBy
ZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJU
KCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQp
OwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0
ZSA9PSBrT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRlKTsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5n
V2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlTmFtZSk7Ci19Ci0KLVZl
Y3RvcjxjaGFyPiBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4
KGRhdGFiYXNlSWQsIDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2Rl
KCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUp
KTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgob2JqZWN0U3RvcmVOYW1l
KSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IE9iamVjdFN0b3JlTmFtZXNLZXk6OmNvbXBh
cmUoY29uc3QgT2JqZWN0U3RvcmVOYW1lc0tleSYgb3RoZXIpCi17Ci0gICAgcmV0dXJuIGNvZGVQ
b2ludENvbXBhcmUobV9vYmplY3RTdG9yZU5hbWUsIG90aGVyLm1fb2JqZWN0U3RvcmVOYW1lKTsK
LX0KLQotSW5kZXhOYW1lc0tleTo6SW5kZXhOYW1lc0tleSgpCi0gICAgOiBtX29iamVjdFN0b3Jl
SWQoLTEpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIGlu
ZGV4IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKLS8vIGlzIGtlcHQgYXQgYSBoaWdoZXIgbGV2ZWwu
Ci1jb25zdCBjaGFyKiBJbmRleE5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4
IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxp
bWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VS
VChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3Jl
SWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwot
ICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtJbmRleE5hbWVzS2V5VHlw
ZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0g
ZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYg
KCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nV2l0aExlbmd0
aChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4TmFtZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRl
eE5hbWVzS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0
YWJhc2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsK
LSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4TmFtZXNLZXlUeXBlQnl0ZSkpOwotICAg
IHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICByZXQuYXBwZW5k
KGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoaW5kZXhOYW1lKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0K
LQotaW50IEluZGV4TmFtZXNLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhOYW1lc0tleSYgb3RoZXIp
Ci17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICBpZiAoaW50IHggPSBj
b21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCi0gICAg
ICAgIHJldHVybiB4OwotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKG1faW5kZXhOYW1lLCBv
dGhlci5tX2luZGV4TmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIqIE9iamVjdFN0b3JlRGF0YUtleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIE9iamVjdFN0b3JlRGF0
YUtleSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciog
cCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBlbmQsICZwcmVmaXgpOwotICAgIGlmICghcCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAg
IEFTU0VSVChwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1faW5k
ZXhJZCA9PSBrU3BlY2lhbEluZGV4TnVtYmVyKTsKLSAgICBpZiAocCA9PSBlbmQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBleHRyYWN0RW5jb2RlZElEQktleShwLCBlbmQsICZyZXN1
bHQtPm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1WZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtTcGVjaWFsSW5kZXhOdW1iZXIpOwotICAgIFZl
Y3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVk
VXNlcktleSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4gT2JqZWN0U3Rv
cmVEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYgdXNlcktleSkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZUlEQktleSh1c2VyS2V5KSk7Ci19Ci0KLWludCBPYmpl
Y3RTdG9yZURhdGFLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVEYXRhS2V5JiBvdGhlcikK
LXsKLSAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFVzZXJLZXksIG90
aGVyLm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gT2JqZWN0U3Rv
cmVEYXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0g
ICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVkVXNlcktl
eS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25zdCBpbnQ2NF90IE9iamVj
dFN0b3JlRGF0YUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtPYmplY3RTdG9yZURhdGFJbmRl
eElkOwotCi1jb25zdCBjaGFyKiBFeGlzdHNFbnRyeUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBlbmQsIEV4aXN0c0VudHJ5S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5
UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3Rh
cnQsIGVuZCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBB
U1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZpeC5tX29iamVjdFN0
b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9pbmRleElkID09IGtTcGVjaWFsSW5kZXhOdW1i
ZXIpOwotICAgIGlmIChwID09IGVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGV4
dHJhY3RFbmNvZGVkSURCS2V5KHAsIGVuZCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7Ci19
Ci0KLVZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRLZXkp
Ci17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrU3Bl
Y2lhbEluZGV4TnVtYmVyKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgp
OwotICAgIHJldC5hcHBlbmQoZW5jb2RlZEtleSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVj
dG9yPGNoYXI+IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSkKLXsKLSAgICByZXR1cm4g
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZUlEQktleSh1c2VyS2V5KSk7
Ci19Ci0KLWludCBFeGlzdHNFbnRyeUtleTo6Y29tcGFyZShjb25zdCBFeGlzdHNFbnRyeUtleSYg
b3RoZXIpCi17Ci0gICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRVc2Vy
S2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEV4
aXN0c0VudHJ5S2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7
Ci0gICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVkVXNl
cktleS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25zdCBpbnQ2NF90IEV4
aXN0c0VudHJ5S2V5OjprU3BlY2lhbEluZGV4TnVtYmVyID0ga0V4aXN0c0VudHJ5SW5kZXhJZDsK
LQotSW5kZXhEYXRhS2V5OjpJbmRleERhdGFLZXkoKQotICAgIDogbV9kYXRhYmFzZUlkKC0xKQot
ICAgICwgbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQotICAgICwgbV9z
ZXF1ZW5jZU51bWJlcigtMSkKLXsKLX0KLQotY29uc3QgY2hhciogSW5kZXhEYXRhS2V5OjpkZWNv
ZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleERhdGFLZXkqIHJl
c3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQ
cmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VS
VChwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA+
PSBrTWluaW11bUluZGV4SWQpOwotICAgIHJlc3VsdC0+bV9kYXRhYmFzZUlkID0gcHJlZml4Lm1f
ZGF0YWJhc2VJZDsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IHByZWZpeC5tX29iamVj
dFN0b3JlSWQ7Ci0gICAgcmVzdWx0LT5tX2luZGV4SWQgPSBwcmVmaXgubV9pbmRleElkOwotICAg
IHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlciA9IC0xOwotICAgIHJlc3VsdC0+bV9lbmNvZGVkUHJp
bWFyeUtleSA9IG1pbklEQktleSgpOwotCi0gICAgcCA9IGV4dHJhY3RFbmNvZGVkSURCS2V5KHAs
IGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKLSAgICBpZiAoIXApCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gW29wdGlvbmFsXSBzZXF1ZW5jZSBudW1iZXIKLSAgICBpZiAo
cCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9ICBkZWNvZGVWYXJJbnQocCwg
bGltaXQsIHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlcik7Ci0gICAgaWYgKCFwKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIFtvcHRpb25hbF0gcHJpbWFyeSBrZXkKLSAgICBpZiAocCA9PSBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9IGV4dHJhY3RFbmNvZGVkSURCS2V5KHAs
IGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRQcmltYXJ5S2V5KTsKLSAgICBpZiAoIXApCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleERh
dGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVtYmVy
KQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQu
YXBwZW5kKGVuY29kZWRVc2VyS2V5KTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChzZXF1
ZW5jZU51bWJlcikpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlZFByaW1hcnlLZXkpOwotICAgIHJl
dHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmIHVzZXJLZXkpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkodXNlcktleSksIG1pbklEQktleSgpKTsK
LX0KLQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAg
cmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBtaW5JREJL
ZXkoKSwgbWluSURCS2V5KCkpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNv
ZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIG1heElEQktleSgpLCBtYXhJREJLZXkoKSwgSU5UNjRfTUFYKTsKLX0KLQot
aW50IEluZGV4RGF0YUtleTo6Y29tcGFyZShjb25zdCBJbmRleERhdGFLZXkmIG90aGVyLCBib29s
IGlnbm9yZUR1cGxpY2F0ZXMpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+PSAwKTsKLSAg
ICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIEFTU0VSVChtX2luZGV4SWQgPj0g
MCk7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFVzZXJL
ZXksIG90aGVyLm1fZW5jb2RlZFVzZXJLZXkpKQotICAgICAgICByZXR1cm4geDsKLSAgICBpZiAo
aWdub3JlRHVwbGljYXRlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGludCB4ID0gY29t
cGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFByaW1hcnlLZXksIG90aGVyLm1fZW5jb2RlZFBy
aW1hcnlLZXkpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gY29tcGFyZUludHMobV9z
ZXF1ZW5jZU51bWJlciwgb3RoZXIubV9zZXF1ZW5jZU51bWJlcik7Ci19Ci0KLWludDY0X3QgSW5k
ZXhEYXRhS2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlk
ID49IDApOwotICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7Ci19Ci0KLWludDY0X3QgSW5kZXhEYXRh
S2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlk
ID49IDApOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlSWQ7Ci19Ci0KLWludDY0X3QgSW5kZXhE
YXRhS2V5OjppbmRleElkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwot
ICAgIHJldHVybiBtX2luZGV4SWQ7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJbmRleERhdGFL
ZXk6OnVzZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAgICBkZWNv
ZGVJREJLZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29kZWRVc2VyS2V5LmVuZCgp
LCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJbmRleERh
dGFLZXk6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAg
ICBkZWNvZGVJREJLZXkobV9lbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBtX2VuY29kZWRQcmlt
YXJ5S2V5LmVuZCgpLCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IElEQkxldmVsREJDb2RpbmcKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQ29kaW5nX2gK
LSNkZWZpbmUgSURCTGV2ZWxEQkNvZGluZ19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3MgTGV2ZWxEQlNsaWNlOwotCi1u
YW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZyB7Ci0KLWNvbnN0IHVuc2lnbmVkIGNoYXIga01pbmlt
dW1JbmRleElkID0gMzA7Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIp
OwotVmVjdG9yPGNoYXI+IG1heElEQktleSgpOwotVmVjdG9yPGNoYXI+IG1pbklEQktleSgpOwot
VmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90KTsKLWludDY0X3QgZGVjb2RlSW50KGNvbnN0
IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpOwotVmVjdG9yPGNoYXI+IGVuY29kZVZhcklu
dChpbnQ2NF90KTsKLWNvbnN0IGNoYXIqIGRlY29kZVZhckludChjb25zdCBjaGFyICpwLCBjb25z
dCBjaGFyKiBsaW1pdCwgaW50NjRfdCYgZm91bmRJbnQpOwotVmVjdG9yPGNoYXI+IGVuY29kZVN0
cmluZyhjb25zdCBTdHJpbmcmKTsKLVN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwg
Y29uc3QgY2hhciogZW5kKTsKLVZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNv
bnN0IFN0cmluZyYpOwotY29uc3QgY2hhciogZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBj
aGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgU3RyaW5nJiBmb3VuZFN0cmluZyk7Ci1pbnQgY29t
cGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciog
bGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKTsKLVZlY3RvcjxjaGFy
PiBlbmNvZGVEb3VibGUoZG91YmxlKTsKLWNvbnN0IGNoYXIqIGRlY29kZURvdWJsZShjb25zdCBj
aGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgZG91YmxlKik7Ci12b2lkIGVuY29kZUlEQktleShj
b25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGludG8pOwotVmVjdG9yPGNoYXI+IGVuY29kZUlE
QktleShjb25zdCBJREJLZXkmKTsKLWNvbnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBjaGFy
KiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5KTsKLWNvbnN0
IGNoYXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgVmVjdG9yPGNoYXI+KiByZXN1bHQpOwotaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5
cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLQotaW50IGNvbXBh
cmUoY29uc3QgTGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJiwgYm9vbCBpbmRleEtl
eXMgPSBmYWxzZSk7Ci0KLWNsYXNzIEtleVByZWZpeCB7Ci1wdWJsaWM6Ci0gICAgS2V5UHJlZml4
KCk7Ci0gICAgS2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEtleVByZWZpeCogcmVzdWx0KTsK
LSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlKCkgY29uc3Q7Ci0gICAgaW50IGNvbXBhcmUoY29uc3Qg
S2V5UHJlZml4JiBvdGhlcikgY29uc3Q7Ci0KLSAgICBlbnVtIFR5cGUgewotICAgICAgICBrR2xv
YmFsTWV0YURhdGEsCi0gICAgICAgIGtEYXRhYmFzZU1ldGFEYXRhLAotICAgICAgICBrT2JqZWN0
U3RvcmVEYXRhLAotICAgICAgICBrRXhpc3RzRW50cnksCi0gICAgICAgIGtJbmRleERhdGEsCi0g
ICAgICAgIGtJbnZhbGlkVHlwZQotICAgIH07Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKLQot
ICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwot
ICAgIGludDY0X3QgbV9pbmRleElkOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3Qga0ludmFs
aWRJZCA9IC0xOwotfTsKLQotY2xhc3MgU2NoZW1hVmVyc2lvbktleSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKLX07Ci0KLWNsYXNzIE1heERhdGFiYXNlSWRL
ZXkgewotcHVibGljOgotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7Ci19OwotCi1j
bGFzcyBEYXRhYmFzZUZyZWVMaXN0S2V5IHsKLXB1YmxpYzoKLSAgICBEYXRhYmFzZUZyZWVMaXN0
S2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlRnJlZUxpc3RLZXkqIHJlc3VsdCk7Ci0gICAgc3Rh
dGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkKTsKLSAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleSgpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNv
bnN0OwotICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJlZUxpc3RLZXkmIG90aGVyKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLX07Ci0KLWNsYXNz
IERhdGFiYXNlTmFtZUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29k
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSog
cmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hh
cj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKLSAgICBzdGF0
aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW4pOwotICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotICAg
IFN0cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQot
ICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3RoZXIpOwotCi1wcml2YXRl
OgotICAgIFN0cmluZyBtX29yaWdpbjsgLy8gRklYTUU6IFN0b3JlIGVuY29kZWQgc3RyaW5ncywg
b3IganVzdCBwb2ludGVycy4KLSAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7Ci19OwotCi1jbGFz
cyBEYXRhYmFzZU1ldGFEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBlbnVtIE1ldGFEYXRhVHlwZSB7
Ci0gICAgICAgIGtPcmlnaW5OYW1lID0gMCwKLSAgICAgICAga0RhdGFiYXNlTmFtZSA9IDEsCi0g
ICAgICAgIGtVc2VyVmVyc2lvbiA9IDIsCi0gICAgICAgIGtNYXhPYmplY3RTdG9yZUlkID0gMwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIE1ldGFEYXRhVHlwZSk7Ci19OwotCi1jbGFzcyBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IHsK
LXB1YmxpYzoKLSAgICBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0
YURhdGFUeXBlKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90
IGRhdGFiYXNlSWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBpbnQ2NF90IG9iamVj
dFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OwotICAg
IGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKTsKLQotcHJp
dmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1fbWV0YURh
dGFUeXBlOyAvLyBGSVhNRTogTWFrZSB0aGlzIGEgYnl0ZS4KLX07Ci0KLWNsYXNzIEluZGV4TWV0
YURhdGFLZXkgewotcHVibGljOgotICAgIEluZGV4TWV0YURhdGFLZXkoKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwg
SW5kZXhNZXRhRGF0YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29k
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
OwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4TWV0YURhdGFLZXkmIG90aGVyKTsKLSAgICBp
bnQ2NF90IGluZGV4SWQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YURhdGFUeXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgaW50NjRfdCBtX2luZGV4SWQ7Ci0gICAgdW5zaWduZWQg
Y2hhciBtX21ldGFEYXRhVHlwZTsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkg
ewotcHVibGljOgotICAgIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkoKTsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgc3Rh
dGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKTsKLSAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQgY29tcGFyZShjb25zdCBPYmpl
Y3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhlcik7Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7Ci19OwotCi1jbGFzcyBJbmRleEZyZWVMaXN0S2V5IHsKLXB1YmxpYzoKLSAg
ICBJbmRleEZyZWVMaXN0S2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25z
dCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3Vs
dCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAgc3RhdGljIFZlY3Rv
cjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsK
LSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2NF90IGluZGV4SWQo
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBp
bnQ2NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgewotcHVi
bGljOgotICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBz
dG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwotICAg
IC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNv
bnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSog
cmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKLSAgICBpbnQgY29tcGFyZShjb25z
dCBPYmplY3RTdG9yZU5hbWVzS2V5JiBvdGhlcik7Ci0gICAgU3RyaW5nIG9iamVjdFN0b3JlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVOYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAg
U3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOyAvLyBGSVhNRTogU3RvcmUgdGhlIGVuY29kZWQgc3Ry
aW5nLCBvciBqdXN0IHBvaW50ZXJzIHRvIGl0LgotfTsKLQotY2xhc3MgSW5kZXhOYW1lc0tleSB7
Ci1wdWJsaWM6Ci0gICAgSW5kZXhOYW1lc0tleSgpOwotICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1
c2UgdGhpcyB0byBsb29rIHVwIGluZGV4IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKLSAgICAvLyBp
cyBrZXB0IGF0IGEgaGlnaGVyIGxldmVsLgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1
bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7Ci0gICAgaW50
IGNvbXBhcmUoY29uc3QgSW5kZXhOYW1lc0tleSYgb3RoZXIpOwotICAgIFN0cmluZyBpbmRleE5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TmFtZTsgfQotCi1wcml2YXRlOgotICAgIGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIFN0cmluZyBtX2luZGV4TmFtZTsKLX07Ci0KLWNsYXNz
IE9iamVjdFN0b3JlRGF0YUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9yZURhdGFL
ZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVk
VXNlcktleSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7Ci0gICAg
aW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVEYXRhS2V5JiBvdGhlcik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBjb25zdDsKLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBr
U3BlY2lhbEluZGV4TnVtYmVyOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxjaGFyPiBtX2VuY29k
ZWRVc2VyS2V5OwotfTsKLQotY2xhc3MgRXhpc3RzRW50cnlLZXkgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVu
ZCwgRXhpc3RzRW50cnlLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgZW5jb2RlZEtleSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNl
cktleSk7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVyKTsKLSAg
ICBQYXNzUmVmUHRyPElEQktleT4gdXNlcktleSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0
IGludDY0X3Qga1NwZWNpYWxJbmRleE51bWJlcjsKLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8Y2hh
cj4gbV9lbmNvZGVkVXNlcktleTsKLX07Ci0KLWNsYXNzIEluZGV4RGF0YUtleSB7Ci1wdWJsaWM6
Ci0gICAgSW5kZXhEYXRhS2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25z
dCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RGF0YUtleSogcmVzdWx0KTsK
LSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
Y29kZWRVc2VyS2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2
NF90IHNlcXVlbmNlTnVtYmVyID0gMCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29k
ZU1pbktleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAg
ICBpbnQgY29tcGFyZShjb25zdCBJbmRleERhdGFLZXkmIG90aGVyLCBib29sIGlnbm9yZUR1cGxp
Y2F0ZXMpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OwotICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXkoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJ
ZDsKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsK
LSAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9l
bmNvZGVkUHJpbWFyeUtleTsKLSAgICBpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jZW5kaWYgLy8gSURCTGV2ZWxEQkNvZGluZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmUuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
RE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJLZXku
aCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNp
bmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
ZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKLQotSURCT2JqZWN0U3RvcmU6OklE
Qk9iamVjdFN0b3JlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBp
ZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9iYWNr
ZW5kKGlkYk9iamVjdFN0b3JlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLXsK
LSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLVN0cmluZyBJREJP
YmplY3RTdG9yZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6bmFtZSIpOwotICAgIHJldHVybiBtX2JhY2tlbmQtPm5hbWUoKTsKLX0KLQotU3RyaW5nIElE
Qk9iamVjdFN0b3JlOjprZXlQYXRoKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjprZXlQYXRoIik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+a2V5UGF0aCgpOwotfQot
Ci1QYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkg
Y29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIik7Ci0g
ICAgcmV0dXJuIG1fYmFja2VuZC0+aW5kZXhOYW1lcygpOwotfQotCi1JREJUcmFuc2FjdGlvbiog
SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklE
Qk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbiIpOwotICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLmdl
dCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Z2V0Iik7
Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFy
bHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3Qu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjph
ZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAgICBpZiAo
a2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwot
ICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgp
ID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXQo
dmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwg
cmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpkZWxldGUiKTsKLSAg
ICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVGdW5jdGlv
bihrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIpOwot
ICAgIGlmICgha2V5IHx8ICFrZXktPnZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQt
PmRlbGV0ZUZ1bmN0aW9uKGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OmNsZWFyIik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Y2xlYXIocmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVl
c3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKLSAgICBpZiAo
IUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBib29sIHVuaXF1ZSA9IGZhbHNlOwotICAgIG9wdGlvbnMuZ2V0KCJ1bmlxdWUiLCB1bmlx
dWUpOwotCi0gICAgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5nZXQoIm11
bHRpRW50cnkiLCBtdWx0aUVudHJ5KTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIEFycmF5LXR5cGUg
a2V5UGF0aHMgYXJlIHN1cHBvcnRlZCwgdGhyb3cgZXhjZXB0aW9uIGlmIGtleVBhdGggaXMgQXJy
YXkgYW5kIG11bHRpRW50cnkgaXMgdHJ1ZS4KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgobmFtZSwga2V5
UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFu
IGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNl
IHZlcnNhLgotICAgIGlmICghaW5kZXhCYWNrZW5kKQotICAgICAgICByZXR1cm4gMDsKLSAgICBS
ZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShpbmRleEJhY2tlbmQucmVs
ZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2luZGV4TWFwLnNldChu
YW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6aW5kZXgi
KTsKLSAgICBpZiAobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChu
YW1lKTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJh
Y2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4QmFj
a2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2
ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5k
ZXhCYWNrZW5kKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKLSAgICBy
ZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1fYmFj
a2VuZC0+ZGVsZXRlSW5kZXgobmFtZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwotICAgIGlmIChkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9
IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IE1heSBu
ZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xMTQwNgotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1
cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IpOwot
ICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Y291bnQocmFuZ2UsIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBy
ZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjpjb3VudCIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVj
KTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCi17Ci0g
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmZpbmlzaGVkKCkpOwotCi0gICAgLy8gQnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2luZGV4TWFwLmNsZWFyKCk7Ci19Ci0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQk9iamVjdFN0b3JlX2gKLSNk
ZWZpbmUgSURCT2JqZWN0U3RvcmVfaAotCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVk
ZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1
ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUg
Ik9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBET01TdHJpbmdMaXN0OwotY2xhc3MgSURCQW55OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZSA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQk9iamVjdFN0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3Rv
cmUoaWRiT2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Ci0gICAgfQotICAgIH5JREJPYmplY3RT
dG9yZSgpIHsgfQotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICBTdHJpbmcga2V5UGF0
aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNv
bnN0OwotICAgIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbigpIGNvbnN0OwotCi0gICAgLy8g
RklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVk
ZWQuCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFz
c1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVJbmRleChu
YW1lLCBrZXlQYXRoLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCAwLCBlYyk7IH0gCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29y
OjpORVhULCBlYyk7IH0gCi0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBk
ZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFzc1JlZlB0cjxJ
REJJbmRleD4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGNvbnN0IE9wdGlvbnNPYmplY3QmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJJbmRleD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZSYpOyAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0K
LSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVk
KCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgcmVtb3Zl
VHJhbnNhY3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IG1fdHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURC
SW5kZXg+ID4gSURCSW5kZXhNYXA7Ci0gICAgSURCSW5kZXhNYXAgbV9pbmRleE1hcDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJPYmplY3RT
dG9yZV9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRs
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0
b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9E
QVRBQkFTRQotICAgIF0gSURCT2JqZWN0U3RvcmUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIG5hbWU7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBE
T01TdHJpbmcga2V5UGF0aDsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xp
c3QgaW5kZXhOYW1lczsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQlRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uOwotCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRp
b25hbF0gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVz
dCBhZGQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktl
eSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRl
RnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlIGtleVJhbmdlKQotICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1bmN0aW9uXSBJ
REJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IGNsZWFyKCkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURC
UmVxdWVzdCBnZXQoaW4gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGlu
IFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQotICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIElEQkluZGV4IGNyZWF0ZUluZGV4KGlu
IERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcga2V5UGF0aCwgaW4gW09wdGlvbmFsXSBPcHRp
b25zT2JqZWN0IG9wdGlvbnMpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKLSAgICAgICAgSURCSW5kZXggaW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUpCi0gICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCBkZWxldGVJ
bmRleChpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURC
UmVxdWVzdCBjb3VudChpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlKQotICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIElEQktleSBrZXkpCi0gICAg
ICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKLSNpbmNs
dWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5
UGF0aEJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6On5JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsKCkKLXsKLX0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQotICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX2lkKGlkKQotICAgICwg
bV9uYW1lKG5hbWUpCi0gICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKLSAgICAsIG1fYXV0b0luY3Jl
bWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9hdXRvSW5jcmVtZW50TnVtYmVyKC0xKQotewot
ICAgIGxvYWRJbmRleGVzKCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkK
LSAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwgbV9pZChJbnZhbGlkSWQpCi0g
ICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV9hdXRv
SW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCi0gICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGlu
ZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKEluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5k
KCk7ICsraXQpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOwotICAgIGlu
ZGV4TmFtZXMtPnNvcnQoKTsKLSAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0Iik7Ci0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKLSAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVy
bmFsLCBvYmplY3RTdG9yZSwga2V5LCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwi
KTsKLSAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmdl
dE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
LT5pZCgpLCAqa2V5KTsKLSAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKLSAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKLX0KLQotc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKLSAgICBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7Ci0gICAgdmFsdWVz
LmFwcGVuZCh2YWx1ZSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4ga2V5czsKLSAgICBJ
REJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0Fu
ZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKLSAgICBpZiAoa2V5cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChrZXlzLnNpemUoKSA9PSAxKTsKLSAgICBy
ZXR1cm4ga2V5c1swXS5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0S2V5SW50b0tleVBhdGgoUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpp
bmplY3RLZXlJbnRvS2V5UGF0aCIpOwotICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6
OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7Ci19
Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIp
OwotICAgIGlmICh0cmFuc2FjdGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFE
X09OTFkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VS
UjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBL
ZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0g
dHJhbnNhY3Rpb25QdHI7Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKLSAg
ICAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1l
bnQoKTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9iamVjdFN0b3JlLT5tX2tl
eVBhdGguaXNOdWxsKCk7Ci0KLSAgICAgICAgaWYgKGhhc0tleVBhdGggJiYga2V5KSB7Ci0gICAg
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgIWF1dG9JbmNy
ZW1lbnQgJiYgIWtleSkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhh
c0tleVBhdGgpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRj
aEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAg
ICAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT52YWxpZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhdXRvSW5j
cmVtZW50ICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhLZXkpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVt
YmVyKC0xKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoZHVtbXlLZXksIHZhbHVl
LCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0
ZXJJbmplY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleSAmJiAha2V5
LT52YWxpZCgpKSB7Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEluZGV4
TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiYgaW5kZXggPSBpdC0+c2Vjb25kOwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhL
ZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsK
LSAgICAgICAgICAgIGlmIChpbmRleEtleSAmJiAhaW5kZXhLZXktPnZhbGlkKCkpIHsKLSAgICAg
ICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9i
amVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCk7Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5
UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICBp
ZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1YWwoa2V5LmdldCgpKSkgewotICAg
ICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92ZXJraWxsLCBzaW5j
ZSBpdCdzIHNpbXBseSBhIGNhY2hlIGludmFsaWRhdGlvbi4KLSAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVu
dEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
KQotewotICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotfQot
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLQotICAg
IGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBib29sIGF1dG9J
bmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwotICAgICAgICBjb25zdCBi
b29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKLSAgICAg
ICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsKLSAgICAgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVl
LmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlmIChrZXlQYXRo
S2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5BdXRv
SW5jcmVtZW50S2V5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlcklu
amVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RT
dG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJ
bmplY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1l
bnRLZXlDYWNoZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgp
IGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNp
ZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJy
b3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRl
cm5hbCBlcnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZ2ljIHRvIHVwZGF0ZSBnZW5l
cmF0b3Igc3RhdGUgc2hvdWxkIGdvIGhlcmUuIEN1cnJlbnRseSBpdCBkb2VzIGEgc2Nhbi4KLSAg
ICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChrZXkgJiYga2V5
LT52YWxpZCgpKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICBpZiAocHV0TW9kZSA9
PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtl
eSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0
QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
LCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlzOwot
ICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25k
OwotCi0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0
aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7Ci0gICAgICAgIGlmICghaW5kZXhLZXkp
IHsKLSAgICAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChpbmRleEtleS0+
dmFsaWQoKSk7Ci0KLSAgICAgICAgaWYgKCghaW5kZXgtPm11bHRpRW50cnkoKSB8fCBpbmRleEtl
eS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSAmJiAhaW5kZXgtPmFkZGluZ0tleUFsbG93
ZWQoaW5kZXhLZXkuZ2V0KCksIGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgIG9iamVjdFN0b3Jl
LT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09O
U1RSQUlOVF9FUlIsICJPbmUgb2YgdGhlIGRlcml2ZWQgKGZyb20gYSBrZXlQYXRoKSBrZXlzIGZv
ciBhbiBpbmRleCBkb2VzIG5vdCBzYXRpc2Z5IGl0cyB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4i
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXgt
Pm11bHRpRW50cnkoKSAmJiBpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKSB7
Ci0gICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4LT5hZGRpbmdLZXlBbGxvd2Vk
KGluZGV4S2V5LT5hcnJheSgpW2pdLmdldCgpLCBrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIk9uZSBvZiB0aGUgZGVyaXZl
ZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRvZXMgbm90IHNhdGlzZnkgaXRz
IHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGluZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBC
ZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2lu
dCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0KLSAgICBpZiAo
IW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0
U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dp
cmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAgICAgLy8gRklYTUU6
IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJv
ciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgotICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Ci0gICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50
IGkgPSAwOwotICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0
LCArK2kpIHsKLSAgICAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghaW5kZXgtPmhhc1ZhbGlkSWQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2Vz
IG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgotCi0gICAgICAgIGlmICghb2JqZWN0U3Rv
cmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUt
Pm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFi
YXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0
byBJL08gZXJyb3JzLgotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWluZGV4S2V5c1tpXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8
SURCS2V5PiBpbmRleEtleSA9IGluZGV4S2V5c1tpXTsKLQotICAgICAgICBpZiAoIWluZGV4LT5t
dWx0aUVudHJ5KCkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgewot
ICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dEluZGV4RGF0
YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwg
aW5kZXgtPmlkKCksICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBk
b2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCi0gICAg
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8g
c3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleC0+bXVsdGlFbnRyeSgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0
SW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
LT5pZCgpLCBpbmRleC0+aWQoKSwgKmluZGV4S2V5LT5hcnJheSgpW2pdLCByZWNvcmRJZGVudGlm
aWVyLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkuZ2V0KCkpOwotfQotCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlIik7Ci0gICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlmICgha2V5IHx8ICFrZXktPnZhbGlk
KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0g
SURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBkZWxldGVGdW5jdGlvbihrZXlSYW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcywg
dHJhbnNhY3Rpb24sIGVjKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLSAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUg
PSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsK
LSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0KLSAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJh
bmdlLCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsIik7
Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5P
YmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+
aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgaWYgKGJhY2tpbmdT
dG9yZUN1cnNvcikgewotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHJlY29yZElkZW50aWZp
ZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpOwot
Ci0gICAgICAgICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5t
X2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBj
cmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KLQotICAgICAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0
b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5p
ZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKLQotICAgICAgICB9IHdoaWxlIChiYWNraW5n
U3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvci0+Y2xvc2UoKTsKLSAgICB9Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotfQotCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y2xlYXIiKTsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9PTkxZKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURf
T05MWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLQotICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNsZWFySW50ZXJuYWwsIG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2Rh
dGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotfQotCi1uYW1lc3BhY2Ug
ewotY2xhc3MgUG9wdWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgUG9wdWxhdGVJbmRleENh
bGxiYWNrKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwg
bV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0VmFsdWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKTsKLSAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVl
LmdldCgpLCBtX2luZGV4LT5rZXlQYXRoKCkpOwotCi0gICAgICAgIGlmICghaW5kZXhLZXkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoIW1faW5kZXgtPm11bHRpRW50
cnkoKSB8fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1faW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXkuZ2V0KCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3Rv
cmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBt
X2luZGV4LT5pZCgpLCAqaW5kZXhLZXksIHJlY29yZElkZW50aWZpZXIpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2luZGV4LT5tdWx0aUVudHJ5KCkpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4S2V5LT50eXBl
KCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
ICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fYmFja2luZ1N0
b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9pbmRleC0+aWQoKSwgKmluZGV4S2V5LT5hcnJheSgpW2ldLCByZWNvcmRJZGVudGlmaWVyKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJREJCYWNr
aW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOwotICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAg
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBtX2luZGV4OwotfTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwb3B1
bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKLXsKLSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0
b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleCk7Ci0gICAgaWYgKCFiYWNraW5n
U3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGNhbGxiYWNrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChu
YW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9U
UkFOU0lFTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1faW5kZXhl
cy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
T05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9
IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRh
YmFzZUlkLCB0aGlzLCBuYW1lLCBtX25hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7
Ci0gICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7Ci0KLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rpb247
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50
ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5k
ZXgsIHRyYW5zYWN0aW9uUHRyKSwKLSAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwot
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIGludDY0X3QgaWQ7Ci0gICAgaWYg
KCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9iamVjdFN0b3JlLT5t
X2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFtZSgpLCBpbmRleC0+a2V5
UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCksIGlkKSkgewotICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGluZGV4LT5zZXRJZChpZCk7Ci0KLSAgICBpZiAoIXBvcHVsYXRlSW5kZXgoKm9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
Pm1faWQsIGluZGV4KSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMo
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0Up
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rpb247Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uUHRyKSwKLSAgICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjph
ZGRJbmRleFRvTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3Rv
cmUsIGluZGV4KSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5kZXhl
cy5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uKQotewotICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGlu
ZGV4LT5pZCgpKTsKLSAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7Ci19
Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBwcnBSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4gcmFuZ2UgPSBwcnBSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKLSAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvblB0cikpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLSAgICB9Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdG1wRGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKLSAgICBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVj
dGlvbj4odG1wRGlyZWN0aW9uKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVu
T2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6bnVsbFZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpj
cmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgZGlyZWN0aW9uLCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvciwgdHJhbnNhY3Rpb24uZ2V0KCksIG9i
amVjdFN0b3JlLmdldCgpKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IucmVsZWFz
ZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpj
b3VudCIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwsIHRoaXMsIHJh
bmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRl
cm5hbCIpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9i
amVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAo
IWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAgfSB3aGlsZSAoYmFja2lu
Z1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLQotICAgIGJhY2tpbmdTdG9yZUN1
cnNvci0+Y2xvc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBpZHM7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aHM7Ci0gICAg
VmVjdG9yPGJvb2w+IHVuaXF1ZUZsYWdzOwotICAgIFZlY3Rvcjxib29sPiBtdWx0aUVudHJ5Rmxh
Z3M7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmdldEluZGV4ZXMobV9kYXRhYmFzZUlkLCBtX2lkLCBp
ZHMsIG5hbWVzLCBrZXlQYXRocywgdW5pcXVlRmxhZ3MsIG11bHRpRW50cnlGbGFncyk7Ci0KLSAg
ICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGlkcy5zaXplKCkpOwotICAgIEFTU0VSVChrZXlQYXRo
cy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHVuaXF1ZUZsYWdzLnNpemUoKSA9
PSBpZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQobXVsdGlFbnRyeUZsYWdzLnNpemUoKSA9PSBpZHMu
c2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQot
ICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWVzW2ldLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJhc2VJZCwgdGhpcywgaWRzW2ldLCBuYW1l
c1tpXSwgbV9uYW1lLCBrZXlQYXRoc1tpXSwgdW5pcXVlRmxhZ3NbaV0sIG11bHRpRW50cnlGbGFn
c1tpXSkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4
RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKLXsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhp
bmRleC0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUoaW5kZXgt
Pm5hbWUoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhU
b01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCkKLXsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXhQdHIgPSBpbmRl
eDsKLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXhQdHIt
Pm5hbWUoKSkpOwotICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5uYW1l
KCksIGluZGV4UHRyKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdlbkF1dG9JbmNyZW1lbnRLZXkoKQotewotICAgIGlmIChtX2F1dG9JbmNyZW1l
bnROdW1iZXIgPiAwKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRv
SW5jcmVtZW50TnVtYmVyKyspOwotCi0gICAgbV9hdXRvSW5jcmVtZW50TnVtYmVyID0gc3RhdGlj
X2Nhc3Q8aW50PihtX2JhY2tpbmdTdG9yZS0+bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIobV9kYXRh
YmFzZUlkLCBpZCgpKSk7Ci0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKG1fYXV0b0lu
Y3JlbWVudE51bWJlcisrKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNzIElEQkRh
dGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwotY2xhc3MgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdT
dG9yZSwgZGF0YWJhc2VJZCwgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gY3Jl
YXRlKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
KTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7Ci0gICAgaW50NjRf
dCBpZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOwot
ICAgICAgICByZXR1cm4gbV9pZDsKLSAgICB9Ci0gICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7
IG1faWQgPSBpZDsgfQotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YWJhc2VJZDsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBt
X2tleVBhdGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhO
YW1lcygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9hdXRvSW5jcmVtZW50OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc3RhdGljIGJvb2wgcG9wdWxh
dGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7Ci0KLXByaXZhdGU6
Ci0gICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKLQotICAg
IHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0b0luY3Jl
bWVudEtleSgpOwotICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKSB7IG1fYXV0
b0luY3JlbWVudE51bWJlciA9IC0xOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
LSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsK
LSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7
Ci0gICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7
Ci0gICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+KTsKLQotICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNp
b24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5kZXhG
cm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKLSAgICBzdGF0
aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4p
OwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0KLSAgICBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBpbnQ2NF90IG1faWQ7Ci0gICAgU3RyaW5nIG1fbmFt
ZTsKLSAgICBTdHJpbmcgbV9rZXlQYXRoOwotICAgIGJvb2wgbV9hdXRvSW5jcmVtZW50OwotCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+ID4g
SW5kZXhNYXA7Ci0gICAgSW5kZXhNYXAgbV9pbmRleGVzOwotICAgIGludCBtX2F1dG9JbmNyZW1l
bnROdW1iZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlzdDsKLWNsYXNz
IElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZTsKLWNsYXNzIElE
QktleTsKLWNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOwotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKCkg
eyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
U3RyaW5nIGtleVBhdGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgZW51bSBQ
dXRNb2RlIHsKLSAgICAgICAgQWRkT3JVcGRhdGUsCi0gICAgICAgIEFkZE9ubHksCi0gICAgICAg
IEN1cnNvclVwZGF0ZQotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQ
ZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTcGVjaWZpYy5oPgotCi11c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVGhyZWFkU3Bl
Y2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0
aW9ucygpCi17Ci0gICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAotICAgIC8vIHRocmVhZC1sb2NhbCBzdG9y
YWdlLgotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxWZWN0
b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0aW9ucyA9IG5l
dyBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4g
Pik7Ci0gICAgcmV0dXJuICp0cmFuc2FjdGlvbnM7Ci19Ci0KLXZvaWQgSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgdHJhbnNhY3Rpb25zKCktPmFwcGVuZCh0
cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVt
b3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pCi17Ci0gICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9ucygpOwotICAg
IHNpemVfdCBwb3MgPSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24pOwotICAgIGlm
IChwb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uTGlz
dC0+cmVtb3ZlKHBvcyk7Ci19Ci0KLXZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6
YWJvcnRQZW5kaW5nVHJhbnNhY3Rpb25zKCkKLXsKLSAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJh
bnNhY3Rpb25zKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbnMoKS0+
c2l6ZSgpOyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFib3J0KCk7Ci0g
ICAgLy8gRklYTUU6IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEgbGF5b3V0IHRl
c3QuCi0gICAgdHJhbnNhY3Rpb25MaXN0LT5jbGVhcigpOwotfQotCi19OwotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQ
ZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRp
bmdUcmFuc2FjdGlvbk1vbml0b3JfaAotI2RlZmluZSBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLQotLy8gVGhpcyBj
bGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgdHJhbnNhY3Rpb25zIGNyZWF0ZWQgZHVyaW5nIHRoZSBj
dXJyZW50Ci0vLyBKYXZhc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBBIHRyYW5zYWN0aW9uIGlz
ICdwZW5kaW5nJyBpZiBubyBhc3luY2hyb25vdXMKLS8vIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkg
cXVldWVkIGZvciBpdCAoZS5nLiBhbiBJREJPYmplY3RTdG9yZTo6cHV0KCkgb3Igc2ltaWxhciku
Ci0vLyBBbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgYXJlIGFib3J0ZWQgYXMgc29vbiBhcyBleGVj
dXRpb24gcmV0dXJucyBmcm9tCi0vLyB0aGUgc2NyaXB0IGVuZ2luZS4KLQotY2xhc3MgSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYWRkUGVu
ZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHN0
YXRpYyB2b2lkIHJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKTsKLSAgICBzdGF0aWMgdm9pZCBhYm9ydFBlbmRpbmdUcmFuc2FjdGlvbnMoKTsK
LQotcHJpdmF0ZToKLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKCk7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2VuZGlmIC8vIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaApJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQz
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hl
ci5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKLSNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCB0cmFuc2Fj
dGlvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcmVx
dWVzdC5yZWxlYXNlKCk7Ci19Ci0KLUlEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMp
Ci0gICAgLCBtX2Vycm9yQ29kZSgwKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5HKQotICAg
ICwgbV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCi0gICAgLCBtX2N1cnNvckZpbmlzaGVkKGZhbHNl
KQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fY3Vyc29yVHlwZShJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKLSAgICAsIG1fY3Vyc29y
KDApCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+
cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsK
LSAgICB9Ci19Ci0KLUlEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5RGVhdGggfHwgIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24pCi0gICAgICAgIG1f
dHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotfQotCi1QYXNzUmVmUHRyPElE
QkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAg
IGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBy
ZXR1cm4gbV9yZXN1bHQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVycm9yQ29k
ZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IERP
TkUpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JDb2RlOwotfQot
Ci1TdHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwotfQotCi1QYXNzUmVm
UHRyPElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
b3VyY2U7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5z
YWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKLX0KLQotdW5zaWdu
ZWQgc2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
cmVhZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICByZXR1
cm4gbV9yZWFkeVN0YXRlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om1hcmtFYXJseURlYXRoKCkK
LXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOwotICAgIG1fcmVhZHlTdGF0
ZSA9IEVhcmx5RGVhdGg7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlz
aGVkKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQo
dHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBE
T05FKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5H
OwotICAgIG1fcmVzdWx0LmNsZWFyKCk7Ci0gICAgbV9lcnJvckNvZGUgPSAwOwotICAgIG1fZXJy
b3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0KLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
OjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1JREJBbnkqIElEQlJlcXVlc3Q6OnNvdXJjZSgpCi17Ci0g
ICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmFib3J0KCkK
LXsKLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IExPQURJTkcpIHsK
LSAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1
ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAgfQotICAgIG1fZW5xdWV1ZWRFdmVudHMu
Y2xlYXIoKTsKLQotICAgIG1fZXJyb3JDb2RlID0gMDsKLSAgICBtX2Vycm9yTWVzc2FnZSA9IFN0
cmluZygpOwotICAgIG1fcmVzdWx0LmNsZWFyKCk7Ci0gICAgb25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIlRoZSB0cmFuc2Fj
dGlvbiB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJlIGZ1bGZpbGxlZC4iKSk7
Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCi17Ci0gICAgQVNTRVJUKG1fY3Vyc29yVHlw
ZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7Ci0gICAg
bV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJz
b3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKLXsKLSAgICBBU1NFUlQoIW1fY3Vyc29y
KTsKLSAgICBtX2N1cnNvciA9IGN1cnNvcjsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpmaW5pc2hD
dXJzb3IoKQotewotICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOwotICAgIGlmIChtX3JlYWR5
U3RhdGUgIT0gTE9BRElORykKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOwotfQot
Ci12b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvcikKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVs
bCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgpOwotICAg
IG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKLSAgICBtX2N1cnNvci5jbGVhcigp
OwotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
LCB0cnVlLCB0cnVlKSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVTdWNj
ZXNzRXZlbnQoKQotewotICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKLXsKLSAgICBJREJfVFJB
Q0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIpOwotICAgIEFTU0VSVCgh
bV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAg
ICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOwotICAgIGVucXVldWVF
dmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Ci0gICAgQVNT
RVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQp
OwotICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW52YWxpZEN1cnNvclR5cGUpOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsKLSAgICBp
ZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vy
c29yKQotICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBt
X3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBj
dXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBtX3NvdXJj
ZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0KLSAgICBzZXRSZXN1bHRDdXJzb3IoY3Vy
c29yLCBtX2N1cnNvclR5cGUpOwotCi0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVu
dCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7Ci0gICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAm
JiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwotICAgIGlmIChtX2NvbnRl
eHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3Jl
YXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7Ci0gICAgaWRiRGF0YWJhc2Ut
Pm9wZW4oKTsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJhc2UucmVs
ZWFzZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQotewot
ICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKLSAgICBBU1NF
UlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7
Ci0gICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCi0gICAgICAgIG1fcmVzdWx0ID0g
SURCQW55OjpjcmVhdGUoaWRiS2V5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKLSAg
ICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12b2lkIElEQlJlcXVl
c3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
cHJwQmFja2VuZCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJU
cmFuc2FjdGlvbikiKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdl
LmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7Ci0KLSAgICBpZiAobV9jb250ZXh0U3Rv
cHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgIGJhY2tlbmQtPmFi
b3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKLSAgICBiYWNr
ZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOwotICAgIG1fdHJhbnNhY3Rpb24gPSBm
cm9udGVuZDsKLQotICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCRGF0
YWJhc2VUeXBlKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7Ci0gICAgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCktPnNl
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7Ci0KLSAgICBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpKTsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZnJvbnRl
bmQucmVsZWFzZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwot
fQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQotewotICAgIElEQl9UUkFDRSgiSURCUmVx
dWVzdDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsKLSAgICBBU1NFUlQoIW1f
ZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpOwotICAgIG1f
Y3Vyc29yLmNsZWFyKCk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsK
LX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24iKTsKLSAg
ICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jl
c3VsdCk7Ci0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBzZXRSZXN1bHRDdXJzb3IobV9jdXJz
b3IsIG1fY3Vyc29yVHlwZSk7Ci0gICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBlbnF1ZXVlRXZl
bnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi1ib29sIElEQlJlcXVlc3Q6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3
ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2FuCi0gICAg
Ly8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBsaXN0ZW5lcnMu
IFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCi0gICAgLy8gICAgICAgIHVzZXIgZ2VuZXJhdGVkIGV2
ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8IEFjdGl2ZURP
TU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c3Rv
cCgpCi17Ci0gICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7Ci0gICAgaWYgKG1fY29udGV4dFN0
b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOwot
ICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKLSAgICAgICAgbWFya0Vhcmx5RGVhdGgo
KTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElEQlJlcXVlc3Q6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURC
UmVxdWVzdDsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi1ib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJSZXF1
ZXN0OjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hlZCk7Ci0g
ICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBBU1NFUlQobV9lbnF1ZXVlZEV2ZW50
cy5zaXplKCkpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFT
U0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAlZCIsIERP
TkUsIG1fcmVhZHlTdGF0ZSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
LmJsb2NrZWRFdmVudCkKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKLSAgICAgICAg
ICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwotICAgIH0KLQotICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKLSAg
ICBpZiAobV90cmFuc2FjdGlvbikgewotICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0
aW9uKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJlIGFzc29j
aWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAotICAgICAgICAvLyB0aGF0IGRvIG5vdCBoYXZlIGEg
dHJhbnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCi0gICAgICAg
IC8vIHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGFi
YXNlICh0byBlbnN1cmUKLSAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgotICAgICAgICB0YXJn
ZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
Q3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKLSAgICBpZiAobV9yZXN1bHQpIHsKLSAgICAgICAgaWYg
KG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQotICAgICAgICAgICAg
Y3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7Ci0gICAgICAgIGVsc2UgaWYg
KG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQotICAg
ICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3Bh
dGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmJsb2NrZWRFdmVudCk7Ci0gICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKLQotICAgIC8vIElm
IHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tlZCBldmVudCwg
dGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFt
ZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZpbmlzaGVk
KSkKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOwotCi0gICAgaWYgKGN1cnNvclRv
Tm90aWZ5KQotICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJh
Y2soKTsKLQotICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7Ci0gICAgICAgIC8vIElmIGFuIGVycm9y
IGV2ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCi0gICAgICAgIGlmIChk
b250UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JF
dmVudCkKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKS0+YWJvcnQoKTsKLSAg
ICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKLX0KLQotdm9pZCBJREJSZXF1
ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKLXsKLSAgICBpZiAobV90cmFu
c2FjdGlvbikKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgpOwotfQot
Ci12b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
LXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKLQotICAgIGlmIChtX2NvbnRleHRT
dG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKLQotICAgIEV2ZW50UXVldWUqIGV2ZW50
UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgaWYgKGV2ZW50UXVldWUtPmVucXVldWVFdmVudChl
dmVudC5nZXQoKSkpCi0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKLX0K
LQotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQotewotICAg
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0YSogSURCUmVx
dWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRy
PElEQkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JU
eXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlDdXJzb3IpIHsKLSAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShwcnBD
dXJzb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6
OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJwQ3Vyc29yKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IElEQlJlcXVlc3RfaAotI2RlZmluZSBJREJSZXF1ZXN0X2gKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
U3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgot
I2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCi1jbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIElEQkNhbGxiYWNrcywgcHVi
bGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdmly
dHVhbCB+SURCUmVxdWVzdCgpOwotCi0gICAgUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdChFeGNl
cHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLSAgICBTdHJpbmcgd2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlKCkgY29uc3Q7Ci0gICAg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdDsKLQotICAgIC8v
IERlZmluZWQgaW4gdGhlIElETAotICAgIGVudW0gUmVhZHlTdGF0ZSB7Ci0gICAgICAgIExPQURJ
TkcgPSAxLAotICAgICAgICBET05FID0gMiwKLSAgICAgICAgRWFybHlEZWF0aCA9IDMKLSAgICB9
OwotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGUoKSBjb25zdDsKLQotICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3VjY2Vzcyk7Ci0gICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihlcnJvcik7Ci0KLSAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7Ci0gICAg
Ym9vbCByZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIHNldEN1cnNv
clR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSk7Ci0gICAgdm9pZCBz
ZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIGZpbmlzaEN1cnNvcigp
OwotICAgIElEQkFueSogc291cmNlKCk7Ci0gICAgdm9pZCBhYm9ydCgpOwotCi0gICAgLy8gSURC
Q2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCS2V5Pik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZpcnR1YWwgdm9p
ZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKLSAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpOwotICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBwcmltYXJ5S2V5cywgY29uc3QgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcykgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfSAvLyBOb3QgaW1wbGVtZW50ZWQuIENhbGxiYWNrIHNob3VsZCBub3QgcmVhY2gg
dGhlIHJlbmRlcmVyIHNpZGUuCi0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwotCi0gICAg
Ly8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7Ci0KLSAg
ICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZh
Y2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0Ojpk
aXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNl
cHRpb25JbkV2ZW50SGFuZGxlcigpOwotCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkNh
bGxiYWNrcz46OmRlcmVmOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24q
KTsKLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgUmVmUHRy
PElEQkFueT4gbV9yZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9lcnJvckNvZGU7Ci0gICAg
U3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotCi1wcml2YXRlOgotICAgIC8vIEV2ZW50VGFyZ2V0Ci0g
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0gICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRh
KiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKLQotICAgIHZvaWQgc2V0UmVzdWx0Q3Vyc29yKFBh
c3NSZWZQdHI8SURCQ3Vyc29yPiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlw
ZSk7Ci0KLSAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0KLSAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAg
ICBib29sIG1fcmVxdWVzdEZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJsZSB0aGF0IHdlJ2xsIGZp
cmUgYW55IG1vcmUgZXZlbnRzPyBJZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgotICAgIGJvb2wgbV9j
dXJzb3JGaW5pc2hlZDsKLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgLy8gT25seSB1c2VkIGlmIHRo
ZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1f
Y3Vyc29yOwotCi0gICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNlbmRpZiAvLyBJREJSZXF1ZXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJSZXF1ZXN0LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBz
dG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UsCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgRXZlbnRUYXJnZXQK
LSAgICBdIElEQlJlcXVlc3QgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJl
c3VsdAotICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlCi0gICAg
ICAgICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERP
TVN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UKLSAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBz
b3VyY2U7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbjsKLQotICAgICAgICAvLyBTdGF0ZXMKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
TE9BRElORyA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAyOwotICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKLQotICAg
ICAgICAvLyBFdmVudHMKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdWNjZXNz
OwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwotCi0gICAgICAgIC8v
IEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4g
RE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExp
c3RlbmVyIGxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlv
bmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoaW4gRE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBib29sZWFuIGRp
c3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQotICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0
aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFjaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFjaW5nLmgJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhY2luZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFjaW5nX2gKLSNk
ZWZpbmUgSURCVHJhY2luZ19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotCi0jaW5jbHVkZSAiVHJhY2VFdmVudC5oIgotI2RlZmluZSBJ
REJfVFJBQ0UoYSkgVFJBQ0VfRVZFTlQwKCJJbmRleGVkREIiLCAoYSkpOwotCi0jZWxzZQotCi0j
ZGVmaW5lIElEQl9UUkFDRShhKSAoKHZvaWQpMCkKLQotI2VuZGlmIC8vICBQTEFURk9STShDSFJP
TUlVTSkKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
SURCVHJhY2luZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNs
dWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgot
I2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNpbmNs
dWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFiYXNlKiBkYikK
LXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKGFkb3B0UmVmKG5ldyBJ
REJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBkYikpKTsKLSAgICB0cmFuc2FjdGlvbi0+
c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKLX0K
LQotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJEYXRhYmFzZSogZGIpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhp
cykKLSAgICAsIG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9kYXRhYmFzZShkYikKLSAgICAs
IG1fbW9kZShtX2JhY2tlbmQtPm1vZGUoKSkKLSAgICAsIG1fdHJhbnNhY3Rpb25GaW5pc2hlZChm
YWxzZSkKLSAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fYmFj
a2VuZCk7Ci0gICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5z
YWN0aW9uKG1fYmFja2VuZC5nZXQoKSk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNh
Y3Rpb24oKQotewotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIElEQlRyYW5z
YWN0aW9uOjpiYWNrZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOwot
fQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpmaW5pc2hlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCVHJhbnNhY3Rp
b246Om1vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX21vZGU7Ci19Ci0KLUlEQkRhdGFiYXNl
KiBJREJUcmFuc2FjdGlvbjo6ZGIoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGFiYXNlLmdl
dCgpOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAobV90cmFuc2FjdGlvbkZpbmlzaGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
SURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5h
bWUpOwotICAgIGlmIChpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMp
OwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMp
OwotICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJu
IG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b2JqZWN0
U3RvcmVDcmVhdGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUpCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOwot
ICAgIG1fb2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7Ci0gICAgbV9vYmplY3RTdG9yZU1h
cC5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0KCkKLXsKLSAg
ICBpZiAobV90cmFuc2FjdGlvbkZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gdGhpczsKLSAgICBpZiAobV9iYWNrZW5kKQotICAg
ICAgICBtX2JhY2tlbmQtPmFib3J0KCk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjpPcGVuQ3Vyc29y
Tm90aWZpZXI6Ok9wZW5DdXJzb3JOb3RpZmllcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbiwgSURCQ3Vyc29yKiBjdXJzb3IpCi0gICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKSwKLSAgICAgIG1fY3Vyc29yKGN1cnNvcikKLXsKLSAgICBtX3RyYW5zYWN0aW9uLT5y
ZWdpc3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOwotfQotCi1JREJUcmFuc2FjdGlvbjo6T3BlbkN1
cnNvck5vdGlmaWVyOjp+T3BlbkN1cnNvck5vdGlmaWVyKCkKLXsKLSAgICBtX3RyYW5zYWN0aW9u
LT51bnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqIGN1cnNvcikKLXsKLSAgICBtX29wZW5D
dXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVy
T3BlbkN1cnNvcihJREJDdXJzb3IqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLnJlbW92
ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjbG9zZU9wZW5DdXJzb3JzKCkK
LXsKLSAgICBIYXNoU2V0PElEQkN1cnNvcio+IGN1cnNvcnM7Ci0gICAgY3Vyc29ycy5zd2FwKG1f
b3BlbkN1cnNvcnMpOwotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3IqPjo6aXRlcmF0b3IgaSA9
IGN1cnNvcnMuYmVnaW4oKTsgaSAhPSBjdXJzb3JzLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSkt
PmNsb3NlKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnJlZ2lzdGVyUmVxdWVzdChJREJS
ZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIG1fY2hpbGRSZXF1ZXN0cy5hZGQocmVxdWVzdCk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqIHJl
cXVlc3QpCi17Ci0gICAgLy8gSWYgd2UgYWJvcnRlZCB0aGUgcmVxdWVzdCwgaXQgd2lsbCBhbHJl
YWR5IGhhdmUgYmVlbiByZW1vdmVkLgotICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVz
dCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQotewotICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKLSAgICB3aGlsZSAoIW1fY2hpbGRSZXF1ZXN0cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSURCUmVxdWVzdCogcmVxdWVzdCA9ICptX2NoaWxkUmVxdWVzdHMu
YmVnaW4oKTsKLSAgICAgICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0KTsKLSAgICAg
ICAgcmVxdWVzdC0+YWJvcnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tb2RlID09IElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkKLSAgICAgICAgbV9kYXRhYmFzZS0+Y2xlYXJWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAg
aWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9u
Q29tcGxldGUoKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKLSAgICBp
ZiAobV9tb2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkKLSAgICAgICAgbV9k
YXRhYmFzZS0+Y2xlYXJWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgY2xvc2VP
cGVuQ3Vyc29ycygpOwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotfQot
Ci1ib29sIElEQlRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGFzIGxv
bmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgotICAgIC8vICAgICAgICBnZXQgYSBoYW5kbGUgdG8g
dXMgb3IgYW55IGNoaWxkIHJlcXVlc3Qgb2JqZWN0IGFuZCBhbnkgb2YgdGhvc2UgaGF2ZQotICAg
IC8vICAgICAgICBldmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgIGluIG9yZGVyIHRvIGhhbmRsZSB1
c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCi0gICAgcmV0dXJuICFtX3RyYW5zYWN0aW9u
RmluaXNoZWQgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQot
Y29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJUcmFuc2FjdGlvbjsK
LX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCVHJhbnNhY3Rpb246OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5z
YWN0aW9uOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNo
ZWQpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChl
dmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgbV90cmFuc2FjdGlvbkZpbmlzaGVkID0gdHJ1
ZTsKLQotICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgZm9yIChJREJPYmplY3RT
dG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmJlZ2luKCk7IGl0ICE9IG1f
b2JqZWN0U3RvcmVNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnRyYW5zYWN0
aW9uRmluaXNoZWQoKTsKLSAgICBtX29iamVjdFN0b3JlTWFwLmNsZWFyKCk7Ci0KLSAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+IHRhcmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBlbmQodGhp
cyk7Ci0gICAgdGFyZ2V0cy5hcHBlbmQoZGIoKSk7Ci0KLSAgICAvLyBGSVhNRTogV2hlbiB3ZSBh
bGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRv
IGNoYW5nZS4KLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxl
dGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKLSAg
ICByZXR1cm4gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0
cyk7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBUZWNobmljYWxseSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhlIGZpcnN0IHJl
cXVlc3QgaXMgc2NoZWR1bGUKLSAgICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBjb21wbGV0ZS9h
Ym9ydCBldmVudCBpcyBlbnF1ZXVlZC4KLSAgICByZXR1cm4gbV90cmFuc2FjdGlvbkZpbmlzaGVk
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkKLXsKLSAgICBBY3RpdmVET01PYmpl
Y3Q6OnN0b3AoKTsKLSAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLQotICAgIGFib3J0KCk7
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3RyYW5zYWN0aW9uRmluaXNo
ZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2Yg
dHlwZSAlcy4iLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlm
IChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAg
IGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudCk7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0YSog
SURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25faAotI2RlZmluZSBJREJU
cmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRl
ICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3I7Ci1jbGFzcyBJREJEYXRh
YmFzZTsKLWNsYXNzIElEQk9iamVjdFN0b3JlOwotCi1jbGFzcyBJREJUcmFuc2FjdGlvbiA6IHB1
YmxpYyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7Ci0gICAgdmlydHVhbCB+
SURCVHJhbnNhY3Rpb24oKTsKLQotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIFJFQURfT05MWSA9
IDAsCi0gICAgICAgIFJFQURfV1JJVEUgPSAxLAotICAgICAgICBWRVJTSU9OX0NIQU5HRSA9IDIK
LSAgICB9OwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBiYWNrZW5kKCkg
Y29uc3Q7Ci0gICAgYm9vbCBmaW5pc2hlZCgpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgc2hvcnQg
bW9kZSgpIGNvbnN0OwotICAgIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYWJvcnQoKTsKLQotICAgIGNsYXNzIE9wZW5DdXJzb3JOb3Rp
ZmllciB7Ci0gICAgcHVibGljOgotICAgICAgICBPcGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4sIElEQkN1cnNvciopOwotICAgICAgICB+T3BlbkN1cnNvck5vdGlm
aWVyKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3Ry
YW5zYWN0aW9uOwotICAgICAgICBJREJDdXJzb3IqIG1fY3Vyc29yOwotICAgIH07Ci0KLSAgICB2
b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUmVx
dWVzdChJREJSZXF1ZXN0Kik7Ci0gICAgdm9pZCBvYmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3Ry
aW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pOwotICAgIHZvaWQgb2JqZWN0U3RvcmVE
ZWxldGVkKGNvbnN0IFN0cmluZyYpOwotCi0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihhYm9ydCk7Ci0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0
ZSk7Ci0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7Ci0KLSAgICAv
LyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7
Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVj
KTsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5k
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVSUklERTsKLQot
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpyZWY7Ci0gICAg
dXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwotCi1wcml2
YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7Ci0KLSAg
ICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBjbG9zZU9w
ZW5DdXJzb3JzKCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqKTsK
LSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvciopOwotCi0gICAgLy8gRXZl
bnRUYXJnZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJEYXRh
YmFzZT4gbV9kYXRhYmFzZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX21vZGU7Ci0gICAgYm9vbCBt
X3RyYW5zYWN0aW9uRmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBh
bnkgbW9yZSBldmVudHMgb3IgYWxsb3cgYW55IG5ldyByZXF1ZXN0cz8gSWYgbm90LCB3ZSdyZSBm
aW5pc2hlZC4KLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0KLSAgICBMaXN0SGFzaFNldDxJ
REJSZXF1ZXN0Kj4gbV9jaGlsZFJlcXVlc3RzOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPElEQk9iamVjdFN0b3JlPiA+IElEQk9iamVjdFN0b3JlTWFwOwotICAgIElEQk9i
amVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVNYXA7Ci0KLSAgICBIYXNoU2V0PElEQkN1cnNvcio+
IG1fb3BlbkN1cnNvcnM7Ci0KLSAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSw2MCArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2Ug
WwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBBY3RpdmVE
T01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJUcmFuc2FjdGlvbiB7Ci0g
ICAgICAgIC8vIE1vZGVzCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9
IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAxOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7Ci0KLSAgICAgICAgLy8g
UHJvcGVydGllcwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgbW9k
ZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOwotICAgICAgICAv
LyBNZXRob2RzCi0gICAgICAgIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChpbiBET01TdHJp
bmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAg
ICAgICB2b2lkIGFib3J0ICgpOwotICAgICAgICAvLyBFdmVudHMKLSAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25jb21wbGV0ZTsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKLSAg
ICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZl
bnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJv
b2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpIAotICAgICAgICAgICAgcmFpc2VzKEV2
ZW50RXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKERPTVN0cmluZ0xpc3QqIG9iamVj
dFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0
YWJhc2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKG9iamVjdFN0b3JlcywgbW9kZSwgZGF0YWJhc2UpKTsKLX0KLQotSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmpl
Y3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlKQotICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKLSAgICAsIG1f
bW9kZShtb2RlKQotICAgICwgbV9zdGF0ZShVbnVzZWQpCi0gICAgLCBtX2RhdGFiYXNlKGRhdGFi
YXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0
ZVRyYW5zYWN0aW9uKCkpCi0gICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpCi0gICAgLCBtX3Rhc2tFdmVudFRpbWVyKHRoaXMs
ICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkKQotICAgICwg
bV9wZW5kaW5nRXZlbnRzKDApCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVOYW1lcyk7Ci0g
ICAgQVNTRVJUKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgfHwgIW1f
b2JqZWN0U3RvcmVOYW1lcy0+aXNFbXB0eSgpKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwotfQotCi1JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpCi17Ci0gICAg
Ly8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQgZGVsZXRl
ZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgotICAgIEFTU0VSVChtX3N0
YXRlID09IEZpbmlzaGVkKTsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmlu
aXNoZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBEb2VzIGEgbGluZWFyIHNl
YXJjaCwgYnV0IGl0IHJlYWxseSBzaG91bGRuJ3QgYmUgdGhhdCBzbG93IGluIHByYWN0aWNlLgot
ICAgIGlmIChtX21vZGUgIT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFICYmICFtX29i
amVjdFN0b3JlTmFtZXMtPmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0g
bV9kYXRhYmFzZS0+b2JqZWN0U3RvcmUobmFtZSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25s
eSBuZWNlc3NhcnkgcmlnaHQgbm93IGJlYWN1c2UgYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGNv
dWxkIG1vZGlmeSB0aGluZ3MKLSAgICAvLyAgICAgICAgYmV0d2VlbiBpdHMgY3JlYXRpb24gKHdo
ZXJlIGFub3RoZXIgY2hlY2sgb2NjdXJzKSBhbmQgdGhlIC5vYmplY3RTdG9yZSBjYWxsLgotICAg
IC8vICAgICAgICBUaGVyZSdzIGEgYnVnIHRvIG1ha2UgdGhpcyBpbXBvc3NpYmxlIGluIHRoZSBz
cGVjLiBXaGVuIHdlIG1ha2UgaXQgaW1wb3NzaWJsZSBoZXJlLCB3ZQotICAgIC8vICAgICAgICBj
YW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgaWYgKCFvYmplY3RTdG9yZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQotYm9vbCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOwot
ICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9y
dFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQotICAgICAgICBzdGFydCgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
YWJvcnQoKQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJv
cnQiKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOwotCi0gICAgLy8gVGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3Jt
aW5nIHRoZQotICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNl
bGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0
aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBz
ZWxmKHRoaXMpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAgIG1fdGFza1RpbWVyLnN0
b3AoKTsKLSAgICBtX3Rhc2tFdmVudFRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3NlT3BlbkN1cnNv
cnMoKTsKLSAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKLQotICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KLSAgICB3aGlsZSAo
IW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUuZmlyc3QoKS5yZWxlYXNl
KCkpOwotICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIHRh
c2stPnBlcmZvcm1UYXNrKDApOwotICAgIH0KLQotICAgIGlmIChtX2NhbGxiYWNrcykKLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIEFTU0VSVCghbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7Ci0gICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLSAgICBtX2RhdGFiYXNlID0g
MDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpyZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFk
ZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnVucmVnaXN0
ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVu
Q3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjphZGRQZW5kaW5nRXZlbnRzKGludCBuKQotewotICAgIG1fcGVuZGluZ0V2ZW50cyArPSBu
OwotICAgIEFTU0VSVChtX3BlbmRpbmdFdmVudHMgPj0gMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkKLXsKLSAgICBpZiAobV9z
dGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3RhdGUg
PT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cyk7Ci0gICAgbV9wZW5kaW5n
RXZlbnRzLS07Ci0KLSAgICBpZiAoIW1fdGFza0V2ZW50VGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgbV90YXNrRXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBl
bmRpbmcgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICBBU1NFUlQoIW1fdGFza1RpbWVyLmlz
QWN0aXZlKCkpOwotCi0gICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9zdGF0
ZSA9PSBVbnVzZWQpOwotCi0gICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKLSAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7
Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQiKTsKLSAgICAvLyBUaGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0g
ICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJl
bmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMg
bWV0aG9kLgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBzZWxmKHRoaXMp
OwotICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVChtX3Rhc2tRdWV1
ZS5pc0VtcHR5KCkpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAgIGNsb3NlT3BlbkN1
cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICBtX2NhbGxiYWNrcy0+
b25Db21wbGV0ZSgpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZCh0aGlzKTsKLSAgICBtX2RhdGFiYXNlID0gMDsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiopCi17Ci0gICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0
YXNrVGltZXJGaXJlZCIpOwotICAgIEFTU0VSVCghbV90YXNrUXVldWUuaXNFbXB0eSgpKTsKLQot
ICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewotICAgICAgICBtX3RyYW5zYWN0aW9u
LT5iZWdpbigpOwotICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKLSAgICB9Ci0KLSAgICBUYXNr
UXVldWUgcXVldWU7Ci0gICAgcXVldWUuc3dhcChtX3Rhc2tRdWV1ZSk7Ci0gICAgd2hpbGUgKCFx
dWV1ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewotICAgICAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IHRhc2socXVldWUuZmlyc3QoKS5yZWxlYXNlKCkpOwotICAgICAgICBxdWV1ZS5y
ZW1vdmVGaXJzdCgpOwotICAgICAgICBtX3BlbmRpbmdFdmVudHMrKzsKLSAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soMCk7Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnRhc2tFdmVudFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4q
KQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50
VGltZXJGaXJlZCIpOwotICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotCi0gICAgaWYg
KCFtX3BlbmRpbmdFdmVudHMgJiYgbV90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IFRoZSBsYXN0IHRhc2sgZXZlbnQgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRhc2sKLSAgICAgICAg
Ly8gcXVldWUgaXMgZW1wdHkuIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCi0gICAgICAgIGNvbW1p
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIHN0aWxsIHdhaXRp
bmcgZm9yIG90aGVyIGV2ZW50cyB0byBjb21wbGV0ZS4gSG93ZXZlciwKLSAgICAvLyB0aGUgdGFz
ayBxdWV1ZSBpcyBub24tZW1wdHkgYW5kIHRoZSB0aW1lciBpcyBpbmFjdGl2ZS4KLSAgICAvLyBX
ZSBjYW4gdGhlcmZvcmUgc2NoZWR1bGUgdGhlIHRpbWVyIGFnYWluLgotICAgIGlmICghbV90YXNr
UXVldWUuaXNFbXB0eSgpICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Rh
c2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAgZm9yIChIYXNoU2V0PElEQkN1cnNvckJh
Y2tlbmRJbXBsKj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7IGkgIT0gbV9v
cGVuQ3Vyc29ycy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT5jbG9zZSgpOwotICAgIG1fb3Bl
bkN1cnNvcnMuY2xlYXIoKTsKLX0KLQotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKLSNk
ZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6IHB1
YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJpbmdM
aXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9y
dFRhc2spOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJ
bXBsKik7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJh
Y2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KTsKLQot
ICAgIHZvaWQgcnVuKCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqKTsKLQotICAgIGVudW0gU3RhdGUgewotICAgICAgICBVbnVzZWQs
IC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCi0gICAgICAgIFN0YXJ0UGVuZGluZywgLy8g
RW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgot
ICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90IHll
dCBmaW5pc2hlZC4KLSAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNvbW1p
dHRlZC4KLSAgICB9OwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgY29tbWl0KCk7Ci0K
LSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
Kik7Ci0gICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+Kik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOwotICAgIHVuc2lnbmVkIHNob3J0IG1f
bW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
bV9kYXRhYmFzZTsKLQotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKLSAg
ICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotCi0gICAgLy8gRklYTUU6IGRlbGV0ZSB0
aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KLSAgICBUaW1lcjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKLSAgICBUaW1lcjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOwotICAgIGludCBtX3BlbmRpbmdFdmVudHM7
Ci0KLSAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVuQ3Vyc29yczsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gK
LSNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIklE
QkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IElEQkN1cnNvckJhY2tlbmRJbXBsOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3M7Ci0KLXR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJ5IElEQlRyYW5zYWN0aW9uIChh
c3luYykgYW5kIElEQlRyYW5zYWN0aW9uU3luYyAoc3luYykuCi0vLyBUaGlzIGlzIGltcGxlbWVu
dGVkIGJ5IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgYW5kIG9wdGlvbmFsbHkgb3RoZXJzIChp
biBvcmRlciB0byBwcm94eQotLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3MgYmFycmllcnMpLiBBbGwg
Y2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2NraW5nIGFuZAotLy8gdHJp
Z2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNzYXJ5LgotY2xhc3MgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gewotcHVibGljOgotICAgIHZpcnR1YWwg
fklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQg
c2hvcnQgbW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBh
c3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2sgPSBudWxscHRyKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcyopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvckJhY2tlbmRJbXBsKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lz
dGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Vf
aApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25D
YWxsYmFja3NfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNhbGxiYWNrcygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IG9uQWJvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKSA9IDA7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yPiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpKTsKLX0KLQotSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpIAotewotfQot
Ci1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigp
Ci17Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkQ3JlYXRlVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNT
RVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgIG1fdHJhbnNh
Y3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdUcmFu
c2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICAgICAgbV9zdGFydGVkVHJhbnNh
Y3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgfSBlbHNlIGlmIChtX3J1bm5pbmdUcmFu
c2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKQotICAgICAgICBtX3J1bm5pbmdUcmFuc2Fj
dGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0
cmFuc2FjdGlvbik7Ci0KLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi0j
aWZuZGVmIE5ERUJVRwotLy8gVmVyaWZpZXMgaW50ZXJuYWwgY29uc2lzdGllbmN5IHdoaWxlIHJl
dHVybmluZyB3aGV0aGVyIGFueXRoaW5nIGlzIGZvdW5kLgotYm9vbCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICBp
ZiAobV9ydW5uaW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAg
ICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgIH0KLSAgICBBU1NF
UlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICBy
ZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
Ojpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cs
IHdlIG9ubHkgYWxsb3cgb25lIHRyYW5zYWN0aW9uIHRvIHJ1biBhdCBhIHRpbWUuCi0gICAgaWYg
KCFtX3J1bm5pbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAqbV9zdGFydGVk
VHJhbnNhY3Rpb25zLmJlZ2luKCk7Ci0gICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0
cmFuc2FjdGlvbik7Ci0gICAgbV9ydW5uaW5nVHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7
Ci0gICAgdHJhbnNhY3Rpb24tPnJ1bigpOwotfQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkNh
bGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci0KLS8vIFRyYW5zYWN0aW9u
cyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCi1jbGFzcyBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlvbnMgYXMgdGhleSBzdGFy
dCBhbmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBpc0FjdGl2
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICB2b2lkIHByb2Nlc3NTdGFydGVkVHJh
bnNhY3Rpb25zKCk7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYW4gZWZmaWNpZW50IHdheSB0byBr
ZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KLSAgICBIYXNoTWFwPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gPiBt
X3RyYW5zYWN0aW9uczsKLSAgICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlmZmVyZW50IHN0YXRlcyBh
cmUgZ3JvdXBlZCBiZWxvdy4KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCo+IG1fcnVubmluZ1RyYW5zYWN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYg
Ly8gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIklEQkFueS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZUV2ZW50
PiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCVmVyc2lvbkNoYW5nZUV2ZW50KHZlcnNpb24sIGV2ZW50VHlwZSkpOwotfQotCi1JREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotICAgIDogRXZlbnQoZXZlbnRUeXBl
LCBmYWxzZSAvKmNhbkJ1YmJsZSovLCBmYWxzZSAvKmNhbmNlbGFibGUqLykKLSAgICAsIG1fdmVy
c2lvbih2ZXJzaW9uKQotewotfQotCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6On5JREJWZXJzaW9u
Q2hhbmdlRXZlbnQoKQotewotfQotCi1TdHJpbmcgSURCVmVyc2lvbkNoYW5nZUV2ZW50Ojp2ZXJz
aW9uKCkKLXsKLSAgICByZXR1cm4gbV92ZXJzaW9uOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcm
IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdlRXZlbnQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVmVyc2lvbkNoYW5nZUV2
ZW50X2gKLSNkZWZpbmUgSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkFueTsKLQotY2xhc3MgSURC
VmVyc2lvbkNoYW5nZUV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZl
cnNpb24gPSBTdHJpbmcoKSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBBdG9taWNT
dHJpbmcoKSk7Ci0gICAgdmlydHVhbCB+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIElEQlZlcnNpb25DaGFu
Z2VFdmVudChjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlKTsKLQotICAgIFN0cmluZyBtX3ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElE
QlZlcnNpb25DaGFuZ2VFdmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZl
cnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFj
ZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKLSAgICBdIElEQlZlcnNp
b25DaGFuZ2VFdmVudCA6IEV2ZW50IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB2ZXJzaW9uOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgUmVmUHRyPElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKG5ldyBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdChjb250ZXh0LCBzb3VyY2UsIHZlcnNpb24pKSk7Ci0gICAgcmVxdWVzdC0+c3VzcGVuZElm
TmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotCi19Ci0KLUlEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0OjpJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pCi0gICAgOiBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgMCkKLSAgICAsIG1f
dmVyc2lvbih2ZXJzaW9uKQotewotfQotCi1JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6fklEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0KCkKLXsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDsKLX0KLQotdm9p
ZCBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6b25CbG9ja2VkKCkKLXsKLSAgICBBU1NFUlQoIW1f
ZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAg
ZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG1fdmVyc2lvbiwgZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0X2gKLSNkZWZpbmUgSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3RfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBwdWJsaWMgSURCUmVxdWVzdCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi0g
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihibG9ja2VkKTsKLQotcHJpdmF0ZToK
LSAgICBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLQotICAgIFN0
cmluZyBtX3ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlJlcXVlc3RfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAg
IEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3Qg
ewotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7Ci0gICAgfTsKLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129784</attachid>
            <date>2012-03-01 17:55:29 -0800</date>
            <delta_ts>2012-03-01 18:11:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80071-20120301175528.patch</filename>
            <type>text/plain</type>
            <size>1149449</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wMy0wMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgV2ViQ29yZS9zdG9yYWdl
L0lEQiogZmlsZXMgaW50byBXZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQg
YWxsIHRoZSBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgaWZkZWZzIGZyb20KKyAgICAgICAgV2Vi
Q29yZSBwcm9wZXIsIHdlIGNhbiBtb3ZlIEluZGV4ZWREQiBpbnRvIGl0cyBvd24gbW9kdWxlLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFr
ZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNh
bGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhW
YWx1ZS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFcnJvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RXZlbnREaXNwYXRjaGVyLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXkuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmguCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlJlcXVlc3QuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhY2luZy5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdl
RXZlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwuCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQkFueS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuaWRsOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUVycm9yLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJE
YXRhYmFzZUVycm9yLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJJbmRleC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGguY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5
UmFuZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVJhbmdlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQlRyYWNpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6IFJlbW92ZWQuCisK
IDIwMTItMDMtMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbmFtZSBMYXllckNocm9taXVtOjpuYW1lIHRvIGRlYnVnTmFtZSB0
byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBkZWJ1ZyBwcm9wZXJ0aWVzLCBtYWtlIHRo
cmVhZHNhZmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
NyBAQCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAKIFNFVChXZWJDb3JlX0lETF9J
TkNMVURFUwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24KKyAgICBNb2R1bGVzL2luZGV4ZWRkYgog
ICAgIE1vZHVsZXMvd2Vic29ja2V0cwogICAgIGJpbmRpbmdzL2dlbmVyaWMKICAgICBjc3MKQEAg
LTQxMyw2ICs0MTQsMjQgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24v
TmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCiAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnku
Y3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCisg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAorICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAorICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKyAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAKKwogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCkBAIC0xMzkyLDIzICsxNDExLDYg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAogICAg
IHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCiAgICAgc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCi0gICAgc3RvcmFnZS9JREJBbnkuY3BwCi0gICAgc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAK
LSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCi0gICAgc3RvcmFnZS9JREJD
dXJzb3IuY3BwCi0gICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKLSAgICBzdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAotICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRj
aGVyLmNwcAotICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwCi0gICAgc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcAotICAgIHN0b3JhZ2UvSURCS2V5LmNwcAotICAgIHN0b3JhZ2UvSURCS2V5
UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAotICAgIHN0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuY3BwCi0gICAgc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAot
ICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHAKLSAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAogICAg
IHN0b3JhZ2UvU3RvcmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAog
ICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcApAQCAtMTUzNiwxOCArMTUzOCwxOCBA
QCBFTkRJRiAoKQogCiBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAgTElTVChBUFBF
TkQgV2ViQ29yZV9JRExfRklMRVMKLSAgICAgICAgc3RvcmFnZS9JREJBbnkuaWRsCi0gICAgICAg
IHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3Iu
aWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCi0gICAgICAgIHN0
b3JhZ2UvSURCRGF0YWJhc2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGwKLSAg
ICAgICAgc3RvcmFnZS9JREJJbmRleC5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJLZXkuaWRsCi0g
ICAgICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKLSAgICAgICAgc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55Lmlk
bAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwK
KyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAorICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKICAgICApCiBFTkRJRiAoKQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
IFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9s
b2NhdGlvbiBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJp
YyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC02MSw2ICs2MiwxOCBAQCBCSU5E
SU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9u
Q2FsbGJhY2suaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRp
b25FcnJvci5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlv
bkVycm9yQ2FsbGJhY2suaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkFueS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlk
bCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgXAor
ICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwgXAor
ICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRs
IFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vic29ja2V0cy9D
bG9zZUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvRE9NV2lu
ZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmlkbCBcCkBAIC0zNTUsMTggKzM2OCw2IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAk
KFdlYkNvcmUpL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2Uv
RGF0YWJhc2VDYWxsYmFjay5pZGwgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZVN5
bmMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0gICAgJChXZWJD
b3JlKS9zdG9yYWdlL0lEQkN1cnNvci5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9JREJE
YXRhYmFzZS5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlk
bCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0
b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCS2V5LmlkbCBc
Ci0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbCBcCi0gICAgJChXZWJDb3Jl
KS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lE
QlJlcXVlc3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRs
IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXJyb3IuaWRsIFwKICAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFJl
c3VsdFNldC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC05Miw2ICs5MiwxOCBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL01vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwgXAogICAgICQkUFdEL01vZHVsZXMv
Z2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvZ2VvbG9j
YXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQW55LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwg
XAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAor
ICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBcCisgICAgJCRQ
V0QvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAorICAgICQkUFdEL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2Nr
ZXRzL0Nsb3NlRXZlbnQuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvRE9NV2lu
ZG93V2ViU29ja2V0LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5pZGwgXApAQCAtMzc4LDE4ICszOTAsNiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdE
L3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJh
Y2suaWRsIFwKICAgICAkJFBXRC9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAotICAgICQkUFdE
L3N0b3JhZ2UvSURCQW55LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJDdXJzb3IuaWRsIFwK
LSAgICAkJFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLSAgICAkJFBXRC9zdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJEYXRh
YmFzZS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAotICAgICQkUFdE
L3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQktleS5pZGwgXAot
ICAgICQkUFdEL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0g
ICAgJCRQV0Qvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2Uv
U3RvcmFnZS5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAg
JCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mby5pZGwgXApAQCAtNjkzLDYgKzY5Myw3IEBAIGdlbmVy
YXRlQmluZGluZ3MuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1nZW5lcmF0b3IgJCRnZW5lcmF0b3IgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0
aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxl
cy9pbmRleGVkZGIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBX
RC9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5j
bHVkZSAkJFBXRC9kb20gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAk
JFBXRC9maWxlYXBpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTcwLDYgKzk3MCw2MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9ucy5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRp
b24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UGF0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFj
a2VuZEltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQ29kaW5nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkNvZGluZy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2NhbE1l
ZGlhU3RyZWFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2Nh
bE1lZGlhU3RyZWFtLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0uY3BwIFwKQEAgLTM4NzksNjIgKzM5MzUsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggXAogCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJBbnkuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmggXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVudERpc3BhdGNo
ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCSW5kZXguaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UmFuZ2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuY3BwIFwKQEAgLTQ3ODgsMTYgKzQ3ODgsMTYgQEAgd2ViY29yZV9idWlsdF9zb3Vy
Y2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uaAogCiBk
b21fYmluZGluZ19pZGxzICs9IFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0J
JChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRGF0YWJhc2VF
eGNlcHRpb24uaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAotCSQo
V2ViQ29yZSkvc3RvcmFnZS9JREJJbmRleC5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJL
ZXlSYW5nZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwgXAot
CSQoV2ViQ29yZSkvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55
LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgXAor
CSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwgXAorCSQo
V2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKwkkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKIAogIyAtLS0tCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTI5ODYsMzEgKzI5ODYsMzEgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX0lOREVYRURfREFUQUJBUwogICAgIH0KIAogICAgIEhFQURFUlMgKz0gXAotICAg
ICAgICBzdG9yYWdlL0lEQkFueS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJDYWxsYmFja3MuaCBc
Ci0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0gICAgICAgIHN0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKLSAgICAgICAgc3RvcmFn
ZS9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwKLSAgICAgICAg
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5k
ZXguaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggXAotICAg
ICAgICBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
S2V5LmggXAotICAgICAgICBzdG9yYWdlL0lEQktleVJhbmdlLmggXAotICAgICAgICBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlLmggXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmggXAotICAgICAgICBzdG9yYWdlL0lEQlJlcXVlc3QuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmgKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAorICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCisgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCisgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAogCiAgICAgIXY4IHsK
ICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0zMDIwLDI0ICszMDIwLDI0IEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVMKICAgICB9CiAKICAgICBTT1VSQ0VTICs9IFwK
LSAgICAgICAgc3RvcmFnZS9JREJBbnkuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3Iu
Y3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAotICAgICAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5LmNwcCBcCi0gICAg
ICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IFwKLSAgICAgICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uY3BwCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAgXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIFwKKyAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVu
dERpc3BhdGNoZXIuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5j
cHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UmFuZ2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBcCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiAxMDk0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMjEgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dl
b2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xv
Y2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXJyb3IuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5p
ZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0RP
TVdpbmRvd0ludGVudHMuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50
LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNr
LmlkbCcsCkBAIC0xMDQ3LDIxICsxMDYyLDYgQEAKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFi
YXNlLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAgICAgICAgICAgICdzdG9y
YWdlL0lEQkFueS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmlkbCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlRXhjZXB0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCSW5kZXguaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5p
ZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJS
ZXF1ZXN0LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU1FMRXJyb3IuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlv
bi5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCcsCkBAIC0xMjk2
LDYgKzEyOTYsNzYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRv
ckdlb2xvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRv
d0luZGV4ZWREYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RP
TVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3Bw
JywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkNvZGluZy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhY2luZy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oJywK
ICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2Uu
Y3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0
YWJhc2UuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLApAQCAt
NDY1Miw3NiArNDcyMiw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5j
cHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkFueS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQW55LmgnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ2Fs
bGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmNwcCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJDdXJzb3IuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJz
b3JCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCcsCi0gICAg
ICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaCcsCi0gICAgICAgICAgICAnc3Rv
cmFnZS9JREJEYXRhYmFzZS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKLSAgICAgICAgICAgICdzdG9y
YWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRXZl
bnREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5oJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguY3BwJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL0lEQkluZGV4LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5k
SW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
JywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCS2V5LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleVBhdGhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJhbmdlLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCTGV2ZWxEQkNvZGluZy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxE
QkNvZGluZy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAnLAotICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJUcmFjaW5nLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAotICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmgn
LAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3Jh
Z2VUYXNrLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAnLApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCShyZXZpc2lv
biAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklEQkFueS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklE
Qk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkFueTo6Y3JlYXRlSW52
YWxpZCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZU51bGwoKQoreworICAgIFJlZlB0cjxJREJBbnk+
IGlkYkFueSA9IGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7CisgICAgaWRiQW55LT5zZXROdWxsKCk7
CisgICAgcmV0dXJuIGlkYkFueS5yZWxlYXNlKCk7Cit9CisKK0lEQkFueTo6SURCQW55KCkKKyAg
ICA6IG1fdHlwZShVbmRlZmluZWRUeXBlKQoreworfQorCitJREJBbnk6On5JREJBbnkoKQorewor
fQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5nTGlzdCgpCit7
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJpbmdMaXN0VHlwZSk7CisgICAgcmV0dXJuIG1f
ZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQkFueTo6aWRiQ3Vy
c29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNvclR5cGUpOworICAgIHJldHVy
biBtX2lkYkN1cnNvcjsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkFu
eTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNv
cldpdGhWYWx1ZVR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKK30KKwor
UGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCit7CisgICAgQVNT
RVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJldHVybiBtX2lkYkRhdGFiYXNl
OworfQorCitQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9yeSgpCit7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBJREJGYWN0b3J5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiRmFj
dG9yeTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRleCgpCit7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBJREJJbmRleFR5cGUpOworICAgIHJldHVybiBtX2lkYkluZGV4
OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQW55OjppZGJLZXkoKQoreworICAgIEFTU0VS
VChtX3R5cGUgPT0gSURCS2V5VHlwZSk7CisgICAgcmV0dXJuIG1faWRiS2V5OworfQorCitQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVjdFN0b3JlKCkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7CisgICAgcmV0dXJuIG1faWRiT2Jq
ZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJh
bnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCVHJhbnNhY3Rpb25UeXBlKTsK
KyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IElEQkFueTo6c2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKK3sKKyAgICBBU1NF
UlQobV90eXBlID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOworICAgIHJldHVybiBtX3Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK30KKwordm9pZCBJREJBbnk6OnNldE51bGwoKQoreworICAg
IEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gTnVsbFR5cGU7
Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IERP
TVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9IHZhbHVlOworfQorCit2b2lk
IElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQkN1cnNv
cldpdGhWYWx1ZVR5cGU7CisgICAgbV9pZGJDdXJzb3JXaXRoVmFsdWUgPSB2YWx1ZTsKK30KKwor
dm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcj4gdmFsdWUpCit7CisgICAgQVNT
RVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJDdXJzb3JUeXBl
OworICAgIG1faWRiQ3Vyc29yID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmlu
ZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJEYXRhYmFzZVR5cGU7CisgICAgbV9pZGJEYXRhYmFz
ZSA9IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4g
dmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5
cGUgPSBJREJGYWN0b3J5VHlwZTsKKyAgICBtX2lkYkZhY3RvcnkgPSB2YWx1ZTsKK30KKwordm9p
ZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkluZGV4PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQkluZGV4VHlwZTsKKyAg
ICBtX2lkYkluZGV4ID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJ
REJLZXk+IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Cisg
ICAgbV90eXBlID0gSURCS2V5VHlwZTsKKyAgICBtX2lkYktleSA9IHZhbHVlOworfQorCit2b2lk
IElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHZhbHVlKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gSURCVHJhbnNhY3Rp
b25UeXBlOworICAgIG1faWRiVHJhbnNhY3Rpb24gPSB2YWx1ZTsKK30KKwordm9pZCBJREJBbnk6
OnNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90
eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElEQk9iamVjdFN0b3JlVHlwZTsK
KyAgICBtX2lkYk9iamVjdFN0b3JlID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
VHlwZTsKKyAgICBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHZhbHVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQW55LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJBbnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSURCQW55X2gKKyNkZWZpbmUgSURCQW55X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vyc29yOworY2xhc3MgSURCQ3Vy
c29yV2l0aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0b3J5OworY2xh
c3MgSURCSW5kZXg7CitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJPYmplY3RTdG9yZTsKK2NsYXNz
IElEQlRyYW5zYWN0aW9uOworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCitjbGFzcyBJ
REJBbnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlkYk9iamVjdCkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAg
ICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVhc2UoKTsKKyAg
ICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJB
bnk+IGNyZWF0ZShQYXNzUmVmUHRyPFQ+IGlkYk9iamVjdCkKKyAgICB7CisgICAgICAgIFJlZlB0
cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAgICBhbnktPnNl
dChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVhc2UoKTsKKyAgICB9CisgICAg
fklEQkFueSgpOworCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5kZWZpbmVkVHlwZSA9IDAs
CisgICAgICAgIE51bGxUeXBlLAorICAgICAgICBET01TdHJpbmdMaXN0VHlwZSwKKyAgICAgICAg
SURCQ3Vyc29yVHlwZSwKKyAgICAgICAgSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSwKKyAgICAgICAg
SURCRGF0YWJhc2VUeXBlLAorICAgICAgICBJREJGYWN0b3J5VHlwZSwKKyAgICAgICAgSURCSW5k
ZXhUeXBlLAorICAgICAgICBJREJLZXlUeXBlLAorICAgICAgICBJREJPYmplY3RTdG9yZVR5cGUs
CisgICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlVHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHlv
dSdyZSBhbGxvd2VkIHRvIGNhbGwuCisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21T
dHJpbmdMaXN0KCk7CisgICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpOworICAg
IFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKTsKKyAg
ICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpOworICAgIFBhc3NSZWZQdHI8
SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOworICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGlkYklu
ZGV4KCk7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgpOworICAgIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisKKyAgICAvLyBTZXQgY2FuIG9ubHkg
YmUgY2FsbGVkIG9uY2UuCisgICAgdm9pZCBzZXROdWxsKCk7CisgICAgdm9pZCBzZXQoUGFzc1Jl
ZlB0cjxET01TdHJpbmdMaXN0Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJDdXJzb3I+
KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4pOworICAgIHZv
aWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRy
PElEQkZhY3Rvcnk+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkluZGV4Pik7CisgICAg
dm9pZCBzZXQoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4p
OworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisKK3By
aXZhdGU6CisgICAgSURCQW55KCk7CisKKyAgICBUeXBlIG1fdHlwZTsKKworICAgIC8vIE9ubHkg
b25lIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFueSBnaXZlbiB0
aW1lLgorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7CisgICAgUmVm
UHRyPElEQkN1cnNvcj4gbV9pZGJDdXJzb3I7CisgICAgUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1
ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2lkYkRh
dGFiYXNlOworICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7CisgICAgUmVmUHRy
PElEQkluZGV4PiBtX2lkYkluZGV4OworICAgIFJlZlB0cjxJREJLZXk+IG1faWRiS2V5OworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8v
IElEQkFueV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJB
bnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9y
YWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCisgICAgICAgIEN1c3RvbVRvSlNPYmplY3QKKyAgICBdIElEQkFueSB7CisgICAgICAg
IC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgorICAgIH07Cit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBJREJCYWNraW5nU3RvcmVf
aAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3Iu
aCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIlNR
TGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xhc3Mg
SURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgSURCQmFja2luZ1N0
b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBm
b3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0lu
Y3JlbWVudEZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisKKyAgICBjbGFzcyBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7
fQorICAgIH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7CisKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhp
c3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sg
eworICAgIHB1YmxpYzoKKyAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7CisgICAg
ICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307CisgICAgfTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJv
b2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdz
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4
SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
PSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJ
bkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFBy
aW1hcnlLZXkpID0gMDsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1
cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
Y2xvbmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0
IElEQktleSogPSAwKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlk
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgfkN1cnNvcigpIHsgfTsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworCisgICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcm9sbGJhY2soKSA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNh
Y3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNhbGxiYWNrc19o
CisjZGVmaW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisj
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNp
bmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNzZXMgbmVlZCB0byBiZSBtYWRlIHRocmVhZHNhZmUu
CitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2Fs
bGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNoKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8SURCS2V5PiA+JiBrZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYgcHJpbWFy
eUtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1
ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxiYWNrc19oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3Iu
Y3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJL
ZXkuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgor
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJDdXJzb3I6OmNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJlcXVlc3QqIHJl
cXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3IoYmFja2VuZCwgcmVxdWVzdCwgc291cmNl
LCB0cmFuc2FjdGlvbikpOworfQorCitJREJDdXJzb3I6OklEQkN1cnNvcihQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJlcXVlc3QqIHJlcXVlc3QsIElE
QkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBtX2JhY2tl
bmQoYmFja2VuZCkKKyAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9zb3VyY2Uoc291
cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fdHJhbnNhY3Rp
b25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKK3sKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsK
KyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJ
REJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6
SURCSW5kZXhUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Cit9CisKK0lEQkN1cnNv
cjo6fklEQkN1cnNvcigpCit7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQkN1cnNvcjo6ZGlyZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6ZGlyZWN0aW9uIik7Cisg
ICAgcmV0dXJuIG1fYmFja2VuZC0+ZGlyZWN0aW9uKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5
PiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3I6Omtl
eSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmtleSgpOworfQorCitQYXNzUmVmUHRyPElEQktl
eT4gSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1
cnNvcjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPnByaW1hcnlLZXkoKTsK
K30KKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAoreworICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yOjp2YWx1ZSIpOworICAgIHJldHVybiBJREJBbnk6OmNyZWF0
ZShtX2JhY2tlbmQtPnZhbHVlKCkpOworfQorCitJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7CisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+dXBk
YXRlKHZhbHVlLCByZXF1ZXN0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3Qt
Pm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4g
cmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9U
UkFDRSgiSURCQ3Vyc29yOjpjb250aW51ZSIpOworICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgp
ID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jl
cXVlc3QpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBXZSdy
ZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBjYWxsZWQsIHdo
aWNoIG1lYW5zIHRoZSBjYWxsYmFjaworICAgIC8vICAgICAgICB3aWxsIGJlIG9uIHRoZSBvcmln
aW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyByaWdodD8KKyAg
ICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5nZXQoKSkpIHsK
KyAgICAgICAgbV9yZXF1ZXN0LT5zZXRDdXJzb3IodGhpcyk7CisgICAgICAgIG1fYmFja2VuZC0+
Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOworICAgIH0gZWxzZQorICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQkN1cnNvcjo6ZGVsZXRlIik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVxdWVzdCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQor
Cit2b2lkIElEQkN1cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKQoreworICAgIG1f
YmFja2VuZC0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKK30KKwordm9pZCBJREJDdXJz
b3I6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBtX3JlcXVlc3QtPmZp
bmlzaEN1cnNvcigpOworICAgIG1fcmVxdWVzdC5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmg6MTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQ3Vyc29yX2gKKyNkZWZp
bmUgSURCQ3Vyc29yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkFueTsKK2NsYXNz
IElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJ
REJSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgSURC
Q3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7CitwdWJsaWM6CisgICAgZW51
bSBEaXJlY3Rpb24geworICAgICAgICBORVhUID0gMCwKKyAgICAgICAgTkVYVF9OT19EVVBMSUNB
VEUgPSAxLAorICAgICAgICBQUkVWID0gMiwKKyAgICAgICAgUFJFVl9OT19EVVBMSUNBVEUgPSAz
LAorICAgIH07CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291
cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfklEQkN1cnNvcigpOworCisgICAg
Ly8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5u
ZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGNv
bnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9CisKKyAgICAvLyBJbXBsZW1lbnQgdGhlIElETAorICAg
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpIGNvbnN0OworICAgIElEQkFueSogc291
cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKK3By
b3RlY3RlZDoKKyAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworCitw
cml2YXRlOgorICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKKyAgICBSZWZQdHI8SURCQW55PiBt
X3NvdXJjZTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAg
SURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllciBtX3RyYW5zYWN0aW9uTm90aWZpZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURC
Q3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvci5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBdIElEQkN1cnNvciB7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IE5FWFQgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBORVhUX05P
X0RVUExJQ0FURSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBSRVYgPSAyOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RVUExJQ0FURSA9IDM7CisKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbjsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBJREJLZXkgcHJpbWFyeUtleTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFu
eSBzb3VyY2U7CisKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbSW1wbGVtZW50ZWRB
cz1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0gSURCS2V5IGtl
eSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5j
dGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9u
IDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNs
dWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZSogb2JqZWN0U3RvcmUpCisgICAgOiBtX2N1cnNvcihjdXJzb3IpCisgICAgLCBtX2RpcmVjdGlv
bihkaXJlY3Rpb24pCisgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAgICAsIG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQor
ICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVu
Q3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1cnNvckJhY2tl
bmRJbXBsKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlz
KTsKKyAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQsIHRoZSBjdXJzb3JzIGhhdmUgdG8gYmUgZGVz
dHJ1Y3RlZCBiZWZvcmUgdGhlIG9iamVjdFN0b3JlLgorICAgIG1fY3Vyc29yLmNsZWFyKCk7Cisg
ICAgbV9zYXZlZEN1cnNvci5jbGVhcigpOworCisgICAgbV9vYmplY3RTdG9yZS5jbGVhcigpOwor
fQorCit1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGlyZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpkaXJlY3Rpb24iKTsK
KyAgICByZXR1cm4gbV9kaXJlY3Rpb247Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6a2V5KCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjprZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPmtleSgpOworfQorCitQYXNz
UmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlLZXkoKSBjb25zdAor
eworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByaW1hcnlLZXkiKTsKKyAg
ICByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNvbnN0Cit7Cisg
ICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUiKTsKKyAgICBpZiAobV9j
dXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKQorICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUiKTsKKyAgICBp
ZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIG1fY3Vyc29yLT5w
cmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRl
LCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKK30KKwordm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZSIpOwor
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKworICAgIGlmIChtX2N1cnNvciAmJiBr
ZXkpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAgIGlmIChtX2Rp
cmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgbV9kaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpO
RVhUX05PX0RVUExJQ0FURSkgeworICAgICAgICAgICAgaWYgKCFtX2N1cnNvci0+a2V5KCktPmlz
TGVzc1RoYW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgha2V5LT5pc0xlc3NUaGFuKG1f
Y3Vyc29yLT5rZXkoKS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1
bmN0aW9uSW50ZXJuYWwsIHRoaXMsIGtleSwgcHJwQ2FsbGJhY2tzKSkpCisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKK30KKworLy8g
SU1QT1JUQU5UOiBJZiB0aGlzIGV2ZXIgMSkgZmlyZXMgYW4gJ2Vycm9yJyBldmVudCBhbmQgMikg
aXQncyBwb3NzaWJsZSB0byBmaXJlIGFub3RoZXIgZXZlbnQgYWZ0ZXJ3YXJkcywKKy8vICAgICAg
ICAgICAgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgd2lsbCBuZWVkIHRvIGJlIG1v
ZGlmaWVkIHRvIGhhbmRsZSB0aGlzISEhCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250
aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUludGVybmFsIik7CisgICAgUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisgICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8ICFjdXJzb3It
Pm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKKyAgICAgICAgY3Vyc29y
LT5tX2N1cnNvciA9IDA7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7Cit9CisKK3ZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JU
eXBlID09IEluZGV4S2V5Q3Vyc29yKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb2Jq
ZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIHBycENhbGxi
YWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tl
bmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlIik7CisgICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJz
b3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsLCB0aGlzLCBudW1iZXJUb0Zl
dGNoLCBwcnBDYWxsYmFja3MpKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsIik7CisgICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7CisKKyAgICBWZWN0
b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+
ID4gZm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiBmb3VuZFZhbHVlczsKKworICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yKQorICAgICAg
ICBjdXJzb3ItPm1fc2F2ZWRDdXJzb3IgPSBjdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOworCisg
ICAgY29uc3Qgc2l6ZV90IGtNYXhTaXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAxMDI0OworICAg
IHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1i
ZXJUb0ZldGNoOyArK2kpIHsKKyAgICAgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8ICFjdXJz
b3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7CisgICAgICAgICAgICBjdXJzb3It
Pm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Zm91bmRLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAgIGZvdW5k
UHJpbWFyeUtleXMuYXBwZW5kKGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKSk7CisKKyAg
ICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUo
KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7CisKKyAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1
cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7Cisg
ICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpJbmRleEtleUN1cnNvcikKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3It
Pm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAgICAgICBp
ZiAoc2l6ZUVzdGltYXRlID4ga01heFNpemVFc3RpbWF0ZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGN1cnNvci0+bV90cmFuc2FjdGlvbi0+YWRkUGVuZGluZ0V2
ZW50cyhmb3VuZEtleXMuc2l6ZSgpIC0gMSk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRo
UHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7Cit9CisK
K3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRj
aGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7CisgICAgbV90cmFuc2FjdGlvbi0+YWRkUGVuZGlu
Z0V2ZW50cygtdW51c2VkUHJlZmV0Y2hlcyk7CisgICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vyc29y
OworICAgIG1fc2F2ZWRDdXJzb3IgPSAwOworCisgICAgaWYgKG1fY2xvc2VkKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dXNlZFByZWZldGNoZXM7ICsraSkgeworICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29yLT5j
b250aW51ZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNsb3NlKCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIpOworICAgIG1f
Y2xvc2VkID0gdHJ1ZTsKKyAgICBpZiAobV9jdXJzb3IpCisgICAgICAgIG1fY3Vyc29yLT5jbG9z
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6MTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIElEQkN1
cnNvckJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEltcGxfaAorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIK
KyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwor
Y2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U7
CitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIElEQkN1cnNvckJh
Y2tlbmRJbXBsIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKiBv
YmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
QmFja2VuZEltcGwoY3Vyc29yLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNrZW5kSW1wbCgp
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHByZWZldGNo
Q29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJl
ZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CisKK3ByaXZhdGU6CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBDdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UqKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rpb25JbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBz
dGF0aWMgdm9pZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBpbnQgbnVtYmVyVG9GZXRjaCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBt
X3NhdmVkQ3Vyc29yOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAg
IEN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gbV9vYmplY3RTdG9yZTsKKyAgICAKKyAgICBib29sIG1fY2xvc2VkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZV9oCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55OworY2xhc3MgSURCQ2FsbGJh
Y2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCUmVxdWVzdDsKK2NsYXNzIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZSgpIHt9CisKKyAgICBlbnVtIEN1cnNvclR5cGUgeworICAgICAgICBJbnZh
bGlkQ3Vyc29yVHlwZSA9IDAsCisgICAgICAgIEluZGV4Q3Vyc29yLAorICAgICAgICBJbmRleEtl
eUN1cnNvciwKKyAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKKyAgICB9OworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1Jl
ZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVx
dWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvcldpdGhWYWx1ZShiYWNrZW5kLCByZXF1ZXN0
LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZh
bHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+
IHBycEN1cnNvcikKK3sKKyAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjdXJzb3JXaXRo
VmFsdWUoc3RhdGljX2Nhc3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29yLmdldCgpKSk7
CisgICAgcmV0dXJuIGN1cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7Cit9CisKK0lEQkN1cnNvcldp
dGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IElEQkN1cnNvcihiYWNrZW5kLCByZXF1
ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQoreworfQorCitJREJDdXJzb3JXaXRoVmFsdWU6On5J
REJDdXJzb3JXaXRoVmFsdWUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCShyZXZpc2lv
biAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
V2l0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKyNkZWZpbmUgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGlj
IElEQkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0
aFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURC
UmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gZnJvbUN1cnNvcihQYXNzUmVmUHRyPElEQkN1
cnNvcj4pOworICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1ZSgpOworCisgICAgLy8gVGhl
IHZhbHVlIGF0dHJpYnV0ZSBkZWZpbmVkIGluIHRoZSBJREwgaXMgc2ltcGx5IGltcGxlbWVudGVk
IGluIElEQkN1cnNvciAoYnV0IG5vdCBleHBvc2VkIHZpYQorICAgIC8vIGl0cyBJREwpLiBUaGlz
IGlzIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG1vcmUgc2ltcGxlIHdoaWxlIG1hdGNoaW5n
IHdoYXQgdGhlIHNwZWMgc2F5cy4KKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JXaXRoVmFsdWUo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFu
eSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkN1cnNvcldpdGhWYWx1ZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhW
YWx1ZS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JXaXRoVmFsdWUuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQkN1cnNvcldpdGhWYWx1
ZSA6IElEQkN1cnNvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7
CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2ZW50UXVldWUu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgor
I2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNs
dWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxsaW1p
dHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURC
RGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJhc2UpCit7CisgICAgUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcgSURCRGF0YWJhc2UoY29udGV4
dCwgZGF0YWJhc2UpKSk7CisgICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOworICAg
IHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Cit9CisKK0lEQkRhdGFiYXNlOjpJREJEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisgICAgLCBtX2Nsb3NlUGVuZGlu
ZyhmYWxzZSkKKyAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2UpCit7CisgICAgLy8gV2UgcGFz
cyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisg
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMpOworfQorCitJREJEYXRhYmFz
ZTo6fklEQkRhdGFiYXNlKCkKK3sKKyAgICBjbG9zZSgpOworICAgIG1fZGF0YWJhc2VDYWxsYmFj
a3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6c2V0
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKyAgICBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpj
bGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
Cit7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0g
MDsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9u
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFN0cmluZyBrZXlQYXRoOworICAg
IGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KCJrZXlQYXRoIiwga2V5UGF0aCk7CisgICAgaWYgKGtleVBhdGhFeGlzdHMgJiYgIUlEQklzVmFs
aWRLZXlQYXRoKGtleVBhdGgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29s
IGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdldCgiYXV0b0luY3JlbWVudCIs
IGF1dG9JbmNyZW1lbnQpOworICAgIC8vIEZJWE1FOiBMb29rIHVwIGV2aWN0YWJsZSBhbmQgcGFz
cyB0aGF0IG9uIGFzIHdlbGwuCisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3Jl
KG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgeworICAgICAg
ICBBU1NFUlQoZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RT
dG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7
CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlQ3JlYXRlZChuYW1l
LCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKK30KKwor
dm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3Rv
cmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkRhdGFiYXNlOjpzZXRW
ZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHZlcnNpb24uaXNOdWxsKCkpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOworICAgIG1fYmFja2VuZC0+c2V0VmVyc2lv
bih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBlYyk7CisgICAgcmV0dXJu
IHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKKyAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1lKTsKKyAgICByZXR1cm4gdHJh
bnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMpOworfQorCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBwcnBTdG9yZU5hbWVz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFtZXM7CisgICAgaWYgKCFzdG9y
ZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKG1vZGUgIT0g
SURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJREJUcmFuc2FjdGlvbjo6UkVB
RF9PTkxZKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lF
TlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fY2xvc2VQZW5kaW5n
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBu
ZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJv
bm91c2x5LiBPcGVyYXRpb25zCisgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFu
c2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBh
cyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCisgICAg
Ly8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25kcyB0byBleGFj
dGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5kLT50cmFuc2Fj
dGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7CisgICAgaWYgKCF0cmFuc2FjdGlvbkJh
Y2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVjKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhpcyk7CisgICAgdHJhbnNhY3Rp
b25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKK3sK
KyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xvc2VQ
ZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3Mp
OworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOworICAgIC8vIFJlbW92ZSBhbnkgcGVu
ZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCisgICAg
Ly8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNr
ZW5kIHdoZW4gYW5vdGhlcgorICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1
dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZworICAgIC8vIGNsb3NlZCBiZWZvcmUg
dGhleSBjb3VsZCBmaXJlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLT5j
YW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6Om9u
VmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgaWYgKG1fY29udGV4
dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKHZlcnNpb24s
IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30KKwordm9pZCBJREJEYXRhYmFz
ZTo6b3BlbigpCit7CisgICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0YWJhc2VDYWxsYmFja3MpOwor
fQorCit2b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0
aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIG1f
ZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKworYm9vbCBJREJEYXRhYmFzZTo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBJREJfVFJBQ0UoIklE
QkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2VucXVl
dWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQorICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7CisgICAgfQorICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0
Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQorewor
ICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOworICAgIC8vIFN0b3AgZmlyZXMgYXQgYSBkZXRl
cm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4KKyAgICBjbG9z
ZSgpOworCisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Cit9CisKK2NvbnN0IEF0b21pY1N0
cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Cit9CisKK1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9
CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50VGFyZ2V0RGF0YSgpCit7Cisg
ICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBJREJE
YXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VfaAorI2RlZmluZSBJREJEYXRhYmFzZV9o
CisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgSURCRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4sIHB1YmxpYyBF
dmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB+SURCRGF0YWJh
c2UoKTsKKworICAgIHZvaWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uKik7CisgICAgdm9pZCBjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbiopOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOyB9CisgICAgU3RyaW5nIHZlcnNpb24oKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmQtPnZlcnNpb24oKTsgfQorICAgIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+
b2JqZWN0U3RvcmVOYW1lcygpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUg
Y29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBPcHRpb25zT2JqZWN0
KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiwgdW5zaWduZWQgc2hv
cnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGNs
b3NlKCk7CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKKyAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKHZlcnNpb25jaGFuZ2UpOworCisgICAgLy8gSURCRGF0YWJh
c2VDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdGVkVmVyc2lvbik7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
OworCisgICAgdm9pZCBvcGVuKCk7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2
ZW50LCBlYyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pik7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVmOworICAgIHVz
aW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U+KTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50
VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRh
cmdldERhdGEoKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1f
YmFja2VuZDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uOworCisgICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKKyAgICBib29sIG1fY29udGV4dFN0
b3BwZWQ7CisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisKKyAgICAv
LyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRvIGJlIGZp
cmVkIG9uIHRoaXMKKyAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlbSBp
ZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgorICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9lbnF1
ZXVlZEV2ZW50czsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IG1fZGF0
YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
CisjZW5kaWYgLy8gSURCRGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVE
T01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJEYXRhYmFzZSB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOworCisgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uYWJvcnQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJy
b3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udmVyc2lvbmNoYW5nZTsKKwor
ICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFt
ZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCisgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJpbmcgdmVyc2lvbikKKyAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oaW4gRE9N
U3RyaW5nTGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1
bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2Vw
dGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9yZU5hbWVzLCBpbiBbT3B0aW9u
YWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmcg
c3RvcmVOYW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9y
dCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAg
ICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAg
ICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsK
KyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkK
KyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkRP
TVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuQ2Fs
bD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9Cisg
ICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJh
Y2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
IHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQZW5kaW5nRGVs
ZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVu
ZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAg
ICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRp
bmdTZXRWZXJzaW9uQ2FsbCh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7
CisgICAgfQorICAgIFN0cmluZyB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9CisgICAg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tz
OyB9CisgICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFj
a3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVu
ZGluZ1NldFZlcnNpb25DYWxsKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwg
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0
YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBTdHJpbmcgbV92ZXJzaW9uOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNr
aW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRp
bmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlx
dWVJZGVudGlmaWVyKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwg
bV9pZChJbnZhbGlkSWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fdmVyc2lvbigiIikK
KyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQorICAgICwgbV9mYWN0b3J5KGZh
Y3RvcnkpCisgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0b3IpCit7Cisg
ICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOworICAgIG9wZW5JbnRlcm5hbCgpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCit7CisgICAgYm9vbCBz
dWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBt
X3ZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJ
ZCkpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKSkKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZy4KK30K
KworSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQorewor
ICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKG1faWRlbnRpZmllcik7Cit9
CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpi
YWNraW5nU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZTsKK30KKwor
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3Rv
cmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoT2JqZWN0U3RvcmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9v
YmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCisgICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVu
ZChpdC0+Zmlyc3QpOworICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKKyAgICByZXR1cm4g
b2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRy
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOworCisgICAgaWYgKG1fb2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09
IG5hbWUpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0g
dGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVj
dFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0YWJhc2UsIG9i
amVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FM
TE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3Jl
cy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNl
KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7CisKKyAgICBpZiAo
IWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlk
KCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0
b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb2JqZWN0U3RvcmUt
PnNldElkKG9iamVjdFN0b3JlSWQpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tF
dmVudHMoKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIGlmICghb2JqZWN0U3RvcmUp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UgPSB0aGlzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2Fj
dGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNr
VGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcCwgZGF0YWJh
c2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fb2JqZWN0U3Rv
cmVzLnJlbW92ZShuYW1lKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxl
dGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0
b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkp
OworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0
YWJhc2VDYWxsYmFja3M7CisgICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5z
KGRhdGFiYXNlQ2FsbGJhY2tzKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBQk9SVF9FUlIsICJDb25u
ZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2ZXJzaW9uIHRyYW5zYWN0aW9uIHdhcyBjcmVh
dGVkIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoRGF0YWJhc2VDYWxsYmFj
a3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigp
OyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlm
ICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9u
Q2hhbmdlKHZlcnNpb24pOworICAgIH0KKyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tl
ZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAvLyBWZXJzaW9u
Q2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYg
KG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uQmxvY2tlZCgpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5k
aW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9u
LCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9wZW5kaW5nU2V0VmVy
c2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAg
ICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxs
ID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRh
YmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQo
cGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhp
czsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdl
dCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24sIGNhbGxiYWNr
cywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbiwgZGF0
YWJhc2UsIG1fdmVyc2lvbikpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9BTExPV0VEX0VSUjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2NF90IGRhdGFi
YXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKKyAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lv
bjsKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAgICAgICAvLyBG
SVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFu
IGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAg
ICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFO
R0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
OworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlv
bjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25G
aW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJh
bnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIC8vIFBlbmRpbmcg
Y2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGlu
Z1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CisgICAgbV9wZW5kaW5n
U2V0VmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ1NldFZlcnNpb25DYWxscyk7CisgICAgd2hpbGUg
KCFwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGlu
Z1NldFZlcnNpb25DYWxsID0gcGVuZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAg
ICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPnZlcnNpb24oKSwgcGVuZGlu
Z1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5kYXRh
YmFzZUNhbGxiYWNrcygpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0KKworICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZl
cnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFBlbmRpbmcg
Y2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2Fs
bD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc3dhcChw
ZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVD
YWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBkZWxldGVEYXRh
YmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KKworICAgIGlmICht
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVu
ZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb24ocGVuZGlu
Z09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rp
b24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsKKyAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFsbG93ZWQg
ZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KKyAgICByZXR1cm4gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKK3sKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8
fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNp
b25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVu
ZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChtX2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgpOworICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
IHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxi
YWNrcykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVy
c2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAgIC8vIHRoZSBw
cm9jZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxMTI5CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJh
c2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFu
Z2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBv
cGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJl
IHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoIW1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVu
ZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgICAgICBjYWxsYmFj
a3MtPm9uQmxvY2tlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFtZSkpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV92ZXJzaW9uID0gIiI7CisgICAgbV9pZCA9IEludmFsaWRJZDsKKyAgICBtX29iamVjdFN0
b3Jlcy5jbGVhcigpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVsbFZhbHVlKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNs
b3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
KyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsK
KyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxsYmFja3MpOworICAgIGlmICht
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCisgICAgICAgIHJldHVybjsKKworICAg
IHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8aW50NjRfdD4gaWRzOworICAgIFZl
Y3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhzOworICAgIFZl
Y3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgbV9iYWNraW5nU3RvcmUtPmdldE9i
amVjdFN0b3JlcyhtX2lkLCBpZHMsIG5hbWVzLCBrZXlQYXRocywgYXV0b0luY3JlbWVudEZsYWdz
KTsKKworICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJU
KGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoYXV0b0luY3JlbWVu
dEZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZXNbaV0s
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwg
bV9pZCwgaWRzW2ldLCBuYW1lc1tpXSwga2V5UGF0aHNbaV0sIGF1dG9JbmNyZW1lbnRGbGFnc1tp
XSkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3Jl
RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9y
ZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlUHRyID0gb2JqZWN0U3RvcmU7CisgICAg
QVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVQdHIt
Pm5hbWUoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVQ
dHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQor
eworICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOworfQorCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZElt
cGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKKworI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsKK2NsYXNzIElEQkRhdGFiYXNlOworY2xhc3MgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKK2Ns
YXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBj
b25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgZGF0YWJhc2UsIGNvb3JkaW5h
dG9yLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7CisgICAgfQorICAgIHZpcnR1YWwgfklE
QkRhdGFiYXNlQmFja2VuZEltcGwoKTsKKworICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFs
aWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAg
IC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBs
aWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCisgICAgdm9pZCBvcGVuKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOworCisgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBt
X3ZlcnNpb247IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0
U3RvcmVOYW1lcygpIGNvbnN0OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lv
bihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihE
T01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+KTsKKworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5zYWN0aW9uU3Rh
cnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHZv
aWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4pOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJ
ZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkludGVybmFsKCk7CisgICAgdm9pZCBsb2FkT2Jq
ZWN0U3RvcmVzKCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisKKyAgICBzdGF0
aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKworICAgIC8vIFRo
ZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCisgICAg
c3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRPYmplY3RTdG9yZVRv
TWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBzdGF0
aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisKKyAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBpbnQ2NCBtX2lkOwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmVyc2lvbjsKKworICAgIFN0cmluZyBt
X2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBz
aW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1
dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8
SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1h
cDsKKyAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKKworICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxsOworICAgIERl
cXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0VmVyc2lvbkNh
bGxzOworCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5k
aW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCisgICAgY2xhc3MgUGVuZGluZ0Rl
bGV0ZUNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzOworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CisgICAgRGF0YWJhc2VDYWxsYmFj
a3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg6MTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJp
bmdMaXN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBJREJDYWxsYmFja3M7CitjbGFzcyBJREJEYXRh
YmFzZUNhbGxiYWNrczsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTsKK2Ns
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKKworLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCRGF0YWJhc2UgKGFzeW5j
KSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KKy8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRv
IHByb3h5CisvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0
aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCisvLyB0cmlnZ2VyIHdvcmsg
b24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCitjbGFzcyBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBj
cmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xp
c3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwor
I2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tz
LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUNhbGxiYWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFja3NfaAorI2RlZmluZSBJREJEYXRh
YmFzZUNhbGxiYWNrc19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25D
aGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VDYWxsYmFja3NfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDoxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRhdGFiYXNlKiBkYXRhYmFzZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbChkYXRh
YmFzZSkpOworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbChJREJEYXRhYmFzZSogZGF0YWJhc2UpCisgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5JREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6b25WZXJzaW9u
Q2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBpZiAobV9kYXRhYmFzZSkKKyAg
ICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworfQorCit2b2lkIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFiYXNlKElEQkRhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9kYXRhYmFzZSk7CisgICAgbV9k
YXRhYmFzZSA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbF9oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCisKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlOworCitj
bGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VDYWxsYmFj
a3MgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbD4gY3JlYXRlKElEQkRhdGFiYXNlKik7CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0
cmluZyYgdmVyc2lvbik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRGF0YWJhc2UoSURCRGF0YWJhc2Uq
KTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoSURCRGF0YWJhc2Uq
KTsKKworICAgIC8vIG1fZGF0YWJhc2UgaGFzIGEgUmVmUHRyIHRvIHRoaXMsIHNvIHVzZSBhIHdl
YWsgcG9pbnRlciB0byBhdm9pZCBhIGN5Y2xlLgorICAgIElEQkRhdGFiYXNlKiBtX2RhdGFiYXNl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJEYXRhYmFzZUVy
cm9yX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VFcnJvcl9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0
YWJhc2VFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlRXJyb3I+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVhdGUodW5zaWdu
ZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGNvZGUgPj0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0KTsKKyAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0
YWJhc2VFeGNlcHRpb25NYXgpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFi
YXNlRXJyb3IoY29kZSAtIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4Y2VwdGlv
bk9mZnNldCwgbWVzc2FnZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGNyZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWduZWQgc2hvcnQgY29kZSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkpOworICAgIH0K
KworICAgIH5JREJEYXRhYmFzZUVycm9yKCkgeyB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCBjb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgdm9pZCBzZXRDb2RlKHVuc2lnbmVkIHNo
b3J0IHZhbHVlKSB7IG1fY29kZSA9IHZhbHVlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9pZCBzZXRNZXNzYWdlKGNvbnN0
IFN0cmluZyYgdmFsdWUpIHsgbV9tZXNzYWdlID0gdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBJ
REJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlKSB7IH0KKworICAg
IHVuc2lnbmVkIHNob3J0IG1fY29kZTsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlRXJy
b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VF
cnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSURCRGF0YWJh
c2VFcnJvciB7CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBjb2RlOworICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CisgICAgfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHN0
cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0geworICAgICJVTktOT1dOX0VSUiIsCisgICAg
Ik5PTl9UUkFOU0lFTlRfRVJSIiwKKyAgICAiTk9UX0ZPVU5EX0VSUiIsCisgICAgIkNPTlNUUkFJ
TlRfRVJSIiwKKyAgICAiREFUQV9FUlIiLAorICAgICJOT1RfQUxMT1dFRF9FUlIiLAorICAgICJU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlIiLAorICAgICJBQk9SVF9FUlIiLAorICAgICJSRUFEX09O
TFlfRVJSIiwKKyAgICAiVElNRU9VVF9FUlIiLAorICAgICJRVU9UQV9FUlIiLAorICAgICJWRVJf
RVJSIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRlc2NyaXB0aW9u
c1tdID0geworICAgICJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdpdGhpbiBJbmRleGVkIERh
dGFiYXNlLiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwgLy8gRklYTUU6IFdyaXRlIGEgYmV0
dGVyIG1lc3NhZ2UgaWYgaXQncyBldmVyIHBvc3NpYmxlIHRoaXMgaXMgdGhyb3duLgorICAgICJU
aGUgbmFtZSBzdXBwbGllZCBkb2VzIG5vdCBtYXRjaCBhbnkgZXhpc3RpbmcgaXRlbS4iLAorICAg
ICJUaGUgcmVxdWVzdCBjYW5ub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIGZhaWxlZCBjb25zdHJh
aW50LiIsCisgICAgIlRoZSBkYXRhIHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVt
ZW50cyBvZiB0aGUgZnVuY3Rpb24uIiwKKyAgICAiVGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dl
ZCB0byBiZSBjYWxsZWQgaW4gc3VjaCBhIGNvbnRleHQuIiwKKyAgICAiQSByZXF1ZXN0IHdhcyBw
bGFjZWQgYWdhaW5zdCBhIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGVpdGhlciBjdXJyZW50bHkgbm90
IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIiwKKyAgICAiVGhlIHRyYW5zYWN0aW9uIHdh
cyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIsCisgICAgIkEg
d3JpdGUgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgaW4gYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24u
IiwKKyAgICAiQSBsb2NrIGZvciB0aGUgdHJhbnNhY3Rpb24gY291bGQgbm90IGJlIG9idGFpbmVk
IGluIGEgcmVhc29uYWJsZSB0aW1lLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVzZWQgeWV0Lgor
ICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJl
bWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBh
bmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gZ2l2ZSBtb3JlIHNwYWNlIHRvIHRoZSBkYXRhYmFzZS4i
LCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorICAgICJBbiBhdHRlbXB0IHdhcyBtYWRl
IHRvIG9wZW4gYSBkYXRhYmFzZSB1c2luZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgZXhpc3Rp
bmcgdmVyc2lvbi4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorfTsKKworQ09NUElM
RV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25OYW1lcykgPT0gV1RGX0FSUkFZX0xF
TkdUSChleGNlcHRpb25EZXNjcmlwdGlvbnMpLCBJREJEYXRhYmFzZUV4Y2VwdGlvblRhYmxlc011
c3RNYXRjaCk7CisKK2Jvb2wgSURCRGF0YWJhc2VFeGNlcHRpb246OmluaXRpYWxpemVEZXNjcmlw
dGlvbihFeGNlcHRpb25Db2RlIGVjLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qIGRlc2NyaXB0
aW9uKQoreworICAgIGlmIChlYyA8IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0IHx8IGVjID4g
SURCRGF0YWJhc2VFeGNlcHRpb25NYXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRl
c2NyaXB0aW9uLT50eXBlTmFtZSA9ICJET00gSURCRGF0YWJhc2UiOworICAgIGRlc2NyaXB0aW9u
LT5jb2RlID0gZWMgLSBJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldDsKKyAgICBkZXNjcmlwdGlv
bi0+dHlwZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZTsKKworICAgIHNpemVfdCB0YWJsZVNp
emUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsKKyAgICBzaXplX3QgdGFibGVJ
bmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7CisKKyAgICBkZXNjcmlwdGlvbi0+bmFtZSA9IHRhYmxl
SW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0YWJsZUluZGV4XSA6IDA7CisgICAg
ZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2Vw
dGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VFeGNl
cHRpb25faAorI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlvbiA6IHB1YmxpYyBFeGNlcHRp
b25CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUV4Y2Vw
dGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXhjZXB0aW9u
KGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBJREJEYXRhYmFz
ZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBJREJEYXRhYmFz
ZUV4Y2VwdGlvbk1heCA9IDEyOTk7CisKKyAgICBlbnVtIElEQkRhdGFiYXNlRXhjZXB0aW9uQ29k
ZSB7CisgICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0LAorICAgICAg
ICBVTktOT1dOX0VSUiwKKyAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIsCisgICAgICAgIE5PVF9G
T1VORF9FUlIsCisgICAgICAgIENPTlNUUkFJTlRfRVJSLAorICAgICAgICBEQVRBX0VSUiwKKyAg
ICAgICAgTk9UX0FMTE9XRURfRVJSLAorICAgICAgICBUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIs
CisgICAgICAgIEFCT1JUX0VSUiwKKyAgICAgICAgUkVBRF9PTkxZX0VSUiwKKyAgICAgICAgVElN
RU9VVF9FUlIsCisgICAgICAgIFFVT1RBX0VSUiwKKyAgICAgICAgVkVSX0VSUgorICAgIH07CisK
KyAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgZXJyb3JDb2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKCFlcnJvckNvZGUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0OworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2Rl
LCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFz
ZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQor
ICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFz
ZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsOjEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0
aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0
b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9E
QVRBQkFTRSwKKyAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cworICAgIF0gSURCRGF0YWJhc2VF
eGNlcHRpb24geworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAg
IGNvZGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1lc3NhZ2U7CisK
KyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQK
KyAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3ppbGxhIGNvbXBhdGlibGUgZm9ybWF0CisgICAg
ICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKKyNlbmRpZgorCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VSUiA9IDA7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
Tk9OX1RSQU5TSUVOVF9FUlIgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1Rf
Rk9VTkRfRVJSID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OU1RSQUlOVF9F
UlIgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRBX0VSUiA9IDU7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9BTExPV0VEX0VSUiA9IDY7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiA9IDc7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VSUiA9IDg7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBUSU1FT1VUX0VSUiA9IDEwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBRVU9UQV9F
UlIgPSAxMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSX0VSUiA9IDEyOworICAg
IH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50
RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHA6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50
KiBldmVudCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYgZXZlbnRUYXJnZXRzKQorewor
ICAgIHNpemVfdCBzaXplID0gZXZlbnRUYXJnZXRzLnNpemUoKTsKKyAgICBBU1NFUlQoc2l6ZSk7
CisKKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24ndCBkbyB0aGUgZmly
c3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRz
W2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMo
ZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAg
ICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CisgICAgfQorCisgICAgZXZlbnQtPnNldEV2ZW50
UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZl
bnRUYXJnZXRzWzBdLmdldCgpKTsKKyAgICBldmVudFRhcmdldHNbMF0tPmZpcmVFdmVudExpc3Rl
bmVycyhldmVudCk7CisgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAhZXZl
bnQtPmJ1YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgIGdvdG8gZG9u
ZURpc3BhdGNoaW5nOworCisgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5H
X1BIQVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgeyAvLyBEb24n
dCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
ZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZl
bnRMaXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBl
ZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgIGdvdG8gZG9uZURpc3Bh
dGNoaW5nOworICAgIH0KKworICAgIC8vIEZJWE1FOiAiLi4uSG93ZXZlciwgd2UgYWxzbyB3YW50
ZWQgdG8gaW50ZWdyYXRlIHRoZSB3aW5kb3cub25lcnJvciBmZWF0dXJlIGluCisgICAgLy8gICAg
ICAgIEhUTUw1LiBTbyBhZnRlciB3ZSd2ZSBmaXJlZCBhbiAiZXJyb3IiIGV2ZW50LCBpZiAucHJl
dmVudERlZmF1bHQoKSB3YXMKKyAgICAvLyAgICAgICAgbmV2ZXIgY2FsbGVkIG9uIHRoZSBldmVu
dCwgd2UgZmlyZSBhbiBlcnJvciBldmVudCBvbiB0aGUgd2luZG93IChjYW4ndAorICAgIC8vICAg
ICAgICByZW1lbWJlciBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIG9yIGFmdGVyIHdlIGFib3J0IHRo
ZSB0cmFuc2FjdGlvbikuCisgICAgLy8gICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0ZSBldmVudCwg
d2hpY2ggZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCBldmVuIGlmIHlvdQorICAgIC8vICAgICAgICBh
dHRhY2ggYSBjYXB0dXJpbmcgImVycm9yIiBoYW5kbGVyIG9uIHdpbmRvdywgeW91IHdvbid0IHNl
ZSBhbnkgZXZlbnRzCisgICAgLy8gICAgICAgIHVubGVzcyBhbiBlcnJvciByZWFsbHkgd2VudCB1
bmhhbmRsZWQuIEFuZCB5b3UgYWxzbyBjYW4ndCBjYWxsCisgICAgLy8gICAgICAgIC5wcmV2ZW50
RGVmYXVsdCBvbiB0aGUgZXJyb3IgZXZlbnQgZmlyZWQgb24gdGhlIHdpbmRvdyBpbiBvcmRlciB0
bworICAgIC8vICAgICAgICBwcmV2ZW50IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGJlaW5nIGFib3J0
ZWQuIEl0J3MgcHVyZWx5IHRoZXJlIGZvcgorICAgIC8vICAgICAgICBlcnJvciByZXBvcnRpbmcg
YW5kIGRpc3RpbmN0bHkgZGlmZmVyZW50IGZyb20gdGhlIGV2ZW50IHByb3BhZ2F0aW5nIHRvCisg
ICAgLy8gICAgICAgIHRoZSB3aW5kb3cuCisgICAgLy8gICAgICAgIAorICAgIC8vICAgICAgICBU
aGlzIGlzIHNpbWlsYXIgdG8gaG93ICJlcnJvciIgZXZlbnRzIGFyZSBoYW5kbGVkIGluIHdvcmtl
cnMuCisgICAgLy8gICAgICAgIAorICAgIC8vICAgICAgICAoSSB0aGluayB0aGF0IHNvIGZhciB3
ZWJraXQgaGFzbid0IGltcGxlbWVudGVkIHRoZSB3aW5kb3cub25lcnJvcgorICAgIC8vICAgICAg
ICBmZWF0dXJlIHlldCwgc28geW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gZmlyZSB0aGUgc2Vw
YXJhdGUgZXJyb3IKKyAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1bnRpbCB0aGF0
IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKKworZG9uZURpc3BhdGNo
aW5nOgorICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKDApOworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lv
biAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVy
Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURC
RXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSURCRXZlbnREaXNwYXRjaGVyX2gKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFdmVudDsK
K2NsYXNzIEV2ZW50VGFyZ2V0OworCitjbGFzcyBJREJFdmVudERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50KiwgVmVjdG9yPFJlZlB0cjxFdmVudFRh
cmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4g
b3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgorCitwcml2YXRlOgorICAgIElEQkV2ZW50
RGlzcGF0Y2hlcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJFdmVudERpc3BhdGNoZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNp
bmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkZhY3Rvcnk6OklEQkZhY3RvcnkoSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBtX2JhY2tlbmQoZmFjdG9yeSkKK3sK
KyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworSURCRmFj
dG9yeTo6fklEQkZhY3RvcnkoKQoreworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZh
Y3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTog
bWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBHcm91
cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91
cFNldHRpbmdzKCk7CisgICAgbV9iYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsIGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5n
cy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgICAgICBpZiAo
IWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAgICAgIG1fYmFja2VuZC0+b3BlbihuYW1l
LCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBmcmFtZSwgU3RyaW5n
KCkpOworICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9CisjaWYgRU5BQkxFKFdPUktFUlMp
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1fYmFja2VuZC0+b3BlbkZyb21X
b3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7CisgICAgcmV0dXJu
IHJlcXVlc3Q7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFn
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJB
bnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3Mg
PSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAgICBtX2JhY2tl
bmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQ
YXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9ydCBJREJGYWN0b3J5OjpjbXAo
UGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoZmlyc3QpOworICAgIEFTU0VSVChzZWNvbmQp
OworCisgICAgaWYgKGZpcnN0LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSB8fCBzZWNv
bmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9ICAgIAor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBhcmUoc2Vjb25k
LmdldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aWZuZGVmIElEQkZhY3RvcnlfaAorI2RlZmluZSBJREJGYWN0b3J5X2gKKworI2luY2x1ZGUgIkRP
TVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgor
I2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJLZXlSYW5nZTsK
K2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCit0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOworCitjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURC
RmFjdG9yeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNy
ZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeShmYWN0b3J5KSk7CisgICAgfQorICAgIH5J
REJGYWN0b3J5KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFt
ZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBkZWxl
dGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisKKyAgICBzaG9ydCBjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0
LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6
CisgICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOworCisgICAgUmVm
UHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRmFjdG9yeV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbAko
cmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
aWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3Rv
cmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFCisgICAgXSBJREJGYWN0b3J5IHsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0RGF0YWJhc2VOYW1lcygpOworCisgICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3Ry
aW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQorICAgICAgICAgICAgcmFp
c2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisKKyAgICAgICAgc2hvcnQgY21wKGluIElEQktl
eSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwu
aCIKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRl
ICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBj
b21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGtMZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAxIjsKKyAgICBy
ZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsga0xldmVsREJGaWxl
U3VmZml4OworfQorCitzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIHJl
dHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4pICsgbmFtZTsKK30KKwor
SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZEltcGwoKQorICAgIDogbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgp
KQoreworfQorCitJREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5QmFja2VuZEltcGwo
KQoreworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCRGF0YWJhc2VC
YWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9k
YXRhYmFzZUJhY2tlbmRNYXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOworICAgIG1fZGF0
YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKK30KKwordm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6OmFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJ
ZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAgICBBU1NFUlQo
IW1fYmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNr
aW5nU3RvcmVNYXAuc2V0KGZpbGVJZGVudGlmaWVyLCBiYWNraW5nU3RvcmUpOworfQorCit2b2lk
IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmlu
ZyYgZmlsZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTWFwLmNvbnRh
aW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNl
TmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9w
ZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIGlmICgh
YmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKworICAgIFZl
Y3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7CisgICAgYmFja2luZ1N0b3JlLT5nZXREYXRhYmFzZU5h
bWVzKGZvdW5kTmFtZXMpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gZm91bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgpOyArK2l0KQor
ICAgICAgICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxs
YmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKK30KKwordm9pZCBJREJGYWN0
b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAg
IG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0
b3J5KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVy
ID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwor
CisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlv
bnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCisgICAgICAgIC8vIGRhdGFi
YXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cg
b24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwg
ZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5k
ID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQo
KSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVy
KTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJh
c2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNh
bGxiYWNrcyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3sKKyAgICBjb25zdCBT
dHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmln
aW4uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwor
ICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAu
ZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5l
bmQoKSkKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAgZWxzZSB7Cisj
aWYgVVNFKExFVkVMREIpCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVu
dGlmaWVyLCB0aGlzKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmCisgICAgfQorCisgICAgaWYgKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuIGJhY2tp
bmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNr
cyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKKyAgICBjb25zdCBTdHJp
bmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlm
IChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiBpdCdz
IGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKKyAg
ICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNlY29u
ZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFu
b3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIGlm
ICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJu
YWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4oZGF0YWJhc2VCYWNrZW5k
LmdldCgpKS5yZWxlYXNlKCkpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJ
ZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbF9oCisKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOwor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I7CisKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFj
dG9yeUJhY2tlbmRJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJGYWN0b3J5QmFja2VuZEltcGwoKSk7CisgICAgfQorICAgIHZpcnR1YWwgfklEQkZh
Y3RvcnlCYWNrZW5kSW1wbCgpOworCisgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9p
bnRlcnMuCisgICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJp
bmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIHJlbW92ZUlE
QkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCitwcml2
YXRlOgorICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworICAgIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElEQkRhdGFiYXNl
QmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIElEQkJhY2tpbmdTdG9yZSo+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAgICBJREJCYWNr
aW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOworCisgICAgLy8gT25seSBv
bmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBnaXZlbiB0aW1l
LgorICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlCYWNrZW5kSW1w
bDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJ
REJGYWN0b3J5QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNw
cAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3IgIkNocm9taXVtIHNob3VsZCBub3Qg
Y29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0cyBvd24gdmVyc2lvbiBvZiB0
aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMgdGhlIG11bHRpLXByb2Nlc3MgYm91bmRyeS4iCisj
ZW5kaWYKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmNyZWF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmlu
ZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3Mu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIElEQkRhdGFi
YXNlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXb3JrZXJDb250ZXh0OworCit0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJG
YWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5jKS4KKy8vIFRoaXMgaXMgaW1w
bGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAo
aW4gb3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxs
IGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKKy8vIHRy
aWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2NsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxs
YmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAi
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUg
IklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKKworSURCSW5kZXg6
OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJ
REJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
KyAgICA6IG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9y
ZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fYmFj
a2VuZCk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uKTsKK30KKworSURCSW5kZXg6On5JREJJbmRleCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6
b3BlbkN1cnNvciIpOworICAgIGlmIChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRp
cmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJ
REJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNB
VEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6
IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMTQwNgorICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhDdXJzb3IpOworICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihrZXlSYW5n
ZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3VudChrZXlSYW5n
ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJ
bmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5
UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7Cit9CisKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RS
QUNFKCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIGlmIChkaXJlY3Rpb24gIT0gSURC
Q3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRF
ICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNv
cjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNo
YW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVn
LmNnaT9pZD0xMTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUo
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOworICAgIG1fYmFja2Vu
ZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFy
a0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1
ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Z2V0Iik7CisgICAgaWYgKGtl
eSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKKyAgICBpZiAoa2V5ICYmIChrZXkt
PnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2Vu
ZC0+Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCSW5kZXhfaAorI2RlZmluZSBJ
REJJbmRleF9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklE
QlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgSURCSW5kZXggOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJJbmRleD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkluZGV4PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJh
Y2tlbmQsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleChiYWNr
ZW5kLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKKyAgICB9CisgICAgfklEQkluZGV4KCk7
CisKKyAgICAvLyBJbXBsZW1lbnQgdGhlIElETAorICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KKyAgICBJREJPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CisgICAgU3RyaW5nIGtl
eVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPmtleVBhdGgoKTsgfQorICAgIGJvb2wg
dW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT51bmlxdWUoKTsgfQorICAgIGJvb2wg
bXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bXVsdGlFbnRyeSgpOyB9CisK
KyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBp
cyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9w
ZW5DdXJzb3IoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNv
cihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjb3VudChjb250ZXh0
LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9u
Q29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBv
cGVuS2V5Q3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBv
cGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfQor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAg
ICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4sIElEQk9iamVj
dFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0
U3RvcmU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkluZGV4X2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwJ
KHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5p
ZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFn
ZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFCisgICAgXSBJREJJbmRleCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVj
dFN0b3JlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtleVBhdGg7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKKworICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtPcHRpb25hbF0g
SURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW5LZXlDdXJzb3Io
aW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBz
aG9ydCBkaXJlY3Rpb24pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
Z2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3QgZ2V0S2V5KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkKKyAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkga2V5KQorICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tl
bmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCisj
aW5jbHVkZSAiSURCVHJhY2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkluZGV4
QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVl
LCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5k
KG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkK
KyAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFtZSkKKyAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQor
ICAgICwgbV91bmlxdWUodW5pcXVlKQorICAgICwgbV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCit7
Cit9CisKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVCYWNr
ZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoSW52YWxpZElkKQorICAgICwgbV9u
YW1lKG5hbWUpCisgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCisgICAgLCBtX2tleVBhdGgo
a2V5UGF0aCkKKyAgICAsIG1fdW5pcXVlKHVuaXF1ZSkKKyAgICAsIG1fbXVsdGlFbnRyeShtdWx0
aUVudHJ5KQoreworfQorCitJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1w
bCgpCit7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdW50
eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RS
QUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKKyAgICBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVj
dGlvbj4odW50eXBlZERpcmVjdGlvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewor
ICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6CisgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4
S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgor
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1
cnNvcjoKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JU
eXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLT5v
YmplY3RTdG9yZShpbmRleC0+bV9zdG9yZU5hbWUsIGVjKTsKKyAgICBBU1NFUlQob2JqZWN0U3Rv
cmUgJiYgIWVjKTsKKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUu
Z2V0KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOworfQor
Cit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJ
REJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7CisgICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gcHJwS2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5
UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3Is
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBs
OjpvcGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNhbGxiYWNrcywg
dHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tl
bmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgdWludDMyX3QgY291bnQgPSAwOworCisgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRl
eC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlk
LCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5n
ZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewor
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJl
clZhbHVlKGNvdW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkbyB7CisgICAg
ICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1
bmN0aW9uKDApKTsKKyAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CisgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkp
OworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY291bnRJbnRl
cm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2
b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFs
Iik7CisgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVybmFsIGludG8gdHdvIGZ1bmN0aW9ucywg
Z2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgorICAgIGlmIChnZXRPYmplY3QpIHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RWaWFJbmRl
eChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVm
aW5lZFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
dmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQg
PSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+bV9k
YXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgp
LCAqa2V5KTsKKyAgICAgICAgaWYgKCFrZXlSZXN1bHQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0
KCkpOworICAgIH0KK30KKwordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQiKTsKKyAg
ICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOworICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXksIHRydWUsIGNhbGxiYWNrcykp
KQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5Iik7Cisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8
SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5LCBmYWxzZSwgY2FsbGJhY2tz
KSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2Vk
KGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKK3sKKyAg
ICBpZiAoIW1fdW5pcXVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJlZlB0cjxJREJL
ZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICBib29sIGZvdW5kID0gbV9iYWNraW5nU3RvcmUtPmtl
eUV4aXN0c0luSW5kZXgobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
bV9pZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgIGlmICghZm91bmQpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+
aXNFcXVhbChwcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJJbmRleEJh
Y2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJLZXk7CitjbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
KworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQs
IGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChiYWNr
aW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5hbWUsIHN0b3Jl
TmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CisgICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhC
YWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwg
bmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOworCisgICAgaW50NjRfdCBpZCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOworICAgICAgICBy
ZXR1cm4gbV9pZDsKKyAgICB9CisgICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7IG1faWQgPSBp
ZDsgfQorICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gSW52YWxp
ZElkOyB9OworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhL
ZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOworCisgICAgLy8gSW1wbGVtZW50cyBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCisgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHN0b3JlTmFtZSgpIHsgcmV0dXJuIG1f
c3RvcmVOYW1lOyB9CisgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0dXJuIG1fa2V5
UGF0aDsgfQorICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tdWx0aUVudHJ5OyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisKK3By
aXZhdGU6CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOworICAgIElEQkluZGV4
QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5KTsKKworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lk
IGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBnZXRP
YmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAgICBzdGF0aWMgY29uc3QgaW50
NjRfdCBJbnZhbGlkSWQgPSAwOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7CisKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKKyAgICBpbnQ2NF90IG1f
aWQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9zdG9yZU5hbWU7CisgICAgU3Ry
aW5nIG1fa2V5UGF0aDsKKyAgICBib29sIG1fdW5pcXVlOworICAgIGJvb2wgbV9tdWx0aUVudHJ5
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElE
QkluZGV4QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9u
IDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmluZSBJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7
CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CisKK3R5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1
YWwgU3RyaW5nIG5hbWUoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc3RvcmVOYW1lKCkgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVu
aXF1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBz
aG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlm
IC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQktl
eTo6SURCS2V5KCkKKyAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkKKyAgICAsIG1fc2l6ZUVzdGlt
YXRlKGtPdmVyaGVhZFNpemUpCit7Cit9CisKK0lEQktleTo6fklEQktleSgpCit7Cit9CisKK2lu
dCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKK3sKKyAgICBBU1NF
UlQob3RoZXIpOworICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1fdHlwZSkKKyAgICAgICAgcmV0
dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7CisKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5jb21wYXJlKG90aGVyLT5tX2Fy
cmF5W2ldLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5tX2FycmF5LnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgpID4gb3RoZXIt
Pm1fYXJyYXkuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiAw
OworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIC1jb2RlUG9pbnRDb21wYXJl
KG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOworICAgIGNhc2UgRGF0ZVR5cGU6CisgICAgICAg
IHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6CisgICAgICAgICAgICAgICAg
KG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7CisgICAgY2FzZSBOdW1iZXJUeXBlOgor
ICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVtYmVyKSA/IC0xIDoKKyAgICAg
ICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVyKSA/IDEgOiAwOworICAgIGNh
c2UgSW52YWxpZFR5cGU6CisgICAgY2FzZSBNaW5UeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0xlc3NUaGFuKGNvbnN0
IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG90aGVyKTsKKyAgICByZXR1cm4g
Y29tcGFyZShvdGhlcikgPT0gLTE7Cit9CisKK2Jvb2wgSURCS2V5Ojppc0VxdWFsKGNvbnN0IElE
QktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJREJLZXk+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURC
S2V5PiA+IEtleUFycmF5OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
bnZhbGlkKCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IGFkb3B0UmVm
KG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBlID0gSW52YWxpZFR5cGU7Cisg
ICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlTnVtYmVyKGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAg
ICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOworICAgICAg
ICBpZGJLZXktPm1fdHlwZSA9IE51bWJlclR5cGU7CisgICAgICAgIGlkYktleS0+bV9udW1iZXIg
PSBudW1iZXI7CisgICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc2l6ZW9mKGRvdWJs
ZSk7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktl
eSgpKTsKKyAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBTdHJpbmdUeXBlOworICAgICAgICBpZGJL
ZXktPm1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBpZGJLZXktPm1fc2l6ZUVzdGltYXRlICs9
IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHJldHVybiBpZGJLZXku
cmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRl
RGF0ZShkb3VibGUgZGF0ZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBlID0gRGF0ZVR5
cGU7CisgICAgICAgIGlkYktleS0+bV9kYXRlID0gZGF0ZTsKKyAgICAgICAgaWRiS2V5LT5tX3Np
emVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGlkYktleS5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVBcnJh
eShjb25zdCBLZXlBcnJheSYgYXJyYXkpCisgICAgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBp
ZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOworICAgICAgICBpZGJLZXktPm1fdHlwZSA9
IEFycmF5VHlwZTsKKyAgICAgICAgaWRiS2V5LT5tX2FycmF5ID0gYXJyYXk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGlk
YktleS0+bV9zaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6ZUVzdGltYXRlOworCisgICAg
ICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIH5JREJLZXkoKTsKKwor
ICAgIC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVjZWRlbnQgaW4g
dGVybXMgb2Ygc29ydCBvcmRlci4KKyAgICBlbnVtIFR5cGUgeworICAgICAgICBJbnZhbGlkVHlw
ZSA9IDAsCisgICAgICAgIEFycmF5VHlwZSwKKyAgICAgICAgU3RyaW5nVHlwZSwKKyAgICAgICAg
RGF0ZVR5cGUsCisgICAgICAgIE51bWJlclR5cGUsCisgICAgICAgIE1pblR5cGUKKyAgICB9Owor
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgYm9vbCB2YWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkVHlwZTsgfQorCisgICAgY29uc3Qg
S2V5QXJyYXkmIGFycmF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
QXJyYXlUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fYXJyYXk7CisgICAgfQorCisgICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBT
dHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgIH0KKworICAgIGRvdWJs
ZSBkYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gRGF0ZVR5cGUp
OworICAgICAgICByZXR1cm4gbV9kYXRlOworICAgIH0KKworICAgIGRvdWJsZSBudW1iZXIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBOdW1iZXJUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIG1fbnVtYmVyOworICAgIH0KKworICAgIGludCBjb21wYXJlKGNvbnN0IElEQktl
eSogb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNMZXNzVGhhbihjb25zdCBJREJLZXkqIG90aGVy
KSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3Q7CisK
KyAgICBzaXplX3Qgc2l6ZUVzdGltYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplRXN0aW1hdGU7
IH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZVR5cGVzKFR5cGUgYSwgVHlwZSBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGIgLSBhOworICAgIH0KKworICAgIHVzaW5nIFRocmVhZFNhZmVSZWZD
b3VudGVkPElEQktleT46OnJlZjsKKyAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJL
ZXk+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJLZXkoKTsKKworICAgIFR5cGUgbV90eXBl
OworICAgIEtleUFycmF5IG1fYXJyYXk7CisgICAgU3RyaW5nIG1fc3RyaW5nOworICAgIGRvdWJs
ZSBtX2RhdGU7CisgICAgZG91YmxlIG1fbnVtYmVyOworCisgICAgc2l6ZV90IG1fc2l6ZUVzdGlt
YXRlOworCisgICAgLy8gVmVyeSByb3VnaCBlc3RpbWF0ZSBvZiBtaW5pbXVtIGtleSBzaXplIG92
ZXJoZWFkLgorICAgIGVudW0geyBrT3ZlcmhlYWRTaXplID0gMTYgfTsKK307CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5pZGw6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAg
ICAgQ3VzdG9tVG9KU09iamVjdAorICAgIF0gSURCS2V5IHsKKyAgICAgICAgLy8gVGhpcyBzcGFj
ZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuCisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHA6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsKK3B1YmxpYzoK
KyAgICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuSWRlbnRpZmllciwKKyAgICAgICAg
VG9rZW5Eb3QsCisgICAgICAgIFRva2VuRW5kLAorICAgICAgICBUb2tlbkVycm9yCisgICAgfTsK
KworICAgIGV4cGxpY2l0IElEQktleVBhdGhMZXhlcihjb25zdCBTdHJpbmcmIHMpCisgICAgICAg
IDogbV9zdHJpbmcocykKKyAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKKyAgICAgICAg
LCBtX2VuZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCisgICAgICAgICwgbV9jdXJyZW50
VG9rZW5UeXBlKFRva2VuRXJyb3IpCisgICAgeworICAgIH0KKworICAgIFRva2VuVHlwZSBjdXJy
ZW50VG9rZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOyB9CisKKyAg
ICBUb2tlblR5cGUgbmV4dFRva2VuVHlwZSgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRUb2tl
blR5cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRU
b2tlblR5cGU7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBjdXJyZW50RWxlbWVudCgpIHsg
cmV0dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KKworcHJpdmF0ZToKKyAgICBUb2tlblR5cGUgbGV4
KFN0cmluZyYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKFN0cmluZyYpOworICAgIFN0
cmluZyBtX2N1cnJlbnRFbGVtZW50OworICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICBjb25zdCBV
Q2hhciogbV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIFRva2VuVHlwZSBtX2N1
cnJlbnRUb2tlblR5cGU7Cit9OworCitJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQ
YXRoTGV4ZXI6OmxleChTdHJpbmcmIGVsZW1lbnQpCit7CisgICAgaWYgKG1fcHRyID49IG1fZW5k
KQorICAgICAgICByZXR1cm4gVG9rZW5FbmQ7CisgICAgQVNTRVJUKG1fcHRyIDwgbV9lbmQpOwor
CisgICAgaWYgKCptX3B0ciA9PSAnLicpIHsKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0
dXJuIFRva2VuRG90OworICAgIH0KKyAgICByZXR1cm4gbGV4SWRlbnRpZmllcihlbGVtZW50KTsK
K30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3RlcihV
Q2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0gJ18nKSB8fCAo
YyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllckNoYXJh
Y3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IChj
ID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUg
SURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKFN0cmluZyYgZWxlbWVudCkKK3sKKyAgICBj
b25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIgPCBtX2VuZCAmJiBpc1Nh
ZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisgICAgd2hpbGUgKG1fcHRyIDwg
bV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9wdHIpKQorICAgICAgICArK21f
cHRyOworCisgICAgZWxlbWVudCA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7CisgICAg
cmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworYm9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25z
dCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQlBhcnNlS2V5UGF0aChr
ZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3IgPT0gSURC
S2V5UGF0aFBhcnNlRXJyb3JOb25lOworfQorCit2b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBT
dHJpbmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+JiBlbGVtZW50cywgSURCS2V5UGF0aFBhcnNl
RXJyb3ImIGVycm9yKQoreworICAgIC8vIElEQktleVBhdGggOjo9IEVNUFRZX1NUUklORyB8IGlk
ZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSoKKyAgICAvLyBUaGUgYmFzaWMgc3RhdGUgbWFjaGlu
ZSBpczoKKyAgICAvLyAgIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBFbmR9CisgICAgLy8gICBJZGVu
dGlmaWVyID0+IHtEb3QsIEVuZH0KKyAgICAvLyAgIERvdCA9PiB7SWRlbnRpZmllcn0KKyAgICAv
LyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3Qg
ZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgorICAgIGVudW0gUGFyc2VyU3Rh
dGUgeyBJZGVudGlmaWVyLCBEb3QsIEVuZCB9OworCisgICAgSURCS2V5UGF0aExleGVyIGxleGVy
KGtleVBhdGgpOworICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxl
eGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICBQYXJzZXJTdGF0ZSBzdGF0ZTsKKyAgICBpZiAodG9r
ZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQorICAgICAgICBzdGF0
ZSA9IElkZW50aWZpZXI7CisgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhl
cjo6VG9rZW5FbmQpCisgICAgICAgIHN0YXRlID0gRW5kOworICAgIGVsc2UgeworICAgICAgICBl
cnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNh
c2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBl
IHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VS
VCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpOworCisgICAg
ICAgICAgICBTdHJpbmcgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7CisgICAgICAg
ICAgICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9
IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURC
S2V5UGF0aExleGVyOjpUb2tlbkRvdCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5k
KQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhl
cjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCk7CisK
KyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAg
ICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpCisg
ICAgICAgICAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRo
UGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UGF0aC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UGF0aC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gKKyNkZWZpbmUgSURCS2V5UGF0aF9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSBJREJLZXlQYXRoUGFyc2VFcnJvciB7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lLAor
ICAgIElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQsCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3JJ
ZGVudGlmaWVyLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yRG90LAorfTsKKworYm9vbCBJREJJ
c1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmKTsKK3ZvaWQgSURCUGFyc2VLZXlQYXRoKGNvbnN0
IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0aFBhcnNlRXJyb3ImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQktleVBhdGhfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCisKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNlcnJvciAiQ2hyb21pdW0gc2hvdWxkIG5vdCBjb21waWxlIHRoaXMgZmlsZSBhbmQg
aW5zdGVhZCBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMgZmFjdG9yeSB0aGF0IG5hdmln
YXRlcyB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIKKyNlbmRpZgorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKK3ZvaWQgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJL
ZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBW
ZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLgorfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURC
S2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFsaXplZFNjcmlw
dFZhbHVlLgorICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOjEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQktleVBhdGhC
YWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOworCitjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgeworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1Nl
cmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKK307CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5UGF0aEJhY2tlbmRJ
bXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlSYW5nZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJLZXlSYW5nZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKworI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJREJL
ZXlSYW5nZTo6SURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRy
PElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJCb3VuZFR5cGUg
dXBwZXJUeXBlKQorICAgIDogbV9sb3dlcihsb3dlcikKKyAgICAsIG1fdXBwZXIodXBwZXIpCisg
ICAgLCBtX2xvd2VyVHlwZShsb3dlclR5cGUpCisgICAgLCBtX3VwcGVyVHlwZSh1cHBlclR5cGUp
Cit7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpvbmx5KFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJL
ZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIElEQktleVJh
bmdlOjpjcmVhdGUoa2V5LCBrZXksIExvd2VyQm91bmRDbG9zZWQsIFVwcGVyQm91bmRDbG9zZWQp
OworfQorCitQYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6bG93ZXJCb3VuZChQ
YXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKGJvdW5kICYmIChib3VuZC0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShib3Vu
ZCwgMCwgb3BlbiA/IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3VuZENsb3NlZCwgVXBwZXJCb3Vu
ZENsb3NlZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjp1cHBl
ckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoYm91bmQgJiYgKGJvdW5kLT50eXBlKCkgPT0gSURCS2V5OjpJbnZh
bGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3Jl
YXRlKDAsIGJvdW5kLCBMb3dlckJvdW5kQ2xvc2VkLCBvcGVuID8gVXBwZXJCb3VuZE9wZW4gOiBV
cHBlckJvdW5kQ2xvc2VkKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFu
Z2U6OmJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVw
cGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICgobG93ZXIgJiYgKGxvd2VyLT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlw
ZSkpIHx8ICh1cHBlciAmJiAodXBwZXItPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBpZiAobG93ZXIgJiYgdXBwZXIgJiYgdXBwZXItPmlzTGVz
c1RoYW4obG93ZXIuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGxvd2VyICYmIHVw
cGVyICYmIHVwcGVyLT5pc0VxdWFsKGxvd2VyLmdldCgpKSAmJiAobG93ZXJPcGVuIHx8IHVwcGVy
T3BlbikpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRl
KGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuID8gTG93ZXJCb3VuZE9wZW4gOiBMb3dlckJvdW5kQ2xv
c2VkLCB1cHBlck9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVyQm91bmRDbG9zZWQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJLZXlSYW5nZV9oCisjZGVmaW5lIElEQktleVJhbmdlX2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiT3B0aW9u
c09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PElEQktleVJhbmdlPiB7CitwdWJsaWM6CisgICAgZW51bSBMb3dlckJvdW5kVHlwZSB7CisgICAg
ICAgIExvd2VyQm91bmRPcGVuLAorICAgICAgICBMb3dlckJvdW5kQ2xvc2VkCisgICAgfTsKKyAg
ICBlbnVtIFVwcGVyQm91bmRUeXBlIHsKKyAgICAgICAgVXBwZXJCb3VuZE9wZW4sCisgICAgICAg
IFVwcGVyQm91bmRDbG9zZWQKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5
PiB1cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlwZSB1cHBlclR5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleVJhbmdlKGxvd2Vy
LCB1cHBlciwgbG93ZXJUeXBlLCB1cHBlclR5cGUpKTsKKyAgICB9CisgICAgfklEQktleVJhbmdl
KCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gbG93ZXIoKSBjb25zdCB7IHJldHVybiBt
X2xvd2VyOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyKCkgY29uc3QgeyByZXR1cm4g
bV91cHBlcjsgfQorICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9sb3dlclR5
cGUgPT0gTG93ZXJCb3VuZE9wZW47IH0KKyAgICBib29sIHVwcGVyT3BlbigpIGNvbnN0IHsgcmV0
dXJuIG1fdXBwZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gb25seShQYXNzUmVmUHRyPElEQktleT4gdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5k
KFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAg
ICAgcmV0dXJuIGxvd2VyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7CisgICAgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBi
b3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgIHJldHVybiB1cHBlckJvdW5kKGJvdW5kLCBmYWxz
ZSwgZWMpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gdXBwZXJC
b3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBhc3NSZWZQdHI8
SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBFeGNlcHRpb25Db2RlJiBl
YykKKyAgICB7CisgICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVwcGVyLCBmYWxzZSwgZmFsc2Us
IGVjKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBh
c3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBib29sIGxv
d2VyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgcmV0dXJuIGJvdW5kKGxv
d2VyLCB1cHBlciwgbG93ZXJPcGVuLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNz
UmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBib29sIHVwcGVyT3BlbiwgRXhj
ZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIElEQktleVJhbmdlKFBhc3NSZWZQdHI8SURC
S2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5kVHlwZSBsb3dl
clR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSk7CisKKyAgICBSZWZQdHI8SURCS2V5PiBt
X2xvd2VyOworICAgIFJlZlB0cjxJREJLZXk+IG1fdXBwZXI7CisgICAgTG93ZXJCb3VuZFR5cGUg
bV9sb3dlclR5cGU7CisgICAgVXBwZXJCb3VuZFR5cGUgbV91cHBlclR5cGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCS2V5UmFuZ2VfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eVJhbmdlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlSYW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UKKyAgICBdIElEQktleVJhbmdlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIElEQktleSBsb3dlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSB1
cHBlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbG93ZXJPcGVuOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9wZW47CisKKyAgICAgICAgc3Rh
dGljIElEQktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQorICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHN0YXRpYyBJREJLZXlSYW5nZSBsb3dl
ckJvdW5kKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pCisgICAg
ICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgc3RhdGljIElE
QktleVJhbmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9uYWxdIGJvb2xl
YW4gb3BlbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5IGxvd2VyLCBpbiBJREJLZXkg
dXBwZXIsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4sIGluIFtPcHRpb25hbF0gYm9v
bGVhbiB1cHBlck9wZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3Jl
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxEQikKKwor
I2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNp
bmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCisjaW5jbHVkZSAiTGV2ZWxEQkNvbXBhcmF0b3Iu
aCIKKyNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNh
Y3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nOworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFuc2FjdGlv
biogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKK3sKKyAg
ICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvdW5kSW50ID0gZGVjb2RlSW50KHJlc3VsdC5i
ZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0SW50KERCT3JUcmFuc2Fj
dGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVlKQoreworICAg
IHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlSW50KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRTdHJpbmcoREJPclRyYW5z
YWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYgZm91bmRTdHJpbmcp
Cit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1
bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0
cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KK3N0YXRpYyBib29sIHB1dFN0
cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXksIGVuY29kZVN0cmluZyh2YWx1
ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBpbnQgY29tcGFyZUtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xp
Y2UmIGIpCit7CisgICAgcmV0dXJuIGNvbXBhcmUoYSwgYik7Cit9CisKK3N0YXRpYyBpbnQgY29t
cGFyZUluZGV4S2V5cyhjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYg
YikKK3sKKyAgICByZXR1cm4gY29tcGFyZShhLCBiLCB0cnVlKTsKK30KKworY2xhc3MgQ29tcGFy
YXRvciA6IHB1YmxpYyBMZXZlbERCQ29tcGFyYXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBp
bnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYikg
Y29uc3QgeyByZXR1cm4gSURCTGV2ZWxEQkNvZGluZzo6Y29tcGFyZShhLCBiKTsgfQorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuICJpZGJfY21wMSI7IH0KK307
CisKK3N0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYikKK3sKKyAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hlbWFWZXJzaW9uS2V5OjplbmNv
ZGUoKTsKKworICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CisgICAgaWYgKCFnZXRJbnQo
ZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgeworICAgICAgICBzY2hlbWFWZXJzaW9u
ID0gMDsKKyAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9u
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZl
bnR1YWxseSwgd2UnbGwgbmVlZCB0byBiZSBhYmxlIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBzY2hl
bWFzLgorICAgIGlmIChzY2hlbWFWZXJzaW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERv
bid0IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMgdmVyc2lvbi4KKworICAgIHJldHVybiB0cnVl
OworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBQ
YXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV9kYihkYikKK3sKKyAgICBt
X2ZhY3RvcnktPmFkZElEQkJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsKK30KKworSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUoKQoreworICAgIG1f
ZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRpZmllcik7CisKKyAgICAvLyBt
X2RiJ3MgZGVzdHJ1Y3RvciB1c2VzIG1fY29tcGFyYXRvci4gVGhlIG9yZGVyIG9mIGRlc3RydWN0
aW9uIGlzIGltcG9ydGFudC4KKyAgICBtX2RiLmNsZWFyKCk7CisgICAgbV9jb21wYXJhdG9yLmNs
ZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKiBmYWN0b3J5KQoreworICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJn
OworCisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0gYWRvcHRQdHIo
bmV3IENvbXBhcmF0b3IoKSk7CisgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGI7CisKKyAg
ICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICBkYiA9IExldmVsREJEYXRhYmFzZTo6
b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBpZiAo
IW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBhdGhCYXNlLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPigpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxs
eSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMuCisgICAgICAg
IFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0
eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CisK
KyAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQo
KSk7CisgICAgfQorCisgICAgaWYgKCFkYikKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPigpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJhdG9yIG5hbWUg
Y2hhbmdlcy4KKworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUoYWRvcHRSZWYobmV3IElEQkxldmVsREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGZh
Y3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBiYWNraW5nU3RvcmUtPm1fY29tcGFyYXRvciA9
IGNvbXBhcmF0b3IucmVsZWFzZSgpOworCisgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdT
dG9yZS0+bV9kYi5nZXQoKSkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4oKTsKKworICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJh
c2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKKyAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlU3RvcEtleUZv
ck9yaWdpbihtX2lkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgp
KTsKKworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0
b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21w
YXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBj
b25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmxp
bWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIERhdGFiYXNlTmFtZUtleSBkYXRhYmFz
ZU5hbWVLZXk7CisgICAgICAgIHAgPSBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShwLCBsaW1pdCwg
JmRhdGFiYXNlTmFtZUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICBmb3VuZE5h
bWVzLmFwcGVuZChkYXRhYmFzZU5hbWVLZXkuZGF0YWJhc2VOYW1lKCkpOworICAgIH0KK30KKwor
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpCit7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1f
aWRlbnRpZmllciwgbmFtZSk7CisKKyAgICBib29sIG9rID0gZ2V0SW50KG1fZGIuZ2V0KCksIGtl
eSwgZm91bmRJZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
b2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZv
dW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiksIGZvdW5kVmVyc2lvbik7
CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBk
YikKK3sKKyAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsKKyAgICBpZiAoIWdldEludChk
YiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQpKQorICAgICAgICBt
YXhEYXRhYmFzZUlkID0gMDsKKworICAgIEFTU0VSVChtYXhEYXRhYmFzZUlkID49IDApOworCisg
ICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbWF4RGF0YWJhc2VJZCArIDE7CisgICAgaWYgKCFwdXRJ
bnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBkYXRhYmFzZUlkKSkKKyAgICAgICAg
cmV0dXJuIC0xOworCisgICAgcmV0dXJuIGRhdGFiYXNlSWQ7Cit9CisKK2Jvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCit7CisgICAgcm93SWQg
PSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOworICAgIGlmIChyb3dJZCA8IDApCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworICAgIGlmICghcHV0SW50KG1f
ZGIuZ2V0KCksIGtleSwgcm93SWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFw
dXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
aWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURh
dGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSwg
dmVyc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuZCkKK3sK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVy
YXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBh
cmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCF0
cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1f
Y3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKKyAgICB0cmFuc2Fj
dGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZDsKKyAgICBTdHJpbmcgdmVy
c2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwgZGF0
YWJhc2VJZCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERh
dGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5
OjprT3JpZ2luTmFtZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCArIDEsIERhdGFiYXNlTWV0YURhdGFLZXk6
OmtPcmlnaW5OYW1lKTsKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBzdGFydEtleSwgc3RvcEtleSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxi
YWNrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsK
KyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7CisKKyAgICB0cmFuc2FjdGlv
bi0+Y29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrT2Jq
ZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0
YURhdGFUeXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+
a2V5KCksIHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE9iamVj
dFN0b3JlTWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciogcCA9IE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVu
ZCgpLCAmbWV0YURhdGFLZXkpOworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7CisgICAgaWYgKG1l
dGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSAhPSBvYmplY3RTdG9yZUlkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRh
VHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
LCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9J
bmNyZW1lbnRGbGFncykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7CisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhL
ZXkoZGF0YWJhc2VJZCk7CisKKyAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEtleVBhdGhzLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmlzRW1wdHkoKSk7
CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9y
KCk7CisgICAgaXQtPnNlZWsoc3RhcnRLZXkpOworICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYm
IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CisgICAgICAgIGNvbnN0IGNo
YXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBp
dC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSBtZXRhRGF0
YUtleTsKKyAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1p
dCwgJm1ldGFEYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworICAgICAgICBpZiAobWV0YURh
dGFLZXkubWV0YURhdGFUeXBlKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwg
SW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQo
KTsKKyAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IGRlY29kZVN0cmluZyhpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaXQtPm5leHQoKTsK
KyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCAxKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgYm9vbCBoYXNLZXlQYXRoID0gdHJ1ZTsK
KworICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRN
ZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDIpKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBlbmNvZGUvZGVj
b2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9ICpp
dC0+dmFsdWUoKS5iZWdpbigpOworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIElzIGV2aWNhdGJs
ZS4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgp
LCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2ZXJzaW9uLgorICAgICAgICBpZiAo
IWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVj
dFN0b3JlSWQsIDQpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
dC0+bmV4dCgpOyAvLyBNYXhpdW0gaW5kZXggaWQgYWxsb2NhdGVkLgorICAgICAgICBpZiAoIWNo
ZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0
b3JlSWQsIDUpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpdC0+
bmV4dCgpOyAvLyBbb3B0aW9uYWxdIGhhcyBrZXkgcGF0aCAoaXMgbm90IG51bGwpCisgICAgICAg
IGlmIChjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBv
YmplY3RTdG9yZUlkLCA2KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBlbmNvZGUvZGVj
b2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgICAgICBoYXNLZXlQYXRoID0gKml0LT52
YWx1ZSgpLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgIWtleVBhdGgu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZElkcy5hcHBl
bmQob2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKG9iamVjdFN0b3Jl
TmFtZSk7CisgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGhhc0tleVBhdGggPyBrZXlQYXRo
IDogU3RyaW5nKCkpOworICAgICAgICBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5hcHBlbmQoYXV0
b0luY3JlbWVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9y
ZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCkK
K3sKKyAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKKyAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4T2JqZWN0U3RvcmVJZCk7CisgICAg
aWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG1heE9iamVjdFN0
b3JlSWQpKQorICAgICAgICBtYXhPYmplY3RTdG9yZUlkID0gMDsKKworICAgIEFTU0VSVChtYXhP
YmplY3RTdG9yZUlkID49IDApOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWF4T2Jq
ZWN0U3RvcmVJZCArIDE7CisgICAgaWYgKCFwdXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0
b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1
cm4gb2JqZWN0U3RvcmVJZDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVh
dGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVk
T2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAg
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQpOworICAgIGlmIChvYmplY3RTdG9yZUlkIDwgMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkg
PSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMSk7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGF1dG9JbmNyZW1lbnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMik7CisgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGV2aWN0YWJsZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCAzKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZl
cnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgNCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
NSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tleVBhdGhLZXkgID0gT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDYpOworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBuYW1lc0tleSA9IE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBuYW1lKTsKKworICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBtYXhJbmRl
eElkS2V5LCBrTWluaW11bUluZGV4SWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGhh
c0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBhc3NpZ25lZE9iamVjdFN0b3JlSWQgPSBvYmplY3RTdG9yZUlk
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAgIFN0cmluZyBv
YmplY3RTdG9yZU5hbWU7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgMCksIG9iamVjdFN0b3JlTmFtZSk7CisKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1h
eEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgICAgIHJldHVybjsgLy8gRklY
TUU6IFJlcG9ydCBlcnJvci4KKworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoT2Jq
ZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOwor
CisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhG
cmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZy
ZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAg
ICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgaWYgKCFkZWxldGVSYW5n
ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVN
YXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAgICAgICByZXR1cm47IC8vIEZJ
WE1FOiBSZXBvcnQgZXJyb3IuCisKKyAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOworfQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYga2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
a2V5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXks
IGRhdGEpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb247
CisgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEuZW5k
KCksIHZlcnNpb24pOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
ICh2b2lkKSB2ZXJzaW9uOworCisgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgp
KTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIExldmVsREJSZWNvcmRJZGVudGlmaWVyIDogcHVi
bGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIocHJpbWFyeUtleSwgdmVyc2lv
bikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpKTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlL
ZXkuaXNFbXB0eSgpOyB9CisgICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2b2lkIHNldFByaW1hcnlLZXkoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IH0KKyAgICBp
bnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICB2b2lkIHNl
dFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KKworcHJp
dmF0ZToKKyAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4mIHBy
aW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSksIG1f
dmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9CisgICAg
TGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEp
IHt9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBt
b3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4K
KyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld1Zl
cnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDQpOworCisgICAgaW50NjRfdCBsYXN0VmVyc2lvbiA9IC0xOwor
ICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24p
KQorICAgICAgICBsYXN0VmVyc2lvbiA9IDA7CisKKyAgICBBU1NFUlQobGFzdFZlcnNpb24gPj0g
MCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVyc2lvbiArIDE7CisgICAgYm9vbCBv
ayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIHZlcnNpb24pOworICAgIEFT
U0VSVF9VTlVTRUQob2ssIG9rKTsKKworICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFzdFZlcnNpb24p
OyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRoZSBvdmVyZmxv
dyBzY2VuYXJpby4KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCitib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQoreworICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0
TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQo
dmVyc2lvbikpOworICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOworCisgICAgaWYg
KCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtl
eSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5
KTsKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVu
Y29kZUludCh2ZXJzaW9uKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExldmVsREJS
ZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExl
dmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CisgICAgbGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOworICAgIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkg
PSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2RlKCk7CisgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOworCisgICAgZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQoreworICAgIHJldHVybiBM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwor
ICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRl
bnRpZmllcik7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVEYXRhS2V5ID0g
T2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2
ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgbV9jdXJyZW50VHJhbnNh
Y3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOworCisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAg
ICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKK30KKworZG91
YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURC
S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOworCisg
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKKworICAgIGludCBtYXhOdW1lcmljS2V5ID0gMDsKKworICAgIC8vIEZJ
WE1FOiBCZSBtb3JlIGVmZmljaWVudDogc2VlayB0byBzb21ldGhpbmcgYWZ0ZXIgdGhlIG9iamVj
dCBzdG9yZSBkYXRhLCB0aGVuIHJldmVyc2UuCisKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5
KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsg
aXQtPm5leHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7
CisgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAg
IE9iamVjdFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisg
ICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlw
ZSkgeworICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGF0YUtl
eS51c2VyS2V5KCktPm51bWJlcigpKTsKKyAgICAgICAgICAgIGlmIChuID4gbWF4TnVtZXJpY0tl
eSkKKyAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBtYXhOdW1lcmljS2V5ICsgMTsKK30KKworYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7Cisg
ICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5n
ZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludDY0
X3QgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEuZW5k
KCksIHZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERC
UmVjb3JkSWRlbnRpZmllcio+KGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisgICAgbGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOworICAgIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisKKyAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVy
YXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNv
bXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAg
IGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hhciAq
bGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBkYXRh
S2V5OworICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZk
YXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAgICAgIFJlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXkgPSBkYXRhS2V5LnVzZXJLZXkoKTsKKworICAgICAgICBpbnQ2NF90IHZlcnNpb247
CisgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4o
KSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgICAgICBpZiAoIXEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlm
aWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCpw
cmltYXJ5S2V5KSwgdmVyc2lvbik7CisgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9IGRlY29kZVN0
cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaWYgKCFjYWxsYmFjay5jYWxs
YmFjayhyaS5nZXQoKSwgaWRiVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjaGVja0luZGV4QW5kTWV0
YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBz
dG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQorewor
ICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkp
ID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEluZGV4TWV0YURhdGFLZXkgbWV0
YURhdGFLZXk7CisgICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0YURhdGFLZXk6OmRlY29kZShp
dC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkpOworICAgIEFT
U0VSVF9VTlVTRUQocCwgcCk7CisgICAgaWYgKG1ldGFEYXRhS2V5LmluZGV4SWQoKSAhPSBpbmRl
eElkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRh
VHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+
JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZlY3Rvcjxib29s
PiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IDAsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKKworICAgIEFT
U0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91
bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE11bHRpRW50cnlGbGFn
cy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKKyAgICB3aGlsZSAoaXQt
PmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgeworICAg
ICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNo
YXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIEluZGV4TWV0YURhdGFLZXkg
bWV0YURhdGFLZXk7CisgICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGlt
aXQsICZtZXRhRGF0YUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICBpbnQ2NF90
IGluZGV4SWQgPSBtZXRhRGF0YUtleS5pbmRleElkKCk7CisgICAgICAgIEFTU0VSVCghbWV0YURh
dGFLZXkubWV0YURhdGFUeXBlKCkpOworCisgICAgICAgIFN0cmluZyBpbmRleE5hbWUgPSBkZWNv
ZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOworCisgICAg
ICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCisgICAgICAgIGlmICghY2hlY2tJbmRleEFu
ZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCAxKSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2RlY29kZSBm
dW5jdGlvbnMgZm9yIGJvb2xzLgorICAgICAgICBib29sIGluZGV4VW5pcXVlID0gKml0LT52YWx1
ZSgpLmJlZ2luKCk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8ga2V5UGF0aAorICAgICAgICBp
ZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwg
MikpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcga2V5UGF0
aCA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7
CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBtdWx0aUVudHJ5IGZsYWcKKyAg
ICAgICAgYm9vbCBpbmRleE11bHRpRW50cnkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGNoZWNrSW5k
ZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgMykpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgor
ICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7CisgICAg
ICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgZm91bmRJZHMuYXBwZW5k
KGluZGV4SWQpOworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChpbmRleE5hbWUpOworICAgICAg
ICBmb3VuZEtleVBhdGhzLmFwcGVuZChrZXlQYXRoKTsKKyAgICAgICAgZm91bmRVbmlxdWVGbGFn
cy5hcHBlbmQoaW5kZXhVbmlxdWUpOworICAgICAgICBmb3VuZE11bHRpRW50cnlGbGFncy5hcHBl
bmQoaW5kZXhNdWx0aUVudHJ5KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0lu
ZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgaW50NjRfdCBtYXhJbmRleElkID0gLTE7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNSk7CisgICAgaWYgKCFn
ZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heEluZGV4SWQpKQorICAgICAgICBt
YXhJbmRleElkID0ga01pbmltdW1JbmRleElkOworCisgICAgQVNTRVJUKG1heEluZGV4SWQgPj0g
MCk7CisKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtYXhJbmRleElkICsgMTsKKyAgICBpZiAoIXB1
dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCkpCisgICAgICAgIHJldHVy
biAtMTsKKworICAgIHJldHVybiBpbmRleElkOworfQorCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1Vu
aXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5kZXhJZChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAg
aWYgKGluZGV4SWQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gdW5pcXVl
S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIDEpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDIp
OworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDMpOworCisgICAg
Ym9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwg
bmFtZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9
IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7
CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1dFN0
cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJy
b3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1dEludCht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbXVsdGlFbnRyeUtleSwgaXNNdWx0aUVudHJ5KTsK
KyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiB1bmlxdWVLZXkgPSBJ
bmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgMSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMik7CisKKyAg
ICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUobmFtZUtleSkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZSh1bmlxdWVLZXkp
KSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1v
dmUoa2V5UGF0aEtleSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGluZGV4RGF0YVN0YXJ0ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
RGF0YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0YUVuZCkpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKiByZWNvcmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpbmRleElkID49IGtNaW5pbXVt
SW5kZXhJZCk7CisgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNv
cmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIq
PihyZWNvcmRJZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkp
LCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKworICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRl
bnRpZmllci0+dmVyc2lvbigpKSk7CisgICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50
aWZpZXItPnByaW1hcnlLZXkoKSk7CisKKyAgICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24t
PnB1dChpbmRleERhdGFLZXksIGRhdGEpOworfQorCitzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RL
ZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCit7CisgICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsK
KyAgICBpdC0+c2Vlayh0YXJnZXQpOworCisgICAgaWYgKCFpdC0+aXNWYWxpZCgpKSB7CisgICAg
ICAgIGl0LT5zZWVrVG9MYXN0KCk7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aGlsZSAoY29tcGFyZUluZGV4S2V5
cyhpdC0+a2V5KCksIHRhcmdldCkgPiAwKSB7CisgICAgICAgIGl0LT5wcmV2KCk7CisgICAgICAg
IGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBkbyB7CisgICAgICAgIGZvdW5kS2V5LmNsZWFyKCk7CisgICAgICAgIGZvdW5kS2V5LmFw
cGVuZChpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpIC0gaXQtPmtleSgpLmJlZ2lu
KCkpOworCisgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzZXZlcmFsIGluZGV4IGtleXMgdGhhdCBj
b21wYXJlIGVxdWFsLiBXZSB3YW50IHRoZSBsYXN0IG9uZS4KKyAgICAgICAgaXQtPm5leHQoKTsK
KyAgICB9IHdoaWxlIChpdC0+aXNWYWxpZCgpICYmICFjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXko
KSwgdGFyZ2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwgaW50NjRfdCwgaW50
NjRfdCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0ZSBpbmRleCBkYXRhIHZpYSB0
aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgorICAgIHJldHVybiB0cnVlOworfQorCitTdHJp
bmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBrZXkpCit7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGdldFByaW1hcnlL
ZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOworICAg
IGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJu
IGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5
S2V5KTsKK30KKworc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQor
eworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKKyAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPmdldChrZXksIGRhdGEpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwg
ZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKK30KKworc3RhdGljIGJvb2wgZmluZEtleUluSW5kZXgo
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIFZl
Y3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKK3sKKyAgICBBU1NFUlQoZm91bmRF
bmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxl
dmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXkpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNh
Y3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsobGV2ZWxkYktleSk7CisKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCBsZXZl
bGRiS2V5KSA+IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaW50NjRf
dCB2ZXJzaW9uOworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50KGl0LT52YWx1
ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKKyAgICAgICAgaWYgKCFw
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOworCisgICAgICAgIGlmICghdmVy
c2lvbkV4aXN0cyh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lv
biwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSBzdGFs
ZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgIHRyYW5zYWN0aW9u
LT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlL
ZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7
CisgICAgaWYgKGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGZvdW5kRW5jb2RlZFByaW1hcnlL
ZXkpKSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7CisgICAgICAgIGRlY29k
ZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOworICAgICAgICByZXR1cm4gcHJpbWFyeUtleS5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQ
dHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKKyAg
ICBpZiAoIWZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpbmRleEtleSwgZm91bmRFbmNvZGVkUHJpbWFy
eUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlY29kZUlEQktleShmb3VuZEVu
Y29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIGZv
dW5kUHJpbWFyeUtleSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFjZSB7CisKK3N0
cnVjdCBDdXJzb3JPcHRpb25zIHsKKyAgICBWZWN0b3I8Y2hhcj4gbG93S2V5OworICAgIGJvb2wg
bG93T3BlbjsKKyAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAgICBib29sIGhpZ2hPcGVuOwor
ICAgIGJvb2wgZm9yd2FyZDsKKyAgICBib29sIHVuaXF1ZTsKK307CisKK2NsYXNzIEN1cnNvcklt
cGxDb21tb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgeworcHVibGljOgorICAg
IC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVu
Y3Rpb24oY29uc3QgSURCS2V5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5
KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
ID0gMDsKKyAgICBib29sIGZpcnN0U2VlaygpOworCitwcm90ZWN0ZWQ6CisgICAgQ3Vyc29ySW1w
bENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
CisgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0K
KworICAgIEN1cnNvckltcGxDb21tb24oY29uc3QgQ3Vyc29ySW1wbENvbW1vbiogb3RoZXIpCisg
ICAgICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKKyAgICAgICAgLCBt
X2N1cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykKKyAgICAgICAgLCBtX2N1cnJl
bnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKKyAgICB7CisgICAgICAgIGlmIChvdGhlci0+bV9p
dGVyYXRvcikgeworICAgICAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0
ZUl0ZXJhdG9yKCk7CisKKyAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRv
ci0+a2V5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB+Q3Vyc29y
SW1wbENvbW1vbigpIHt9CisKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
CisgICAgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7CisgICAgT3duUHRyPExldmVsREJJ
dGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Cit9
OworCitib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCit7CisgICAgbV9pdGVyYXRv
ciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICBpZiAobV9jdXJzb3JP
cHRpb25zLmZvcndhcmQpCisgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9jdXJzb3JPcHRpb25z
Lmxvd0tleSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1fY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCFtX2l0ZXJhdG9y
LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1f
Y3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21w
YXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkg
Pj0gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0
aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID4gMCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMuZm9y
d2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRl
cmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFt
X2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtl
eSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDApCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0
aW9ucy5sb3dPcGVuKSB7CisgICAgICAgICAgICAvLyBsb3dLZXkgbm90IGluY2x1ZGVkIGluIHRo
ZSByYW5nZS4KKyAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtl
eSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKSB7CisgICAgICAgICAgICAgICAgbV9p
dGVyYXRvci0+bmV4dCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9j
dXJzb3JPcHRpb25zLmhpZ2hPcGVuKSB7CisgICAgICAgICAgICAvLyBoaWdoS2V5IG5vdCBpbmNs
dWRlZCBpbiB0aGUgcmFuZ2UuCisgICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4S2V5cyhtX2l0
ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIHsKKyAgICAgICAg
ICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxvYWRDdXJyZW50Um93KCkp
IHsKKyAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKKyAgICAgICAgICAg
ICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9pdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ3Vyc29ySW1wbENvbW1v
bjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSkKK3sKKyAgICAvLyBGSVhNRTog
VGhpcyBzaGFyZXMgYSBsb3Qgb2YgY29kZSB3aXRoIGZpcnN0U2Vlay4KKyAgICBSZWZQdHI8SURC
S2V5PiBwcmV2aW91c0tleSA9IG1fY3VycmVudEtleTsKKworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgbV9pdGVyYXRvci0+
bmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7CisK
KyAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IHRyYXNoOworICAgICAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gpKQorICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNv
ck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwg
bV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIC8vIGhpZ2gga2V5IG5vdCBpbmNsdWRlZCBp
biByYW5nZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9jdXJzb3JP
cHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5k
ZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPiAwKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5m
b3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9p
dGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDw9IDApIC8vIGxvdyBrZXkg
bm90IGluY2x1ZGVkIGluIHJhbmdlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5sb3dPcGVu
ICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5s
b3dLZXkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWxv
YWRDdXJyZW50Um93KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoa2V5
KSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtleSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
Y3Vyc29yT3B0aW9ucy51bmlxdWUgJiYgbV9jdXJyZW50S2V5LT5pc0VxdWFsKHByZXZpb3VzS2V5
LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBPYmplY3RTdG9yZUN1cnNvckltcGwgOiBw
dWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gQ3Vyc29y
SW1wbENvbW1vbgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4gbV9jdXJyZW50
VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIE9WRVJS
SURFCisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0KKyAgICB2aXJ0
dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitwcml2YXRlOgorICAg
IE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IEN1cnNvckltcGxD
b21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0KKworICAgIE9i
amVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUN1cnNvckltcGwqIG90aGVyKQor
ICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgICwgbV9jdXJyZW50VmFs
dWUob3RoZXItPm1fY3VycmVudFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9j
dXJyZW50VmFsdWU7CisgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBtX2lkZW50
aWZpZXI7Cit9OworCitib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3co
KQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOworICAg
IGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisKKyAgICBP
YmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OworICAgIHAgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7CisgICAg
QVNTRVJUKHApOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9j
dXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3Qg
dmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZh
bHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CisgICAg
QVNTRVJUKHEpOworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
RklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0
aW1pemUuCisgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0
ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworCisgICAgbV9jdXJyZW50
VmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1
cnNvckltcGxDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5
Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0
IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykp
OworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1
cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIEN1cnNvckltcGxDb21tb24KKyAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJp
bmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJl
dHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBp
bnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToKKyAgICBJbmRl
eEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleEtleUN1
cnNvckltcGwoY29uc3QgSW5kZXhLZXlDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBDdXJz
b3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9wcmlt
YXJ5S2V5KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7
Cit9OworCitib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQoreworICAg
IGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOworICAgIGNvbnN0IGNo
YXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisgICAgSW5kZXhEYXRhS2V5
IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUocCwga2V5TGltaXQs
ICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0gaW5kZXhEYXRhS2V5LnVzZXJL
ZXkoKTsKKworICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiBx
ID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+
dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHEpOworICAgIGlm
ICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcSA9IGRlY29kZUlEQktleShxLCBt
X2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOworICAgIEFTU0VSVChxKTsK
KyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxjaGFyPiBw
cmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtl
eS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlL
ZXkpOworCisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24t
PmdldChwcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHQg
PSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVE
YXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVy
c2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMpKTsKKyAgICB9CisKKyAgICAv
LyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsg
cmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsg
fQorICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0ZToKKyAgICBJbmRleEN1cnNv
ckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9u
cyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9u
LCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJbmRleEN1cnNvckltcGwoY29u
c3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90
aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5KQorICAgICAg
ICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAgICAgICwgbV9wcmltYXJ5TGV2ZWxEQktl
eShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRy
PElEQktleT4gbV9wcmltYXJ5S2V5OworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFZlY3Rvcjxj
aGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OworfTsKKworYm9vbCBJbmRleEN1cnNvckltcGw6Omxv
YWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyICpwID0gbV9pdGVyYXRvci0+a2V5KCku
YmVnaW4oKTsKKyAgICBjb25zdCBjaGFyICpsaW1pdCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgp
OworCisgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5kZXhEYXRhS2V5
OjpkZWNvZGUocCwgbGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0g
aW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGNvbnN0IGNoYXIgKnEgPSBtX2l0ZXJhdG9y
LT52YWx1ZSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciAqdmFsdWVMaW1pdCA9IG1faXRlcmF0
b3ItPnZhbHVlKCkuZW5kKCk7CisKKyAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247CisgICAg
cSA9IGRlY29kZVZhckludChxLCB2YWx1ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9uKTsKKyAgICBB
U1NFUlQocSk7CisgICAgaWYgKCFxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcSA9IGRl
Y29kZUlEQktleShxLCB2YWx1ZUxpbWl0LCBtX3ByaW1hcnlLZXkpOworICAgIEFTU0VSVChxKTsK
KyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcHJpbWFyeUxldmVs
REJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJ
ZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKKworICAg
IFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQobV9wcmlt
YXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50
NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVW
YXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lv
bik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgewor
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV92YWx1ZSA9IGRlY29kZVN0cmluZyh0LCBy
ZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK1Bhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1
cnNvck9wdGlvbnM7CisKKyAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93
ZXIoKTsKKyAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKKyAg
ICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9O
T19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CisgICAgY3Vyc29y
T3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNB
VEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpOworCisgICAg
aWYgKCFsb3dlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5
KCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVk
ZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcmFuZ2UtPmxv
d2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJPcGVu
KCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlv
bnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5mb3J3
YXJkKQorICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHRydWU7IC8vIE5vdCBp
bmNsdWRlZC4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIGEga2V5IHRo
YXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1
YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5nZS0+dXBwZXIoKSk7CisgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisKKyAgICAg
ICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAgICAgICAgIC8vIEZvciByZXZl
cnNlIGN1cnNvcnMsIHdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gZm91bmRIaWdoS2V5OworICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCwgYnV0
IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRoYXQuCisg
ICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlz
KGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAgICAgICAgICAg
ICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOworCisgICAgICAgICAgICBjdXJzb3JP
cHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
ZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNvcklt
cGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7Cisg
ICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7
CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1
cnNvck9wdGlvbnM7CisgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2Vy
KCk7CisgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CisgICAg
Y3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9f
RFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOworICAgIGN1cnNvck9w
dGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRF
IHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsKKworICAgIGlm
ICghbG93ZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwor
ICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCisgICAg
fSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPmxvd2VyKCkp
OworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+bG93ZXJPcGVuKCk7Cisg
ICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7IC8v
IEluY2x1ZGVkLgorCisgICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7IC8vIFdl
IG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtl
eUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9u
cy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gSW5kZXhE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdl
LT51cHBlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51cHBl
ck9wZW4oKTsKKworICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OworICAgICAgICBp
ZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBTZWVrIHRvIHRo
ZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBp
bmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNs
dWRlIHRoYXQuCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJ
bmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKKyAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKworICAgICAgICBjdXJzb3JP
cHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgfQorCisgICAgUmVmUHRyPEluZGV4
S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIGlmICghY3Vyc29yLT5m
aXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3Vyc29yLnJlbGVh
c2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIGJv
b2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJvb2wgdXBwZXJC
b3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOworICAgIGN1cnNvck9wdGlvbnMuZm9yd2Fy
ZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUKTsKKyAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9IChkaXJl
Y3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7CisKKyAgICBpZiAoIWxvd2VyQm91bmQpIHsKKyAg
ICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAgICAgICAgY3Vyc29yT3B0aW9u
cy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgorICAgIH0gZWxzZSB7CisgICAgICAgIGN1
cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0
aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOworICAgIH0KKworICAgIGlmICghdXBw
ZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6
OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAgICAg
ICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KKworICAgICAg
ICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhp
c3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGN1
cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7CisgICAgICAg
IGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisKKyAgICAgICAg
VmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKKyAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUg
c2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQg
dXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgorICAgICAgICBp
ZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtl
eSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAgICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hPcGVuID0gZmFsc2U7CisKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91
bmRIaWdoS2V5OworICAgIH0KKworICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9
IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJz
b3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
VHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMpOwor
fQorCitQYXNzUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkxldmVsREJCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0
aW9uKGJhY2tpbmdTdG9yZSkpOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQor
ICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQoreworfQorCit2b2lkIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCit7CisgICAgQVNTRVJUKCFtX2Jh
Y2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIG1fYmFja2luZ1N0b3JlLT5t
X2N1cnJlbnRUcmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFja2lu
Z1N0b3JlLT5tX2RiLmdldCgpKTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rp
b24tPmNvbW1pdCgpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5j
bGVhcigpOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5yb2xsYmFj
aygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOwor
fQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cGF0aEJhc2VBcmcpCit7CisgICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7CisKKyAg
ICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBzYW1lIExldmVsREIgZGF0YWJh
c2UgZm9yIGFsbCBvcmlnaW5zLgorICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAi
LmluZGV4ZWRkYi5sZXZlbGRiIik7CisKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBjaGVja2luZyBm
b3IgcHJlc2VuY2Ugb2YgdGhlIGRvbWFpbiwgbm90IHRoZSBkYXRhYmFzZSBpdHNlbGYKKyAgICBy
ZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9o
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxEQikKKworI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKK2NsYXNzIExldmVs
REJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2NsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDsKKworY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJC
YWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0
IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOworICAgIHZp
cnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRE
YXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91
bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVh
bCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+
JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3Jl
YXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3Jl
bWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBm
b3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBW
ZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFn
cywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7CisgICAgdmlydHVhbCBib29s
IGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwg
Ym9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOworICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVU
cmFuc2FjdGlvbigpOworCisgICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsK
KworcHJpdmF0ZToKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZlbERCRGF0YWJh
c2U+KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7
CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7CisgICAgUmVmUHRy
PExldmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CisKKyAgICBjbGFzcyBU
cmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJh
Y2soKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNr
aW5nU3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3Rv
cmU7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8g
VVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNv
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCS2V5
LmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorCisvLyBMZXZlbERCIHN0b3JlcyBrZXkvdmFsdWUgcGFpcnMuIEtleXMgYW5k
IHZhbHVlcyBhcmUgc3RyaW5ncyBvZiBieXRlcywgbm9ybWFsbHkgb2YgdHlwZSBWZWN0b3I8Y2hh
cj4uCisvLworLy8gVGhlIGtleXMgaW4gdGhlIGJhY2tpbmcgc3RvcmUgYXJlIHZhcmlhYmxlLWxl
bmd0aCB0dXBsZXMgd2l0aCBkaWZmZXJlbnQgdHlwZXMKKy8vIG9mIGZpZWxkcy4gRWFjaCBrZXkg
aW4gdGhlIGJhY2tpbmcgc3RvcmUgc3RhcnRzIHdpdGggYSB0ZXJuYXJ5IHByZWZpeDogKGRhdGFi
YXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkKS4gRm9yIGVhY2gsIDAgaXMgcmVzZXJ2
ZWQgZm9yIG1ldGEtZGF0YS4KKy8vIFRoZSBwcmVmaXggbWFrZXMgc3VyZSB0aGF0IGRhdGEgZm9y
IGEgc3BlY2lmaWMgZGF0YWJhc2UsIG9iamVjdCBzdG9yZSwgYW5kIGluZGV4IGFyZSBncm91cGVk
IHRvZ2V0aGVyLiBUaGUgbG9jYWxpdHkgaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZTogY29t
bW9uCisvLyBvcGVyYXRpb25zIHNob3VsZCBvbmx5IG5lZWQgYSBtaW5pbWFsIG51bWJlciBvZiBz
ZWVrIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBhbGwgdGhlIG1ldGEtZGF0YSBmb3IgYSBkYXRh
YmFzZSBpcyBncm91cGVkIHRvZ2V0aGVyIHNvIHRoYXQgcmVhZGluZyB0aGF0CisvLyBtZXRhLWRh
dGEgb25seSByZXF1aXJlcyBvbmUgc2Vlay4KKy8vCisvLyBFYWNoIGtleSB0eXBlIGhhcyBhIGNs
YXNzIChpbiBzcXVhcmUgYnJhY2tldHMgYmVsb3cpIHdoaWNoIGtub3dzIGhvdyB0byBlbmNvZGUs
IGRlY29kZSwgYW5kIGNvbXBhcmUgdGhhdCBrZXkgdHlwZS4KKy8vCisvLyBHbG9iYWwgbWV0YS1k
YXRhIGhhdmUga2V5cyB3aXRoIHByZWZpeCAoMCwwLDApLCBmb2xsb3dlZCBieSBhIHR5cGUgYnl0
ZToKKy8vCisvLyAgICAgPDAsIDAsIDAsIDA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0+IEluZGV4ZWREQi9MZXZlbERCIHNjaGVtYSB2ZXJzaW9uICgwIGZvciBu
b3cpIFtTY2hlbWFWZXJzaW9uS2V5XQorLy8gICAgIDwwLCAwLCAwLCAxPiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUaGUgbWF4aW11bSBkYXRhYmFzZSBpZCBl
dmVyIGFsbG9jYXRlZCBbTWF4RGF0YWJhc2VJZEtleV0KKy8vICAgICA8MCwgMCwgMCwgMTAwLCBk
YXRhYmFzZSBpZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gRXhpc3RlbmNlIGltcGxp
ZXMgdGhlIGRhdGFiYXNlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW0RhdGFiYXNlRnJlZUxpc3RL
ZXldCisvLyAgICAgPDAsIDAsIDAsIDIwMSwgdXRmMTYgb3JpZ2luIG5hbWUsIHV0ZjE2IGRhdGFi
YXNlIG5hbWU+ID0+IERhdGFiYXNlIGlkIFtEYXRhYmFzZU5hbWVLZXldCisvLworLy8KKy8vIERh
dGFiYXNlIG1ldGEtZGF0YToKKy8vCisvLyAgICAgQWdhaW4sIHRoZSBwcmVmaXggaXMgZm9sbG93
ZWQgYnkgYSB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMD4gPT4g
dXRmMTYgb3JpZ2luIG5hbWUgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNl
IGlkLCAwLCAwLCAxPiA9PiB1dGYxNiBkYXRhYmFzZSBuYW1lIFtEYXRhYmFzZU1ldGFEYXRhS2V5
XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMj4gPT4gdXRmMTYgdXNlciB2ZXJzaW9uIGRh
dGEgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAzPiA9
PiBtYXhpbXVtIG9iamVjdCBzdG9yZSBpZCBldmVyIGFsbG9jYXRlZCBbRGF0YWJhc2VNZXRhRGF0
YUtleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIG1ldGEtZGF0YToKKy8vCisvLyAgICAgVGhl
IHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiBhIHZhcmlhYmxlLWxlbmd0
aCBpbnRlZ2VyLCBhbmQgdGhlbiBhbm90aGVyIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIChGSVhN
RTogdGhpcyBzaG91bGQgYmUgYSBieXRlKS4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAw
LCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAwPiA9PiB1dGYxNiBvYmplY3Qgc3RvcmUgbmFtZSBbT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmpl
Y3Qgc3RvcmUgaWQsIDE+ID0+IHV0ZjE2IGtleSBwYXRoIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5
XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMj4gPT4g
aGFzIGF1dG8gaW5jcmVtZW50IFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMz4gPT4gaXMgZXZpY3RhYmxlIFtP
YmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9i
amVjdCBzdG9yZSBpZCwgND4gPT4gbGFzdCAidmVyc2lvbiIgbnVtYmVyIFtPYmplY3RTdG9yZU1l
dGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBp
ZCwgNT4gPT4gbWF4aW11bSBpbmRleCBpZCBldmVyIGFsbG9jYXRlZCBbT2JqZWN0U3RvcmVNZXRh
RGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQs
IDY+ID0+IGhhcyBrZXkgcGF0aCAodnMuIG51bGwpIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQor
Ly8KKy8vCisvLyBJbmRleCBtZXRhLWRhdGE6CisvLworLy8gICAgIFRoZSBwcmVmaXggaXMgZm9s
bG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gdHdvIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2Vycywg
YW5kIHRoZW4gYW5vdGhlciB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAwPiA9PiB1dGYxNiBpbmRleCBuYW1l
IFtJbmRleE1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmpl
Y3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAxPiA9PiBhcmUgaW5kZXgga2V5cyB1bmlxdWUgW0luZGV4
TWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9y
ZSBpZCwgaW5kZXggaWQsIDI+ID0+IHV0ZjE2IGtleSBwYXRoIFtJbmRleE1ldGFEYXRhS2V5XQor
Ly8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlk
LCAzPiA9PiBpcyBpbmRleCBtdWx0aS1lbnRyeSBbSW5kZXhNZXRhRGF0YUtleV0KKy8vCisvLwor
Ly8gT3RoZXIgb2JqZWN0IHN0b3JlIGFuZCBpbmRleCBtZXRhLWRhdGE6CisvLworLy8gICAgIFRo
ZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSBvYmplY3Qgc3RvcmUgYW5k
IGluZGV4IGlkIGFyZSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlcnMsIHRoZSB1dGYxNiBzdHJpbmdz
IGFyZSB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncy4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCAxNTAsIG9iamVjdCBzdG9yZSBpZD4gICAgICAgICAgICAgICAgICAgPT4gZXhpc3RlbmNl
IGltcGxpZXMgdGhlIG9iamVjdCBzdG9yZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtPYmplY3RT
dG9yZUZyZWVMaXN0S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTUxLCBvYmplY3Qg
c3RvcmUgaWQsIGluZGV4IGlkPiAgICAgICAgID0+IGV4aXN0ZW5jZSBpbXBsaWVzIHRoZSBpbmRl
eCBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtJbmRleEZyZWVMaXN0S2V5XQorLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgMjAwLCB1dGYxNiBvYmplY3Qgc3RvcmUgbmFtZT4gICAgICAgICAgID0+
IG9iamVjdCBzdG9yZSBpZCBbT2JqZWN0U3RvcmVOYW1lc0tleV0KKy8vICAgICA8ZGF0YWJhc2Ug
aWQsIDAsIDAsIDIwMSwgb2JqZWN0IHN0b3JlIGlkLCB1dGYxNiBpbmRleCBuYW1lPiA9PiBpbmRl
eCBpZCBbSW5kZXhOYW1lc0tleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIGRhdGE6CisvLwor
Ly8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSB1c2VyIGtl
eSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlkLCBvYmplY3Qg
c3RvcmUgaWQsIDEsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIsIHNlcmlhbGl6ZWQgc2NyaXB0IHZh
bHVlIFtPYmplY3RTdG9yZURhdGFLZXldCisvLworLy8KKy8vICJFeGlzdHMiIGVudHJ5OgorLy8K
Ky8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgdXNlciBr
ZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCisvLworLy8gICAgIDxkYXRhYmFzZSBpZCwgb2JqZWN0
IHN0b3JlIGlkLCAyLCB1c2VyIGtleT4gPT4gInZlcnNpb24iIFtFeGlzdHNFbnRyeUtleV0KKy8v
CisvLworLy8gSW5kZXggZGF0YToKKy8vCisvLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBi
eSBhIHR5cGUgYnl0ZS4gVGhlIGluZGV4IGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4gVGhlIHNl
cXVlbmNlIG51bWJlciBpcyBhIHZhcmlhYmxlIGxlbmd0aCBpbnRlZ2VyLgorLy8gICAgIFRoZSBw
cmltYXJ5IGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRhdGFiYXNlIGlk
LCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCBpbmRleCBrZXksIHNlcXVlbmNlIG51bWJlciwg
cHJpbWFyeSBrZXk+ID0+ICJ2ZXJzaW9uIiwgcHJpbWFyeSBrZXkgW0luZGV4RGF0YUtleV0KKy8v
CisvLyAgICAgKFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgb2Jzb2xldGU7IGl0IHdhcyB1c2VkIHRv
IGFsbG93IHR3byBlbnRyaWVzIHdpdGgKKy8vICAgICB0aGUgc2FtZSB1c2VyIChpbmRleCkga2V5
IGluIG5vbi11bmlxdWUgaW5kZXhlcyBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9mCisvLyAgICAg
dGhlIHByaW1hcnkga2V5IGluIHRoZSBkYXRhLiBUaGUgInZlcnNpb24iIGZpZWxkIGlzIHVzZWQg
dG8gd2VlZCBvdXQgc3RhbGUKKy8vICAgICBpbmRleCBkYXRhLiBXaGVuZXZlciBuZXcgb2JqZWN0
IHN0b3JlIGRhdGEgaXMgaW5zZXJ0ZWQsIGl0IGdldHMgYSBuZXcKKy8vICAgICAidmVyc2lvbiIg
bnVtYmVyLCBhbmQgbmV3IGluZGV4IGRhdGEgaXMgd3JpdHRlbiB3aXRoIHRoaXMgbnVtYmVyLiBX
aGVuCisvLyAgICAgdGhlIGluZGV4IGlzIHVzZWQgZm9yIGxvb2stdXBzLCBlbnRyaWVzIGFyZSB2
YWxpZGF0ZWQgYWdhaW5zdCB0aGUKKy8vICAgICAiZXhpc3RzIiBlbnRyaWVzLCBhbmQgcmVjb3Jk
cyB3aXRoIG9sZCAidmVyc2lvbiIgbnVtYmVycyBhcmUgZGVsZXRlZAorLy8gICAgIHdoZW4gdGhl
eSBhcmUgZW5jb3VudGVyZWQgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LAorLy8gICAgIEluZGV4
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3csIGFuZCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KS4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElEQkxldmVsREJD
b2RpbmcgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TnVsbFR5cGVCeXRl
ID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlTdHJpbmdUeXBlQnl0ZSA9
IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5RGF0ZVR5cGVCeXRlID0gMjsK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlOdW1iZXJUeXBlQnl0ZSA9IDM7Citz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5QXJyYXlUeXBlQnl0ZSA9IDQ7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TWluS2V5VHlwZUJ5dGUgPSA1OworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCA9IDE7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRXhpc3RzRW50cnlJbmRleElkID0gMjsKKworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIga1NjaGVtYVZlcnNpb25UeXBlQnl0ZSA9IDA7CitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBrTWF4RGF0YWJhc2VJZFR5cGVCeXRlID0gMTsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZUZyZWVMaXN0VHlwZUJ5dGUgPSAxMDA7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRGF0YWJhc2VOYW1lVHlwZUJ5dGUgPSAyMDE7CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUgPSA1
MDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUgPSAx
MDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVC
eXRlID0gMTUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4RnJlZUxpc3RUeXBl
Qnl0ZSA9IDE1MTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZU5hbWVz
VHlwZUJ5dGUgPSAyMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5kZXhOYW1lc0tl
eVR5cGVCeXRlID0gMjAxOworCisjaWZuZGVmIElOVDY0X01BWAorI2RlZmluZSBJTlQ2NF9NQVgg
MHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUg
SU5UMzJfTUFYIDB4N2ZmZmZmZmZMCisjZW5kaWYKKworCitWZWN0b3I8Y2hhcj4gZW5jb2RlQnl0
ZSh1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQo
Yyk7CisgICAgcmV0dXJuIHY7Cit9CisKK1ZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKQoreworICAg
IHJldHVybiBlbmNvZGVCeXRlKGtJREJLZXlOdWxsVHlwZUJ5dGUpOworfQorCitWZWN0b3I8Y2hh
cj4gbWluSURCS2V5KCkKK3sKKyAgICByZXR1cm4gZW5jb2RlQnl0ZShrSURCS2V5TWluS2V5VHlw
ZUJ5dGUpOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlSW50KGludDY0X3QgbikKK3sKKyAgICBB
U1NFUlQobiA+PSAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTogU2l6ZSB0aGlz
IGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBuOwor
ICAgICAgICByZXQuYXBwZW5kKGMpOworICAgICAgICBuID4+PSA4OworICAgIH0gd2hpbGUgKG4p
OworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50NjRfdCBkZWNvZGVJbnQoY29uc3QgY2hhciog
YmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKyAg
ICBpbnQ2NF90IHJldCA9IDA7CisKKyAgICBpbnQgc2hpZnQgPSAwOworICAgIHdoaWxlIChiZWdp
biA8IGVuZCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnaW4rKzsKKyAgICAgICAg
cmV0IHw9IHN0YXRpY19jYXN0PGludDY0X3Q+KGMpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCAr
PSA4OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZUlu
dHMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgQVNTRVJUKGEgPj0gMCk7CisgICAgQVNT
RVJUKGIgPj0gMCk7CisKKyAgICBpbnQ2NF90IGRpZmYgPSBhIC0gYjsKKyAgICBpZiAoZGlmZiA8
IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZGlmZiA+IDApCisgICAgICAgIHJldHVy
biAxOworICAgIHJldHVybiAwOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlVmFySW50KGludDY0
X3QgbikKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhNRTogU2l6ZSB0aGlzIGF0IGNy
ZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBuICYgMHg3ZjsK
KyAgICAgICAgbiA+Pj0gNzsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBjIHw9IDB4ODA7
CisgICAgICAgIHJldC5hcHBlbmQoYyk7CisgICAgfSB3aGlsZSAobik7CisKKyAgICByZXR1cm4g
cmV0OworfQorCitjb25zdCBjaGFyKiBkZWNvZGVWYXJJbnQoY29uc3QgY2hhciAqcCwgY29uc3Qg
Y2hhciogbGltaXQsIGludDY0X3QmIGZvdW5kSW50KQoreworICAgIEFTU0VSVChsaW1pdCA+PSBw
KTsKKyAgICBmb3VuZEludCA9IDA7CisgICAgaW50IHNoaWZ0ID0gMDsKKworICAgIGRvIHsKKyAg
ICAgICAgaWYgKHAgPj0gbGltaXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB1
bnNpZ25lZCBjaGFyIGMgPSAqcDsKKyAgICAgICAgZm91bmRJbnQgfD0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oYyAmIDB4N2YpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSA3OworICAgIH0gd2hp
bGUgKCpwKysgJiAweDgwKTsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IGVuY29k
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit7CisgICAgVmVjdG9yPGNoYXI+IHJldDsgLy8gRklY
TUU6IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgdSA9IHNbaV07CisgICAgICAgIHVu
c2lnbmVkIGNoYXIgaGkgPSB1ID4+IDg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbG8gPSB1Owor
ICAgICAgICByZXQuYXBwZW5kKGhpKTsKKyAgICAgICAgcmV0LmFwcGVuZChsbyk7CisgICAgfQor
CisgICAgcmV0dXJuIHJldDsKK30KKworU3RyaW5nIGRlY29kZVN0cmluZyhjb25zdCBjaGFyKiBw
LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgQVNTRVJUKGVuZCA+PSBwKTsKKyAgICBBU1NFUlQo
ISgoZW5kIC0gcCkgJSAyKSk7CisKKyAgICBzaXplX3QgbGVuID0gKGVuZCAtIHApIC8gMjsKKyAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxlbik7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgaGkgPSAqcCsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0gKnArKzsKKwor
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoaGkgPDwgOCkgfCBsbykp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworVmVjdG9yPGNo
YXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5nJiBzKQoreworICAgIFZlY3Rv
cjxjaGFyPiByZXQgPSBlbmNvZGVWYXJJbnQocy5sZW5ndGgoKSk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVTdHJpbmcocykpOworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIqIGRlY29k
ZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGltaXQsIFN0cmlu
ZyYgZm91bmRTdHJpbmcpCit7CisgICAgQVNTRVJUKGxpbWl0ID49IHApOworICAgIGludDY0X3Qg
bGVuOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbik7CisgICAgaWYgKCFwKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocCArIGxlbiAqIDIgPiBsaW1pdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0cmluZyhwLCBwICsgbGVuICog
Mik7CisgICAgcCArPSBsZW4gKiAyOworICAgIHJldHVybiBwOworfQorCitpbnQgY29tcGFyZUVu
Y29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRQ
LCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKQoreworICAgIEFTU0VSVCgmcCAh
PSAmcSk7CisgICAgQVNTRVJUKGxpbWl0UCA+PSBwKTsKKyAgICBBU1NFUlQobGltaXRRID49IHEp
OworICAgIGludDY0X3QgbGVuUCwgbGVuUTsKKyAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0
UCwgbGVuUCk7CisgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1pdFEsIGxlblEpOworICAgIEFT
U0VSVChwICYmIHEpOworICAgIEFTU0VSVChsZW5QID49IDApOworICAgIEFTU0VSVChsZW5RID49
IDApOworICAgIEFTU0VSVChwICsgbGVuUCAqIDIgPD0gbGltaXRQKTsKKyAgICBBU1NFUlQocSAr
IGxlblEgKiAyIDw9IGxpbWl0USk7CisKKyAgICBjb25zdCBjaGFyKiBzdGFydFAgPSBwOworICAg
IGNvbnN0IGNoYXIqIHN0YXJ0USA9IHE7CisgICAgcCArPSBsZW5QICogMjsKKyAgICBxICs9IGxl
blEgKiAyOworCisgICAgaWYgKHAgPiBsaW1pdFAgfHwgcSA+IGxpbWl0USkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBjb25zdCBzaXplX3QgbG1pbiA9IHN0YXRpY19jYXN0PHNpemVfdD4obGVu
UCA8IGxlblEgPyBsZW5QIDogbGVuUSk7CisgICAgaWYgKGludCB4ID0gbWVtY21wKHN0YXJ0UCwg
c3RhcnRRLCBsbWluICogMikpCisgICAgICAgIHJldHVybiB4OworCisgICAgaWYgKGxlblAgPT0g
bGVuUSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKGxlblAgPiBsZW5RKSA/IDEg
OiAtMTsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZURvdWJsZShkb3VibGUgeCkKK3sKKyAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBiZSBieXRlIG9yZGVyIGluZGVw
ZW5kZW50LgorICAgIGNvbnN0IGNoYXIqIHAgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmeCk7
CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQocCwgc2l6ZW9mKHgpKTsKKyAgICBB
U1NFUlQodi5zaXplKCkgPT0gc2l6ZW9mKHgpKTsKKyAgICByZXR1cm4gdjsKK30KKworY29uc3Qg
Y2hhciogZGVjb2RlRG91YmxlKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBkb3Vi
bGUqIGQpCit7CisgICAgaWYgKHAgKyBzaXplb2YoKmQpID4gbGltaXQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgY2hhciogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGQpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCpkKTsgKytpKQorICAgICAgICAqeCsrID0gKnAr
KzsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktleShjb25zdCBJ
REJLZXkmIGtleSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OworICAgIGVuY29kZUlEQktleShr
ZXksIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBlbmNvZGVJREJLZXkoY29uc3Qg
SURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgaW50bykKK3sKKyAgICBzaXplX3QgcHJldmlvdXNT
aXplID0gaW50by5zaXplKCk7CisgICAgc3dpdGNoIChrZXkudHlwZSgpKSB7CisgICAgY2FzZSBJ
REJLZXk6OkludmFsaWRUeXBlOgorICAgIGNhc2UgSURCS2V5OjpNaW5UeXBlOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURC
S2V5TnVsbFR5cGVCeXRlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElEQktleTo6QXJy
YXlUeXBlOgorICAgICAgICB7CisgICAgICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJ
REJLZXlBcnJheVR5cGVCeXRlKSk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0ga2V5LmFy
cmF5KCkuc2l6ZSgpOworICAgICAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlVmFySW50KGxlbmd0
aCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgICAgICBlbmNvZGVJREJLZXkoKmtleS5hcnJheSgpW2ldLCBpbnRvKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSA+IHByZXZpb3Vz
U2l6ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIElEQktleTo6
U3RyaW5nVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURCS2V5U3RyaW5n
VHlwZUJ5dGUpKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChr
ZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8u
c2l6ZSgpID4gcHJldmlvdXNTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSURCS2V5
OjpEYXRlVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURCS2V5RGF0ZVR5
cGVCeXRlKSk7CisgICAgICAgIGludG8uYXBwZW5kKGVuY29kZURvdWJsZShrZXkuZGF0ZSgpKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSAtIHByZXZp
b3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJU
eXBlOgorICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJREJLZXlOdW1iZXJUeXBlQnl0
ZSkpOworICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUoa2V5Lm51bWJlcigpKSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSAtIHByZXZpb3Vz
U2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCisKK2NvbnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBjaGFyKiBwLCBj
b25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5KQoreworICAgIEFTU0VS
VChsaW1pdCA+PSBwKTsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgICAgICBmb3VuZEtleSA9IElEQktleTo6
Y3JlYXRlSW52YWxpZCgpOworICAgICAgICByZXR1cm4gcDsKKworICAgIGNhc2Uga0lEQktleUFy
cmF5VHlwZUJ5dGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludDY0X3QgbGVuZ3RoOworICAg
ICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuZ3RoKTsKKyAgICAgICAgICAg
IGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChsZW5n
dGggPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgSURCS2V5OjpL
ZXlBcnJheSBhcnJheTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICAgICAgICAgICAgICBwID0gZGVjb2RlSURC
S2V5KHAsIGxpbWl0LCBrZXkpOworICAgICAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKGtleSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlQXJyYXko
YXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJL
ZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nIHM7CisgICAg
ICAgICAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcyk7CisgICAgICAg
ICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBmb3Vu
ZEtleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHMpOworICAgICAgICAgICAgcmV0dXJuIHA7Cisg
ICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgcCA9IGRlY29kZURvdWJsZShwLCBsaW1pdCwg
JmQpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUoZCk7CisgICAgICAgICAgICBy
ZXR1cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgorICAg
ICAgICB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgIHAgPSBkZWNvZGVEb3Vi
bGUocCwgbGltaXQsICZkKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoZCk7
CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyKiBleHRyYWN0RW5j
b2RlZElEQktleShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIFZlY3Rvcjxj
aGFyPiogcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOworICAgIGNvbnN0IGNoYXIqIHAg
PSBzdGFydDsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1
bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgIGNhc2Uga0lEQktleU1pbktleVR5cGVCeXRlOgor
ICAgICAgICAqcmVzdWx0ID0gZW5jb2RlQnl0ZSh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHA7Cisg
ICAgY2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgaW50
NjRfdCBsZW5ndGg7CisgICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW5n
dGgpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChzdGFy
dCwgcCAtIHN0YXJ0KTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBzdWJrZXk7CisgICAgICAgICAgICAgICAgcCA9IGV4dHJhY3RF
bmNvZGVkSURCS2V5KHAsIGxpbWl0LCAmc3Via2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIXAp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcDsKKyAg
ICAgICAgfQorICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRlOgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQ2NF90IGxlbmd0aDsKKyAgICAgICAgICAgIHAgPSBkZWNvZGVWYXJJbnQocCwg
bGltaXQsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBpZiAocCArIGxlbmd0aCAqIDIgPiBsaW1pdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kKHN0YXJ0LCBwIC0gc3RhcnQgKyBsZW5ndGggKiAyKTsKKyAgICAg
ICAgICAgIHJldHVybiBwICsgbGVuZ3RoICogMjsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktl
eURhdGVUeXBlQnl0ZToKKyAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKKyAgICAgICAg
aWYgKHAgKyBzaXplb2YoZG91YmxlKSA+IGxpbWl0KQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3RhcnQsIDEg
KyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHJldHVybiBwICsgc2l6ZW9mKGRvdWJsZSk7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgSURCS2V5OjpUeXBlIGtleVR5cGVCeXRlVG9LZXlUeXBlKHVuc2lnbmVkIGNoYXIgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5dGU6Cisg
ICAgICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworICAgIGNhc2Uga0lEQktleUFycmF5
VHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkFycmF5VHlwZTsKKyAgICBjYXNlIGtJ
REJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgcmV0dXJuIElEQktleTo6U3RyaW5nVHlwZTsK
KyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkRh
dGVUeXBlOworICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRlOgorICAgICAgICByZXR1cm4g
SURCS2V5OjpOdW1iZXJUeXBlOworICAgIGNhc2Uga0lEQktleU1pbktleVR5cGVCeXRlOgorICAg
ICAgICByZXR1cm4gSURCS2V5OjpNaW5UeXBlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworfQorCitpbnQgY29tcGFy
ZUVuY29kZWRJREJLZXlzKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBsaW1pdEEsIGNvbnN0
IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdEIpCit7CisgICAgQVNTRVJUKCZwICE9ICZxKTsK
KyAgICBBU1NFUlQocCA8IGxpbWl0QSk7CisgICAgQVNTRVJUKHEgPCBsaW1pdEIpOworICAgIHVu
c2lnbmVkIGNoYXIgdHlwZUEgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUIgPSAqcSsr
OworCisgICAgaWYgKGludCB4ID0gSURCS2V5Ojpjb21wYXJlVHlwZXMoa2V5VHlwZUJ5dGVUb0tl
eVR5cGUodHlwZUEpLCBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh0eXBlQikpKQorICAgICAgICByZXR1
cm4geDsKKworICAgIHN3aXRjaCAodHlwZUEpIHsKKyAgICBjYXNlIGtJREJLZXlOdWxsVHlwZUJ5
dGU6CisgICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5dGU6CisgICAgICAgIC8vIE51bGwgdHlw
ZSBvciBtYXggdHlwZTsgbm8gcGF5bG9hZCB0byBjb21wYXJlLgorICAgICAgICByZXR1cm4gMDsK
KyAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgorICAgICAgICB7CisgICAgICAgICAgICBp
bnQ2NF90IGxlbmd0aEEsIGxlbmd0aEI7CisgICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAs
IGxpbWl0QSwgbGVuZ3RoQSk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBxID0gZGVjb2RlVmFySW50KHEsIGxpbWl0QiwgbGVuZ3Ro
Qik7CisgICAgICAgICAgICBpZiAoIXEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICBpZiAobGVuZ3RoQSA8IDAgfHwgbGVuZ3RoQiA8IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCBsZW5ndGhBICYm
IGkgPCBsZW5ndGhCOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IGNtcCA9IGNvbXBh
cmVFbmNvZGVkSURCS2V5cyhwLCBsaW1pdEEsIHEsIGxpbWl0QikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjbXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVuZ3RoQSA8
IGxlbmd0aEIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGxl
bmd0aEEgPiBsZW5ndGhCKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAg
ICAgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkU3RyaW5nc1dpdGhMZW5ndGgocCwgbGltaXRBLCBx
LCBsaW1pdEIpOworICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBjYXNlIGtJREJL
ZXlOdW1iZXJUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlIGQsIGU7Cisg
ICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxpbWl0QSwgJmQpOworICAgICAgICAgICAg
QVNTRVJUKHApOworICAgICAgICAgICAgcSA9IGRlY29kZURvdWJsZShxLCBsaW1pdEIsICZlKTsK
KyAgICAgICAgICAgIEFTU0VSVChxKTsKKyAgICAgICAgICAgIGlmIChkIDwgZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoZCA+IGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgY29tcGFy
ZUVuY29kZWRJREJLZXlzKGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5QSwgY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXlCKQoreworICAgIEFTU0VSVChrZXlBLnNpemUoKSA+PSAxKTsKKyAgICBBU1NFUlQo
a2V5Qi5zaXplKCkgPj0gMSk7CisKKyAgICBjb25zdCBjaGFyKiBwID0ga2V5QS5kYXRhKCk7Cisg
ICAgY29uc3QgY2hhciogbGltaXRBID0gcCArIGtleUEuc2l6ZSgpOworICAgIGNvbnN0IGNoYXIq
IHEgPSBrZXlCLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBsaW1pdEIgPSBxICsga2V5Qi5zaXpl
KCk7CisKKyAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKHAsIGxpbWl0QSwgcSwgbGlt
aXRCKTsKK30KKworbmFtZXNwYWNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGU+CitpbnQg
ZGVjb2RlQW5kQ29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGlj
ZSYgYikKK3sKKyAgICBLZXlUeXBlIGtleUE7CisgICAgS2V5VHlwZSBrZXlCOworCisgICAgY29u
c3QgY2hhciogcHRyQSA9IEtleVR5cGU6OmRlY29kZShhLmJlZ2luKCksIGEuZW5kKCksICZrZXlB
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHB0ckEsIHB0ckEpOworICAgIGNvbnN0IGNoYXIqIHB0ckIg
PSBLZXlUeXBlOjpkZWNvZGUoYi5iZWdpbigpLCBiLmVuZCgpLCAma2V5Qik7CisgICAgQVNTRVJU
X1VOVVNFRChwdHJCLCBwdHJCKTsKKworICAgIHJldHVybiBrZXlBLmNvbXBhcmUoa2V5Qik7Cit9
Cit9CisKK2ludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3QgTGV2ZWxEQlNs
aWNlJiBiLCBib29sIGluZGV4S2V5cykKK3sKKyAgICBjb25zdCBjaGFyKiBwdHJBID0gYS5iZWdp
bigpOworICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBiLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciog
ZW5kQSA9IGEuZW5kKCk7CisgICAgY29uc3QgY2hhciogZW5kQiA9IGIuZW5kKCk7CisKKyAgICBL
ZXlQcmVmaXggcHJlZml4QTsKKyAgICBLZXlQcmVmaXggcHJlZml4QjsKKworICAgIHB0ckEgPSBL
ZXlQcmVmaXg6OmRlY29kZShwdHJBLCBlbmRBLCAmcHJlZml4QSk7CisgICAgcHRyQiA9IEtleVBy
ZWZpeDo6ZGVjb2RlKHB0ckIsIGVuZEIsICZwcmVmaXhCKTsKKyAgICBBU1NFUlQocHRyQSk7Cisg
ICAgQVNTRVJUKHB0ckIpOworCisgICAgaWYgKGludCB4ID0gcHJlZml4QS5jb21wYXJlKHByZWZp
eEIpKQorICAgICAgICByZXR1cm4geDsKKworICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQ
cmVmaXg6OmtHbG9iYWxNZXRhRGF0YSkgeworICAgICAgICBBU1NFUlQocHRyQSAhPSBlbmRBKTsK
KyAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7CisKKyAgICAgICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZUEgPSAqcHRyQSsrOworICAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlQiA9ICpw
dHJCKys7CisKKyAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVBIC0gdHlwZUJ5dGVCKQorICAg
ICAgICAgICAgcmV0dXJuIHg7CisKKyAgICAgICAgaWYgKHR5cGVCeXRlQSA8PSAxKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga0RhdGFiYXNlRnJlZUxp
c3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPERhdGFiYXNl
RnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtEYXRhYmFzZU5h
bWVUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPERhdGFiYXNl
TmFtZUtleT4oYSwgYik7CisgICAgfQorCisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVBy
ZWZpeDo6a0RhdGFiYXNlTWV0YURhdGEpIHsKKyAgICAgICAgQVNTRVJUKHB0ckEgIT0gZW5kQSk7
CisgICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOworCisgICAgICAgIHVuc2lnbmVkIGNoYXIg
dHlwZUJ5dGVBID0gKnB0ckErKzsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZUIgPSAq
cHRyQisrOworCisgICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVCeXRlQikKKyAg
ICAgICAgICAgIHJldHVybiB4OworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPD0gMykKKyAgICAg
ICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga09iamVjdFN0b3Jl
TWV0YURhdGFUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPE9i
amVjdFN0b3JlTWV0YURhdGFLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtJ
bmRleE1ldGFEYXRhVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFy
ZTxJbmRleE1ldGFEYXRhS2V5PihhLCBiKTsKKyAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrT2Jq
ZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKQorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENv
bXBhcmU8T2JqZWN0U3RvcmVGcmVlTGlzdEtleT4oYSwgYik7CisgICAgICAgIGlmICh0eXBlQnl0
ZUEgPT0ga0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVB
bmRDb21wYXJlPEluZGV4RnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5dGVB
ID09IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ29tcGFyZTxPYmplY3RTdG9yZU5hbWVzS2V5PihhLCBiKTsKKyAgICAgICAgaWYgKHR5cGVC
eXRlQSA9PSBrSW5kZXhOYW1lc0tleVR5cGVCeXRlKQorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENvbXBhcmU8SW5kZXhOYW1lc0tleT4oYSwgYik7CisKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChwcmVmaXhBLnR5
cGUoKSA9PSBLZXlQcmVmaXg6OmtPYmplY3RTdG9yZURhdGEpIHsKKyAgICAgICAgaWYgKHB0ckEg
PT0gZW5kQSAmJiBwdHJCID09IGVuZEIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
aWYgKHB0ckEgPT0gZW5kQSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHB0
ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhpcyBjYXNlIG9m
IG5vbi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgdGhp
cyB3YXkuCisKKyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVEYXRh
S2V5PihhLCBiKTsKKyAgICB9CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6
a0V4aXN0c0VudHJ5KSB7CisgICAgICAgIGlmIChwdHJBID09IGVuZEEgJiYgcHRyQiA9PSBlbmRC
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChwdHJBID09IGVuZEEpCisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChwdHJCID09IGVuZEIpCisgICAgICAgICAg
ICByZXR1cm4gMTsgLy8gRklYTUU6IFRoaXMgY2FzZSBvZiBub24tZXhpc3RpbmcgdXNlciBrZXlz
IHNob3VsZCBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5LgorCisgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDb21wYXJlPEV4aXN0c0VudHJ5S2V5PihhLCBiKTsKKyAgICB9CisgICAgaWYg
KHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6a0luZGV4RGF0YSkgeworICAgICAgICBpZiAo
cHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAocHRyQSA9PSBlbmRBKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBp
ZiAocHRyQiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1FOiBUaGlzIGNh
c2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8gYmUgaGFuZGxl
ZCB0aGlzIHdheS4KKworICAgICAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5QTsKKyAgICAg
ICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleUI7CisKKyAgICAgICAgcHRyQSA9IEluZGV4RGF0
YUtleTo6ZGVjb2RlKGEuYmVnaW4oKSwgZW5kQSwgJmluZGV4RGF0YUtleUEpOworICAgICAgICBw
dHJCID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoYi5iZWdpbigpLCBlbmRCLCAmaW5kZXhEYXRhS2V5
Qik7CisgICAgICAgIEFTU0VSVChwdHJBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIpOworCisgICAg
ICAgIGJvb2wgaWdub3JlRHVwbGljYXRlcyA9IGluZGV4S2V5czsKKyAgICAgICAgcmV0dXJuIGlu
ZGV4RGF0YUtleUEuY29tcGFyZShpbmRleERhdGFLZXlCLCBpZ25vcmVEdXBsaWNhdGVzKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCitL
ZXlQcmVmaXg6OktleVByZWZpeCgpCisgICAgOiBtX2RhdGFiYXNlSWQoa0ludmFsaWRUeXBlKQor
ICAgICwgbV9vYmplY3RTdG9yZUlkKGtJbnZhbGlkVHlwZSkKKyAgICAsIG1faW5kZXhJZChrSW52
YWxpZFR5cGUpCit7Cit9CisKK0tleVByZWZpeDo6S2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgOiBtX2RhdGFi
YXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQor
ICAgICwgbV9pbmRleElkKGluZGV4SWQpCit7Cit9CisKK2NvbnN0IGNoYXIqIEtleVByZWZpeDo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgS2V5UHJlZml4KiBy
ZXN1bHQpCit7CisgICAgaWYgKHN0YXJ0ID09IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKnN0YXJ0Kys7CisKKyAgICBpbnQgZGF0YWJh
c2VJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gNSkgJiAweDcpICsgMTsKKyAgICBpbnQgb2JqZWN0
U3RvcmVJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gMikgJiAweDcpICsgMTsKKyAgICBpbnQgaW5k
ZXhJZEJ5dGVzID0gKGZpcnN0Qnl0ZSAmIDB4MykgKyAxOworCisgICAgaWYgKHN0YXJ0ICsgZGF0
YWJhc2VJZEJ5dGVzICsgb2JqZWN0U3RvcmVJZEJ5dGVzICsgaW5kZXhJZEJ5dGVzID4gbGltaXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzdWx0LT5tX2RhdGFiYXNlSWQgPSBkZWNvZGVJ
bnQoc3RhcnQsIHN0YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBkYXRhYmFz
ZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBkZWNvZGVJbnQoc3RhcnQs
IHN0YXJ0ICsgb2JqZWN0U3RvcmVJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBvYmplY3RTdG9yZUlk
Qnl0ZXM7CisgICAgcmVzdWx0LT5tX2luZGV4SWQgPSBkZWNvZGVJbnQoc3RhcnQsIHN0YXJ0ICsg
aW5kZXhJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBpbmRleElkQnl0ZXM7CisKKyAgICByZXR1cm4g
c3RhcnQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlQcmVmaXg6OmVuY29kZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmpl
Y3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFs
aWRJZCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YWJhc2VJZFN0cmluZyA9IGVuY29kZUludCht
X2RhdGFiYXNlSWQpOworICAgIFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZUlkU3RyaW5nID0gZW5j
b2RlSW50KG1fb2JqZWN0U3RvcmVJZCk7CisgICAgVmVjdG9yPGNoYXI+IGluZGV4SWRTdHJpbmcg
PSBlbmNvZGVJbnQobV9pbmRleElkKTsKKworICAgIEFTU0VSVChkYXRhYmFzZUlkU3RyaW5nLnNp
emUoKSA8PSA4KTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZFN0cmluZy5zaXplKCkgPD0gOCk7
CisgICAgQVNTRVJUKGluZGV4SWRTdHJpbmcuc2l6ZSgpIDw9IDQpOworCisKKyAgICB1bnNpZ25l
ZCBjaGFyIGZpcnN0Qnl0ZSA9IChkYXRhYmFzZUlkU3RyaW5nLnNpemUoKSAtIDEpIDw8IDUgfCAo
b2JqZWN0U3RvcmVJZFN0cmluZy5zaXplKCkgLSAxKSA8PCAyIHwgKGluZGV4SWRTdHJpbmcuc2l6
ZSgpIC0gMSk7CisgICAgVmVjdG9yPGNoYXI+IHJldDsKKyAgICByZXQuYXBwZW5kKGZpcnN0Qnl0
ZSk7CisgICAgcmV0LmFwcGVuZChkYXRhYmFzZUlkU3RyaW5nKTsKKyAgICByZXQuYXBwZW5kKG9i
amVjdFN0b3JlSWRTdHJpbmcpOworICAgIHJldC5hcHBlbmQoaW5kZXhJZFN0cmluZyk7CisKKyAg
ICByZXR1cm4gcmV0OworfQorCitpbnQgS2V5UHJlZml4Ojpjb21wYXJlKGNvbnN0IEtleVByZWZp
eCYgb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElk
KTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VS
VChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAobV9kYXRhYmFzZUlkICE9IG90
aGVyLm1fZGF0YWJhc2VJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJ
ZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKKyAgICBpZiAobV9vYmplY3RTdG9yZUlkICE9IG90aGVy
Lm1fb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fb2JqZWN0U3Rv
cmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAobV9pbmRleElkICE9IG90aGVy
Lm1faW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIu
bV9pbmRleElkKTsKKyAgICByZXR1cm4gMDsKK30KKworS2V5UHJlZml4OjpUeXBlIEtleVByZWZp
eDo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElk
KTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VS
VChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2VJZCkKKyAg
ICAgICAgcmV0dXJuIGtHbG9iYWxNZXRhRGF0YTsKKyAgICBpZiAoIW1fb2JqZWN0U3RvcmVJZCkK
KyAgICAgICAgcmV0dXJuIGtEYXRhYmFzZU1ldGFEYXRhOworICAgIGlmIChtX2luZGV4SWQgPT0g
a09iamVjdFN0b3JlRGF0YUluZGV4SWQpCisgICAgICAgIHJldHVybiBrT2JqZWN0U3RvcmVEYXRh
OworICAgIGlmIChtX2luZGV4SWQgPT0ga0V4aXN0c0VudHJ5SW5kZXhJZCkKKyAgICAgICAgcmV0
dXJuIGtFeGlzdHNFbnRyeTsKKyAgICBpZiAobV9pbmRleElkID49IGtNaW5pbXVtSW5kZXhJZCkK
KyAgICAgICAgcmV0dXJuIGtJbmRleERhdGE7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4ga0ludmFsaWRUeXBlOworfQorCitWZWN0b3I8Y2hhcj4gU2NoZW1hVmVyc2lv
bktleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDApOworICAgIFZl
Y3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVC
eXRlKGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0
b3I8Y2hhcj4gTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQcmVmaXggcHJl
Zml4KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtNYXhEYXRhYmFzZUlkVHlwZUJ5dGUpKTsKKyAgICBy
ZXR1cm4gcmV0OworfQorCitEYXRhYmFzZUZyZWVMaXN0S2V5OjpEYXRhYmFzZUZyZWVMaXN0S2V5
KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgtMSkKK3sKK30KKworY29uc3QgY2hhciogRGF0YWJhc2VG
cmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwg
RGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtleVByZWZpeCBwcmVmaXg7Cisg
ICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZp
eCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoIXByZWZpeC5t
X2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAg
QVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJU
X1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0RhdGFiYXNlRnJlZUxpc3RUeXBlQnl0ZSk7
CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNv
ZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZUlkKTsKK30KKworVmVjdG9yPGNo
YXI+IERhdGFiYXNlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQpCit7Cisg
ICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJl
Zml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrRGF0YWJhc2VGcmVlTGlz
dFR5cGVCeXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQoZGF0YWJhc2VJZCkpOwor
ICAgIHJldHVybiByZXQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpl
bmNvZGVNYXhLZXkoKQoreworICAgIHJldHVybiBlbmNvZGUoSU5UNjRfTUFYKTsKK30KKworaW50
NjRfdCBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9kYXRhYmFzZUlkID49IDApOworICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7Cit9CisKK2lu
dCBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJlZUxpc3RLZXkm
IG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7CisgICAgcmV0
dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKK30KKwor
Y29uc3QgY2hhciogRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVm
aXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwg
bGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIHA7CisgICAgQVNT
RVJUKCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0
b3JlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CisgICAgaWYgKHAgPT0gbGlt
aXQpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsr
OworICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtEYXRhYmFzZU5hbWVU
eXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAg
PSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fb3JpZ2luKTsKKyAg
ICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdXaXRo
TGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VOYW1lKTsKK30KKworVmVjdG9yPGNo
YXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDApOwor
ICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVCeXRlKGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2Rl
U3RyaW5nV2l0aExlbmd0aChvcmlnaW4pKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVN0cmluZ1dp
dGhMZW5ndGgoZGF0YWJhc2VOYW1lKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNo
YXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9CisKK1ZlY3Rvcjxj
aGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4gaW4gY29sbGF0aW9uIG9yZGVy
CisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmlnaW4gKyAiXHgwMSIpOworfQor
CitpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3Ro
ZXIpCit7CisgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFyZShtX29yaWdpbiwgb3RoZXIu
bV9vcmlnaW4pKQorICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFy
ZShtX2RhdGFiYXNlTmFtZSwgb3RoZXIubV9kYXRhYmFzZU5hbWUpOworfQorCitWZWN0b3I8Y2hh
cj4gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgTWV0YURh
dGFUeXBlIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQs
IDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlwZSkpOworICAgIHJldHVybiByZXQ7Cit9CisK
K09iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXkoKQorICAgIDog
bV9vYmplY3RTdG9yZUlkKC0xKQorICAgICwgbV9tZXRhRGF0YVR5cGUoLTEpCit7Cit9CisKK2Nv
bnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJlc3VsdCkKK3sK
KyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRl
Y29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4
Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBp
ZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBl
Qnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga09i
amVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAg
IHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChy
ZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9tZXRh
RGF0YVR5cGUpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1l
dGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOwor
ICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChl
bmNvZGVCeXRlKGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICByZXQuYXBwZW5k
KGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJ
bnQobWV0YURhdGFUeXBlKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpCit7
CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgsIElOVDY0X01BWCk7Cit9
CisKK1ZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgcmV0dXJuIGVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgpOworfQorCitpbnQ2NF90
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAoreworICAgIEFT
U0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsK
K30KK2ludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7CisgICAgcmV0dXJuIG1fbWV0YURh
dGFUeXBlOworfQorCitpbnQgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6Y29tcGFyZShjb25zdCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZUlkID49IDApOworICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+PSAwKTsKKyAgICBpZiAoaW50
IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkp
CisgICAgICAgIHJldHVybiB4OworICAgIHJldHVybiBtX21ldGFEYXRhVHlwZSAtIG90aGVyLm1f
bWV0YURhdGFUeXBlOworfQorCitJbmRleE1ldGFEYXRhS2V5OjpJbmRleE1ldGFEYXRhS2V5KCkK
KyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkKKyAgICAsIG1f
bWV0YURhdGFUeXBlKDApCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4TWV0YURhdGFLZXk6OmRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4TWV0YURhdGFL
ZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAg
PSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAg
IEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9p
bmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5z
aWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwg
dHlwZUJ5dGUgPT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQp
CisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3Vs
dC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAg
IHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwID09IGxpbWl0KQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXN1bHQtPm1fbWV0YURhdGFUeXBlID0gKnArKzsKKyAgICByZXR1cm4gcDsK
K30KKworVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBj
aGFyIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIDAs
IDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFw
cGVuZChlbmNvZGVCeXRlKGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpKTsKKyAgICByZXQuYXBwZW5k
KGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJ
bnQoaW5kZXhJZCkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUpKTsK
KyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorewor
ICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYLCAy
NTUpOworfQorCitpbnQgSW5kZXhNZXRhRGF0YUtleTo6Y29tcGFyZShjb25zdCBJbmRleE1ldGFE
YXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOworICAg
IEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisKKyAgICBpZiAoaW50IHggPSBjb21wYXJlSW50cyht
X29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAgIHJldHVybiB4
OworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1faW5kZXhJZCwgb3RoZXIubV9pbmRleElk
KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIG1fbWV0YURhdGFUeXBlIC0gb3RoZXIu
bV9tZXRhRGF0YVR5cGU7Cit9CisKK2ludDY0X3QgSW5kZXhNZXRhRGF0YUtleTo6aW5kZXhJZCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9pbmRl
eElkOworfQorCitPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpPYmplY3RTdG9yZUZyZWVMaXN0S2V5
KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKK3sKK30KKworY29uc3QgY2hhciogT2JqZWN0
U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtleVByZWZpeCBw
cmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1p
dCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQo
cHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlk
KTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09IGxpbWl0KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAg
ICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrT2JqZWN0U3RvcmVGcmVlTGlz
dFR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwor
fQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIEtleVByZWZpeCBwcmVm
aXgoZGF0YWJhc2VJZCwgMCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNv
ZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlRnJlZUxpc3RUeXBl
Qnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKKyAg
ICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6
ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAgICByZXR1cm4gZW5jb2RlKGRh
dGFiYXNlSWQsIElOVDY0X01BWCk7Cit9CisKK2ludDY0X3QgT2JqZWN0U3RvcmVGcmVlTGlzdEtl
eTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+
PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQgT2JqZWN0U3RvcmVG
cmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhlcikK
K3sKKyAgICAvLyBGSVhNRTogSXQgbWF5IHNlZW0gc3RyYW5nZSB0aGF0IHdlJ3JlIG5vdCBjb21w
YXJpbmcgZGF0YWJhc2UgaWQncywKKyAgICAvLyBidXQgdGhhdCBjb21wYXJpc29uIHdpbGwgaGF2
ZSBiZWVuIG1hZGUgZWFybGllci4KKyAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlz
IG1vcmUgY2xlYXIsIHRob3VnaC4uLgorICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7
CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RT
dG9yZUlkKTsKK30KKworSW5kZXhGcmVlTGlzdEtleTo6SW5kZXhGcmVlTGlzdEtleSgpCisgICAg
OiBtX29iamVjdFN0b3JlSWQoLTEpCisgICAgLCBtX2luZGV4SWQoLTEpCit7Cit9CisKK2NvbnN0
IGNoYXIqIEluZGV4RnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3Qg
Y2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXgg
cHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGlt
aXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJU
KHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJ
ZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7Cisg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4RnJlZUxpc3RUeXBl
Qnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBk
ZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQs
IHJlc3VsdC0+bV9pbmRleElkKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RnJlZUxpc3RLZXk6
OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7Cisg
ICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKKyAgICByZXQuYXBwZW5kKGVu
Y29kZUJ5dGUoa0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2Rl
VmFySW50KG9iamVjdFN0b3JlSWQpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChpbmRl
eElkKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RnJlZUxpc3RL
ZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKK3sKKyAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0
X01BWCk7Cit9CisKK2ludCBJbmRleEZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4RnJl
ZUxpc3RLZXkmIG90aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Cisg
ICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICBpZiAoaW50IHggPSBjb21wYXJlSW50cyht
X29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAgIHJldHVybiB4
OworICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVyLm1faW5kZXhJZCk7Cit9
CisKK2ludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9y
ZUlkOworfQorCitpbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6OmluZGV4SWQoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisgICAgcmV0dXJuIG1faW5kZXhJZDsKK30KKwor
Ly8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0b3JlIGlkcywg
YmVjYXVzZSBhIG1hcHBpbmcKKy8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFiYXNlQmFja2VuZElt
cGwuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUgdW5yZWxpYWJsZT8KKy8vIENhbiB3ZSByZW1vdmUg
dGhpcz8KK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTmFtZXNLZXkqIHJlc3VsdCkK
K3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6
OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJl
Zml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAg
ICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0g
a09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CisgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhM
ZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOworfQorCitWZWN0b3I8
Y2hhcj4gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCit7CisgICAgS2V5UHJlZml4IHByZWZpeChkYXRh
YmFzZUlkLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwor
ICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRlKSk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9iamVjdFN0b3JlTmFtZSkpOwor
ICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBPYmplY3RTdG9yZU5hbWVzS2V5Ojpjb21wYXJlKGNv
bnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKQoreworICAgIHJldHVybiBjb2RlUG9pbnRD
b21wYXJlKG1fb2JqZWN0U3RvcmVOYW1lLCBvdGhlci5tX29iamVjdFN0b3JlTmFtZSk7Cit9CisK
K0luZGV4TmFtZXNLZXk6OkluZGV4TmFtZXNLZXkoKQorICAgIDogbV9vYmplY3RTdG9yZUlkKC0x
KQoreworfQorCisvLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBpbmRleCBp
ZHMsIGJlY2F1c2UgYSBtYXBwaW5nCisvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVsLgorY29u
c3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBj
aGFyKiBsaW1pdCwgSW5kZXhOYW1lc0tleSogcmVzdWx0KQoreworICAgIEtleVByZWZpeCBwcmVm
aXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwg
JnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQocHJl
Zml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsK
KyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlmIChwID09IGxpbWl0KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICBB
U1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5kZXhOYW1lc0tleVR5cGVCeXRl
KTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcCA9IGRlY29k
ZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOworICAgIGlmICghcCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwg
bGltaXQsIHJlc3VsdC0+bV9pbmRleE5hbWUpOworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhOYW1l
c0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNl
SWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAg
cmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE5hbWVzS2V5VHlwZUJ5dGUpKTsKKyAgICByZXQu
YXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0LmFwcGVuZChlbmNv
ZGVTdHJpbmdXaXRoTGVuZ3RoKGluZGV4TmFtZSkpOworICAgIHJldHVybiByZXQ7Cit9CisKK2lu
dCBJbmRleE5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4TmFtZXNLZXkmIG90aGVyKQorewor
ICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgaWYgKGludCB4ID0gY29tcGFy
ZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQorICAgICAgICBy
ZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShtX2luZGV4TmFtZSwgb3RoZXIu
bV9pbmRleE5hbWUpOworfQorCitjb25zdCBjaGFyKiBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29k
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9yZURhdGFLZXkq
IHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBL
ZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJlZml4KTsKKyAgICBpZiAoIXApCisgICAg
ICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NF
UlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5tX2luZGV4SWQg
PT0ga1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgaWYgKHAgPT0gZW5kKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgZW5kLCAmcmVzdWx0LT5t
X2VuY29kZWRVc2VyS2V5KTsKK30KKworVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBW
ZWN0b3I8Y2hhcj4gZW5jb2RlZFVzZXJLZXkpCit7CisgICAgS2V5UHJlZml4IHByZWZpeChkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrU3BlY2lhbEluZGV4TnVtYmVyKTsKKyAgICBWZWN0b3I8
Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlZFVzZXJL
ZXkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOworfQorCitpbnQgT2JqZWN0U3Rv
cmVEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRGF0YUtleSYgb3RoZXIpCit7Cisg
ICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRVc2VyS2V5LCBvdGhlci5t
X2VuY29kZWRVc2VyS2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IE9iamVjdFN0b3JlRGF0
YUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAgIGRl
Y29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVzZXJLZXkuZW5k
KCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRfdCBPYmplY3RTdG9y
ZURhdGFLZXk6OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrT2JqZWN0U3RvcmVEYXRhSW5kZXhJZDsK
KworY29uc3QgY2hhciogRXhpc3RzRW50cnlLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0KQoreworICAgIEtleVByZWZp
eCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBl
bmQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJU
KHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVChwcmVmaXgubV9vYmplY3RTdG9yZUlk
KTsKKyAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA9PSBrU3BlY2lhbEluZGV4TnVtYmVyKTsK
KyAgICBpZiAocCA9PSBlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBleHRyYWN0
RW5jb2RlZElEQktleShwLCBlbmQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkpOworfQorCitW
ZWN0b3I8Y2hhcj4gRXhpc3RzRW50cnlLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkS2V5KQorewor
ICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga1NwZWNpYWxJ
bmRleE51bWJlcik7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKKyAg
ICByZXQuYXBwZW5kKGVuY29kZWRLZXkpOworICAgIHJldHVybiByZXQ7Cit9CisKK1ZlY3Rvcjxj
aGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0dXJuIGVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOworfQor
CitpbnQgRXhpc3RzRW50cnlLZXk6OmNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVy
KQoreworICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkVXNlcktleSwg
b3RoZXIubV9lbmNvZGVkVXNlcktleSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBFeGlzdHNF
bnRyeUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAg
IGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVzZXJLZXku
ZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3QgaW50NjRfdCBFeGlzdHNF
bnRyeUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtFeGlzdHNFbnRyeUluZGV4SWQ7CisKK0lu
ZGV4RGF0YUtleTo6SW5kZXhEYXRhS2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgtMSkKKyAgICAs
IG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgtMSkKKyAgICAsIG1fc2VxdWVu
Y2VOdW1iZXIoLTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4RGF0YUtleTo6ZGVjb2RlKGNv
bnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5KiByZXN1bHQp
Cit7CisgICAgS2V5UHJlZml4IHByZWZpeDsKKyAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4
OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKKyAgICBpZiAoIXApCisgICAgICAgIHJl
dHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NFUlQocHJl
Zml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZpeC5tX2luZGV4SWQgPj0ga01p
bmltdW1JbmRleElkKTsKKyAgICByZXN1bHQtPm1fZGF0YWJhc2VJZCA9IHByZWZpeC5tX2RhdGFi
YXNlSWQ7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBwcmVmaXgubV9vYmplY3RTdG9y
ZUlkOworICAgIHJlc3VsdC0+bV9pbmRleElkID0gcHJlZml4Lm1faW5kZXhJZDsKKyAgICByZXN1
bHQtPm1fc2VxdWVuY2VOdW1iZXIgPSAtMTsKKyAgICByZXN1bHQtPm1fZW5jb2RlZFByaW1hcnlL
ZXkgPSBtaW5JREJLZXkoKTsKKworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktleShwLCBsaW1p
dCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIFtvcHRpb25hbF0gc2VxdWVuY2UgbnVtYmVyCisgICAgaWYgKHAgPT0g
bGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSAgZGVjb2RlVmFySW50KHAsIGxpbWl0
LCByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBbb3B0aW9uYWxdIHByaW1hcnkga2V5CisgICAgaWYgKHAgPT0gbGltaXQp
CisgICAgICAgIHJldHVybiBwOworICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktleShwLCBsaW1p
dCwgJnJlc3VsdC0+bV9lbmNvZGVkUHJpbWFyeUtleSk7CisgICAgaWYgKCFwKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBwOworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5
OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkVXNlcktleSwgY29uc3QgVmVj
dG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCBzZXF1ZW5jZU51bWJlcikKK3sK
KyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
OworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVu
ZChlbmNvZGVkVXNlcktleSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQoc2VxdWVuY2VO
dW1iZXIpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRQcmltYXJ5S2V5KTsKKyAgICByZXR1cm4g
cmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiB1c2VyS2V5KQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpLCBtaW5JREJLZXkoKSk7Cit9CisK
K1ZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIHJldHVy
biBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgbWluSURCS2V5KCks
IG1pbklEQktleSgpKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBtYXhJREJLZXkoKSwgbWF4SURCS2V5KCksIElOVDY0X01BWCk7Cit9CisKK2ludCBJ
bmRleERhdGFLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhEYXRhS2V5JiBvdGhlciwgYm9vbCBpZ25v
cmVEdXBsaWNhdGVzKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7CisgICAgQVNT
RVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICBBU1NFUlQobV9pbmRleElkID49IDApOwor
ICAgIGlmIChpbnQgeCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRVc2VyS2V5LCBv
dGhlci5tX2VuY29kZWRVc2VyS2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgaWYgKGlnbm9y
ZUR1cGxpY2F0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVF
bmNvZGVkSURCS2V5cyhtX2VuY29kZWRQcmltYXJ5S2V5LCBvdGhlci5tX2VuY29kZWRQcmltYXJ5
S2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fc2VxdWVu
Y2VOdW1iZXIsIG90aGVyLm1fc2VxdWVuY2VOdW1iZXIpOworfQorCitpbnQ2NF90IEluZGV4RGF0
YUtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+PSAw
KTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUlkOworfQorCitpbnQ2NF90IEluZGV4RGF0YUtleTo6
b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAw
KTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IEluZGV4RGF0YUtl
eTo6aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICBy
ZXR1cm4gbV9pbmRleElkOworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5kZXhEYXRhS2V5Ojp1
c2VyS2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAgZGVjb2RlSURC
S2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVkVXNlcktleS5lbmQoKSwga2V5
KTsKKyAgICByZXR1cm4ga2V5OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSW5kZXhEYXRhS2V5
OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAgZGVj
b2RlSURCS2V5KG1fZW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgbV9lbmNvZGVkUHJpbWFyeUtl
eS5lbmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCit9IC8vIG5hbWVzcGFjZSBJREJM
ZXZlbERCQ29kaW5nCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTEVW
RUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29k
aW5nLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJMZXZlbERCQ29kaW5nX2gKKyNkZWZpbmUgSURCTGV2ZWxEQkNvZGluZ19oCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5Owor
Y2xhc3MgTGV2ZWxEQlNsaWNlOworCituYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZyB7CisKK2Nv
bnN0IHVuc2lnbmVkIGNoYXIga01pbmltdW1JbmRleElkID0gMzA7CisKK1ZlY3RvcjxjaGFyPiBl
bmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworVmVjdG9yPGNoYXI+IG1heElEQktleSgpOworVmVj
dG9yPGNoYXI+IG1pbklEQktleSgpOworVmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90KTsK
K2ludDY0X3QgZGVjb2RlSW50KGNvbnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpOwor
VmVjdG9yPGNoYXI+IGVuY29kZVZhckludChpbnQ2NF90KTsKK2NvbnN0IGNoYXIqIGRlY29kZVZh
ckludChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyKiBsaW1pdCwgaW50NjRfdCYgZm91bmRJbnQp
OworVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKK1N0cmluZyBkZWNv
ZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogZW5kKTsKK1ZlY3RvcjxjaGFyPiBl
bmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYpOworY29uc3QgY2hhciogZGVjb2Rl
U3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgU3RyaW5n
JiBmb3VuZFN0cmluZyk7CitpbnQgY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25z
dCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hh
ciogbGltaXRRKTsKK1ZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlKTsKK2NvbnN0IGNo
YXIqIGRlY29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgZG91Ymxl
Kik7Cit2b2lkIGVuY29kZUlEQktleShjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGludG8p
OworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktleShjb25zdCBJREJLZXkmKTsKK2NvbnN0IGNoYXIq
IGRlY29kZUlEQktleShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElE
QktleT4mIGZvdW5kS2V5KTsKK2NvbnN0IGNoYXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0
IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVjdG9yPGNoYXI+KiByZXN1bHQpOwor
aW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBjb25zdCBWZWN0
b3I8Y2hhcj4mKTsKKworaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2
ZWxEQlNsaWNlJiwgYm9vbCBpbmRleEtleXMgPSBmYWxzZSk7CisKK2NsYXNzIEtleVByZWZpeCB7
CitwdWJsaWM6CisgICAgS2V5UHJlZml4KCk7CisgICAgS2V5UHJlZml4KGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIEtleVByZWZpeCogcmVzdWx0KTsKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlKCkgY29uc3Q7
CisgICAgaW50IGNvbXBhcmUoY29uc3QgS2V5UHJlZml4JiBvdGhlcikgY29uc3Q7CisKKyAgICBl
bnVtIFR5cGUgeworICAgICAgICBrR2xvYmFsTWV0YURhdGEsCisgICAgICAgIGtEYXRhYmFzZU1l
dGFEYXRhLAorICAgICAgICBrT2JqZWN0U3RvcmVEYXRhLAorICAgICAgICBrRXhpc3RzRW50cnks
CisgICAgICAgIGtJbmRleERhdGEsCisgICAgICAgIGtJbnZhbGlkVHlwZQorICAgIH07CisKKyAg
ICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGludDY0X3QgbV9pbmRleElkOworCisgICAgc3Rh
dGljIGNvbnN0IGludDY0X3Qga0ludmFsaWRJZCA9IC0xOworfTsKKworY2xhc3MgU2NoZW1hVmVy
c2lvbktleSB7CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKK307
CisKK2NsYXNzIE1heERhdGFiYXNlSWRLZXkgeworcHVibGljOgorICAgIHN0YXRpYyBWZWN0b3I8
Y2hhcj4gZW5jb2RlKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUZyZWVMaXN0S2V5IHsKK3B1Ymxp
YzoKKyAgICBEYXRhYmFzZUZyZWVMaXN0S2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlRnJlZUxp
c3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBk
YXRhYmFzZUlkKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleSgpOworICAg
IGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFi
YXNlRnJlZUxpc3RLZXkmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1f
ZGF0YWJhc2VJZDsKK307CisKK2NsYXNzIERhdGFiYXNlTmFtZUtleSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciog
bGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUp
OworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0b3BLZXlGb3JP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOworICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFiYXNlTmFtZTsgfQorICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFt
ZUtleSYgb3RoZXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX29yaWdpbjsgLy8gRklYTUU6
IFN0b3JlIGVuY29kZWQgc3RyaW5ncywgb3IganVzdCBwb2ludGVycy4KKyAgICBTdHJpbmcgbV9k
YXRhYmFzZU5hbWU7Cit9OworCitjbGFzcyBEYXRhYmFzZU1ldGFEYXRhS2V5IHsKK3B1YmxpYzoK
KyAgICBlbnVtIE1ldGFEYXRhVHlwZSB7CisgICAgICAgIGtPcmlnaW5OYW1lID0gMCwKKyAgICAg
ICAga0RhdGFiYXNlTmFtZSA9IDEsCisgICAgICAgIGtVc2VyVmVyc2lvbiA9IDIsCisgICAgICAg
IGtNYXhPYmplY3RTdG9yZUlkID0gMworICAgIH07CisKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSk7Cit9OworCitjbGFzcyBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5IHsKK3B1YmxpYzoKKyAgICBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXkqIHJlc3VsdCk7CisgICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOworICAgIHN0YXRpYyBWZWN0b3I8
Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IG1l
dGFEYXRhVHlwZSgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTWV0
YURhdGFLZXkmIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKKyAgICBpbnQ2NF90IG1fbWV0YURhdGFUeXBlOyAvLyBGSVhNRTogTWFrZSB0aGlzIGEgYnl0
ZS4KK307CisKK2NsYXNzIEluZGV4TWV0YURhdGFLZXkgeworcHVibGljOgorICAgIEluZGV4TWV0
YURhdGFLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtleSogcmVzdWx0KTsKKyAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSk7
CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4TWV0
YURhdGFLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YURhdGFUeXBlOyB9
CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgaW50NjRfdCBt
X2luZGV4SWQ7CisgICAgdW5zaWduZWQgY2hhciBtX21ldGFEYXRhVHlwZTsKK307CisKK2NsYXNz
IE9iamVjdFN0b3JlRnJlZUxpc3RLZXkgeworcHVibGljOgorICAgIE9iamVjdFN0b3JlRnJlZUxp
c3RLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KTsKKyAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50
NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKKyAg
ICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhlcik7CisKK3By
aXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Cit9OworCitjbGFzcyBJbmRleEZy
ZWVMaXN0S2V5IHsKK3B1YmxpYzoKKyAgICBJbmRleEZyZWVMaXN0S2V5KCk7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQs
IEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21wYXJlKGNvbnN0IElu
ZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25z
dDsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKK307CisKK2NsYXNzIE9i
amVjdFN0b3JlTmFtZXNLZXkgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2Ug
dGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCisgICAg
Ly8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5n
IGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KKyAgICBzdGF0
aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1p
dCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
KTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZU5hbWVzS2V5JiBvdGhlcik7Cisg
ICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVO
YW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOyAvLyBGSVhN
RTogU3RvcmUgdGhlIGVuY29kZWQgc3RyaW5nLCBvciBqdXN0IHBvaW50ZXJzIHRvIGl0LgorfTsK
KworY2xhc3MgSW5kZXhOYW1lc0tleSB7CitwdWJsaWM6CisgICAgSW5kZXhOYW1lc0tleSgpOwor
ICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIGluZGV4IGlkcywgYmVj
YXVzZSBhIG1hcHBpbmcKKyAgICAvLyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVsLgorICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpOworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5j
b2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhOYW1lc0tleSYgb3Ro
ZXIpOworICAgIFN0cmluZyBpbmRleE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TmFtZTsg
fQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIFN0cmluZyBt
X2luZGV4TmFtZTsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlRGF0YUtleSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogZW5kLCBPYmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVEYXRh
S2V5JiBvdGhlcik7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBjb25zdDsKKyAg
ICBzdGF0aWMgY29uc3QgaW50NjRfdCBrU3BlY2lhbEluZGV4TnVtYmVyOworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OworfTsKKworY2xhc3MgRXhpc3RzRW50
cnlLZXkgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hh
ciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3VsdCk7CisgICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZEtleSk7CisgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUoY29uc3QgRXhp
c3RzRW50cnlLZXkmIG90aGVyKTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gdXNlcktleSgpIGNv
bnN0OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga1NwZWNpYWxJbmRleE51bWJlcjsKKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKK307CisKK2NsYXNz
IEluZGV4RGF0YUtleSB7CitwdWJsaWM6CisgICAgSW5kZXhEYXRhS2V5KCk7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQs
IEluZGV4RGF0YUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVtYmVyID0gMCk7CisgICAgc3Rh
dGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKKyAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1pbktleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBJbmRleERhdGFLZXkm
IG90aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMpOworICAgIGludDY0X3QgZGF0YWJhc2VJZCgp
IGNvbnN0OworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OworICAgIGludDY0X3Qg
aW5kZXhJZCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktl
eTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJpbWFyeUtleTsKKyAgICBpbnQ2NF90IG1f
c2VxdWVuY2VOdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMRVZFTERCKQorI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCTGV2ZWxEQkNvZGlu
Z19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJPYmplY3RT
dG9yZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleS5oIgor
I2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1
ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZh
dWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOworCitJREJPYmplY3RTdG9yZTo6SURCT2Jq
ZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9i
amVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgOiBtX2JhY2tlbmQo
aWRiT2JqZWN0U3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQoreworICAg
IEFTU0VSVChtX2JhY2tlbmQpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICAvLyBX
ZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRl
ZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30KKworU3RyaW5nIElEQk9iamVj
dFN0b3JlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpu
YW1lIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOworfQorCitTdHJpbmcgSURCT2Jq
ZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmU6OmtleVBhdGgiKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXlQYXRoKCk7Cit9CisKK1Bh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25z
dAoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKKyAgICBy
ZXR1cm4gbV9iYWNrZW5kLT5pbmRleE5hbWVzKCk7Cit9CisKK0lEQlRyYW5zYWN0aW9uKiBJREJP
YmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCT2Jq
ZWN0U3RvcmU6OnRyYW5zYWN0aW9uIik7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7
Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKKyAg
ICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURl
YXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOworICAgIGlmIChrZXkg
JiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAg
bV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZTo6cHV0Iik7CisgICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0g
SURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPnB1dCh2YWx1
ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1
ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIpOworICAgIGlm
ICgha2V5UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKGtl
eVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRlIik7CisgICAg
aWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+ZGVs
ZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+
bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBy
ZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCIpOworICAgIGlmICghSURC
SXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IGJvb2wgdW5pcXVlID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQoInVuaXF1ZSIsIHVuaXF1ZSk7
CisKKyAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdldCgibXVsdGlF
bnRyeSIsIG11bHRpRW50cnkpOworCisgICAgLy8gRklYTUU6IFdoZW4gQXJyYXktdHlwZSBrZXlQ
YXRocyBhcmUgc3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBpcyBBcnJheSBh
bmQgbXVsdGlFbnRyeSBpcyB0cnVlLgorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRo
LCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5k
ZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVy
c2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIFJlZlB0
cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2VuZC5yZWxlYXNl
KCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1faW5kZXhNYXAuc2V0KG5hbWUs
IGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElE
QkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleCIpOwor
ICAgIGlmIChtX3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUp
OworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2Vu
ZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5k
ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdv
dHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJh
Y2tlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9
IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOworICAgIHJldHVy
biBpbmRleC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbV9iYWNrZW5k
LT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7CisgICAgaWYgKGRpcmVjdGlvbiAh
PSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVYVF9OT19EVVBM
SUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rpb24gIT0gSURC
Q3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgeworICAgICAgICAvLyBGSVhNRTogTWF5IG5lZWQg
dG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hv
d19idWcuY2dpP2lkPTExNDA2CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNP
TlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29y
VHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcik7CisgICAg
bV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5t
YXJrRWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJl
cXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwgcmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVl
c3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmU6OmNvdW50Iik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9
IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwor
fQorCit2b2lkIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKK3sKKyAgICBB
U1NFUlQobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7CisKKyAgICAvLyBCcmVhayByZWZlcmVu
Y2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAko
cmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSURCT2JqZWN0U3RvcmVfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZV9oCisKKyNpbmNsdWRl
ICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleS5o
IgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFzcyBJREJBbnk7CisK
K2NsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9y
ZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShpZGJPYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsK
KyAgICB9CisgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CisKKyAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OworICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5l
cmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZGQoY29udGV4
dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29udGV4dCwgdmFs
dWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIE9wdGlvbnNPYmplY3QoKSwgZWMp
OyB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRl
eHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfSAKKworICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7IAorICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0PElE
QktleVJhbmdlKj4oMCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2
b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKworcHJpdmF0ZToKKyAgICBJREJPYmplY3RTdG9y
ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0
aW9uKik7CisgICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZyb21QZW5kaW5nTGlzdCgpOworCisg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4gPiBJREJJbmRleE1hcDsKKyAgICBJREJJbmRl
eE1hcCBtX2luZGV4TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAkocmV2aXNpb24gMTA5
NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbDoxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdl
IHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UKKyAgICBdIElEQk9iamVjdFN0b3JlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtU
cmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBuYW1lOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3Ry
aW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IGlu
ZGV4TmFtZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFu
c2FjdGlvbjsKKworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURC
UmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBbT3B0aW9uYWxd
IElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
KyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRk
KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5
KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1bmN0
aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZSBrZXlSYW5nZSkKKyAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlvbl0gSURCUmVx
dWVzdCBkZWxldGUoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBjbGVhcigpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3Qgb3BlbkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0
aW9uYWxdIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURC
RGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRleChpbiBET01T
dHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0gT3B0aW9uc09i
amVjdCBvcHRpb25zKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
CisgICAgICAgIElEQkluZGV4IGluZGV4KGluIERPTVN0cmluZyBuYW1lKQorICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZGVsZXRlSW5kZXgo
aW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkKKyAgICAgICAgICAgIHJh
aXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkga2V5KQorICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNp
bmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5j
bHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1
ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZEltcGwuaCIKKyNp
bmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQoreworfQorCitJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdT
dG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQp
CisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1f
a2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCisg
ICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCit7CisgICAgbG9hZEluZGV4ZXMoKTsKK30K
KworSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJ
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQor
ICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9kYXRhYmFzZUlkKGRh
dGFiYXNlSWQpCisgICAgLCBtX2lkKEludmFsaWRJZCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAg
ICwgbV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVu
dCkKKyAgICAsIG1fYXV0b0luY3JlbWVudE51bWJlcigtMSkKK3sKK30KKworUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKCkgY29u
c3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9p
bmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgaW5k
ZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOworICAg
IHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBy
cEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXks
IGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOworICAgIFN0cmluZyB3aXJlRGF0
YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQob2Jq
ZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOworICAgIGlm
ICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+
IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKKyAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBW
ZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6
Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBh
dGgsIGtleXMpOworICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOworICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2Uo
KTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RL
ZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluamVjdEtleUludG9LZXlQYXRoIik7
CisgICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1Nlcmlh
bGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgaWYgKHRyYW5zYWN0aW9u
UHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
ID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZh
bHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKKworICAg
IGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgeworICAgICAgICBjb25zdCBib29sIGF1dG9J
bmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOworICAgICAgICBjb25zdCBi
b29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKKworICAg
ICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVudCAmJiAha2V5KSB7CisgICAg
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAg
ICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUu
Z2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYgKGtleVBhdGhL
ZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhLZXkp
IHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoLTEpOworICAgICAgICAgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBp
bmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBh
dGgpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoa2V5ICYmICFrZXktPnZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9p
bmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAg
ICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBh
dGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOworICAgICAgICAgICAgaWYgKGluZGV4
S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChrZXkpOwor
ICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5p
c051bGwoKTsKKyAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmpl
Y3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgICAgIGlmICgha2V5UGF0aEtleSB8fCAha2V5
UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1v
ZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBv
ZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUg
aW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3Jl
KSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRv
SW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7CisgICAgb2JqZWN0U3RvcmUt
PnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7Cisg
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CisgICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29y
VXBkYXRlKSB7CisgICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmpl
Y3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOworICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewor
ICAgICAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5
UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5t
X2tleVBhdGgpOworICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkpCisgICAgICAgICAgICAgICAg
a2V5ID0ga2V5UGF0aEtleTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0b0luY3JlbWVudCkg
eworICAgICAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50
b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMgc2hvdWxkIG9u
bHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZl
IGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGluc2VydGluZyBn
ZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRlIGdlbmVyYXRvciBzdGF0ZSBzaG91bGQgZ28g
aGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2FuLgorICAgICAgICAgICAgICAgIG9iamVjdFN0
b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgQVNTRVJUKGtleSAmJiBrZXktPnZhbGlkKCkpOworCisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJ
ZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbnZhbGlkUmVj
b3JkSWRlbnRpZmllcigpOworICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3Rv
cmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5t
X2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdl
dCgpKSkgeworICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUo
KTsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleXM7CisgICAgZm9yIChJbmRleE1hcDo6aXRl
cmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgUmVmUHRyPElE
QktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+
a2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKCFpbmRleEtleSkgeworICAgICAgICAgICAgaW5kZXhL
ZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGluZGV4S2V5LT52YWxpZCgpKTsKKworICAgICAgICBp
ZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpB
cnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSwga2V5
LmdldCgpKSkgeworICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtl
eUNhY2hlKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIk9uZSBvZiB0
aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRvZXMgbm90IHNh
dGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleC0+bXVsdGlFbnRyeSgpICYmIGluZGV4
S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXktPmFycmF5KClbal0u
Z2V0KCksIGtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJl
c2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5
cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVu
dHMuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChpbmRl
eEtleS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24n
dCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNh
Y3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKworICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2lu
Z1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBv
YmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ug
c3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkv
TyBlcnJvcnMuCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBk
YXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChJbmRl
eE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkgeworICAgICAgICBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYg
KCFpbmRleC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRl
eCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRh
YmFzZSB5ZXQuCisKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RT
dG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2Vz
IG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUg
c3RvcmFnZS4iKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5kZXhLZXlzW2ldKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gaW5k
ZXhLZXlzW2ldOworCisgICAgICAgIGlmICghaW5kZXgtPm11bHRpRW50cnkoKSB8fCBpbmRleEtl
eS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAgICAgICAgICBpZiAoIW9iamVj
dFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3Jl
LT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSwgKmluZGV4S2V5
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3Ig
Y29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KKyAgICAgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Cisg
ICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KGluZGV4LT5tdWx0aUVudHJ5KCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4S2V5LT50eXBl
KCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlm
ICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JSZWNvcmQob2Jq
ZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCAq
aW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9u
IGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRh
dGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGtleS5nZXQoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBw
cnBLZXk7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXks
IGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZUZ1bmN0aW9u
KGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgZWMpOworfQor
Cit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
UkVBRF9PTkxZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CisK
KyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9
IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVj
dFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwg
SURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNv
ci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgIGZvciAoSW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBl
eGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgorCisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNz
ID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
b2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQt
PmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9i
amVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0
U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpOworCisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVG
dW5jdGlvbigwKSk7CisKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOworICAg
IH0KKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5k
ZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xl
YXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOworICAgIGlmICh0
cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOworCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUt
PmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBQb3B1bGF0ZUluZGV4
Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrIHsKK3B1YmxpYzoKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAgICA6IG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJ
ZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBt
X2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2so
Y29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29y
ZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtl
eSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1faW5kZXgtPmtleVBh
dGgoKSk7CisKKyAgICAgICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIGlmICghbV9pbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBl
KCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAgIGlmICghbV9pbmRleC0+YWRk
aW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNv
cmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCksICppbmRleEtl
eSwgcmVjb3JkSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXgtPm11bHRpRW50cnkoKSk7
CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlw
ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4S2V5LT5hcnJheSgp
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5hZGRpbmdLZXlB
bGxvd2VkKGluZGV4S2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVj
b3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgpLCAqaW5kZXhL
ZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIElEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3Rv
cmU7CisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Cit9OworfQorCiti
b29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0
b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQoreworICAgIFBvcHVs
YXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZS5mb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2spKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6
Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIHRoaXMsIG5hbWUsIG1f
bmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBBU1NFUlQoaW5kZXgtPm5h
bWUoKSA9PSBuYW1lKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAor
ICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVh
c2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24pCit7CisgICAgaW50NjRfdCBpZDsKKyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tp
bmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUo
KSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5kZXgtPnNldElkKGlkKTsKKwor
ICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgpKSB7CisgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOworfQorCitQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CisgICAg
aWYgKCFpbmRleCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9V
TkRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4LnJlbGVh
c2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgp
ICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0
KG5hbWUpOworICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFu
c2FjdGlvbjsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW5kZXhJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0
b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkgeworICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbmRleGVzLnJlbW92ZShuYW1lKTsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7Cisg
ICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChvYmplY3RTdG9yZS0+
bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOworICAgIHRyYW5z
YWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdl
LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvciIpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSA9IHBy
cFJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
blB0ciA9IHRyYW5zYWN0aW9uOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygK
KyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvckludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uUHRyKSkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJ
VkVfRVJSOworICAgIH0KK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVu
Q3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih0bXBEaXJlY3Rpb24pOwor
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRp
cmVjdGlvbik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJz
b3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVj
dFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOworICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOworfQorCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgdWludDMyX3Qg
Y291bnQgPSAwOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0
b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVD
dXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdl
LmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7
CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVt
YmVyVmFsdWUoY291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvIHsKKyAg
ICAgICAgKytjb3VudDsKKyAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVl
RnVuY3Rpb24oMCkpOworCisgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOworICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291
bnQpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygp
Cit7CisgICAgVmVjdG9yPGludDY0X3Q+IGlkczsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsK
KyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4gdW5pcXVlRmxh
Z3M7CisgICAgVmVjdG9yPGJvb2w+IG11bHRpRW50cnlGbGFnczsKKyAgICBtX2JhY2tpbmdTdG9y
ZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCB1
bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsKKworICAgIEFTU0VSVChuYW1lcy5zaXplKCkg
PT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOworICAgIEFT
U0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1faW5kZXhlcy5zZXQo
bmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQo
KSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUsIGtleVBhdGhz
W2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRyeUZsYWdzW2ldKSk7Cit9CisKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQoreworICAgIEFTU0VS
VChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkpKTsKKyAgICBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKK30KKwordm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQoreworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OworICAgIEFTU0VSVCghb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7CisgICAgb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIpOworfQorCitQ
YXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuQXV0b0luY3Jl
bWVudEtleSgpCit7CisgICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDApCisgICAgICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CisK
KyAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fYmFja2luZ1N0
b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihtX2RhdGFiYXNlSWQsIGlkKCkpKTsKKyAgICBy
ZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbF9oCisjZGVmaW5lIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAorCisjaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3Rv
cmU7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgSURCSW5kZXhCYWNrZW5k
SW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBw
dWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRv
SW5jcmVtZW50KSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgbmFtZSwg
a2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQg
PSAwOworICAgIGludDY0X3QgaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faWQg
IT0gSW52YWxpZElkKTsKKyAgICAgICAgcmV0dXJuIG1faWQ7CisgICAgfQorICAgIHZvaWQgc2V0
SWQoaW50NjRfdCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWQ7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXV0b0luY3Jl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3JlbWVudDsgfQorCisgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVh
bCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNv
dW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHN0
YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4pOworCitwcml2YXRlOgorICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2lu
Z1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CisKKyAgICB2b2lkIGxvYWRJbmRleGVzKCk7CisgICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtl
eUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQorCisgICAgc3RhdGljIHZv
aWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0
YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisKKyAgICAvLyBUaGVzZSBhcmUg
dXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgorICAgIHN0YXRpYyB2
b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0QXV0b0luY3JlbWVu
dEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50NjRfdCBtX2lkOwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBib29sIG1fYXV0
b0luY3JlbWVudDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOworICAgIEluZGV4TWFwIG1faW5kZXhlczsKKyAgICBp
bnQgbV9hdXRvSW5jcmVtZW50TnVtYmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorI2RlZmluZSBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xh
c3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlOworY2xhc3Mg
SURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK3R5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Uo
KSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKKyAgICBlbnVt
IFB1dE1vZGUgeworICAgICAgICBBZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25seSwKKyAgICAg
ICAgQ3Vyc29yVXBkYXRlCisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
b3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgorI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgorCit1c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOworCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGhyZWFkU3BlY2lmaWM8VmVjdG9y
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9ucygpCit7Cisg
ICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRv
IGF2b2lkIGRlYWxpbmcgd2l0aAorICAgIC8vIHRocmVhZC1sb2NhbCBzdG9yYWdlLgorICAgIEF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0aW9ucyA9IG5ldyBUaHJlYWRTcGVj
aWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPik7CisgICAgcmV0
dXJuICp0cmFuc2FjdGlvbnM7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgdHJhbnNhY3Rpb25zKCktPmFwcGVuZCh0cmFuc2FjdGlvbik7
Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1Ry
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7
CisgICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9ucygpOworICAgIHNpemVfdCBwb3Mg
PSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24pOworICAgIGlmIChwb3MgPT0gbm90
Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uTGlzdC0+cmVtb3ZlKHBv
cyk7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWJvcnRQZW5kaW5n
VHJhbnNhY3Rpb25zKCkKK3sKKyAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJhbnNhY3Rpb25zKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbnMoKS0+c2l6ZSgpOyArK2kp
CisgICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFib3J0KCk7CisgICAgLy8gRklYTUU6
IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEgbGF5b3V0IHRlc3QuCisgICAgdHJh
bnNhY3Rpb25MaXN0LT5jbGVhcigpOworfQorCit9OworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAkocmV2aXNpb24g
MTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCisjZGVm
aW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlOworCisvLyBUaGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFu
c2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKKy8vIEphdmFzY3JpcHQgZXhlY3V0
aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rpb24gaXMgJ3BlbmRpbmcnIGlmIG5vIGFzeW5jaHJvbm91
cworLy8gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBxdWV1ZWQgZm9yIGl0IChlLmcuIGFuIElEQk9i
amVjdFN0b3JlOjpwdXQoKSBvciBzaW1pbGFyKS4KKy8vIEFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBhcmUgYWJvcnRlZCBhcyBzb29uIGFzIGV4ZWN1dGlvbiByZXR1cm5zIGZyb20KKy8vIHRoZSBz
Y3JpcHQgZW5naW5lLgorCitjbGFzcyBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGVuZGluZ1RyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHN0YXRpYyB2b2lk
IGFib3J0UGVuZGluZ1RyYW5zYWN0aW9ucygpOworCitwcml2YXRlOgorICAgIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIK
KyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5o
IgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKKyNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJ
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCB0cmFuc2FjdGlv
bikpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVxdWVz
dC5yZWxlYXNlKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisg
ICAgLCBtX2Vycm9yQ29kZSgwKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5HKQorICAgICwg
bV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2N1cnNvckZpbmlzaGVkKGZhbHNlKQor
ICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKKyAgICAsIG1fY3Vyc29yVHlwZShJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKKyAgICAsIG1fY3Vyc29yKDAp
Cit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVn
aXN0ZXJSZXF1ZXN0KHRoaXMpOworICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
OjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKKyAg
ICB9Cit9CisKK0lEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5RGVhdGggfHwgIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAgICAgIG1fdHJh
bnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworfQorCitQYXNzUmVmUHRyPElEQkFu
eT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1
cm4gbV9yZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVycm9yQ29kZShF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IERPTkUp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JDb2RlOworfQorCitT
dHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworfQorCitQYXNzUmVmUHRy
PElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3Vy
Y2U7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5zYWN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbjsKK30KKwordW5zaWduZWQg
c2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcmVh
ZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICByZXR1cm4g
bV9yZWFkeVN0YXRlOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om1hcmtFYXJseURlYXRoKCkKK3sK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOworICAgIG1fcmVhZHlTdGF0ZSA9
IEVhcmx5RGVhdGg7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVk
KTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05F
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5HOwor
ICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgbV9lcnJvckNvZGUgPSAwOworICAgIG1fZXJyb3JN
ZXNzYWdlID0gU3RyaW5nKCk7CisKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpy
ZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitJREJBbnkqIElEQlJlcXVlc3Q6OnNvdXJjZSgpCit7CisgICAg
cmV0dXJuIG1fc291cmNlLmdldCgpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmFib3J0KCkKK3sK
KyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IExPQURJTkcpIHsKKyAg
ICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmV2ZW50UXVldWUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRF
dmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS0+
Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xl
YXIoKTsKKworICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IFN0cmlu
ZygpOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIlRoZSB0cmFuc2FjdGlv
biB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJlIGZ1bGZpbGxlZC4iKSk7Cit9
CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSA9
PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7CisgICAgbV9j
dXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJzb3Io
UGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKK3sKKyAgICBBU1NFUlQoIW1fY3Vyc29yKTsK
KyAgICBtX2N1cnNvciA9IGN1cnNvcjsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpmaW5pc2hDdXJz
b3IoKQoreworICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOworICAgIGlmIChtX3JlYWR5U3Rh
dGUgIT0gTE9BRElORykKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOworfQorCit2
b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgp
ICYmICFtX3Jlc3VsdCk7CisgICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29kZSgpOworICAgIG1f
ZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKKyAgICBtX2N1cnNvci5jbGVhcigpOwor
ICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0
cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVTdWNjZXNz
RXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNz
RXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIpOworICAgIEFTU0VSVCghbV9l
cnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBt
X3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOworICAgIGVucXVldWVFdmVu
dChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7CisgICAgQVNTRVJU
KCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwor
ICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52
YWxpZEN1cnNvclR5cGUpOworICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsKKyAgICBpZiAo
bV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29y
KQorICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBtX3Nv
dXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBjdXJz
b3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCB0aGlzLCBtX3NvdXJjZS5n
ZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisKKyAgICBzZXRSZXN1bHRDdXJzb3IoY3Vyc29y
LCBtX2N1cnNvclR5cGUpOworCisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgp
KTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCit7CisgICAgSURCX1RSQUNFKCJJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBt
X2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGlmIChtX2NvbnRleHRT
dG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7CisgICAgaWRiRGF0YWJhc2UtPm9w
ZW4oKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiRGF0YWJhc2UucmVsZWFz
ZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQoreworICAg
IElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktleSkiKTsKKyAgICBBU1NFUlQo
IW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Cisg
ICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCisgICAgICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoaWRiS2V5KTsKKyAgICBlbHNlCisgICAgICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKKyAgICBl
bnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJw
QmFja2VuZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJUcmFu
c2FjdGlvbikiKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisKKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgIGJhY2tlbmQtPmFib3J0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKKyAgICBiYWNrZW5k
LT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb24gPSBmcm9u
dGVuZDsKKworICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCRGF0YWJh
c2VUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisgICAgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCktPnNldFZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7CisKKyAgICBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZnJvbnRlbmQu
cmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQor
Cit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQoreworICAgIElEQl9UUkFDRSgiSURCUmVxdWVz
dDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsKKyAgICBBU1NFUlQoIW1fZXJy
b3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpOworICAgIG1fY3Vy
c29yLmNsZWFyKCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30K
Kwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24iKTsKKyAgICBB
U1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3Vs
dCk7CisgICAgQVNTRVJUKG1fY3Vyc29yKTsKKyAgICBzZXRSZXN1bHRDdXJzb3IobV9jdXJzb3Is
IG1fY3Vyc29yVHlwZSk7CisgICAgbV9jdXJzb3IuY2xlYXIoKTsKKyAgICBlbnF1ZXVlRXZlbnQo
Y3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCitib29sIElEQlJlcXVlc3Q6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3ZSBz
aG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2FuCisgICAgLy8g
ICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBsaXN0ZW5lcnMuIFRo
aXMgaXMgb3JkZXIgdG8gaGFuZGxlCisgICAgLy8gICAgICAgIHVzZXIgZ2VuZXJhdGVkIGV2ZW50
cyBwcm9wZXJseS4KKyAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8IEFjdGl2ZURPTU9i
amVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c3RvcCgp
Cit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAgaWYgKG1fY29udGV4dFN0b3Bw
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOworICAg
IGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKKyAgICAgICAgbWFya0Vhcmx5RGVhdGgoKTsK
K30KKwordm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIElEQlJlcXVlc3Q6OmludGVyZmFjZU5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCUmVx
dWVzdDsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCitib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJSZXF1ZXN0
OjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hlZCk7CisgICAg
QVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQobV9lbnF1ZXVlZEV2ZW50cy5z
aXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIEFTU0VS
VChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jl
YWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSglZCksIHdhcyAlZCIsIERPTkUs
IG1fcmVhZHlTdGF0ZSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJs
b2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAgICAgICAgICAg
IG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOworICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8
RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKKyAgICBp
ZiAobV90cmFuc2FjdGlvbikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9u
KTsKKyAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRzIHRoYXQgYXJlIGFzc29jaWF0
ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0IGRvIG5vdCBoYXZlIGEgdHJh
bnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3ZSBuZWVkCisgICAgICAgIC8v
IHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGFiYXNl
ICh0byBlbnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUpLgorICAgICAgICB0YXJnZXRz
LmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vy
c29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBpZiAobV9yZXN1bHQpIHsKKyAgICAgICAgaWYgKG1f
cmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQorICAgICAgICAgICAgY3Vy
c29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7CisgICAgICAgIGVsc2UgaWYgKG1f
cmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQorICAgICAg
ICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNo
aW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCisgICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmJsb2NrZWRFdmVudCk7CisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKworICAgIC8vIElmIHRo
ZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tlZCBldmVudCwgdGhl
biB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMo
KS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZpbmlzaGVkKSkK
KyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOworCisgICAgaWYgKGN1cnNvclRvTm90
aWZ5KQorICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2so
KTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CisgICAgICAgIC8vIElmIGFuIGVycm9yIGV2
ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCisgICAgICAgIGlmIChkb250
UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCkKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKS0+YWJvcnQoKTsKKyAgICAg
ICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKKyAg
ICB9CisgICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBJREJSZXF1ZXN0
Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV90cmFuc2Fj
dGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgpOworfQorCit2
b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sK
KyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9w
cGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKworICAgIEV2ZW50UXVldWUqIGV2ZW50UXVl
dWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOworCisgICAgaWYgKGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVu
dC5nZXQoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKwor
RXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJl
dHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVz
dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXRE
YXRhOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRyPElE
QkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBl
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3IpIHsKKyAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShwcnBDdXJz
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNy
ZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJwQ3Vyc29yKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCUmVxdWVzdF9oCisjZGVmaW5lIElEQlJlcXVlc3RfaAor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCQ2Fs
bGJhY2tzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCVHJhbnNhY3Rpb247
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQlJlcXVlc3QgOiBwdWJs
aWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJh
bnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7CisKKyAgICBQYXNzUmVmUHRy
PElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaG9y
dCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFN0cmluZyB3ZWJraXRFcnJv
ck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
bigpIGNvbnN0OworCisgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCisgICAgZW51bSBSZWFkeVN0
YXRlIHsKKyAgICAgICAgTE9BRElORyA9IDEsCisgICAgICAgIERPTkUgPSAyLAorICAgICAgICBF
YXJseURlYXRoID0gMworICAgIH07CisgICAgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNv
bnN0OworCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNjZXNzKTsKKyAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAgIHZvaWQgbWFy
a0Vhcmx5RGVhdGgoKTsKKyAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbiop
OworICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JUeXBlKTsKKyAgICB2b2lkIHNldEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOworICAg
IHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgSURCQW55KiBzb3VyY2UoKTsKKyAgICB2b2lkIGFi
b3J0KCk7CisKKyAgICAvLyBJREJDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNz
KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4pOworICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Pik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7
CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBWZWN0b3I8UmVm
UHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIHByaW1h
cnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFs
dWVzKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIE5vdCBpbXBsZW1lbnRlZC4gQ2FsbGJh
Y2sgc2hvdWxkIG5vdCByZWFjaCB0aGUgcmVuZGVyZXIgc2lkZS4KKyAgICB2aXJ0dWFsIHZvaWQg
b25CbG9ja2VkKCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSBPVkVSUklERTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQorICAgIHZpcnR1
YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CisKKyAgICB1c2luZyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7CisgICAgdXNpbmcgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisKK3Byb3RlY3RlZDoKKyAgICBJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291
cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKKyAgICB1bnNpZ25lZCBzaG9y
dCBtX2Vycm9yQ29kZTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKK3ByaXZhdGU6Cisg
ICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CisgICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworCisgICAgdm9p
ZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+LCBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKworICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAgIFJlYWR5U3Rh
dGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9yZXF1ZXN0RmluaXNoZWQ7IC8vIElzIGl0IHBv
c3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHM/IElmIG5vdCwgd2UncmUgZmlu
aXNoZWQuCisgICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOworICAgIGJvb2wgbV9jb250ZXh0U3Rv
cHBlZDsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5xdWV1ZWRFdmVudHM7CisKKyAg
ICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCisgICAg
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAg
UmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7CisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVu
dFRhcmdldERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlJlcXVlc3RfaApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0Lmlk
bDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKwor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisg
ICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRXZlbnRUYXJnZXQKKyAgICBdIElEQlJl
cXVlc3QgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJlc3VsdAorICAgICAg
ICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlCisgICAgICAgICAgICBnZXR0
ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERPTVN0cmluZyB3ZWJr
aXRFcnJvck1lc3NhZ2UKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKKworICAg
ICAgICAvLyBTdGF0ZXMKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9BRElORyA9IDE7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAyOworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKKworICAgICAgICAvLyBFdmVu
dHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25zdWNjZXNzOworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZQorICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFu
IHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3Ry
aW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlv
bmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQo
aW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAgICB9
OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhY2luZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYWNp
bmcuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YWNpbmcuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRy
YWNpbmdfaAorI2RlZmluZSBJREJUcmFjaW5nX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisKKyNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisjZGVmaW5lIElEQl9UUkFDRShhKSBUUkFDRV9FVkVOVDAoIkluZGV4ZWREQiIsIChhKSk7CisK
KyNlbHNlCisKKyNkZWZpbmUgSURCX1RSQUNFKGEpICgodm9pZCkwKQorCisjZW5kaWYgLy8gIFBM
QVRGT1JNKENIUk9NSVVNKQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
KyNlbmRpZiAvLyBJREJUcmFjaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHA6MTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5o
IgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJREJJbmRl
eC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvci5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCit7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24oY29u
dGV4dCwgYmFja2VuZCwgZGIpKSk7CisgICAgdHJhbnNhY3Rpb24tPnN1c3BlbmRJZk5lZWRlZCgp
OworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK0lEQlRyYW5zYWN0aW9u
OjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2Uq
IGRiKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX2JhY2tl
bmQoYmFja2VuZCkKKyAgICAsIG1fZGF0YWJhc2UoZGIpCisgICAgLCBtX21vZGUobV9iYWNrZW5k
LT5tb2RlKCkpCisgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2Nv
bnRleHRTdG9wcGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgIElEQlBl
bmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFuc2FjdGlvbihtX2JhY2tlbmQu
Z2V0KCkpOworfQorCitJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0aW9uKCkKK3sKK30KKwor
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2FjdGlvbjo6YmFja2VuZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKK30KKworYm9vbCBJREJUcmFu
c2FjdGlvbjo6ZmluaXNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uRmlu
aXNoZWQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlRyYW5zYWN0aW9uOjptb2RlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tb2RlOworfQorCitJREJEYXRhYmFzZSogSURCVHJhbnNhY3Rpb246
OmRiKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKK30KKworUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb25G
aW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIElEQk9iamVjdFN0b3JlTWFw
OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQg
IT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJh
Y2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKyAgICBpZiAoIW9iamVj
dFN0b3JlQmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVj
dFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBvYmplY3RTdG9y
ZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKQor
eworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBtX29iamVjdFN0b3Jl
TWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9i
amVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3ZlKG5hbWUpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCit7CisgICAgaWYgKG1fdHJhbnNhY3Rp
b25GaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
c2VsZlJlZiA9IHRoaXM7CisgICAgaWYgKG1fYmFja2VuZCkKKyAgICAgICAgbV9iYWNrZW5kLT5h
Ym9ydCgpOworfQorCitJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjpPcGVuQ3Vy
c29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24sIElEQkN1
cnNvciogY3Vyc29yKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiksCisgICAgICBt
X2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29y
KG1fY3Vyc29yKTsKK30KKworSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6fk9w
ZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5D
dXJzb3IobV9jdXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3Rlck9wZW5D
dXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vy
c29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAgSGFzaFNldDxJ
REJDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcChtX29wZW5DdXJzb3JzKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkgPSBjdXJzb3JzLmJlZ2luKCk7
IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT5jbG9zZSgpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBtX2NoaWxkUmVxdWVzdHMuYWRkKHJlcXVlc3QpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIC8v
IElmIHdlIGFib3J0ZWQgdGhlIHJlcXVlc3QsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcmVt
b3ZlZC4KKyAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5p
c2hlZCk7CisgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNFbXB0eSgpKSB7CisgICAgICAg
IElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3RzLmJlZ2luKCk7CisgICAgICAg
IG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAgICAgIHJlcXVlc3QtPmFib3J0
KCk7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9w
cGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVl
LCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKK3sKKyAg
ICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAgaWYgKG1fbW9kZSA9PSBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKwor
ICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBJREJUcmFuc2Fj
dGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gYW4g
aWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMg
YSBvciBjYW4KKyAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFueSBjaGlsZCBy
ZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKKyAgICAvLyAgICAgICAgZXZlbnQg
bGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUgdXNlciBnZW5lcmF0ZWQgZXZl
bnRzIHByb3Blcmx5LgorICAgIHJldHVybiAhbV90cmFuc2FjdGlvbkZpbmlzaGVkIHx8IEFjdGl2
ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgSURCVHJhbnNhY3Rpb246OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVHJhbnNhY3Rpb247Cit9CisKK1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hF
dmVudCIpOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBBU1NFUlQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09
IHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25GaW5pc2hlZCA9IHRydWU7CisKKyAgICAvLyBCcmVh
ayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3JlTWFwLmVu
ZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7Cisg
ICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRh
cmdldD4gPiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOworICAgIHRhcmdldHMu
YXBwZW5kKGRiKCkpOworCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50
IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCisgICAgQVNT
RVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworfQorCitib29sIElE
QlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGVjaG5p
Y2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0IGlzIHNjaGVkdWxl
CisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0aGUgY29tcGxldGUvYWJvcnQgZXZlbnQgaXMgZW5x
dWV1ZWQuCisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAg
bV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAgICBhYm9ydCgpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghbV90cmFuc2FjdGlvbkZpbmlzaGVkLCAiQSBmaW5pc2hlZCB0
cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUgJXMuIiwgZXZlbnQt
PnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBF
dmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1
ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1
ZXVlRXZlbnQoZXZlbnQpOworfQorCitFdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjpl
dmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisK
K0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
Cit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uX2gKKyNk
ZWZpbmUgSURCVHJhbnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
KyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25D
YWxsYmFja3MuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vyc29yOworY2xh
c3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xhc3MgSURCVHJhbnNh
Y3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25DYWxsYmFja3MsIHB1YmxpYyBFdmVudFRhcmdl
dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFzZSopOworICAg
IHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uKCk7CisKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBS
RUFEX09OTFkgPSAwLAorICAgICAgICBSRUFEX1dSSVRFID0gMSwKKyAgICAgICAgVkVSU0lPTl9D
SEFOR0UgPSAyCisgICAgfTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
YmFja2VuZCgpIGNvbnN0OworICAgIGJvb2wgZmluaXNoZWQoKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNob3J0IG1vZGUoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZSogZGIoKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICBjbGFzcyBPcGVu
Q3Vyc29yTm90aWZpZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3BlbkN1cnNvck5vdGlmaWVy
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+LCBJREJDdXJzb3IqKTsKKyAgICAgICAgfk9wZW5D
dXJzb3JOb3RpZmllcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICAgICAgSURCQ3Vyc29yKiBtX2N1cnNvcjsKKyAgICB9
OworCisgICAgdm9pZCByZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAgIHZvaWQgdW5y
ZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAgIHZvaWQgb2JqZWN0U3RvcmVDcmVhdGVk
KGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+KTsKKyAgICB2b2lkIG9i
amVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmKTsKKworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoY29tcGxldGUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3Ip
OworCisgICAgLy8gSURCVHJhbnNhY3Rpb25DYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25B
Ym9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7CisKKyAgICAvLyBFdmVudFRh
cmdldAorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50
KGV2ZW50LCBlYyk7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y2FuU3VzcGVuZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZF
UlJJREU7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6
cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpkZXJl
ZjsKKworcHJpdmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFz
ZSopOworCisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZv
aWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURC
Q3Vyc29yKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3IqKTsKKwor
ICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9
CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKKworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwor
ICAgIGJvb2wgbV90cmFuc2FjdGlvbkZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJsZSB0aGF0IHdl
J2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzIG9yIGFsbG93IGFueSBuZXcgcmVxdWVzdHM/IElmIG5v
dCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOworCisgICAgTGlz
dEhhc2hTZXQ8SURCUmVxdWVzdCo+IG1fY2hpbGRSZXF1ZXN0czsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gPiBJREJPYmplY3RTdG9yZU1hcDsK
KyAgICBJREJPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlTWFwOworCisgICAgSGFzaFNldDxJ
REJDdXJzb3IqPiBtX29wZW5DdXJzb3JzOworCisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRU
YXJnZXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisg
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAg
IEV2ZW50VGFyZ2V0CisgICAgXSBJREJUcmFuc2FjdGlvbiB7CisgICAgICAgIC8vIE1vZGVzCisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9IDA7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7CisKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgbW9kZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOworICAgICAgICAvLyBNZXRob2RzCisgICAgICAg
IElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICB2b2lkIGFib3J0ICgp
OworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25h
Ym9ydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKKyAgICAg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgLy8gRXZlbnRUYXJn
ZXQgaW50ZXJmYWNlCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xl
YW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01T
dHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0
aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVu
dChpbiBFdmVudCBldnQpIAorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAg
ICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7
Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1fb2JqZWN0U3RvcmVOYW1lcyhv
YmplY3RTdG9yZXMpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fc3RhdGUoVW51c2VkKQor
ICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24oZGF0YWJhc2Ut
PmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVUcmFuc2FjdGlvbigpKQorICAgICwgbV90YXNrVGltZXIo
dGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKQorICAgICwg
bV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2
ZW50VGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ0V2ZW50cygwKQoreworICAgIEFTU0VSVCht
X29iamVjdFN0b3JlTmFtZXMpOworICAgIEFTU0VSVChtX21vZGUgPT0gSURCVHJhbnNhY3Rpb246
OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMtPmlzRW1wdHkoKSk7CisgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlv
bih0aGlzKTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6fklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhp
cyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJv
cnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgLy8gRG9lcyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFsbHkgc2hvdWxkbid0IGJlIHRo
YXQgc2xvdyBpbiBwcmFjdGljZS4KKyAgICBpZiAobV9tb2RlICE9IElEQlRyYW5zYWN0aW9uOjpW
RVJTSU9OX0NIQU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5jb250YWlucyhuYW1lKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5hbWUpOworICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0IG5vdyBiZWFjdXNlIGEgc2V0
VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdzCisgICAgLy8gICAgICAgIGJl
dHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNrIG9jY3VycykgYW5kIHRoZSAu
b2JqZWN0U3RvcmUgY2FsbC4KKyAgICAvLyAgICAgICAgVGhlcmUncyBhIGJ1ZyB0byBtYWtlIHRo
aXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtlIGl0IGltcG9zc2libGUgaGVy
ZSwgd2UKKyAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgorICAgIGlmICghb2Jq
ZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvYmplY3RTdG9yZS5y
ZWxlYXNlKCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVU
YXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spCit7CisgICAgaWYg
KG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fdGFz
a1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoYWJvcnRUYXNrKQorICAgICAgICBtX2Fib3J0
VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNl
ZCkKKyAgICAgICAgc3RhcnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0Iik7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzUnVubmluZyA9IG1fc3RhdGUgPT0gUnVu
bmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUg
cmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBhYm9ydCBzdGVwcyBiZWxvdy4g
V2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAg
IC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKworICAgIG1fc3RhdGUgPSBGaW5pc2hl
ZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7
CisKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAg
IG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tz
LCBpZiBhbnkuCisgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzayhtX2Fib3J0VGFz
a1F1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5yZW1v
dmVGaXJzdCgpOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICB9CisKKyAgICBp
ZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7CisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0
aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhp
cyk7CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCit7
CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCog
Y3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWRkUGVuZGluZ0V2ZW50cyhpbnQgbikKK3sKKyAg
ICBtX3BlbmRpbmdFdmVudHMgKz0gbjsKKyAgICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzID49IDAp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRpZENvbXBsZXRlVGFza0V2
ZW50cygpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOworICAgIEFTU0VSVChtX3BlbmRpbmdF
dmVudHMpOworICAgIG1fcGVuZGluZ0V2ZW50cy0tOworCisgICAgaWYgKCFtX3Rhc2tFdmVudFRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGFza0V2ZW50VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJ1bigpCit7CisgICAgQVNT
RVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAg
QVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAgIG1fdGFza1RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgp
Cit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKworICAgIG1fc3RhdGUgPSBTdGFy
dFBlbmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRT
dGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRl
ZCh0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQor
eworICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0Iik7Cisg
ICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3
aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVm
b3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAgIC8vIGFsaXZl
IHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsK
KyAgICBBU1NFUlQobV90YXNrUXVldWUuaXNFbXB0eSgpKTsKKworICAgIG1fc3RhdGUgPSBGaW5p
c2hlZDsKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlvbi0+Y29tbWl0
KCk7CisgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKKyAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisgICAgbV9kYXRhYmFzZSA9IDA7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQoVGlt
ZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKQoreworICAgIElEQl9UUkFDRSgiSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQiKTsKKyAgICBBU1NFUlQoIW1fdGFz
a1F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsK
KyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV9zdGF0ZSA9IFJ1bm5p
bmc7CisgICAgfQorCisgICAgVGFza1F1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3YXAobV90YXNr
UXVldWUpOworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNo
ZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgICAgIE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHF1ZXVlLmZpcnN0KCkucmVsZWFz
ZSgpKTsKKyAgICAgICAgcXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgbV9wZW5kaW5nRXZl
bnRzKys7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgIH0KK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KikKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQiKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9
PSBSdW5uaW5nKTsKKworICAgIGlmICghbV9wZW5kaW5nRXZlbnRzICYmIG1fdGFza1F1ZXVlLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgbGFzdCB0YXNrIGV2ZW50IGhhcyBjb21wbGV0ZWQg
YW5kIHRoZSB0YXNrCisgICAgICAgIC8vIHF1ZXVlIGlzIGVtcHR5LiBDb21taXQgdGhlIHRyYW5z
YWN0aW9uLgorICAgICAgICBjb21taXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBvdGhlciBldmVudHMgdG8gY29tcGxldGUuIEhv
d2V2ZXIsCisgICAgLy8gdGhlIHRhc2sgcXVldWUgaXMgbm9uLWVtcHR5IGFuZCB0aGUgdGltZXIg
aXMgaW5hY3RpdmUuCisgICAgLy8gV2UgY2FuIHRoZXJmb3JlIHNjaGVkdWxlIHRoZSB0aW1lciBh
Z2Fpbi4KKyAgICBpZiAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSAmJiAhbV90YXNrVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3NlT3BlbkN1cnNvcnMoKQoreworICAgIGZv
ciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+OjppdGVyYXRvciBpID0gbV9vcGVuQ3Vy
c29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKKyAgICAgICAgKCpp
KS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Cit9CisKK307CisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gK
KyNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJC
YWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJp
bmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBv
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBh
Ym9ydFRhc2spOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFj
a3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tl
bmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KTsK
KworICAgIHZvaWQgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElE
QkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBVbnVz
ZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFN0YXJ0UGVuZGluZywg
Ly8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVk
LgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90
IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNv
bW1pdHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgY29tbWl0KCk7
CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+Kik7CisgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICBSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOworICAgIHVuc2lnbmVkIHNob3J0
IG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsK
KyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworCisgICAgLy8gRklYTUU6IGRlbGV0
ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KKyAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKKyAgICBUaW1lcjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOworICAgIGludCBtX3BlbmRpbmdFdmVu
dHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVuQ3Vyc29yczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
OjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisjZGVmaW5lIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3Mu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJDdXJzb3JC
YWNrZW5kSW1wbDsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTsKK2NsYXNz
IElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwor
CisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJUcmFuc2FjdGlvbiAoYXN5bmMpIGFuZCBJ
REJUcmFuc2FjdGlvblN5bmMgKHN5bmMpLgorLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIgdG8g
cHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRvIHRo
ZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKKy8vIHRyaWdnZXIgd29yayBv
biBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2NsYXNzIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFib3J0
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJz
b3JCYWNrZW5kSW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZFBlbmRp
bmdFdmVudHMoaW50KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrc19o
CisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJU
cmFuc2FjdGlvbkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25DYWxsYmFja3Mo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBvbkNvbXBsZXRlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6MTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgi
CisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpOworfQor
CitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkg
Cit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVh
dGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAg
bV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5h
ZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBpZiAobV9zdGFydGVkVHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NFUlQoIW1fcnVu
bmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAgICBtX3N0YXJ0
ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgaWYgKG1fcnVu
bmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIG1fcnVubmlu
Z1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7
Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVuY3kg
d2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29sIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGFydGVk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgZm91bmQgPSB0cnVl
OworICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKSB7
CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgfQor
ICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
OworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZgorCit2b2lkIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKK3sKKyAgICAvLyBGSVhNRTog
Rm9yIG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rpb24gdG8gcnVuIGF0IGEgdGltZS4K
KyAgICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9ICpt
X3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICBtX3J1bm5pbmdUcmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uKTsKKyAgICB0cmFuc2FjdGlvbi0+cnVuKCk7Cit9CisKK307CisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorI2RlZmlu
ZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3M7Citj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworCisvLyBUcmFuc2FjdGlvbnMgYXJlIGV4ZWN1
dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgorY2xhc3MgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7
CisKKyAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlz
aC4KKyAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcigpOworCisgICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygp
OworCisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3YXkgdG8ga2VlcCByZWZlcmVu
Y2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCisgICAgSGFzaE1hcDxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+ID4gbV90cmFuc2FjdGlv
bnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBzdGF0ZXMgYXJlIGdyb3VwZWQg
YmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IG1fc3Rh
cnRlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
PiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudCh2ZXJzaW9uLCBl
dmVudFR5cGUpKTsKK30KKworSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hhbmdl
RXZlbnQoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSkKKyAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypjYW5CdWJibGUqLywgZmFsc2UgLypj
YW5jZWxhYmxlKi8pCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKworSURCVmVyc2lv
bkNoYW5nZUV2ZW50Ojp+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCkKK3sKK30KKworU3RyaW5nIElE
QlZlcnNpb25DaGFuZ2VFdmVudDo6dmVyc2lvbigpCit7CisgICAgcmV0dXJuIG1fdmVyc2lvbjsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURC
VmVyc2lvbkNoYW5nZUV2ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDoxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdl
RXZlbnRfaAorI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55OworCitjbGFzcyBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiA9IFN0cmluZygpLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IEF0b21p
Y1N0cmluZygpKTsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZlbnQoKTsKKworICAg
IHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKTsKKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSURCVmVyc2lvbkNo
YW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpOworCisgICAgU3RyaW5nIG1fdmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8g
SURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSURCVmVyc2lvbkNoYW5nZUV2ZW50IDogRXZl
bnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247CisgICAg
fTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHA6MTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorewor
ICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZihuZXcg
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoY29udGV4dCwgc291cmNlLCB2ZXJzaW9uKSkpOworICAg
IHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKKworfQorCitJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNv
dXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorICAgIDogSURCUmVxdWVzdChjb250ZXh0LCBz
b3VyY2UsIDApCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKK30KKworSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Q6On5JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpCit7Cit9CisKK2NvbnN0IEF0
b21pY1N0cmluZyYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmludGVyZmFjZU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6Om9uQmxvY2tlZCgp
Cit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAm
JiAhbV9yZXN1bHQpOworICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNy
ZWF0ZShtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdF9oCisjZGVmaW5lIElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiSURCUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogcHVibGljIElEQlJlcXVlc3QgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCB+SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tlZCk7CisKK3ByaXZhdGU6Cisg
ICAgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisKKyAgICBTdHJp
bmcgbV92ZXJzaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJSZXF1ZXN0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7
CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNF
LAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgeworICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtOTg3LDYgKzk4Nyw3
IEBACiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewogICAgICAgICAgICAg
J2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAn
Li4vTW9kdWxlcy9pbmRleGVkZGInLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01v
ZHVsZXMvbWVkaWFzdHJlYW0nLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL2Nzcycs
CiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vZG9tJywKQEAgLTE4MzksNiArMTg0MCw4
IEBACiAKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwuY3BwJCddLAogCisgICAgICAg
IFsnZXhjbHVkZScsICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZVxcLmNwcCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVBhdGhCYWNrZW5kSW1wbFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ2ZpbGVhcGkv
TG9jYWxGaWxlU3lzdGVtXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVk
ZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFteL10qXFwuY3BwJCddLApAQCAtMTg1Nyw4ICsxODYw
LDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsdWdpbnMvbnBhcGlcXC5jcHAkJ10sCiAgICAg
ICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudFxcLmgkJ10sCiAg
ICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlclxcLmNwcCQnXSwKLSAg
ICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VcXC5j
cHAkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1w
bFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5h
Z2VyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvT3JpZ2luVXNh
Z2VSZWNvcmRcXC4oY3BwfGgpJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNsaWVudFxcLmNwcCQnXSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQx
MTAsNiArMjQxMTAsMTY2IEBACiAJCQkJPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJCQk8RmlsdGVy
CisJCQkJTmFtZT0iaW5kZXhlZGRiIgorCQkJCT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkFueS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJB
bnkuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkNhbGxiYWNrcy5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
Q3Vyc29yLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5oIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNl
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5k
ZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VFcnJvci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XElEQkZhY3RvcnkuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeS5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcaW5kZXhlZGRiXElEQkluZGV4LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4LmgiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJJbmRleEJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkluZGV4QmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQktl
eS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURC
S2V5UmFuZ2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5k
ZXhlZGRiXElEQk9iamVjdFN0b3JlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxl
c1xpbmRleGVkZGJcSURCUmVxdWVzdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJSZXF1ZXN0Lmgi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxN
b2R1bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJU
cmFuc2FjdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJPC9GaWx0ZXI+CisJCQk8Rmls
dGVyCiAJCQkJTmFtZT0id2Vic29ja2V0cyIKIAkJCQk+CiAJCQkJPEZpbGUKQEAgLTcwNzM0LDE2
MiArNzA4OTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQkFueS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQW55LmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ2FsbGJhY2tzLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCQ3Vyc29yLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcSURCRGF0YWJhc2UuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlRXJyb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdG9yYWdlXElEQkZhY3RvcnkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnkuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQklu
ZGV4LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxJREJJbmRleC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2VuZEltcGwuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQklu
ZGV4QmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJLZXku
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dG9yYWdlXElEQktleS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXElEQktleVJhbmdlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJLZXlSYW5nZS5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElE
Qk9iamVjdFN0b3JlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJPYmplY3RTdG9yZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJSZXF1ZXN0LmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJSZXF1ZXN0Lmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCVHJhbnNhY3Rpb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQlRyYW5zYWN0aW9uLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRhc2su
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwkod29y
a2luZyBjb3B5KQpAQCAtNyw3ICs3LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0
RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1bGVzXGdlb2xvY2F0aW9uJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1bGVzXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGFjY2Vzc2liaWxpdHlcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2UmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxicmlkZ2VcanNjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxjc3MmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGVkaXRpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGZp
bGVhcGkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRlcmluZyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccmVuZGVyaW5nXG1hdGhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccmVuZGVyaW5nXHN0eWxlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdc
c3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5ncyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cYmluZGluZ3NcZ2VuZXJpYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
YmluZGluZ3NcanMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzXHNwZWNp
YWxpemF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxkb20mcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxoaXN0
b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxwYXJz
ZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxcc2hhZG93JnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRl
ciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFwcGNhY2hlJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxj
YWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGljb24mcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXG1hdGhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbm90aWZp
Y2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZSZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBh
Z2Vcc2Nyb2xsaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
bW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5l
dHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
YXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
YXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJh
bnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxX
ZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5z
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3Zn
XGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGllcyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVzdGluZyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNs
dWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVc
SmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cRm9y
d2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3Jl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7
OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpLi4mcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXE1vZHVsZXNcZ2VvbG9jYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XE1vZHVsZXNcaW5kZXhlZGRiJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1bGVzXHdl
YnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHkmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2luJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxjJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGVkaXRpbmcmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGZpbGVhcGkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJl
bmRlcmluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXG1hdGhtbCZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxlJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxyZW5kZXJpbmdcc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5k
aW5ncyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcZ2VuZXJpYyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGJpbmRpbmdzXGpzXHNwZWNpYWxpemF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
Llxkb20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1s
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5caHRtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxc
c2hhZG93JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVy
XGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGxvYWRlclxjYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9h
ZGVyXGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG1hdGhtbCZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcc2Nyb2xsaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5z
XHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxzdmdccHJvcGVydGllcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNz
XGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cdGVzdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
Llx3ZWJzb2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZx
dW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0
aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1
cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxw
cml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRl
XHNxbGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2Ny
aXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1
b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVfM0RfUkVO
REVSSU5HO1dFQkNPUkVfQ09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIi
CiAJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMwLDE0ICsxOTMwLDkgQEAKIAkJODA5REQx
RTAxMzBERTJBRDAwQ0FFM0VEIC8qIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA5REQxREUxMzBERTJBRDAwQ0FF
M0VEIC8qIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS5oICovOyB9OwogCQk4MTAyQzU4ODEzMjVCQjEx
MDBEREU2N0EgLyogU3RyaW5nQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODEwMkM1ODcxMzI1QkIxMTAwRERFNjdBIC8qIFN0cmluZ0Nh
bGxiYWNrLmNwcCAqLzsgfTsKIAkJODE1RTYxNjcxMzI1ODdBQTAwQjYyMkIwIC8qIERhdGFUcmFu
c2Zlckl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODE1RTYxNjYxMzI1ODdBQTAwQjYyMkIwIC8qIERhdGFUcmFuc2Zlckl0ZW0uY3BwICovOyB9
OwotCQk4MUE3MzI1RTEyMTAxODlCMDBGQzBEOUUgLyogSURCQ3Vyc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUE3MzI1RDEyMTAxODlCMDBGQzBE
OUUgLyogSURCQ3Vyc29yLmggKi87IH07Ci0JCTgxQTczMjYwMTIxMDE4QTQwMEZDMEQ5RSAvKiBJ
REJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8qIElEQkN1cnNvci5jcHAgKi87IH07Ci0JCTgx
QTczMjc4MTIxMDE5RTEwMEZDMEQ5RSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFBNzMyNzcxMjEwMTlFMTAw
RkMwRDlFIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi87IH07CiAJCTgxQUM1OTk5MTMxNjM2
RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUFDNTk5NzEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRy
YW5zZmVySXRlbS5oICovOyB9OwogCQk4MUFDNTk5QTEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRy
YW5zZmVySXRlbUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgxQUM1OTk4MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5o
ICovOyB9OwogCQk4MUFDNkMzNjEzMUM1N0QzMDAwOUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQUM2QzM1MTMx
QzU3RDMwMDA5QTdFMCAvKiBTdHJpbmdDYWxsYmFjay5oICovOyB9OwotCQk4MUJFMjA5ODExRjRB
QjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTMxMUY0QUI4RDAwOTE1REZBIC8q
IElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJODFCRTIwOTkxMUY0QUI4RDAwOTE1
REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTgxQkUyMEQyMTFGNEJDMzIwMDkxNURG
QSAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICov
OyB9OwogCQk4MUJFMjBEMzExRjRCQzMyMDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE4MTFGNEI2NkYw
MDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovOyB9OwogCQk4MUY2NUZGNjEzNzg4RkFBMDBGRjZG
MkQgLyogRHJhZ1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MUY2NUZGNTEzNzg4RkFBMDBGRjZGMkQgLyogRHJhZ1N0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzMDUsNiArMzMwMCw3
OSBAQAogCQk5NzBCNzJBNjE0NTAwOEVCMDBGMDBBMzcgLyogRXZlbnRIZWFkZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzBCNzJBNTE0NTAwOEVC
MDBGMDBBMzcgLyogRXZlbnRIZWFkZXJzLmggKi87IH07CiAJCTk3MTE0NjAzMTRFRjAwOUEwMDY3
NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzExNDYwMDE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdh
dG9yR2VvbG9jYXRpb24uY3BwICovOyB9OwogCQk5NzExNDYwNDE0RUYwMDlBMDA2NzRGRDkgLyog
TmF2aWdhdG9yR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTE0NjAxMTRFRjAwOUEwMDY3NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2Nh
dGlvbi5oICovOyB9OworCQk5NzEyQTVBRDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwICovOyB9OworCQk5NzEyQTVBRTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU1NTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNl
LmggKi87IH07CisJCTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTcxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkFueS5jcHAgKi87IH07CisJCTk3MTJBNUIxMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLzsgfTsKKwkJOTcxMkE1
QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkJhY2tpbmdTdG9yZS5oICovOyB9OworCQk5NzEyQTVCNDE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi87IH07CisJ
CTk3MTJBNUI1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkN1cnNvci5jcHAgKi87IH07CisJCTk3MTJBNUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLzsgfTsKKwkJOTcxMkE1
QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVGMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUI5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjAxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvckJhY2tlbmRJbXBsLmggKi87IH07CisJCTk3MTJBNUJBMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVCQjE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFs
dWUuY3BwICovOyB9OworCQk5NzEyQTVCQzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0
aFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi87IH07CisJ
CTk3MTJBNUJFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2NTE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2UuY3BwICovOyB9OworCQk5NzEyQTVCRjE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICovOyB9Owor
CQk5NzEyQTVDMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2ODE1
MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3
MTJBNUMyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2OTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVDMzE1
MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2QTE1MDA0RURBMDA0
OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CisJCTk3MTJBNUM0
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi87IH07CisJCTk3MTJBNUM1MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUM2MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLzsgfTsKKwkJOTcxMkE1QzcxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9y
LmggKi87IH07CisJCTk3MTJBNUM5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU3MDE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovOyB9
OworCQk5NzEyQTVDQTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTcxMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovOyB9OworCQk5NzEyQTVD
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTczMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OworCQk5NzEyQTVDRDE1MDA0RURBMDA0
OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3NDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnRE
aXNwYXRjaGVyLmggKi87IH07CisJCTk3MTJBNUNFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0
b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNTc1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmNwcCAqLzsgfTsKKwkJOTcxMkE1
Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5LmggKi87IH07CisJCTk3MTJBNUQxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAgKi87IH07CisJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCAqLzsgfTsK
KwkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi87
IH07CisJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1N0IxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi87
IH07CisJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QzE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXguY3BwICovOyB9OworCQk5NzEyQTVENjE1MDA0RURBMDA0OEFGMTAg
LyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovOyB9OworCQk5NzEy
QTVEODE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3RjE1MDA0RURBMDA0
OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUQ5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MDE1MDA0RURBMDA0OEFGMTAgLyogSURC
SW5kZXhCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVEQTE1MDA0RURBMDA0OEFGMTAgLyog
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmggKi87IH07CisJCTk3MTJBNURCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi87IH07CisJCTk3MTJBNURDMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCAqLzsg
fTsKKwkJOTcxMkE1REUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODUxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQktleVBhdGguY3BwICovOyB9OworCQk5NzEyQTVERjE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCAqLzsgfTsK
KwkJOTcxMkE1RTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4NzE1
MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKKwkJOTcx
MkE1RTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVFMjE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJh
bmdlLmNwcCAqLzsgfTsKKwkJOTcxMkE1RTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLzsgfTsKKwkJOTcxMkE1RTUxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwICovOyB9OworCQk5NzEyQTVFNjE1MDA0RURB
MDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkxldmVsREJCYWNraW5nU3RvcmUuaCAqLzsgfTsKKwkJOTcxMkE1RTcxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkxldmVsREJDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1OEUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rp
bmcuY3BwICovOyB9OworCQk5NzEyQTVFODE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNv
ZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCAqLzsgfTsKKwkJOTcx
MkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTkwMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi87IH07CisJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmgg
Ki87IH07CisJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cCAqLzsgfTsKKwkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTk0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgg
Ki87IH07CisJCTk3MTJBNUVFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTk1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaCAqLzsgfTsKKwkJOTcxMkE1RUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTcxMkE1OTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwICovOyB9OworCQk5NzEyQTVGMDE1MDA0RURBMDA0OEFGMTAgLyogSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaCAqLzsgfTsKKwkJOTcxMkE1RjExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3BwICovOyB9Owor
CQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlJlcXVlc3QuaCAqLzsgfTsKKwkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi87IH07CisJCTk3MTJB
NUY1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5QzE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OworCQk5NzEyQTVGNjE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTlEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5oICov
OyB9OworCQk5NzEyQTVGODE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAg
Ki87IH07CisJCTk3MTJBNUY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICov
OyB9OworCQk5NzEyQTVGQTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTVBMTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggKi87IH07CisJCTk3MTJBNUZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlv
bkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1QTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgg
Ki87IH07CisJCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cCAqLzsgfTsKKwkJOTcxMkE1RkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNUE0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
Ki87IH07CisJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi87IH07
CisJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE2MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKKwkJOTcxMkE2
MDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgKi87IH07CisJCTk3MTJBNjAy
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmggKi87IH07CisJCTk3MTJBNjA0MTUwMDRF
REEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QUIxNTAwNEVEQTAwNDhBRjEw
IC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgKi87IH07CisJCTk3MTJBNjA1MTUwMDRF
REEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUFDMTUwMDRFREEwMDQ4QUYxMCAv
KiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCAqLzsgfTsKIAkJOTcyMDVBQUYxMjM5MjhDQTAw
QjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MjA1QUFEMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBE
aXJlY3RvcnlEb2N1bWVudC5jcHAgKi87IH07CiAJCTk3MjA1QUIwMTIzOTI4Q0EwMEIxNzM4MCAv
KiBGVFBEaXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcyMDVBQUUxMjM5MjhDQTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURv
Y3VtZW50LmggKi87IH07CiAJCTk3MjA1QUI1MTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3Vt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MjA1QUIxMTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3VtZW50LmNwcCAqLzsgfTsKQEAgLTM0
MTksNyArMzQ4Nyw2IEBACiAJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzdFMkUw
QzEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oICovOyB9OwogCQk5NzhBRDY3NDE0MTMw
QThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEFENjcxMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1M
U3BhbkVsZW1lbnQuY3BwICovOyB9OwogCQk5NzhBRDY3NTE0MTMwQThEMDBDN0NBRTMgLyogSFRN
TFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzhBRDY3MjE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmggKi87IH07
Ci0JCTk3OEQwN0IyMTQ1QTBFQkQwMDk2OTA4RCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCMTE0
NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhE
MDdCNDE0NUEwRUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEQwN0IzMTQ1QTBFQ0QwMDk2OTA4RCAv
KiBTUUxFeGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhEMDdCNjE0NUEwRjAzMDA5NjkwOEQgLyog
RmlsZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzhEMDdCNTE0NUEwRjAzMDA5NjkwOEQgLyogRmlsZUV4Y2VwdGlvbi5jcHAgKi87
IH07CiAJCTk3OEQwN0I4MTQ1QTBGMUIwMDk2OTA4RCAvKiBPcGVyYXRpb25Ob3RBbGxvd2VkRXhj
ZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3OEQwN0I3MTQ1QTBGMUIwMDk2OTA4RCAvKiBPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9u
LmNwcCAqLzsgfTsKQEAgLTUwMDMsMTMgKzUwNzAsOCBAQAogCQlCNUQzMURGQTExQ0Y2MTBCMDA5
RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURP
TUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJQjVEMzFERkIxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2
ZURPTUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCAqLzsg
fTsKIAkJQjVEMzYwMUExMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDM2MDE5MTEyRjhC
NTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi87IH07Ci0JCUI2MTc2MjU0MTIwMzM3
NEYwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2MTc2MjUzMTIwMzM3NEYwMEVGOTEx
NCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKLQkJQjYxNzYyNjIxMjAz
NDkwODAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2MTc2MjYxMTIwMzQ5MDgwMEVGOTExNCAv
KiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi87IH07Ci0JCUI2NTY2MjZBMTIwQjExNUEwMDZF
QTg1QyAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2NzEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rp
b24uY3BwICovOyB9OwotCQlCNjU2NjI2QjEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2
MjY4MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5oICovOyB9OwogCQlCNjU2NjI3
MDEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY1NjYyNkUxMjBCMTIyNzAwNkVBODVDIC8q
IEpTSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKIAkJQjY1NjYyNzExMjBCMTIyNzAwNkVBODVDIC8q
IEpTSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjY1NjYyNkYxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24u
Y3BwICovOyB9OwotCQlCNjkxQzFGOTEyMDZENEEwMDAyNUQ5ODAgLyogSURCRGF0YWJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QTMx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlLmNwcCAqLzsgfTsKIAkJQjcxRkU2REYxMTA5
MUNCMzAwREFFRjc3IC8qIFByaW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFByaW50Q29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzM0QjE4MDExOUI5OTExMDA2
NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwICovOyB9OwogCQlCNzM0QjE4MzExOUI5OTFEMDA2
NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI3MzRCMTgyMTE5Qjk5MUQwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rl
ci5oICovOyB9OwpAQCAtNTU0OCwxMSArNTYxMCw2IEBACiAJCUM1NTYxMEYxMTFBNzA0RUIwMEI4
MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1NTYxMEYwMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0
LmNwcCAqLzsgfTsKIAkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLzsgfTsK
IAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJDMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi87IH07Ci0JCUM1NzJF
RTBBMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNDEyMDFDNzM2MDA3RDhGODIgLyogSURC
SW5kZXguY3BwICovOyB9OwotCQlDNTcyRUUwQjEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzJFRTA1
MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oICovOyB9OwotCQlDNTcyRUUwRDEyMDFDNzM2
MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNzEyMDFDNzM2MDA3RDhGODIgLyogSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCUM1NzJFRTBFMTIwMUM3MzYwMDdEOEY4MiAv
KiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTcyRUUwODEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5k
SW1wbC5oICovOyB9OwotCQlDNTcyRUUwRjEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTcyRUUwOTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmggKi87IH07CiAJCUM1NzJFRTFFMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzJFRTFDMTIw
MUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmNwcCAqLzsgfTsKIAkJQzU3MkVFMUYxMjAxQzlC
QzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4Lmgg
Ki87IH07CiAJCUM1N0ZFREUxMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1N0ZFREUwMTIxMkVF
OUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLzsgfTsKQEAgLTU1NzgsMzAgKzU2MzUsNiBA
QAogCQlDNTg1QTY5MTExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY3OTExRDRGQjA3MDA0
QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggKi87IH07CiAJCUM1ODVBNjk2MTFENEZCMTMwMDRDM0U0
QiAvKiBKU0lEQkZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU4NUE2OTQxMUQ0RkIxMzAwNEMzRTRCIC8qIEpTSURCRmFjdG9yeS5jcHAg
Ki87IH07CiAJCUM1ODVBNjk3MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjk1MTFENEZC
MTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuaCAqLzsgfTsKLQkJQzU4NUE2Q0MxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTg1QTY5ODExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmNwcCAqLzsgfTsK
LQkJQzU4NUE2Q0QxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OTkxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkFueS5oICovOyB9OwotCQlDNTg1QTZDRjExRDRGQjNEMDA0QzNFNEIgLyogSURCQ2FsbGJh
Y2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1
QTY5QjExRDRGQjNEMDA0QzNFNEIgLyogSURCQ2FsbGJhY2tzLmggKi87IH07Ci0JCUM1ODVBNkQx
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY5RDExRDRGQjNEMDA0QzNFNEIgLyog
SURCRGF0YWJhc2VFcnJvci5oICovOyB9OwotCQlDNTg1QTZEMzExRDRGQjNEMDA0QzNFNEIgLyog
SURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1ODVBNjlGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oICovOyB9OwotCQlDNTg1QTZENTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTg1QTZBMTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgKi87IH07Ci0JCUM1ODVBNkQ4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QTQxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlLmggKi87IH07Ci0JCUM1ODVBNkU2MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU4NUE2QjIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleS5jcHAgKi87IH07
Ci0JCUM1ODVBNkU3MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkIzMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJLZXkuaCAqLzsgfTsKLQkJQzU4NUE2RTkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJh
bmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
ODVBNkI1MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5jcHAgKi87IH07Ci0JCUM1ODVB
NkVBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QjYxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QktleVJhbmdlLmggKi87IH07Ci0JCUM1ODVBNkVEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmpl
Y3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU4NUE2QjkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmggKi87IH07Ci0JCUM1
ODVBNkVFMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkJBMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJ
QzU4NUE2RUYxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkJCMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi87IH07Ci0JCUM1
ODVBNkYwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCQzExRDRGQjNEMDA0QzNF
NEIgLyogSURCT2JqZWN0U3RvcmUuY3BwICovOyB9OwotCQlDNTg1QTZGMTExRDRGQjNEMDA0QzNF
NEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCRDExRDRGQjNEMDA0QzNFNEIgLyog
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07Ci0JCUM1ODVBNkYzMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkJGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0
LmNwcCAqLzsgfTsKLQkJQzU4NUE2RjQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkMwMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmggKi87IH07Ci0JCUM1ODVBNkY5MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDNTExRDRGQjNEMDA0QzNFNEIg
LyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovOyB9OwotCQlDNTg1QTZGQTExRDRG
QjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkM2MTFENEZCM0QwMDRDM0U0
QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovOyB9OwotCQlDNTg1QTZGQjExRDRG
QjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkM3MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovOyB9OwotCQlDNTg1QTZGQzExRDRGQjNEMDA0
QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDODExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmggKi87IH07Ci0JCUM1ODVBNkZEMTFENEZCM0QwMDRDM0U0QiAvKiBJ
REJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1ODVBNkM5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCAqLzsgfTsKLQkJ
QzU4NUE2RkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkNBMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJGYWN0b3J5LmggKi87IH07CiAJCUM1OTg5MDJFMTRFOUIwRjgwMEU4RDE4QiAvKiBQbGF0
Zm9ybVBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNUY3NjVCQTE0RTFFQ0Y0MDA2Qzg5OUIgLyogUGxhdGZvcm1QYXN0ZWJvYXJk
TWFjLm1tICovOyB9OwogCQlDNTk4OTA1NzE0RTlDMjgwMDBFOEQxOEIgLyogUGFzdGVib2FyZFN0
cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NUY3NjVCNDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU5ODkwNTgxNEU5QzI5
OTAwRThEMThCIC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVCQUMxNkYxNEUzMEU0NzAwMDA4ODM3IC8qIFBsYXRm
b3JtUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01OTAwLDcgKzU5MzMsNiBAQAogCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTgg
LyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovOyB9Owog
CQlFNEQ2ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc2MEVEN0FF
M0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICovOyB9OwogCQlFNEQ2ODc3OTBF
RDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVy
Z2VhYmxlQnVmZmVyLmggKi87IH07Ci0JCUVCNDlEQjhGMTRGNDZFOEIwMDIyOTlEOSAvKiBJREJU
cmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
QjQ5REI4RTE0RjQ2RThCMDAyMjk5RDkgLyogSURCVHJhY2luZy5oICovOyB9OwogCQlFRDJCQTgz
QzA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEMkJBODNCMDlBMjRCOTEwMDZDMEFDNCAvKiBE
b2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUVENTAxREM2MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBCMjQ5RjI5
MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2MDA5NTZB
MzcgLyogQ29sb3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04ODQ1LDE4ICs4ODc3LDEy
IEBACiAJCTgwOUREMURFMTMwREUyQUQwMENBRTNFRCAvKiBDU1NTdHlsZUFwcGx5UHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5bGVBcHBseVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxMDJDNTg3MTMyNUJCMTEwMERERTY3
QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHJpbmdDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgx
NUU2MTY2MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFUcmFuc2Zlckl0ZW0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI1RDEyMTAxODlCMDBGQzBEOUUgLyogSURCQ3Vy
c29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI1RjEyMTAxOEE0MDBGQzBEOUUgLyogSURC
Q3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgxQTczMjc3MTIxMDE5RTEwMEZD
MEQ5RSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MUFDNTk5NzEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQUM1OTk4MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJh
bnNmZXJJdGVtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhVHJh
bnNmZXJJdGVtTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUFDNUFFODEz
MTYzOTJFMDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gRGF0YVRyYW5zZmVySXRlbS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgxQUM1QUU5MTMxNjM5MkUwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MUFDNkMzNDEzMUM1N0MyMDAwOUE3RTAgLyogU3RyaW5nQ2Fs
bGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0cmluZ0NhbGxiYWNrLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFBQzZDMzUxMzFDNTdEMzAwMDlBN0UwIC8qIFN0
cmluZ0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0Nh
bGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgxQkUyMDkzMTFGNEFCOEQw
MDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODFCRTIw
OUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSURCQ3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwQTcx
MUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgxRjY1RkY1MTM3ODhGQUEwMEZGNkYyRCAvKiBEcmFnU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDE3NSw2ICsxMDIwMSw5NSBAQAogCQk5NzExNDYwMDE0RUYwMDlB
MDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwOyBwYXRoID0gTW9kdWxl
cy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTE0NjAxMTRFRjAwOUEwMDY3NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOYXZpZ2F0b3JHZW9sb2Nh
dGlvbi5oOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzExNDYwMjE0RUYwMDlBMDA2NzRGRDkg
LyogTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE5hdmln
YXRvckdlb2xvY2F0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9y
R2VvbG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NDE1
MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NTE1MDA0RURBMDA0OEFGMTAgLyog
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTU2MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGw7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NzE1MDA0RURBMDA0OEFGMTAgLyogSURC
QW55LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkFueS5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkFueS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTU5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJBbnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkFueS5p
ZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkJhY2tpbmdTdG9yZS5oOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ2FsbGJhY2tzLmg7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJzb3IuY3BwOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTcxMkE1NUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3IuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1RTE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJD
dXJzb3IuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1
NjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTYyMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yV2l0aFZhbHVlLmNwcDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldp
dGhWYWx1ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQ3Vyc29yV2l0aFZhbHVlLmlk
bDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRh
YmFzZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZS5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJEYXRhYmFzZS5pZGw7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNTY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY5MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2QjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCRGF0YWJhc2VDYWxsYmFja3MuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTZEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1NkUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VFcnJvci5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU2RjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFcnJv
ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRGF0YWJhc2VFcnJvci5pZGw7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzExNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU3MjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0
Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJFdmVudERp
c3BhdGNoZXIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzQxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJFdmVudERpc3BhdGNoZXIuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2
ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3NTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3NjE1MDA0
RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJGYWN0b3J5Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTc3MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJGYWN0b3J5LmlkbDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU3ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3OTE1MDA0
RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3MTJBNTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTdCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0MxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQklu
ZGV4LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4Lmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTU3RTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IElEQkluZGV4LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0YxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW1wbC5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4
QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTgyMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCS2V5LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTgzMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCS2V5Lmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1ODQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gSURCS2V5LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg1MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQktleVBhdGguY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg2MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJLZXlQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleVBh
dGguaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1ODcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhC
YWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJL
ZXlQYXRoQmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1ODgx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXlQYXRoQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU4OTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCS2V5UmFuZ2UuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCS2V5UmFuZ2UuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4QzE1MDA0
RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZl
bERCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNThFMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTcxMkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlLmNwcDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQk9iamVjdFN0b3JlLmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU5MjE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQk9iamVjdFN0b3JlLmlkbDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1OTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1
OTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5NTE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3MTJBNTk2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1
OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSURCUmVxdWVzdC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTkx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCUmVxdWVzdC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5QTE1MDA0RURBMDA0OEFG
MTAgLyogSURCUmVxdWVzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCUmVxdWVzdC5p
ZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhY2luZy5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU5QzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb24uY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb24uaDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3MTJBNTlFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVHJhbnNhY3Rpb24uaWRsOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NzEyQTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVB
MDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUExMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9u
Q2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYW5zYWN0
aW9uQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNh
bGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBMzE1MDA0RURB
MDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBNDE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1
QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3MTJBNUE4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE5MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUFCMTUwMDRFREEwMDQ4
QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUFDMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFnZUdy
b3VwSW5kZXhlZERhdGFiYXNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJ
bmRleGVkRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcyMDVBQUQx
MjM5MjhDQTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZUUERpcmVjdG9yeURvY3VtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcyMDVBQUUxMjM5MjhDQTAwQjE3MzgwIC8qIEZUUERp
cmVjdG9yeURvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZUUERp
cmVjdG9yeURvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MjA1QUIx
MTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAzMDMsNyArMTA0MTgsNiBAQAogCQk5NzhBRDY3MTE0MTMwQThEMDBDN0NB
RTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhUTUxTcGFuRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3OEFENjcyMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFNwYW5FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3OEFENjczMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1l
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxTcGFuRWxlbWVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3OEQwN0IxMTQ1QTBFQkQwMDk2OTA4RCAvKiBJREJE
YXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3OEQwN0IzMTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTc4RDA3QjUxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZUV4Y2VwdGlv
bi5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NzhEMDdCNzE0NUEwRjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxs
b3dlZEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBP
cGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcDsgcGF0aCA9IGZpbGVhcGkvT3BlcmF0aW9u
Tm90QWxsb3dlZEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTk0NywxMiArMTIwNjEsNiBAQAogCQlCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZl
RE9NQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWN0
aXZlRE9NQ2FsbGJhY2suY3BwOyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAv
KiBBY3RpdmVET01DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
Y3RpdmVET01DYWxsYmFjay5oOyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUQzNjAxOTExMkY4QjU2MDA0OERFQTggLyog
RGF0YWJhc2VDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
YmFzZUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2MTc2MjUzMTIw
MzM3NEYwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2MTc2MjYxMTIwMzQ5MDgwMEVGOTExNCAvKiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYyNjgxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5z
YWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NTY2MjY5MTIwQjExNUEwMDZFQTg1
QyAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCVHJhbnNh
Y3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNjU2NjI2RDEyMEIxMTZC
MDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjU2NjI2RTEyMEIxMjI3MDA2RUE4NUMgLyog
SlNJREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lE
QlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZGMTIw
QjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCNzM0QjE4MDExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRm9udFRyYW5zY29kZXIu
Y3BwOyBwYXRoID0gdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjUzMCwxMiArMTI2MzgsNiBAQAogCQlDNTU2MTBGMDExQTcwNEVC
MDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBET01TdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM1NzJFRTA0MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1NzJFRTA1MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNTcyRUUwNjEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkluZGV4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzU3MkVFMDcxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NzJFRTA4MTIwMUM3MzYw
MDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQkluZGV4QmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQzU3MkVFMDkxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3MkVFMUMxMjAxQzlCQzAw
N0Q4RjgyIC8qIEpTSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzJF
RTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVTeXN0ZW0uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjU2MSw0MCArMTI2NjMsNiBAQAogCQlDNTg1QTY3OTExRDRGQjA3MDA0
QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSURCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTg1QTY5NDEx
RDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSURCRmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1ODVBNjk1MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM1ODVBNjk4MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQW55LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OTkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJBbnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQW55LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzU4NUE2OUIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkNhbGxiYWNrcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDYWxsYmFja3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNl
RXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VFcnJv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTY5RTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2VFcnJvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCRGF0
YWJhc2VFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNjlGMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNTg1QTZBMDExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNl
cHRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QTExMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1ODVBNkEzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkE0MTFENEZCM0QwMDRDM0U0QiAvKiBJ
REJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZBNTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNl
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QjIxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCMzExRDRGQjNE
MDA0QzNFNEIgLyogSURCS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElE
QktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCNDExRDRGQjNEMDA0
QzNFNEIgLyogSURCS2V5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJLZXkuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCNTExRDRGQjNEMDA0QzNFNEIgLyog
SURCS2V5UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
S2V5UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCNjExRDRG
QjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSURCS2V5UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2
QjcxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBJREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVB
NkI5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNTg1QTZCQTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2
QkIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCQzExRDRGQjNEMDA0QzNFNEIgLyog
SURCT2JqZWN0U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SURCT2JqZWN0U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZC
RDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCRTExRDRGQjNEMDA0
QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQk9i
amVjdFN0b3JlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QkYxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUM1ODVBNkMwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQzU4NUE2QzExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IElEQlJlcXVlc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDNTg1QTZDNTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZD
NjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzcxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNTg1QTZDODExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZDOTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2Q0Ex
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1
QTZDQjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gSURCRmFjdG9yeS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1QkFD
MTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1QYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1RDRBQTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhNZXRyaWNzTWFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RTlCNjc2MTA2OTdFMTMwMEM3QkIxQSAv
KiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI5NTIsNyArMTMwMjAsNiBAQAogCQlFNEMyNzk1NzBDRjk3NDE5MDBFOTdC
OTggLyogUmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENjg3NzYwRUQ3QUUz
RDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQdXJnZWFibGVCdWZmZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFQjQ5REI4RTE0RjQ2RThCMDAyMjk5RDkgLyog
SURCVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFjaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVEMkJBODNCMDlBMjRCOTEwMDZDMEFD
NCAvKiBEb2N1bWVudE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
b2N1bWVudE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFRDUwMURDNTBC
MjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBD
b2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5MTYsNjAgKzEzOTgzLDYgQEAKIAkJCQlB
OEY0NTc5RDE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwICovLAog
CQkJCUE4RjQ1NzlFMTRCQzEzRUMwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oICov
LAogCQkJCUE4RjQ1NzlGMTRCQzEzRUMwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5p
ZGwgKi8sCi0JCQkJQzU4NUE2OTgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgKi8sCi0J
CQkJQzU4NUE2OTkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5oICovLAotCQkJCUM1ODVBNjlB
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaWRsICovLAotCQkJCUM1ODVBNjlCMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJDYWxsYmFja3MuaCAqLywKLQkJCQk4MUE3MzI1RjEyMTAxOEE0MDBGQzBE
OUUgLyogSURCQ3Vyc29yLmNwcCAqLywKLQkJCQk4MUE3MzI1RDEyMTAxODlCMDBGQzBEOUUgLyog
SURCQ3Vyc29yLmggKi8sCi0JCQkJODFCRTIwOUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNv
ci5pZGwgKi8sCi0JCQkJODFCRTIwOTMxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcCAqLywKLQkJCQk4MUE3MzI3NzEyMTAxOUUxMDBGQzBEOUUgLyogSURCQ3Vyc29y
QmFja2VuZEltcGwuaCAqLywKLQkJCQk4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZS5oICovLAotCQkJCUM1ODVBNkEzMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZS5jcHAgKi8sCi0JCQkJQzU4NUE2QTQxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QkRhdGFiYXNlLmggKi8sCi0JCQkJQzU4NUE2QTUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFi
YXNlLmlkbCAqLywKLQkJCQlDNTg1QTZBMTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJQjYxNzYyNjExMjAzNDkwODAwRUY5MTE0IC8qIElEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCAqLywKLQkJCQlCNjE3NjI1MzEyMDMzNzRGMDBFRjkxMTQgLyog
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi8sCi0JCQkJQzU4NUE2OUQxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLywKLQkJCQlDNTg1QTY5RTExRDRGQjNEMDA0
QzNFNEIgLyogSURCRGF0YWJhc2VFcnJvci5pZGwgKi8sCi0JCQkJOTc4RDA3QjExNDVBMEVCRDAw
OTY5MDhEIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLywKLQkJCQlDNTg1QTY5RjExRDRG
QjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLywKLQkJCQlDNTg1QTZBMDEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICovLAotCQkJCUM1ODVB
NkM5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCAqLywKLQkJCQlDNTg1QTZDQTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5oICovLAotCQkJCUM1ODVBNkNCMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJGYWN0b3J5LmlkbCAqLywKLQkJCQlDNTg1QTZDNzExRDRGQjNEMDA0QzNF
NEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQlDNTg1QTZDODExRDRGQjNE
MDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8sCi0JCQkJQzU4NUE2QzUxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLywKLQkJCQlD
NTg1QTZDNjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAq
LywKLQkJCQlDNTcyRUUwNDEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXguY3BwICovLAotCQkJ
CUM1NzJFRTA1MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oICovLAotCQkJCUM1NzJFRTA2
MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5pZGwgKi8sCi0JCQkJQzU3MkVFMDcxMjAxQzcz
NjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovLAotCQkJCUM1NzJFRTA4MTIw
MUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8sCi0JCQkJQzU3MkVFMDkx
MjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oICovLAotCQkJCUM1
ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwICovLAotCQkJCUM1ODVBNkIzMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuaCAqLywKLQkJCQlDNTg1QTZCNDExRDRGQjNEMDA0QzNF
NEIgLyogSURCS2V5LmlkbCAqLywKLQkJCQlDNTg1QTZCNTExRDRGQjNEMDA0QzNFNEIgLyogSURC
S2V5UmFuZ2UuY3BwICovLAotCQkJCUM1ODVBNkI2MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlS
YW5nZS5oICovLAotCQkJCUM1ODVBNkI3MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5p
ZGwgKi8sCi0JCQkJQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlLmNw
cCAqLywKLQkJCQlDNTg1QTZCOTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCAq
LywKLQkJCQlDNTg1QTZCRTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaWRsICov
LAotCQkJCUM1ODVBNkJBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCAqLywKLQkJCQlDNTg1QTZCQjExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1ODVBNkJEMTFENEZCM0QwMDRDM0U0QiAvKiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlDNTg1QTZCRjExRDRGQjNEMDA0
QzNFNEIgLyogSURCUmVxdWVzdC5jcHAgKi8sCi0JCQkJQzU4NUE2QzAxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQlJlcXVlc3QuaCAqLywKLQkJCQlDNTg1QTZDMTExRDRGQjNEMDA0QzNFNEIgLyogSURC
UmVxdWVzdC5pZGwgKi8sCi0JCQkJRUI0OURCOEUxNEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRyYWNp
bmcuaCAqLywKLQkJCQlCNjU2NjI2NzEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb24u
Y3BwICovLAotCQkJCUI2NTY2MjY4MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5o
ICovLAotCQkJCUI2NTY2MjY5MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5pZGwg
Ki8sCi0JCQkJQjY1NjYyNkQxMjBCMTE2QjAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZS5oICovLAogCQkJCTUxQTkyNjc4MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5R
dW90YU1hbmFnZXIuY3BwICovLAogCQkJCTUxQTkyNjc5MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmln
aW5RdW90YU1hbmFnZXIuaCAqLywKIAkJCQk1MUE5MjY3QTBENTNGMDU3MDA2M0VDQzIgLyogT3Jp
Z2luVXNhZ2VSZWNvcmQuY3BwICovLApAQCAtMTcwNjQsNiArMTcwNzcsNyBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5NzExNDVGRjE0RUYwMDc5MDA2NzRGRDkg
LyogZ2VvbG9jYXRpb24gKi8sCisJCQkJOTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8qIGluZGV4
ZWRkYiAqLywKIAkJCQk5N0FBQkNGNzE0RkEwOUI1MDA3NDU3QUUgLyogd2Vic29ja2V0cyAqLywK
IAkJCSk7CiAJCQluYW1lID0gTW9kdWxlczsKQEAgLTE3MDk1LDYgKzE3MTA5LDEwMiBAQAogCQkJ
bmFtZSA9IGdlb2xvY2F0aW9uOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
OTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTcxMkE1NTQxNTAwNEVEQTAwNDhBRjEwIC8q
IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8sCisJCQkJOTcxMkE1NTUxNTAwNEVEQTAw
NDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICovLAorCQkJCTk3MTJBNTU2MTUw
MDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRsICovLAorCQkJCTk3
MTJBNTU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3BwICovLAorCQkJCTk3MTJBNTU4MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLywKKwkJCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQW55LmlkbCAqLywKKwkJCQk5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURC
QmFja2luZ1N0b3JlLmggKi8sCisJCQkJOTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNh
bGxiYWNrcy5oICovLAorCQkJCTk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3Iu
Y3BwICovLAorCQkJCTk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLywK
KwkJCQk5NzEyQTU1RTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmlkbCAqLywKKwkJCQk5
NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovLAor
CQkJCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICov
LAorCQkJCTk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlLmggKi8sCisJCQkJOTcxMkE1NjIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhW
YWx1ZS5jcHAgKi8sCisJCQkJOTcxMkE1NjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldp
dGhWYWx1ZS5oICovLAorCQkJCTk3MTJBNTY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JX
aXRoVmFsdWUuaWRsICovLAorCQkJCTk3MTJBNTY1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZS5jcHAgKi8sCisJCQkJOTcxMkE1NjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
LmggKi8sCisJCQkJOTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmlkbCAq
LywKKwkJCQk5NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgKi8sCisJCQkJOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8sCisJCQkJOTcxMkE1NkMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCisJCQkJOTcxMkE1NkQxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oICovLAorCQkJCTk3MTJBNTZF
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9yLmggKi8sCisJCQkJOTcxMkE1NkYx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaWRsICovLAorCQkJCTk3MTJBNTcw
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJOTcx
MkE1NzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi8sCisJCQkJ
OTcxMkE1NzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAqLywK
KwkJCQk5NzEyQTU3MzE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAq
LywKKwkJCQk5NzEyQTU3NDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmgg
Ki8sCisJCQkJOTcxMkE1NzUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuY3BwICovLAor
CQkJCTk3MTJBNTc2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggKi8sCisJCQkJOTcx
MkE1NzcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaWRsICovLAorCQkJCTk3MTJBNTc4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3
MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCAqLywKKwkJ
CQk5NzEyQTU3QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwICovLAorCQkJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oICovLAorCQkJCTk3MTJBNTdDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5jcHAgKi8sCisJCQkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8s
CisJCQkJOTcxMkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmlkbCAqLywKKwkJCQk5
NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi8sCisJ
CQkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuaCAqLywK
KwkJCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
LmggKi8sCisJCQkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi8sCisJ
CQkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oICovLAorCQkJCTk3MTJBNTg0
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaWRsICovLAorCQkJCTk3MTJBNTg1MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCAqLywKKwkJCQk5NzEyQTU4NjE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UGF0aC5oICovLAorCQkJCTk3MTJBNTg3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3MTJBNTg4MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU4OTE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwICovLAorCQkJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5oICovLAorCQkJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJLZXlSYW5nZS5pZGwgKi8sCisJCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwICovLAorCQkJCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggKi8sCisJCQkJOTcxMkE1OEUxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovLAorCQkJCTk3MTJBNThGMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8sCisJCQkJOTcxMkE1OTAxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKKwkJCQk5NzEyQTU5MTE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmUuaCAqLywKKwkJCQk5NzEyQTU5MjE1MDA0RURBMDA0OEFGMTAg
LyogSURCT2JqZWN0U3RvcmUuaWRsICovLAorCQkJCTk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLywKKwkJCQk5NzEyQTU5NDE1MDA0RURB
MDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovLAorCQkJCTk3MTJBNTk1
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCAqLywK
KwkJCQk5NzEyQTU5NjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvci5jcHAgKi8sCisJCQkJOTcxMkE1OTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaCAqLywKKwkJCQk5NzEyQTU5ODE1MDA0RURBMDA0OEFGMTAgLyog
SURCUmVxdWVzdC5jcHAgKi8sCisJCQkJOTcxMkE1OTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJl
cXVlc3QuaCAqLywKKwkJCQk5NzEyQTU5QTE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5p
ZGwgKi8sCisJCQkJOTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCAqLywK
KwkJCQk5NzEyQTU5QzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uY3BwICovLAor
CQkJCTk3MTJBNTlEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5oICovLAorCQkJ
CTk3MTJBNTlFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8sCisJCQkJ
OTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
ICovLAorCQkJCTk3MTJBNUEwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmggKi8sCisJCQkJOTcxMkE1QTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTk3MTJBNUEyMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oICovLAorCQkJCTk3MTJBNUEzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLywKKwkJCQk5NzEyQTVBNDE1
MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAorCQkJCTk3
MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovLAor
CQkJCTk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAq
LywKKwkJCQk5NzEyQTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmlkbCAqLywKKwkJCQk5NzEyQTVBODE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuY3BwICovLAorCQkJCTk3MTJBNUE5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oICovLAorCQkJCTk3MTJBNUFBMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgKi8sCisJCQkJOTcxMkE1QUIxNTAwNEVEQTAwNDhB
RjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgKi8sCisJCQkJOTcxMkE1QUMxNTAw
NEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5oICovLAorCQkJKTsKKwkJ
CW5hbWUgPSBpbmRleGVkZGI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk5
NzZENkM1NzEyMkI4QTE4MDAxRkQxRjcgLyogZmlsZWFwaSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xOTk0MSw4ICsyMDA1MSw4IEBACiAJCQkJQkNBQTkw
QzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUw
ODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAogCQkJCTBGRTcxNDE1MTQyMTg5RkMwMERC
MzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8sCi0JCQkJQzY5MTYxNDcxNEY2RUJBNzAwNDYz
NzVDIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAw
QUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCisJCQkJQzY5MTYxNDcxNEY2RUJBNzAwNDYz
NzVDIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggKi8sCiAJCQkJQkMxNDAyODgwRTgzNjgwODAw
MzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlCQzE0MDI4OTBF
ODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywKIAkJCQk5M0Mw
OUM4NTBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLywKQEAgLTIyMjIyLDYgKzIy
MzMyLDcgQEAKIAkJCQk4NUM3RjVFNzBBQUZCQUZCMDA0MDE0REQgLyogRE9NV2hlZWxFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODU5ODlERDEwQUNDOEJCRDAwQTBCQzUxIC8qIERPTVdoZWVs
RXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3
QzdGIC8qIERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QUUxNTAwNEVEQTAw
NDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdEMkFEMDQxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEY0NTdBMTE0QkMxQTk0MDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNUFFNUFDMTQ5MjVGNUIwMDRENTc3NiAvKiBET01X
cmFwcGVyVmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjU5NSwzMSArMjI3MDYsNDcgQEAK
IAkJCQk1MTNGMTQ1NDBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFFMUVDQzEwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1QkFDMkIwMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDNTg1QTZDRDExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzEyQTVCMTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3Jl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY2MzExRDRGQUM1MDA0QzNFNEIgLyogSURCQmlu
ZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2Q0YxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODFBNzMyNUUxMjEwMTg5
QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODFBNzMyNzgxMjEw
MTlFMTAwRkMwRDlFIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4MUJFMjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RDgxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFi
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNjE3NjI2MjEyMDM0OTA4MDBFRjkxMTQgLyogSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjYxNzYyNTQxMjAzMzc0
RjAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzU4NUE2RDExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUM1ODVBNkQzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RkUxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkZDMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkZB
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQzU3MkVFMEIxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDNTcyRUUwRTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5k
SW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU3MkVFMEYxMjAxQzczNjAwN0Q4RjgyIC8qIElE
QkluZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RTcxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RUExMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZF
RDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUM1ODVBNkVGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGMTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGNDExRDRG
QjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRUI0OURCOEYx
NEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRyYWNpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUI2NTY2
MjZCMTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTcxMkE1QjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTcxMkE1QjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTcxMkE1QjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVCQTE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QkMxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5NzEyQTVDMjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QzMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QzQxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
NzEyQTVDNjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5NzEyQTVDNzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VF
cnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0ExNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVDRDE1MDA0RURB
MDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEy
QTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1RDIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVENjE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUQ5MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVE
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5NzEyQTVERjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTcxMkE1RTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNr
ZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RTMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVFNjE1MDA0RURBMDA0OEFG
MTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1
RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUVFMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YWNpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RjkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RkQxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk3MTJBNjAyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3MUQ1N0MwRjMzODE5MDAwRjlDRTRF
IC8qIElkZW50aWZpZXJSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5MTNBMjQyMTNENDlFQkEw
MEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkx
MUM1MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzQxOCw2ICsyMzU0NSw3IEBACiAJCQkJRjM4MjA4OTMxNDdEMzVGOTAw
MTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0MkRE
MTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTcxMkE2MDUxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VH
cm91cExvYWREZWZlcnJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MjA4OTUxNDdEMzVGOTAw
MTBCQzA2IC8qIFBhZ2VSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0MkU1
MTM0MzYzM0MwMDUzMUJDMiAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMjM3MTcsOCArMjM4NDUsOCBAQAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBRTFGQTcxMjkzOURCNzAw
NENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlC
ODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNkIz
MUIyRTE0Rjg0MUZCMDA4OUYyM0YgLyogU2Nyb2xsYmFyVGhlbWVDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzZCMzFCMkUxNEY4NDFGQjAwODlGMjNGIC8qIFNjcm9sbGJhclRo
ZW1lQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0MDI4QjBFODM2ODA4MDAzMTk3MTcg
LyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTNF
MEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNzE0MDYxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNTMzNyw2ICsyNTQ2NSw3IEBACiAJCQkJMzFDMEZGNEQwRTRDRUZERDAw
N0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTg1QzdGNUU4MEFBRkJBRkIwMDQwMTRERCAvKiBET01XaGVlbEV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQwM0I5OTgwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5NzEyQTVBRDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhl
ZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3RDJBRDAzMTRCODIzQTYwMDkzREYz
MiAvKiBET01XaW5kb3dQcm9wZXJ0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEY0NTdBMDE0
QkMxQTg4MDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM1M0RBNDgxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI1NjU3LDI0ICsyNTc4NiwzNiBAQAogCQkJCUIyNzUzNThFMEIwNTNB
NjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMUVDQzAwQzkx
QzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDUwOTlD
NDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4
NUE2Q0MxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
NzEyQTVCMDE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTgxQTczMjYwMTIxMDE4QTQwMEZDMEQ5RSAvKiBJREJDdXJzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJODFCRTIwOTgxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI2OTFDMUY5MTIwNkQ0QTAwMDI1
RDk4MCAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZENTExRDRG
QjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5NzhEMDdCMjE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RkQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3Rv
cnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RkIxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZGOTExRDRG
QjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQzU3MkVFMEExMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUM1NzJFRTBEMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJ
bXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkU2MTFENEZCM0QwMDRDM0U0QiAvKiBJ
REJLZXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RTkxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkYwMTFENEZCM0QwMDRD
M0U0QiAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZFRTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlDNTg1QTZGMzExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCNjU2NjI2QTEyMEIxMTVBMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QjUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVCODE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QkIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5NzEyQTVCRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTcxMkE1QzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QzUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVD
OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1Q0MxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVDRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFj
dG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVEMTE1MDA0RURBMDA0OEFGMTAgLyog
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUQzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5NzEyQTVENTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTcxMkE1RDgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVERTE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFMDE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3
MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFNzE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2
ZWxEQkNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFOTE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RUMxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1RUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RjExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RjUxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUY4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE2
MDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBNzFENTdCMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTU5MTNBMjQxMTNENDlFQkEwMEY1QjA1QyAvKiBJZGVudGlm
aWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NkYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY1NjEsNiArMjY3MDIsNyBAQAog
CQkJCUYzODIwODkyMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUYzNDc0MkRDMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyog
UGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNjA0MTUwMDRFREEwMDQ4QUYx
MCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E2
NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQzI2NDk3QzBEN0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGMzgyMDg5NDE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZVJ1bnRpbWVB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIK
LSNpbmNsdWRlICJJREJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9jYXRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5jcHAJKHJldmlzaW9uIDEwOTQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcm91cFNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJBbnkuaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZh
bHVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5Lmgi
Ci0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZUludmFsaWQoKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCQW55KCkpOwotfQotCi1QYXNzUmVmUHRyPElEQkFueT4gSURCQW55
OjpjcmVhdGVOdWxsKCkKLXsKLSAgICBSZWZQdHI8SURCQW55PiBpZGJBbnkgPSBhZG9wdFJlZihu
ZXcgSURCQW55KCkpOwotICAgIGlkYkFueS0+c2V0TnVsbCgpOwotICAgIHJldHVybiBpZGJBbnku
cmVsZWFzZSgpOwotfQotCi1JREJBbnk6OklEQkFueSgpCi0gICAgOiBtX3R5cGUoVW5kZWZpbmVk
VHlwZSkKLXsKLX0KLQotSURCQW55Ojp+SURCQW55KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBJREJBbnk6OmRvbVN0cmluZ0xpc3QoKQotewotICAgIEFTU0VSVChtX3R5cGUg
PT0gRE9NU3RyaW5nTGlzdFR5cGUpOwotICAgIHJldHVybiBtX2RvbVN0cmluZ0xpc3Q7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJBbnk6OmlkYkN1cnNvcigpCi17Ci0gICAgQVNTRVJU
KG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJDdXJzb3I7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6OmlkYkN1cnNvcldpdGhWYWx1
ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JXaXRoVmFsdWVUeXBlKTsKLSAg
ICByZXR1cm4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCRGF0YWJh
c2U+IElEQkFueTo6aWRiRGF0YWJhc2UoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRGF0
YWJhc2VUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJEYXRhYmFzZTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJGYWN0b3J5PiBJREJBbnk6OmlkYkZhY3RvcnkoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
SURCRmFjdG9yeVR5cGUpOwotICAgIHJldHVybiBtX2lkYkZhY3Rvcnk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCSW5kZXg+IElEQkFueTo6aWRiSW5kZXgoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
SURCSW5kZXhUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJJbmRleDsKLX0KLQotUGFzc1JlZlB0cjxJ
REJLZXk+IElEQkFueTo6aWRiS2V5KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQktleVR5
cGUpOwotICAgIHJldHVybiBtX2lkYktleTsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJP
YmplY3RTdG9yZVR5cGUpOwotICAgIHJldHVybiBtX2lkYk9iamVjdFN0b3JlOwotfQotCi1QYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9uKCkKLXsKLSAgICBB
U1NFUlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiVHJh
bnNhY3Rpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJBbnk6
OnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBTZXJpYWxp
emVkU2NyaXB0VmFsdWVUeXBlKTsKLSAgICByZXR1cm4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7
Ci19Ci0KLXZvaWQgSURCQW55OjpzZXROdWxsKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVu
ZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IE51bGxUeXBlOwotfQotCi12b2lkIElEQkFueTo6
c2V0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlw
ZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBET01TdHJpbmdMaXN0VHlwZTsKLSAg
ICBtX2RvbVN0cmluZ0xpc3QgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVm
UHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBV
bmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJDdXJzb3JXaXRoVmFsdWVUeXBlOwotICAg
IG1faWRiQ3Vyc29yV2l0aFZhbHVlID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxJREJDdXJzb3I+IHZhbHVlKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZp
bmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCQ3Vyc29yVHlwZTsKLSAgICBtX2lkYkN1cnNvciA9
IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHZh
bHVlKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBl
ID0gSURCRGF0YWJhc2VUeXBlOwotICAgIG1faWRiRGF0YWJhc2UgPSB2YWx1ZTsKLX0KLQotdm9p
ZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IHZhbHVlKQotewotICAgIEFTU0VS
VChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCRmFjdG9yeVR5cGU7
Ci0gICAgbV9pZGJGYWN0b3J5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXQoUGFzc1Jl
ZlB0cjxJREJJbmRleD4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRU
eXBlKTsKLSAgICBtX3R5cGUgPSBJREJJbmRleFR5cGU7Ci0gICAgbV9pZGJJbmRleCA9IHZhbHVl
OwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCS2V5PiB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQktleVR5
cGU7Ci0gICAgbV9pZGJLZXkgPSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVm
aW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQlRyYW5zYWN0aW9uVHlwZTsKLSAgICBtX2lkYlRy
YW5zYWN0aW9uID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBl
KTsKLSAgICBtX3R5cGUgPSBJREJPYmplY3RTdG9yZVR5cGU7Ci0gICAgbV9pZGJPYmplY3RTdG9y
ZSA9IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUp
OwotICAgIG1fdHlwZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGU7Ci0gICAgbV9zZXJpYWxp
emVkU2NyaXB0VmFsdWUgPSB2YWx1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQW55X2gKLSNkZWZpbmUgSURCQW55X2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgSURCQ3Vy
c29yOwotY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFz
cyBJREJGYWN0b3J5OwotY2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJP
YmplY3RTdG9yZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwotCi1jbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlkYk9i
amVjdCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRl
SW52YWxpZCgpOwotICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOwotICAgICAgICByZXR1cm4g
YW55LnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZShQYXNzUmVmUHRyPFQ+IGlkYk9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgp
OwotICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOwotICAgICAgICByZXR1cm4gYW55LnJlbGVh
c2UoKTsKLSAgICB9Ci0gICAgfklEQkFueSgpOwotCi0gICAgZW51bSBUeXBlIHsKLSAgICAgICAg
VW5kZWZpbmVkVHlwZSA9IDAsCi0gICAgICAgIE51bGxUeXBlLAotICAgICAgICBET01TdHJpbmdM
aXN0VHlwZSwKLSAgICAgICAgSURCQ3Vyc29yVHlwZSwKLSAgICAgICAgSURCQ3Vyc29yV2l0aFZh
bHVlVHlwZSwKLSAgICAgICAgSURCRGF0YWJhc2VUeXBlLAotICAgICAgICBJREJGYWN0b3J5VHlw
ZSwKLSAgICAgICAgSURCSW5kZXhUeXBlLAotICAgICAgICBJREJLZXlUeXBlLAotICAgICAgICBJ
REJPYmplY3RTdG9yZVR5cGUsCi0gICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKLSAgICAgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZQotICAgIH07Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hp
Y2ggb25lIG9mIHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNhbGwuCi0gICAgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCk7Ci0gICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+
IGlkYkN1cnNvcigpOwotICAgIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJz
b3JXaXRoVmFsdWUoKTsKLSAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgp
OwotICAgIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOwotICAgIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IGlkYkluZGV4KCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgp
OwotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7Ci0gICAg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKLSAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7Ci0KLSAg
ICAvLyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0gICAgdm9pZCBzZXROdWxsKCk7Ci0g
ICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7Ci0gICAgdm9pZCBzZXQoUGFz
c1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldp
dGhWYWx1ZT4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKLSAgICB2
b2lkIHNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRy
PElEQkluZGV4Pik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJLZXk+KTsKLSAgICB2b2lk
IHNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPik7Ci0KLXByaXZhdGU6Ci0gICAgSURCQW55KCk7Ci0KLSAgICBUeXBlIG1fdHlw
ZTsKLQotICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4g
dXNlIGF0IGFueSBnaXZlbiB0aW1lLgotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0
cmluZ0xpc3Q7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9pZGJDdXJzb3I7Ci0gICAgUmVmUHRy
PElEQkN1cnNvcldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7Ci0gICAgUmVmUHRyPElE
QkRhdGFiYXNlPiBtX2lkYkRhdGFiYXNlOwotICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZh
Y3Rvcnk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4OwotICAgIFJlZlB0cjxJREJL
ZXk+IG1faWRiS2V5OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9y
ZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247Ci0gICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2VuZGlmIC8vIElEQkFueV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkFueS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnku
aWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdl
IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCi0gICAgICAgIEN1c3RvbVRvSlNPYmplY3QKLSAgICBdIElEQkFueSB7Ci0gICAgICAgIC8v
IFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgotICAgIH07Ci19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkJhY2tpbmdTdG9yZV9o
Ci0jZGVmaW5lIElEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNlY3VyaXR5T3Jp
Z2luOwotCi1jbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNr
aW5nU3RvcmU+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7fTsK
LQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3Vu
ZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmpl
Y3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMs
IFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90
JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsK
LQotICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgfk9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHt9Ci0gICAgfTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3Jl
bWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwotCi0gICAgY2xhc3Mg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7Ci0gICAgcHVibGljOgotICAgICAgICAgdmlydHVh
bCBib29sIGNhbGxiYWNrKGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciosIGNvbnN0
IFN0cmluZyYgdmFsdWUpID0gMDsKLSAgICAgICAgIHZpcnR1YWwgfk9iamVjdFN0b3JlUmVjb3Jk
Q2FsbGJhY2soKSB7fTsKLSAgICB9OwotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZlY3Rvcjxi
b29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRl
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlz
TXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2Jq
ZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtl
eSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwotCi0gICAgY2xhc3MgQ3Vy
c29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBjbG9uZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBi
b29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDApID0gMDsKLSAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9OwotICAgIH07Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1
cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0K
LSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7
Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbigpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXQo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpID0gMDsKLSAgICB9OwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKSA9IDA7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURC
QmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJDYWxsYmFja3Nf
aAotI2RlZmluZSBJREJDYWxsYmFja3NfaAotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgot
I2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0j
aW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gRklYTUU6IEFsbCBjaGlsZCBjbGFzc2VzIG5lZWQgdG8gYmUgbWFkZSB0aHJlYWRzYWZl
LgotY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkNh
bGxiYWNrcz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQkNhbGxiYWNrcygpIHsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBWZWN0b3I8UmVm
UHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIHByaW1h
cnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFs
dWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJDYWxsYmFja3NfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAkocmV2aXNpb24gMTA5NDYxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklE
QkN1cnNvci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJ
REJBbnkuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCUmVx
dWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bi5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRy
PElEQkN1cnNvcj4gSURCQ3Vyc29yOjpjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwg
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKLX0KLQot
SURCQ3Vyc29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX3Jl
cXVlc3QocmVxdWVzdCkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCi0gICAgLCBtX3RyYW5zYWN0aW9uTm90aWZpZXIodHJhbnNhY3Rpb24s
IHRoaXMpCi17Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgQVNTRVJUKG1fcmVxdWVzdCk7
Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5
cGUgfHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4VHlwZSk7Ci0gICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24pOwotfQotCi1JREJDdXJzb3I6On5JREJDdXJzb3IoKQotewotfQot
Ci11bnNpZ25lZCBzaG9ydCBJREJDdXJzb3I6OmRpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSURC
X1RSQUNFKCJJREJDdXJzb3I6OmRpcmVjdGlvbiIpOwotICAgIHJldHVybiBtX2JhY2tlbmQtPmRp
cmVjdGlvbigpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yOjprZXkoKSBjb25z
dAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjprZXkiKTsKLSAgICByZXR1cm4gbV9iYWNr
ZW5kLT5rZXkoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvcjo6cHJpbWFyeUtl
eSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3I6OnByaW1hcnlLZXkiKTsKLSAg
ICByZXR1cm4gbV9iYWNrZW5kLT5wcmltYXJ5S2V5KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQW55
PiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6
dmFsdWUiKTsKLSAgICByZXR1cm4gSURCQW55OjpjcmVhdGUobV9iYWNrZW5kLT52YWx1ZSgpKTsK
LX0KLQotSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c291cmNlLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBk
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJDdXJzb3I6OnVwZGF0ZSIpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVzdCwgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQot
Ci12b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6Y29udGlu
dWUiKTsKLSAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBl
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXF1ZXN0KSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogV2UncmUgbm90IHVzaW5nIHRoZSBjb250ZXh0
IGZyb20gd2hlbiBjb250aW51ZSB3YXMgY2FsbGVkLCB3aGljaCBtZWFucyB0aGUgY2FsbGJhY2sK
LSAgICAvLyAgICAgICAgd2lsbCBiZSBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBvcGVuQ3Vyc29y
IHdhcyBjYWxsZWQgb24uIElzIHRoaXMgcmlnaHQ/Ci0gICAgaWYgKG1fcmVxdWVzdC0+cmVzZXRS
ZWFkeVN0YXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSB7Ci0gICAgICAgIG1fcmVxdWVzdC0+c2V0
Q3Vyc29yKHRoaXMpOwotICAgICAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBt
X3JlcXVlc3QsIGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1
cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3I6OmRlbGV0ZSIpOwot
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2Jh
Y2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OnBvc3RT
dWNjZXNzSGFuZGxlckNhbGxiYWNrKCkKLXsKLSAgICBtX2JhY2tlbmQtPnBvc3RTdWNjZXNzSGFu
ZGxlckNhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpjbG9zZSgpCi17Ci0gICAgQVNT
RVJUKG1fcmVxdWVzdCk7Ci0gICAgbV9yZXF1ZXN0LT5maW5pc2hDdXJzb3IoKTsKLSAgICBtX3Jl
cXVlc3QuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQ3Vy
c29yX2gKLSNkZWZpbmUgSURCQ3Vyc29yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElE
QkFueTsKLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U7Ci1jbGFzcyBJREJSZXF1ZXN0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
LQotY2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBEaXJlY3Rpb24gewotICAgICAgICBORVhUID0gMCwKLSAgICAgICAgTkVY
VF9OT19EVVBMSUNBVEUgPSAxLAotICAgICAgICBQUkVWID0gMiwKLSAgICAgICAgUFJFVl9OT19E
VVBMSUNBVEUgPSAzLAotICAgIH07Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCos
IElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgfklEQkN1cnNv
cigpOwotCi0gICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNv
IHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9Ci0KLSAgICAvLyBJbXBsZW1lbnQg
dGhlIElETAotICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpIGNvbnN0OwotICAg
IElEQkFueSogc291cmNlKCkgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVw
ZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKLSAgICB2b2lkIGNs
b3NlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2Fj
dGlvbiopOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKLSAgICBSZWZQ
dHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNh
Y3Rpb247Ci0gICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllciBtX3RyYW5zYWN0
aW9uTm90aWZpZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gSURCQ3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vy
c29yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3Jh
Z2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRB
QkFTRSwKLSAgICBdIElEQkN1cnNvciB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5F
WFQgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBORVhUX05PX0RVUExJQ0FURSA9
IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBSRVYgPSAyOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RVUExJQ0FURSA9IDM7Ci0KLSAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbjsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIElEQktleSBrZXk7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkg
cHJpbWFyeUtleTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7Ci0K
LSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBk
YXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKLSAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbSW1wbGVtZW50ZWRBcz1jb250aW51ZUZ1
bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKLSAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlvbl0gSURCUmVx
dWVzdCBkZWxldGUoKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJD
cm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRl
ICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2lu
Y2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNr
ZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1
cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UqIG9iamVjdFN0b3JlKQotICAgIDogbV9jdXJzb3IoY3Vyc29yKQotICAgICwg
bV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0g
ICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKLSAgICAsIG1fY2xvc2VkKGZhbHNlKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnJl
Z2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKLX0KLQotSURCQ3Vyc29yQmFja2VuZEltcGw6On5JREJD
dXJzb3JCYWNrZW5kSW1wbCgpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5D
dXJzb3IodGhpcyk7Ci0gICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZl
IHRvIGJlIGRlc3RydWN0ZWQgYmVmb3JlIHRoZSBvYmplY3RTdG9yZS4KLSAgICBtX2N1cnNvci5j
bGVhcigpOwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLQotICAgIG1fb2JqZWN0U3RvcmUu
Y2xlYXIoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRpcmVj
dGlvbigpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGly
ZWN0aW9uIik7Ci0gICAgcmV0dXJuIG1fZGlyZWN0aW9uOwotfQotCi1QYXNzUmVmUHRyPElEQktl
eT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5Iik7Ci0gICAgcmV0dXJuIG1fY3Vyc29yLT5rZXkoKTsK
LX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmltYXJ5S2V5
KCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmltYXJ5
S2V5Iik7Ci0gICAgcmV0dXJuIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUoKSBj
b25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlIik7Ci0g
ICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikKLSAgICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpOwotICAgIHJldHVybiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKG1fY3Vyc29yLT52YWx1ZSgpKTsKLX0KLQotdm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRl
Iik7Ci0gICAgaWYgKCFtX2N1cnNvciB8fCBtX2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJzb3Ip
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBt
X2N1cnNvci0+cHJpbWFyeUtleSgpLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclVwZGF0ZSwgY2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7Ci19Ci0KLXZv
aWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29u
dGludWUiKTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0KLSAgICBpZiAobV9j
dXJzb3IgJiYga2V5KSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnNvci0+a2V5KCkpOwotICAgICAg
ICBpZiAobV9kaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUIHx8IG1fZGlyZWN0aW9uID09IElE
QkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAgICAgIGlmICghbV9jdXJzb3It
PmtleSgpLT5pc0xlc3NUaGFuKGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWtleS0+aXNM
ZXNzVGhhbihtX2N1cnNvci0+a2V5KCkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Y29udGludWVGdW5jdGlvbkludGVybmFsLCB0aGlzLCBrZXksIHBycENhbGxiYWNrcykpKQotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
Ci19Ci0KLS8vIElNUE9SVEFOVDogSWYgdGhpcyBldmVyIDEpIGZpcmVzIGFuICdlcnJvcicgZXZl
bnQgYW5kIDIpIGl0J3MgcG9zc2libGUgdG8gZmlyZSBhbm90aGVyIGV2ZW50IGFmdGVyd2FyZHMs
Ci0vLyAgICAgICAgICAgIElEQlJlcXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIHdpbGwgbmVl
ZCB0byBiZSBtb2RpZmllZCB0byBoYW5kbGUgdGhpcyEhIQotdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVJbnRlcm5hbCIpOwotICAg
IFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwotICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLQotICAgIGlmICghY3Vyc29yLT5tX2N1cnNvciB8
fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbihrZXkuZ2V0KCkpKSB7Ci0gICAg
ICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpOwotfQotCi12
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJB
Q0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLSAgICBpZiAoIW1fY3Vyc29yIHx8
IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5jdGlvbihtX2N1cnNvci0+cHJpbWFyeUtleSgp
LCBwcnBDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLX0KLQotdm9pZCBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZSIp
OwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWVJbnRlcm5hbCwgdGhpcywg
bnVtYmVyVG9GZXRjaCwgcHJwQ2FsbGJhY2tzKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIGludCBudW1i
ZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElE
Ql9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWVJbnRlcm5hbCIp
OwotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRLZXlzOwotICAgIFZlY3RvcjxSZWZQ
dHI8SURCS2V5PiA+IGZvdW5kUHJpbWFyeUtleXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+ID4gZm91bmRWYWx1ZXM7Ci0KLSAgICBpZiAoY3Vyc29yLT5tX2N1cnNv
cikKLSAgICAgICAgY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0gY3Vyc29yLT5tX2N1cnNvci0+Y2xv
bmUoKTsKLQotICAgIGNvbnN0IHNpemVfdCBrTWF4U2l6ZUVzdGltYXRlID0gMTAgKiAxMDI0ICog
MTAyNDsKLSAgICBzaXplX3Qgc2l6ZUVzdGltYXRlID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIGlmICghY3Vyc29yLT5tX2N1cnNv
ciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSkgewotICAgICAgICAg
ICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvdW5kS2V5cy5hcHBlbmQoY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwotICAg
ICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5
KCkpOwotCi0gICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKLSAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFw
cGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGN1cnNvci0+bV9jdXJz
b3ItPnZhbHVlKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBw
ZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCkpOwotCi0gICAgICAgIHNpemVFc3Rp
bWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAg
IHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVFc3Rp
bWF0ZSgpOwotICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUg
Kz0gY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7Ci0K
LSAgICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IGtNYXhTaXplRXN0aW1hdGUpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kS2V5cy5zaXplKCkpIHsKLSAgICAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjdXJzb3ItPm1fdHJhbnNhY3Rpb24tPmFk
ZFBlbmRpbmdFdmVudHMoZm91bmRLZXlzLnNpemUoKSAtIDEpOwotICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzV2l0aFByZWZldGNoKGZvdW5kS2V5cywgZm91bmRQcmltYXJ5S2V5cywgZm91bmRWYWx1
ZXMpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0KGludCB1
c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpCi17Ci0gICAgSURCX1RSQUNFKCJJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNldCIpOwotICAgIG1fdHJhbnNhY3Rpb24t
PmFkZFBlbmRpbmdFdmVudHMoLXVudXNlZFByZWZldGNoZXMpOwotICAgIG1fY3Vyc29yID0gbV9z
YXZlZEN1cnNvcjsKLSAgICBtX3NhdmVkQ3Vyc29yID0gMDsKLQotICAgIGlmIChtX2Nsb3NlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnNvcikgewotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHVzZWRQcmVmZXRjaGVzOyArK2kpIHsKLSAgICAgICAgICAgIGJvb2wgb2sgPSBt
X2N1cnNvci0+Y29udGludWVGdW5jdGlvbigpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpjbG9zZSgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2Ui
KTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7Ci0gICAgaWYgKG1fY3Vyc29yKQotICAgICAgICBtX2N1
cnNvci0+Y2xvc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0jZGVm
aW5lIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgi
Ci0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOwotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKLWNsYXNzIElEQktleVJhbmdlOwotY2xh
c3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCQmFja2luZ1N0b3Jl
OwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGN1cnNvciwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JUeXBl
IGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgZGly
ZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB+SURCQ3Vyc29yQmFja2VuZEltcGwoKTsKLQotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0Zl
dGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQcmVm
ZXRjaGVzKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNz
SGFuZGxlckNhbGxiYWNrKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi1wcml2YXRlOgot
ICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgQ3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKik7Ci0KLSAgICBz
dGF0aWMgdm9pZCBjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgcHJlZmV0Y2hDb250
aW51ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vyc29yOwotICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsKLSAgICBJREJD
dXJzb3I6OkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBDdXJzb3JUeXBlIG1fY3Vyc29yVHlw
ZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0
aW9uOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fb2JqZWN0
U3RvcmU7Ci0gICAgCi0gICAgYm9vbCBtX2Nsb3NlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
SURCQ3Vyc29yQmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2VfaAotI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJBbnk7Ci1jbGFzcyBJREJDYWxsYmFja3M7
Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJSZXF1ZXN0OwotY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlKCkge30KLQotICAgIGVudW0gQ3Vyc29yVHlwZSB7Ci0gICAgICAgIEludmFsaWRD
dXJzb3JUeXBlID0gMCwKLSAgICAgICAgSW5kZXhDdXJzb3IsCi0gICAgICAgIEluZGV4S2V5Q3Vy
c29yLAotICAgICAgICBPYmplY3RTdG9yZUN1cnNvcgotICAgIH07Ci0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRpbnVl
RnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0
Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQcmVmZXRjaGVzKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JX
aXRoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZh
bHVlLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0
aFZhbHVlOjpjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yV2l0aFZh
bHVlKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6ZnJvbUN1cnNvcihQ
YXNzUmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yKQotewotICAgIFJlZlB0cjxJREJDdXJzb3JX
aXRoVmFsdWU+IGN1cnNvcldpdGhWYWx1ZShzdGF0aWNfY2FzdDxJREJDdXJzb3JXaXRoVmFsdWUq
PihwcnBDdXJzb3IuZ2V0KCkpKTsKLSAgICByZXR1cm4gY3Vyc29yV2l0aFZhbHVlLnJlbGVhc2Uo
KTsKLX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0
LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogSURC
Q3Vyc29yKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rpb24pCi17Ci19Ci0KLUlE
QkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSgpCi17Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5oCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkN1cnNv
cldpdGhWYWx1ZV9oCi0jZGVmaW5lIElEQkN1cnNvcldpdGhWYWx1ZV9oCi0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZSA6IHB1YmxpYyBJREJDdXJzb3Ig
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJ
REJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAg
ICB2aXJ0dWFsIH5JREJDdXJzb3JXaXRoVmFsdWUoKTsKLQotICAgIC8vIFRoZSB2YWx1ZSBhdHRy
aWJ1dGUgZGVmaW5lZCBpbiB0aGUgSURMIGlzIHNpbXBseSBpbXBsZW1lbnRlZCBpbiBJREJDdXJz
b3IgKGJ1dCBub3QgZXhwb3NlZCB2aWEKLSAgICAvLyBpdHMgSURMKS4gVGhpcyBpcyB0byBtYWtl
IHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHNpbXBsZSB3aGlsZSBtYXRjaGluZyB3aGF0IHRoZSBz
cGVjIHNheXMuCi0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwg
SURCVHJhbnNhY3Rpb24qKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
Ci0KLSNlbmRpZiAvLyBJREJDdXJzb3JXaXRoVmFsdWVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRl
cmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCi0gICAgXSBJREJD
dXJzb3JXaXRoVmFsdWUgOiBJREJDdXJzb3IgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
SURCQW55IHZhbHVlOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURC
QW55LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktleVBh
dGguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFu
Z2VFdmVudC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBJREJEYXRhYmFzZTo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlPiBkYXRhYmFzZSkKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2U+
IGlkYkRhdGFiYXNlKGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSkp
KTsKLSAgICBpZGJEYXRhYmFzZS0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIGlkYkRh
dGFiYXNlLnJlbGVhc2UoKTsKLX0KLQotSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlPiBiYWNrZW5kKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCi0g
ICAgLCBtX2JhY2tlbmQoYmFja2VuZCkKLSAgICAsIG1fY2xvc2VQZW5kaW5nKGZhbHNlKQotICAg
ICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLXsKLSAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNl
IG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KLSAgICByZWxheEFkb3B0
aW9uUmVxdWlyZW1lbnQoKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzID0gSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsOjpjcmVhdGUodGhpcyk7Ci19Ci0KLUlEQkRhdGFiYXNlOjp+SURCRGF0YWJh
c2UoKQotewotICAgIGNsb3NlKCk7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrcy0+dW5yZWdpc3Rl
ckRhdGFiYXNlKHRoaXMpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpzZXRWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCgh
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb247Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmNsZWFyVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHRyYW5zYWN0aW9uLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSB0cmFu
c2FjdGlvbik7Ci0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSAwOwotfQotCi1QYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleVBhdGg7Ci0gICAgYm9vbCBrZXlQYXRo
RXhpc3RzID0gb3B0aW9ucy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soImtleVBhdGgiLCBr
ZXlQYXRoKTsKLSAgICBpZiAoa2V5UGF0aEV4aXN0cyAmJiAhSURCSXNWYWxpZEtleVBhdGgoa2V5
UGF0aCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVO
VF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IGZhbHNlOwotICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVtZW50IiwgYXV0b0luY3JlbWVu
dCk7Ci0gICAgLy8gRklYTUU6IExvb2sgdXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRoYXQgb24gYXMg
d2VsbC4KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVj
dFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobmFtZSwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7Ci0gICAgICAgIEFTU0VSVChlYyk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlQmFja2VuZC5y
ZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3Jl
KTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRGF0YWJhc2U6OnNldFZlcnNpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAodmVyc2lvbi5pc051bGwoKSkgewotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT05fVFJBTlNJRU5UX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgdmVyc2lvbik7Ci0gICAgbV9iYWNrZW5kLT5zZXRWZXJzaW9uKHZlcnNpb24sIHJl
cXVlc3QsIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0K
LQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCB1
bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIHN0
b3JlTmFtZXMtPmFwcGVuZChzdG9yZU5hbWUpOwotICAgIHJldHVybiB0cmFuc2FjdGlvbihjb250
ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHBycFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0
PiBzdG9yZU5hbWVzID0gcHJwU3RvcmVOYW1lczsKLSAgICBpZiAoIXN0b3JlTmFtZXMgfHwgc3Rv
cmVOYW1lcy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobW9kZSAhPSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9XUklURSAmJiBtb2RlICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV9jbG9zZVBlbmRpbmcpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0cmFuc2FjdGlv
biBzeW5jaHJvbm91c2x5LiBMb2NrcyBhcmUgYWNxdWlyZWQgYXN5bmNocm9ub3VzbHkuIE9wZXJh
dGlvbnMKLSAgICAvLyBjYW4gYmUgcXVldWVkIGFnYWluc3QgdGhlIHRyYW5zYWN0aW9uIGF0IGFu
eSBwb2ludC4gVGhleSB3aWxsIHN0YXJ0IGV4ZWN1dGluZyBhcyBzb29uIGFzIHRoZQotICAgIC8v
IGFwcHJvcHJpYXRlIGxvY2tzIGhhdmUgYmVlbiBhY3F1aXJlZC4KLSAgICAvLyBBbHNvIG5vdGUg
dGhhdCBlYWNoIGJhY2tlbmQgb2JqZWN0IGNvcnJlc3BvbmRzIHRvIGV4YWN0bHkgb25lIElEQlRy
YW5zYWN0aW9uIG9iamVjdC4KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbkJhY2tlbmQgPSBtX2JhY2tlbmQtPnRyYW5zYWN0aW9uKHN0b3JlTmFt
ZXMuZ2V0KCksIG1vZGUsIGVjKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uQmFja2VuZCkgewotICAg
ICAgICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoY29udGV4
dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCB0aGlzKTsKLSAgICB0cmFuc2FjdGlvbkJhY2tlbmQtPnNl
dENhbGxiYWNrcyh0cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQotewotICAgIGlmIChtX2Ns
b3NlUGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVl
OwotICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0KLSAgICBpZiAo
bV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgLy8gUmVtb3ZlIGFueSBwZW5kaW5nIHZlcnNpb25j
aGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMKLSAgICAvLyBjb25uZWN0aW9u
LiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhlIGJhY2tlbmQgd2hlbiBhbm90
aGVyCi0gICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVu
ZCBjb25uZWN0aW9uIGlzIGJlaW5nCi0gICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZp
cmUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUtPmNhbmNlbEV2ZW50KG1f
ZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQs
IHJlbW92ZWQpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdl
KGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnF1ZXVl
RXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUodmVyc2lvbiwgZXZlbnROYW1lcygp
LnZlcnNpb25jaGFuZ2VFdmVudCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpvcGVuKCkKLXsK
LSAgICBtX2JhY2tlbmQtPm9wZW4obV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBB
U1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOwotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIGV2
ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudC5nZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50
cy5hcHBlbmQoZXZlbnQpOwotfQotCi1ib29sIElEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2U6OmRp
c3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
dmVyc2lvbmNoYW5nZUV2ZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0u
Z2V0KCkgPT0gZXZlbnQuZ2V0KCkpCi0gICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92
ZShpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50
LmdldCgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCi17Ci0gICAgQWN0aXZlRE9N
T2JqZWN0OjpzdG9wKCk7Ci0gICAgLy8gU3RvcCBmaXJlcyBhdCBhIGRldGVybWluaXN0aWMgdGlt
ZSwgc28gd2UgbmVlZCB0byBjYWxsIGNsb3NlIGluIGl0LgotICAgIGNsb3NlKCk7Ci0KLSAgICBt
X2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBJREJEYXRh
YmFzZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JJREJEYXRhYmFzZTsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURC
RGF0YWJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBB
Y3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLX0KLQotRXZlbnRUYXJn
ZXREYXRhKiBJREJEYXRhYmFzZTo6ZXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOwotfQotCi1FdmVudFRhcmdldERhdGEqIElEQkRhdGFiYXNlOjplbnN1
cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZV9oCi0j
ZGVmaW5lIElEQkRhdGFiYXNlX2gKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIk9wdGlvbnNP
YmplY3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJEYXRhYmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkRhdGFiYXNlPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZT4pOwotICAgIH5JREJEYXRhYmFzZSgpOwotCi0gICAgdm9pZCBzZXRWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGNsZWFyVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKik7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhlIElETAot
ICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KLSAg
ICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+dmVyc2lvbigpOyB9
Ci0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9yZU5hbWVzKCk7IH0KLQotICAgIC8vIEZJWE1F
OiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgot
ICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZU9iamVjdFN0b3Jl
KG5hbWUsIE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25z
T2JqZWN0JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IHNldFZlcnNpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoYWJvcnQpOwotICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJy
b3IpOwotICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodmVyc2lvbmNoYW5nZSk7
Ci0KLSAgICAvLyBJREJEYXRhYmFzZUNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNp
b25DaGFuZ2UoY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRWZXJzaW9uKTsKLQotICAgIC8vIEFjdGl2
ZURPTU9iamVjdAotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBF
dmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIG9wZW4oKTsKLSAgICB2b2lkIGVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0
YWJhc2U+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJEYXRhYmFzZT46OmRlcmVmOwot
Ci1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pOwotCi0gICAgLy8gRXZlbnRUYXJn
ZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICBib29sIG1fY2xvc2VQZW5kaW5nOwot
ICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50
VGFyZ2V0RGF0YTsKLQotICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHZlcnNpb25jaGFuZ2UgZXZl
bnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcwotICAgIC8vIGRhdGFiYXNlIHNvIHRoYXQg
d2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFzZSBjbG9zZXMuCi0gICAgVmVjdG9yPFJl
ZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbD4gbV9kYXRhYmFzZUNhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAg
ICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBBY3RpdmVET01PYmpl
Y3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJEYXRhYmFzZSB7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOwotCi0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uYWJvcnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udmVyc2lvbmNoYW5nZTsKLQotICAgICAg
ICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSwgaW4g
W09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCi0gICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbiBE
T01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24p
OwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJpbmcgdmVyc2lvbikKLSAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oaW4gRE9NU3RyaW5n
TGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25l
ZCBzaG9ydCBtb2RlKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQotICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmcgc3RvcmVO
YW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2Rl
KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHZv
aWQgY2xvc2UoKTsKLQotICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgICAg
dm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAg
ICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0
dXJlKTsKLSAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKLSAgICAg
ICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7Ci0gICAgfTsKLQotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgi
Ci0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5o
IgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8
UGVuZGluZ09wZW5DYWxsPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGlu
Z09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ09wZW5DYWxsKGNhbGxiYWNr
cykpOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyBy
ZXR1cm4gbV9jYWxsYmFja3M7IH0KLQotcHJpdmF0ZToKLSAgICBQZW5kaW5nT3BlbkNhbGwoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCi0gICAgewotICAgIH0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVD
YWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFBlbmRpbmdEZWxldGVDYWxsKGNhbGxiYWNrcykpOwotICAgIH0KLSAgICBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KLQotcHJp
dmF0ZToKLSAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50
ZWQ8UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGVuZGluZ1NldFZlcnNpb25DYWxsKHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJh
c2VDYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgU3RyaW5nIHZlcnNpb24oKSB7IHJldHVybiBtX3Zl
cnNpb247IH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1
cm4gbV9jYWxsYmFja3M7IH0KLSAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBk
YXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3M7IH0KLQotcHJp
dmF0ZToKLSAgICBQZW5kaW5nU2V0VmVyc2lvbkNhbGwoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgOiBtX3ZlcnNpb24odmVyc2lv
bikKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9kYXRhYmFz
ZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotICAgIFN0cmluZyBt
X3ZlcnNpb247Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotfTsKLQotSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25z
dCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCi0gICAgLCBtX2lkKEludmFsaWRJZCkKLSAgICAsIG1fbmFtZShuYW1lKQotICAgICwg
bV92ZXJzaW9uKCIiKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCi0gICAg
LCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihjb29y
ZGluYXRvcikKLXsKLSAgICBBU1NFUlQoIW1fbmFtZS5pc051bGwoKSk7Ci0gICAgb3BlbkludGVy
bmFsKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkK
LXsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRh
RGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pZCk7Ci0gICAgQVNTRVJUKHN1Y2Nlc3MgPT0gKG1f
aWQgIT0gSW52YWxpZElkKSk7Ci0gICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgbG9hZE9iamVj
dFN0b3JlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9iYWNraW5nU3Rv
cmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpKQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5lZWQgYmV0dGVyIGVycm9y
IGhhbmRsaW5nLgotfQotCi1JREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp+SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQobV9p
ZGVudGlmaWVyKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2lu
Z1N0b3JlOwotfQotCi1QYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAotewotICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9y
IChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdp
bigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgb2JqZWN0U3Rv
cmVOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgp
OwotICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCh0cmFuc2Fj
dGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7Ci0KLSAg
ICBpZiAobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwg
bV9pZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7Ci0gICAgQVNTRVJUKG9iamVjdFN0
b3JlLT5uYW1lKCkgPT0gbmFtZSk7Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFw
LCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG9iamVj
dFN0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZDsKLQotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5hbWUoKSwgb2JqZWN0U3RvcmUtPmtleVBh
dGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSwgb2JqZWN0U3RvcmVJZCkpIHsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBvYmplY3RTdG9yZS0+c2V0SWQob2JqZWN0U3RvcmVJZCk7Ci0gICAgdHJhbnNhY3Rpb24tPmRp
ZENvbXBsZXRlVGFza0V2ZW50cygpOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7Ci0gICAgaWYg
KCFvYmplY3RTdG9yZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
Rk9VTkRfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0
U3RvcmUsIHRyYW5zYWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9y
ZVRvTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBkYXRhYmFz
ZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKGRhdGFiYXNlLT5pZCgpLCBvYmpl
Y3RTdG9yZS0+aWQoKSk7Ci0gICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLSAgICBpZiAoIW1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuY29udGFpbnMoZGF0YWJhc2VDYWxsYmFja3MpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFC
T1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNh
Y3Rpb24gd2FzIGNyZWF0ZWQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yIChE
YXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgICAgICgq
aXQpLT5vblZlcnNpb25DaGFuZ2UodmVyc2lvbik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBPbmx5
IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQot
ICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAg
dG8gZmlyZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzExMzAKLSAgICBpZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCkgPiAxKSB7Ci0gICAg
ICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7Ci0gICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVy
c2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDo6
Y3JlYXRlKHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOwotICAgICAgICBt
X3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuYXBwZW5kKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbikgewotICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5n
U2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBj
YWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lv
bkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVj
dFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgdGhpcyk7
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwgdmVy
c2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVz
ZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAg
IGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOwotICAgIGRhdGFiYXNlLT5tX3Zl
cnNpb24gPSB2ZXJzaW9uOwotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGRhdGFiYXNlSWQsIGRhdGFiYXNlLT5tX3ZlcnNpb24pKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRv
ZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KLSAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0
b3JhZ2UuIikpOwotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFuc2FjdGlvbik7Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRy
YW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9u
OjpWRVJTSU9OX0NIQU5HRSkgewotICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
biA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwotICAgIGlmICh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewotICAg
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLmNsZWFyKCk7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCi17Ci0g
ICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQgb3IgYWJvcnRlZAotICAgIERlcXVl
PFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gcGVuZGluZ1NldFZlcnNpb25DYWxsczsK
LSAgICBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuc3dhcChwZW5kaW5nU2V0VmVyc2lvbkNhbGxz
KTsKLSAgICB3aGlsZSAoIXBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNp
b25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnRh
a2VGaXJzdCgpOwotICAgICAgICBzZXRWZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+dmVy
c2lvbigpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0VmVy
c2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKCFlYyk7
Ci0gICAgfQotCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAh
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQuCi0gICAgRGVxdWU8UmVmUHRyPFBl
bmRpbmdEZWxldGVDYWxsPiA+IHBlbmRpbmdEZWxldGVDYWxsczsKLSAgICBtX3BlbmRpbmdEZWxl
dGVDYWxscy5zd2FwKHBlbmRpbmdEZWxldGVDYWxscyk7Ci0gICAgd2hpbGUgKCFwZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4g
cGVuZGluZ0RlbGV0ZUNhbGwgPSBwZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAg
ICAgIGRlbGV0ZURhdGFiYXNlKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7Ci0gICAg
fQotCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ09wZW5DYWxs
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09w
ZW5DYWxsID0gbV9wZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBvcGVuQ29u
bmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICB9Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdFN0b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFt
X29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZU5hbWVzLT5pdGVtKGkpKSkgewotICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJldHVy
biBub3QgYWxsb3dlZCBlcnIgaWYgY2xvc2UgaGFzIGJlZW4gY2FsbGVkLgotICAgIHJldHVybiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2JqZWN0U3RvcmVOYW1lcywgbW9kZSwg
dGhpcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbV9kYXRhYmFzZUNhbGxi
YWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3MpKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nT3BlbkNh
bGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKQotICAgICAgICAgICAgb3BlbkludGVy
bmFsKCk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOwotICAgIH0KLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpj
cmVhdGUocHJwQ2FsbGJhY2tzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIC8vIEZJWE1FOiBP
bmx5IGZpcmUgb25WZXJzaW9uQ2hhbmdlIGlmIHRoZXJlIHRoZSBjb25uZWN0aW9uIGlzbid0IGlu
Ci0gICAgLy8gdGhlIHByb2Nlc3Mgb2YgY2xvc2luZy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMjkKLSAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tz
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsg
aXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkt
Pm9uVmVyc2lvbkNoYW5nZSgiIik7Ci0gICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQg
aWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCi0gICAgLy8gVmVyc2lvbkNo
YW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAgIGlmICgh
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgewotICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX3ZlcnNpb24gPSAiIjsKLSAgICBtX2lkID0gSW52YWxpZElkOwot
ICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5z
KGNhbGxiYWNrcykpOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNr
cyk7Ci0gICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQotewotICAgIFZlY3RvcjxpbnQ2NF90
PiBpZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4ga2V5
UGF0aHM7Ci0gICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRGbGFnczsKLSAgICBtX2JhY2tp
bmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1faWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCBhdXRv
SW5jcmVtZW50RmxhZ3MpOwotCi0gICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBpZHMuc2l6ZSgp
KTsKLSAgICBBU1NFUlQoa2V5UGF0aHMuc2l6ZSgpID09IGlkcy5zaXplKCkpOwotICAgIEFTU0VS
VChhdXRvSW5jcmVtZW50RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVz
LnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2lu
Z1N0b3JlLmdldCgpLCBtX2lkLCBpZHNbaV0sIG5hbWVzW2ldLCBrZXlQYXRoc1tpXSwgYXV0b0lu
Y3JlbWVudEZsYWdzW2ldKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVt
b3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQotewotICAgIEFTU0VSVChkYXRhYmFzZS0+bV9v
YmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPm5hbWUoKSkpOwotICAgIGRhdGFiYXNl
LT5tX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPm5hbWUoKSk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLXsKLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmVQdHIgPSBvYmpl
Y3RTdG9yZTsKLSAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZVB0ci0+bmFtZSgpKSk7Ci0gICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnNl
dChvYmplY3RTdG9yZVB0ci0+bmFtZSgpLCBvYmplY3RTdG9yZVB0cik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pCi17Ci0gICAgZGF0YWJhc2UtPm1fdmVyc2lvbiA9IHZlcnNpb247Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsX2gKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkJhY2tpbmdT
dG9yZTsKLWNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwot
Y2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNr
aW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRv
ciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlk
ZW50aWZpZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNl
QmFja2VuZEltcGwobmFtZSwgZGF0YWJhc2UsIGNvb3JkaW5hdG9yLCBmYWN0b3J5LCB1bmlxdWVJ
ZGVudGlmaWVyKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEltcGwo
KTsKLQotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25z
dDsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7Ci0gICAgaW50NjRf
dCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIC8vIEZJWE1FOiBSZW5hbWUgIm9w
ZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRD
YWxsYmFja3MuCi0gICAgdm9pZCBvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
KTsKLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0g
ICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAg
dmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZpcnR1
YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RT
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLQotICAg
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUpOwotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuZ2V0KCk7IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hl
ZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotCi1wcml2YXRl
OgotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNr
aW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLQotICAgIHZv
aWQgb3BlbkludGVybmFsKCk7Ci0gICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7Ci0gICAgdm9p
ZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RT
dG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Pik7Ci0gICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLQotICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZl
cnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlT2Jq
ZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
KTsKLSAgICBzdGF0aWMgdm9pZCBhZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKLSAgICBpbnQ2NCBtX2lkOwotICAgIFN0cmluZyBtX25hbWU7Ci0g
ICAgU3RyaW5nIG1fdmVyc2lvbjsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgLy8g
VGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxp
ZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBj
b25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBs
PiBtX2ZhY3Rvcnk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsKLSAgICBPYmplY3RTdG9yZU1h
cCBtX29iamVjdFN0b3JlczsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
PiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwotCi0gICAg
Y2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxsOwotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0
VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzOwotCi0gICAgY2xhc3MgUGVu
ZGluZ09wZW5DYWxsOwotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5k
aW5nT3BlbkNhbGxzOwotCi0gICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7Ci0gICAgRGVxdWU8
UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0gICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJh
c2VDYWxsYmFja3NTZXQ7Ci0gICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxi
YWNrc1NldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2VfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVN0cmluZ0xp
c3Q7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNl
Q2FsbGJhY2tzOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3Mg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwotCi0vLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJEYXRhYmFzZSAoYXN5bmMpIGFu
ZCBJREJEYXRhYmFzZVN5bmMgKHN5bmMpLgotLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIgdG8gcHJv
eHkKLS8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNl
IGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKLS8vIHRyaWdnZXIgd29yayBvbiBh
IGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UoKSB7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0ID0gMDsKLQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZl
cnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCog
c3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNr
c19oCi0jZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJhY2tzX2gKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNl
Q2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VDYWxsYmFja3M+IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNrcygpIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRh
YmFzZUNhbGxiYWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbD4gSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsOjpjcmVhdGUoSURCRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKGRhdGFiYXNlKSk7Ci19Ci0KLUlEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbDo6SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKElEQkRhdGFiYXNl
KiBkYXRhYmFzZSkKLSAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi17Ci19Ci0KLUlEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbDo6fklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi17Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQotewotICAgIGlmIChtX2RhdGFiYXNlKQotICAgICAgICBtX2RhdGFiYXNlLT5v
blZlcnNpb25DaGFuZ2UodmVyc2lvbik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsOjp1bnJlZ2lzdGVyRGF0YWJhc2UoSURCRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIEFT
U0VSVChkYXRhYmFzZSA9PSBtX2RhdGFiYXNlKTsKLSAgICBtX2RhdGFiYXNlID0gMDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAotCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZTsKLQot
Y2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGw+IGNyZWF0ZShJREJEYXRhYmFzZSopOwotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbCgpOwotCi0gICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBT
dHJpbmcmIHZlcnNpb24pOwotICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKElEQkRhdGFiYXNl
Kik7Ci0KLXByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKElEQkRhdGFiYXNl
Kik7Ci0KLSAgICAvLyBtX2RhdGFiYXNlIGhhcyBhIFJlZlB0ciB0byB0aGlzLCBzbyB1c2UgYSB3
ZWFrIHBvaW50ZXIgdG8gYXZvaWQgYSBjeWNsZS4KLSAgICBJREJEYXRhYmFzZSogbV9kYXRhYmFz
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlRXJyb3JfaAotI2RlZmluZSBJREJEYXRhYmFzZUVy
cm9yX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUVycm9yIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCRGF0YWJhc2VFcnJvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoY29kZSA+PSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOwotICAgICAgICBBU1NFUlQoY29kZSA8
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4Y2VwdGlvbk1heCk7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VFcnJvcihjb2RlIC0gSURCRGF0YWJhc2VF
eGNlcHRpb246OklEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0LCBtZXNzYWdlKSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gY3JlYXRlV2l0aG91dE9m
ZnNldCh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgewot
ICAgICAgICBBU1NFUlQoY29kZSA8IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4
Y2VwdGlvbk9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VF
cnJvcihjb2RlLCBtZXNzYWdlKSk7Ci0gICAgfQotCi0gICAgfklEQkRhdGFiYXNlRXJyb3IoKSB7
IH0KLQotICAgIHVuc2lnbmVkIHNob3J0IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0K
LSAgICB2b2lkIHNldENvZGUodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgbV9jb2RlID0gdmFsdWU7
IH0KLSAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7
IH0KLSAgICB2b2lkIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX21lc3NhZ2Ug
PSB2YWx1ZTsgfQotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlRXJyb3IodW5zaWduZWQgc2hv
cnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICA6IG1fY29kZShjb2RlKSwg
bV9tZXNzYWdlKG1lc3NhZ2UpIHsgfQotCi0gICAgdW5zaWduZWQgc2hvcnQgbV9jb2RlOwotICAg
IFN0cmluZyBtX21lc3NhZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VFcnJvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBb
Ci0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKLSAgICBdIElEQkRhdGFiYXNl
RXJyb3IgewotICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgY29kZTsKLSAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYW4gYXJyYXkgb2Ygc3RydWN0cyB0byBwYWlyIHRoZSBuYW1lcyBhbmQgZGVzY3JpcHRp
b25zLgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbk5hbWVzW10gPSB7Ci0gICAg
IlVOS05PV05fRVJSIiwKLSAgICAiTk9OX1RSQU5TSUVOVF9FUlIiLAotICAgICJOT1RfRk9VTkRf
RVJSIiwKLSAgICAiQ09OU1RSQUlOVF9FUlIiLAotICAgICJEQVRBX0VSUiIsCi0gICAgIk5PVF9B
TExPV0VEX0VSUiIsCi0gICAgIlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiIsCi0gICAgIkFCT1JU
X0VSUiIsCi0gICAgIlJFQURfT05MWV9FUlIiLAotICAgICJUSU1FT1VUX0VSUiIsCi0gICAgIlFV
T1RBX0VSUiIsCi0gICAgIlZFUl9FUlIiCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZXhjZXB0aW9uRGVzY3JpcHRpb25zW10gPSB7Ci0gICAgIkFuIHVua25vd24gZXJyb3Igb2NjdXJy
ZWQgd2l0aGluIEluZGV4ZWQgRGF0YWJhc2UuIiwKLSAgICAiTk9OX1RSQU5TSUVOVF9FUlIiLCAv
LyBGSVhNRTogV3JpdGUgYSBiZXR0ZXIgbWVzc2FnZSBpZiBpdCdzIGV2ZXIgcG9zc2libGUgdGhp
cyBpcyB0aHJvd24uCi0gICAgIlRoZSBuYW1lIHN1cHBsaWVkIGRvZXMgbm90IG1hdGNoIGFueSBl
eGlzdGluZyBpdGVtLiIsCi0gICAgIlRoZSByZXF1ZXN0IGNhbm5vdCBiZSBjb21wbGV0ZWQgZHVl
IHRvIGEgZmFpbGVkIGNvbnN0cmFpbnQuIiwKLSAgICAiVGhlIGRhdGEgcHJvdmlkZWQgZG9lcyBu
b3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBmdW5jdGlvbi4iLAotICAgICJUaGlzIGZ1
bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGNhbGxlZCBpbiBzdWNoIGEgY29udGV4dC4iLAot
ICAgICJBIHJlcXVlc3Qgd2FzIHBsYWNlZCBhZ2FpbnN0IGEgdHJhbnNhY3Rpb24gd2hpY2ggaXMg
ZWl0aGVyIGN1cnJlbnRseSBub3QgYWN0aXZlLCBvciB3aGljaCBpcyBmaW5pc2hlZC4iLAotICAg
ICJUaGUgdHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQsIHNvIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBm
dWxmaWxsZWQuIiwKLSAgICAiQSB3cml0ZSBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBpbiBhIHJl
YWQtb25seSB0cmFuc2FjdGlvbi4iLAotICAgICJBIGxvY2sgZm9yIHRoZSB0cmFuc2FjdGlvbiBj
b3VsZCBub3QgYmUgb2J0YWluZWQgaW4gYSByZWFzb25hYmxlIHRpbWUuIiwgLy8gRklYTUU6IFRo
aXMgaXNuJ3QgdXNlZCB5ZXQuCi0gICAgIlRoZSBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhl
cmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdl
IHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5lZCB0byBnaXZlIG1vcmUgc3Bh
Y2UgdG8gdGhlIGRhdGFiYXNlLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVzZWQgeWV0Ci0gICAg
IkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gb3BlbiBhIGRhdGFiYXNlIHVzaW5nIGEgbG93ZXIgdmVy
c2lvbiB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uLiIsIC8vIEZJWE1FOiBUaGlzIGlzbid0IHVz
ZWQgeWV0Ci19OwotCi1DT01QSUxFX0FTU0VSVChXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5h
bWVzKSA9PSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbkRlc2NyaXB0aW9ucyksIElEQkRhdGFi
YXNlRXhjZXB0aW9uVGFibGVzTXVzdE1hdGNoKTsKLQotYm9vbCBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6aW5pdGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUgZWMsIEV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiogZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKGVjIDwgSURCRGF0YWJhc2VFeGNl
cHRpb25PZmZzZXQgfHwgZWMgPiBJREJEYXRhYmFzZUV4Y2VwdGlvbk1heCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZGVzY3JpcHRpb24tPnR5cGVOYW1lID0gIkRPTSBJREJEYXRhYmFz
ZSI7Ci0gICAgZGVzY3JpcHRpb24tPmNvZGUgPSBlYyAtIElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0OwotICAgIGRlc2NyaXB0aW9uLT50eXBlID0gSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOwot
Ci0gICAgc2l6ZV90IHRhYmxlU2l6ZSA9IFdURl9BUlJBWV9MRU5HVEgoZXhjZXB0aW9uTmFtZXMp
OwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gZWMgLSBVTktOT1dOX0VSUjsKLQotICAgIGRlc2Ny
aXB0aW9uLT5uYW1lID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbk5hbWVzW3Rh
YmxlSW5kZXhdIDogMDsKLSAgICBkZXNjcmlwdGlvbi0+ZGVzY3JpcHRpb24gPSB0YWJsZUluZGV4
IDwgdGFibGVTaXplID8gZXhjZXB0aW9uRGVzY3JpcHRpb25zW3RhYmxlSW5kZXhdIDogMDsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCi0jZGVm
aW5lIElEQkRhdGFiYXNlRXhjZXB0aW9uX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElEQkRhdGFiYXNlRXhjZXB0aW9uIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXhjZXB0aW9uPiBjcmVhdGUo
Y29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VFeGNlcHRpb24oZGVzY3JpcHRpb24p
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IElEQkRhdGFiYXNlRXhjZXB0aW9uT2Zm
c2V0ID0gMTIwMDsKLSAgICBzdGF0aWMgY29uc3QgaW50IElEQkRhdGFiYXNlRXhjZXB0aW9uTWF4
ID0gMTI5OTsKLQotICAgIGVudW0gSURCRGF0YWJhc2VFeGNlcHRpb25Db2RlIHsKLSAgICAgICAg
Tk9fRVJSID0gSURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQsCi0gICAgICAgIFVOS05PV05fRVJS
LAotICAgICAgICBOT05fVFJBTlNJRU5UX0VSUiwKLSAgICAgICAgTk9UX0ZPVU5EX0VSUiwKLSAg
ICAgICAgQ09OU1RSQUlOVF9FUlIsCi0gICAgICAgIERBVEFfRVJSLAotICAgICAgICBOT1RfQUxM
T1dFRF9FUlIsCi0gICAgICAgIFRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiwKLSAgICAgICAgQUJP
UlRfRVJSLAotICAgICAgICBSRUFEX09OTFlfRVJSLAotICAgICAgICBUSU1FT1VUX0VSUiwKLSAg
ICAgICAgUVVPVEFfRVJSLAotICAgICAgICBWRVJfRVJSCi0gICAgfTsKLQotICAgIHN0YXRpYyBp
bnQgRXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKGludCBlcnJvckNvZGUpCi0gICAgewotICAgICAg
ICBpZiAoIWVycm9yQ29kZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
ZXJyb3JDb2RlICsgSURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQ7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUsIEV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiopOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlRXhjZXB0aW9uKGNv
bnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi0gICAgICAgIDogRXhj
ZXB0aW9uQmFzZShkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlRXhjZXB0aW9uX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKLSAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cwotICAgIF0gSURC
RGF0YWJhc2VFeGNlcHRpb24gewotCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCAgIGNvZGU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIG5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1l
c3NhZ2U7Ci0KLSNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pB
VkFTQ1JJUFQKLSAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3ppbGxhIGNvbXBhdGlibGUgZm9y
bWF0Ci0gICAgICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKLSNlbmRp
ZgotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VSUiA9IDA7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgTk9OX1RSQU5TSUVOVF9FUlIgPSAyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBOT1RfRk9VTkRfRVJSID0gMzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09O
U1RSQUlOVF9FUlIgPSA0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRBX0VSUiA9
IDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9BTExPV0VEX0VSUiA9IDY7Ci0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUiA9IDc7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VSUiA9IDg7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5OwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDEwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBRVU9UQV9FUlIgPSAxMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSX0VSUiA9
IDEyOwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2
ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5o
IgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudC5oIgot
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0cjxF
dmVudFRhcmdldD4gPiYgZXZlbnRUYXJnZXRzKQotewotICAgIHNpemVfdCBzaXplID0gZXZlbnRU
YXJnZXRzLnNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZSk7Ci0KLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAt
IDE7IGk7IC0taSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZl
bnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKLSAgICAgICAgZXZl
bnRUYXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZl
bnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQotICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hp
bmc7Ci0gICAgfQotCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzWzBdLmdldCgpKTsKLSAg
ICBldmVudFRhcmdldHNbMF0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgaWYgKGV2
ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAhZXZlbnQtPmJ1YmJsZXMoKSB8fCBldmVudC0+
Y2FuY2VsQnViYmxlKCkpCi0gICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwotCi0gICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IHNpemU7ICsraSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4K
LSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsK
LSAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAg
ICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJi
bGUoKSkKLSAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiAiLi4uSG93ZXZlciwgd2UgYWxzbyB3YW50ZWQgdG8gaW50ZWdyYXRlIHRoZSB3aW5k
b3cub25lcnJvciBmZWF0dXJlIGluCi0gICAgLy8gICAgICAgIEhUTUw1LiBTbyBhZnRlciB3ZSd2
ZSBmaXJlZCBhbiAiZXJyb3IiIGV2ZW50LCBpZiAucHJldmVudERlZmF1bHQoKSB3YXMKLSAgICAv
LyAgICAgICAgbmV2ZXIgY2FsbGVkIG9uIHRoZSBldmVudCwgd2UgZmlyZSBhbiBlcnJvciBldmVu
dCBvbiB0aGUgd2luZG93IChjYW4ndAotICAgIC8vICAgICAgICByZW1lbWJlciBpZiB0aGlzIGhh
cHBlbnMgYmVmb3JlIG9yIGFmdGVyIHdlIGFib3J0IHRoZSB0cmFuc2FjdGlvbikuCi0gICAgLy8g
ICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0ZSBldmVudCwgd2hpY2ggZm9yIGV4YW1wbGUgbWVhbnMg
dGhhdCBldmVuIGlmIHlvdQotICAgIC8vICAgICAgICBhdHRhY2ggYSBjYXB0dXJpbmcgImVycm9y
IiBoYW5kbGVyIG9uIHdpbmRvdywgeW91IHdvbid0IHNlZSBhbnkgZXZlbnRzCi0gICAgLy8gICAg
ICAgIHVubGVzcyBhbiBlcnJvciByZWFsbHkgd2VudCB1bmhhbmRsZWQuIEFuZCB5b3UgYWxzbyBj
YW4ndCBjYWxsCi0gICAgLy8gICAgICAgIC5wcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXJyb3IgZXZl
bnQgZmlyZWQgb24gdGhlIHdpbmRvdyBpbiBvcmRlciB0bwotICAgIC8vICAgICAgICBwcmV2ZW50
IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGJlaW5nIGFib3J0ZWQuIEl0J3MgcHVyZWx5IHRoZXJlIGZv
cgotICAgIC8vICAgICAgICBlcnJvciByZXBvcnRpbmcgYW5kIGRpc3RpbmN0bHkgZGlmZmVyZW50
IGZyb20gdGhlIGV2ZW50IHByb3BhZ2F0aW5nIHRvCi0gICAgLy8gICAgICAgIHRoZSB3aW5kb3cu
Ci0gICAgLy8gICAgICAgIAotICAgIC8vICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93ICJl
cnJvciIgZXZlbnRzIGFyZSBoYW5kbGVkIGluIHdvcmtlcnMuCi0gICAgLy8gICAgICAgIAotICAg
IC8vICAgICAgICAoSSB0aGluayB0aGF0IHNvIGZhciB3ZWJraXQgaGFzbid0IGltcGxlbWVudGVk
IHRoZSB3aW5kb3cub25lcnJvcgotICAgIC8vICAgICAgICBmZWF0dXJlIHlldCwgc28geW91IHBy
b2JhYmx5IGRvbid0IHdhbnQgdG8gZmlyZSB0aGUgc2VwYXJhdGUgZXJyb3IKLSAgICAvLyAgICAg
ICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4i
IC0tIEpvbmFzIFNpY2tpbmcKLQotZG9uZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRDdXJy
ZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotICAgIHJldHVybiAh
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVudERpc3BhdGNo
ZXIuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVu
dERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
REJFdmVudERpc3BhdGNoZXJfaAotI2RlZmluZSBJREJFdmVudERpc3BhdGNoZXJfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV2ZW50
OwotY2xhc3MgRXZlbnRUYXJnZXQ7Ci0KLWNsYXNzIElEQkV2ZW50RGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBWZWN0b3I8UmVmUHRyPEV2ZW50
VGFyZ2V0PiA+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4gaXRzIGFuY2VzdG9ycyBp
biBvcmRlciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCi0KLXByaXZhdGU6Ci0gICAgSURCRXZl
bnREaXNwYXRjaGVyKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkV2ZW50RGlzcGF0Y2hl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SURCRmFjdG9yeS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcm91cFNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVk
ZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJv
eHkuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1JREJGYWN0b3J5OjpJREJGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0
b3J5KQotICAgIDogbV9iYWNrZW5kKGZhY3RvcnkpCi17Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhB
ZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLUlEQkZhY3Rvcnk6On5JREJGYWN0b3J5KCkKLXsK
LX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVz
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaWYgKCFjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29y
a2Vycy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKLSAgICBpZiAoIWRvY3VtZW50LT5m
cmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5n
cyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fYmFj
a2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0
aCgpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0KLSAgICBpZiAobmFt
ZS5pc051bGwoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT05fVFJB
TlNJRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KTsKLSAgICAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAh
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IDApOwotICAgICAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUsIFN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHJl
cXVlc3Q7Ci0gICAgfQotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCAwKTsKLSAgICBtX2JhY2tlbmQtPm9wZW5Gcm9tV29ya2VyKG5hbWUsIHJlcXVlc3QuZ2V0
KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
Pihjb250ZXh0KSwgU3RyaW5nKCkpOwotICAgIHJldHVybiByZXF1ZXN0OwotI2Vsc2UKLSAgICBy
ZXR1cm4gMDsKLSNlbmRpZgotfQotCi1QYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29y
ayB3aXRoIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgaWYgKCFk
b2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOT05fVFJBTlNJRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGVOdWxsKCksICIiKTsK
LSAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3Jv
dXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1l
LCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCks
IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKLSAgICByZXR1cm4gcmVx
dWVzdDsKLX0KLQotc2hvcnQgSURCRmFjdG9yeTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJz
dCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
QVNTRVJUKGZpcnN0KTsKLSAgICBBU1NFUlQoc2Vjb25kKTsKLQotICAgIGlmIChmaXJzdC0+dHlw
ZSgpID09IElEQktleTo6SW52YWxpZFR5cGUgfHwgc2Vjb25kLT50eXBlKCkgPT0gSURCS2V5OjpJ
bnZhbGlkVHlwZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2hvcnQ+KGZpcnN0LT5jb21wYXJlKHNlY29uZC5nZXQoKSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeV9oCi0jZGVmaW5lIElEQkZhY3RvcnlfaAotCi0j
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLWNsYXNzIElE
QktleVJhbmdlOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkZhY3RvcnkgOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJGYWN0b3J5PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
RmFjdG9yeT4gY3JlYXRlKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5KGZhY3RvcnkpKTsKLSAg
ICB9Ci0gICAgfklEQkZhY3RvcnkoKTsKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0
RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHNob3J0IGNtcChQYXNzUmVmUHRyPElE
QktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsK
LQotcHJpdmF0ZToKLSAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKik7
Ci0KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJGYWN0
b3J5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAkocmV2aXNpb24g
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAg
aW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQotICAgIF0g
SURCRmFjdG9yeSB7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IGdldERhdGFiYXNlTmFtZXMoKTsKLQotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuKGluIERPTVN0cmluZyBuYW1lKQotICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCBkZWxldGVE
YXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotCi0gICAgICAgIHNob3J0IGNtcChpbiBJREJLZXkgZmlyc3QsIGluIElE
QktleSBzZWNvbmQpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
LSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgiCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBT
dHJpbmcgY29tcHV0ZUZpbGVJZGVudGlmaWVyKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
bikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBrTGV2ZWxEQkZpbGVTdWZmaXhbXSA9ICJAMSI7
Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArIGtMZXZl
bERCRmlsZVN1ZmZpeDsKLX0KLQotc3RhdGljIFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKLXsK
LSAgICByZXR1cm4gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luKSArIG5hbWU7
Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmRJbXBsKCkKLSAg
ICA6IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpj
cmVhdGUoKSkKLXsKLX0KLQotSURCRmFjdG9yeUJhY2tlbmRJbXBsOjp+SURCRmFjdG9yeUJhY2tl
bmRJbXBsKCkKLXsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkRh
dGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi17Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2VCYWNrZW5kTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAg
ICBtX2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci19Ci0KLXZv
aWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjphZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5n
JiBmaWxlSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCi17Ci0gICAg
QVNTRVJUKCFtX2JhY2tpbmdTdG9yZU1hcC5jb250YWlucyhmaWxlSWRlbnRpZmllcikpOwotICAg
IG1fYmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFja2luZ1N0b3JlKTsKLX0K
LQotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25z
dCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZU1h
cC5jb250YWlucyhmaWxlSWRlbnRpZmllcikpOwotICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92
ZShmaWxlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcmVjdG9yeSkKLXsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAg
ICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIklu
dGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0K
LSAgICBWZWN0b3I8U3RyaW5nPiBmb3VuZE5hbWVzOwotICAgIGJhY2tpbmdTdG9yZS0+Z2V0RGF0
YWJhc2VOYW1lcyhmb3VuZE5hbWVzKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGZvdW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgZGF0YWJhc2VOYW1lcy0+YXBwZW5kKCppdCk7Ci0KLSAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBvcGVuSW50ZXJuYWwobmFt
ZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci19Ci0KLXZvaWQg
SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkK
LXsKLSAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0
YURpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRl
bnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdl
dCgpKTsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGlmIChpdCAhPSBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNv
bm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQotICAgICAgICAv
LyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZy
b20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlP
cmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
QmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3Rv
cmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRl
bnRpZmllcik7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIs
IGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci0gICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRh
YmFzZShjYWxsYmFja3MpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17Ci0gICAg
Y29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZTsKLSAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0
b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwotICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3Rv
cmVNYXAuZW5kKCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOwotICAgIGVs
c2UgewotI2lmIFVTRShMRVZFTERCKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBm
aWxlSWRlbnRpZmllciwgdGhpcyk7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIGlmIChiYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVy
biBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gcHJwU2VjdXJpdHlPcmlnaW47Ci0gICAgY29u
c3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1l
LCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsK
LSAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8g
SWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5k
aW5nCi0gICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29tcGxldGUuCi0gICAgICAgIGl0
LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9u
ZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwg
IkludGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KGRhdGFiYXNl
QmFja2VuZC5nZXQoKSkucmVsZWFzZSgpKTsKLSAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQo
dW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCi0KLSNpbmNs
dWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlz
dDsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0KLWNsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW1wbCA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2VuZEltcGwo
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwotCi0gICAg
Ly8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCi0gICAgdm9pZCByZW1vdmVJREJE
YXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB2b2lk
IGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNr
aW5nU3RvcmUqKTsKLSAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcm
IGZpbGVJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkZy
b21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi1wcml2YXRlOgotICAgIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCgpOwotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3Jl
KFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAg
IHZvaWQgb3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJh
c2VCYWNrZW5kTWFwOwotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2Vu
ZE1hcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkJhY2tpbmdTdG9yZSo+IElE
QkJhY2tpbmdTdG9yZU1hcDsKLSAgICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVN
YXA7Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yOwotCi0gICAgLy8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkg
c2hvdWxkIGV4aXN0IGF0IGFueSBnaXZlbiB0aW1lLgotICAgIHN0YXRpYyBJREJGYWN0b3J5QmFj
a2VuZEltcGwqIGlkYkZhY3RvcnlCYWNrZW5kSW1wbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEltcGxfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLQotI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQotI2Vycm9yICJDaHJvbWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhp
cyBmaWxlIGFuZCBpbnN0ZWFkIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBmYWN0b3J5
IHRoYXQgbmF2aWdhdGVzIHRoZSBtdWx0aS1wcm9jZXNzIGJvdW5kcnkuIgotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
UmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpjcmVh
dGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gK
LSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiSURCQ2Fs
bGJhY2tzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWU7Ci1jbGFzcyBJ
REJEYXRhYmFzZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgV29ya2VyQ29udGV4dDsK
LQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQg
YnkgSURCRmFjdG9yeSAoYXN5bmMpIGFuZCBJREJGYWN0b3J5U3luYyAoc3luYykuCi0vLyBUaGlz
IGlzIGltcGxlbWVudGVkIGJ5IElEQkZhY3RvcnlCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBv
dGhlcnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVy
cykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5k
Ci0vLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1j
bGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsKLSAgICB2aXJ0
dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAw
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5k
ZXguY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgot
I2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0
RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwotCi1JREJJbmRleDo6SURCSW5kZXgoUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQk9iamVjdFN0b3JlKiBv
YmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9iYWNrZW5k
KGJhY2tlbmQpCi0gICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NF
UlQobV9vYmplY3RTdG9yZSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwotfQotCi1JREJJ
bmRleDo6fklEQkluZGV4KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRl
eDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpvcGVuQ3Vyc29yIik7Ci0g
ICAgaWYgKGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1
cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAm
JiBkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgewotICAgICAgICAv
LyBGSVhNRTogTWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAg
cmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1
cnNvcik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAg
ICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkluZGV4Ojpjb3VudCIpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJhbmdlLCByZXF1ZXN0LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4Ojpjb3VudCIpOwot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXks
IGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3VudChj
b250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4Ojpv
cGVuS2V5Q3Vyc29yIik7Ci0gICAgaWYgKGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYg
ZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9
IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJ
Q0FURSkgewotICAgICAgICAvLyBGSVhNRTogTWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2Nl
ZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuS2V5Q3Vyc29y
KGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXQiKTsKLSAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUo
KSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0
KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgi
SURCSW5kZXg6OmdldEtleSIpOwotICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktl
eTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRLZXkoa2V5LCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAg
ICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkluZGV4LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
REJJbmRleF9oCi0jZGVmaW5lIElEQkluZGV4X2gKLQotI2luY2x1ZGUgIklEQkN1cnNvci5oIgot
I2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlOwotCi1j
bGFzcyBJREJJbmRleCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkluZGV4PiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlLCBJ
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkluZGV4KGJhY2tlbmQsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOwotICAg
IH0KLSAgICB+SURCSW5kZXgoKTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0gICAgU3Ry
aW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPm5hbWUoKTsgfQotICAgIElEQk9i
amVjdFN0b3JlKiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmUuZ2V0
KCk7IH0KLSAgICBTdHJpbmcga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+a2V5
UGF0aCgpOyB9Ci0gICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPnVu
aXF1ZSgpOyB9Ci0gICAgYm9vbCBtdWx0aUVudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
LT5tdWx0aUVudHJ5KCk7IH0KLQotICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2Rl
IGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCAwLCBlYyk7IH0KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQs
IGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsg
fQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwgMCwgZWMpOyB9IAotICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1
cnNvcjo6TkVYVCwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi1wcml2YXRlOgotICAgIElEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiwgSURCT2JqZWN0U3RvcmUqLCBJREJUcmFuc2FjdGlvbiopOwotCi0gICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gSURCSW5kZXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5pZGwJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7
Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNF
Ci0gICAgXSBJREJJbmRleCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
bmFtZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVjdFN0
b3JlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtleVBhdGg7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKLQotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGluIFtPcHRpb25hbF0gSURC
S2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQot
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW5LZXlDdXJzb3IoaW4g
W09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
LSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0
KGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
Z2V0S2V5KGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSkKLSAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJLZXkga2V5KQotICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgfTsKLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5j
bHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGludDY0X3QgaWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKLSAgICA6IG1fYmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwg
bV9vYmplY3RTdG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQotICAgICwgbV9pZChpZCkK
LSAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9zdG9yZU5hbWUoc3RvcmVOYW1lKQotICAgICwg
bV9rZXlQYXRoKGtleVBhdGgpCi0gICAgLCBtX3VuaXF1ZSh1bmlxdWUpCi0gICAgLCBtX211bHRp
RW50cnkobXVsdGlFbnRyeSkKLXsKLX0KLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhC
YWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKLSAgICA6IG1fYmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAg
ICwgbV9vYmplY3RTdG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQotICAgICwgbV9pZChJ
bnZhbGlkSWQpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFt
ZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV91bmlxdWUodW5pcXVlKQotICAg
ICwgbV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCi17Ci19Ci0KLUlEQkluZGV4QmFja2VuZEltcGw6
On5JREJJbmRleEJhY2tlbmRJbXBsKCkKLXsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdl
LCB1bnNpZ25lZCBzaG9ydCB1bnR5cGVkRGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJ
bnRlcm5hbCIpOwotICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19j
YXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih1bnR5cGVkRGlyZWN0aW9uKTsKLQotICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotCi0gICAgc3dp
dGNoIChjdXJzb3JUeXBlKSB7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleUN1cnNvcjoKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPm1fYmFj
a2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPm1fZGF0YWJhc2VJZCwgaW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRp
cmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5t
X2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBk
aXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yOgotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW52YWxpZEN1cnNvclR5cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewot
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxW
YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0
b3JlID0gdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKGluZGV4LT5tX3N0b3JlTmFtZSwgZWMpOwot
ICAgIEFTU0VSVChvYmplY3RTdG9yZSAmJiAhZWMpOwotCi0gICAgUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFj
a2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRyYW5zYWN0aW9u
LmdldCgpLCBvYmplY3RTdG9yZS5nZXQoKSk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vy
c29yLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAg
ICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29y
SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0K
LXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBwcnBLZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eUN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwiKTsKLSAgICB1aW50MzJf
dCBjb3VudCA9IDA7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29y
KGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
aW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGlmICghYmFj
a2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3Rv
cmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIGJhY2tpbmdTdG9yZUN1cnNvci0+
Y2xvc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6
Om51bWJlclZhbHVlKGNvdW50KSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y291bnQiKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIGJvb2wgZ2V0T2JqZWN0LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKLSAgICAvLyBGSVhNRTogU3BsaXQgZ2V0SW50ZXJuYWwg
aW50byB0d28gZnVuY3Rpb25zLCBnZXR0aW5nIHJpZCBvZmYgfGdldE9iamVjdHwuCi0gICAgaWYg
KGdldE9iamVjdCkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+bV9iYWNraW5nU3Rv
cmUtPmdldE9iamVjdFZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwotICAgICAgICBpZiAodmFs
dWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtl
eVZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwotICAgICAgICBpZiAoIWtleVJlc3VsdCkgewot
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFj
a2VuZEltcGw6OmdldCIpOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9
IHRoaXM7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRJbnRlcm5hbCwgaW5kZXgsIGtl
eSwgdHJ1ZSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBs
OjpnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXRLZXkiKTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgg
PSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBr
ZXksIGZhbHNlLCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi1ib29sIElEQkluZGV4QmFja2VuZElt
cGw6OmFkZGluZ0tleUFsbG93ZWQoY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5
KiBwcmltYXJ5S2V5KQotewotICAgIGlmICghbV91bmlxdWUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgIGJvb2wgZm91bmQg
PSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5JbmRleChtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2lkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSk7Ci0g
ICAgaWYgKCFmb3VuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHByaW1hcnlLZXkg
JiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFsKHByaW1hcnlLZXkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbXBsX2gK
LSNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJ
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGludDY0X3QgaWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0
aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmpl
Y3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChi
YWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgbmFtZSwgc3RvcmVO
YW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+
SURCSW5kZXhCYWNrZW5kSW1wbCgpOwotCi0gICAgaW50NjRfdCBpZCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOwotICAgICAgICByZXR1cm4gbV9pZDsK
LSAgICB9Ci0gICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7IG1faWQgPSBpZDsgfQotICAgIGJv
b2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gSW52YWxpZElkOyB9OwotCi0g
ICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElE
QktleSogcHJpbWFyeUtleSA9IDApOwotCi0gICAgLy8gSW1wbGVtZW50cyBJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2UuCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsg
fQotICAgIHZpcnR1YWwgU3RyaW5nIHN0b3JlTmFtZSgpIHsgcmV0dXJuIG1fc3RvcmVOYW1lOyB9
Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0dXJuIG1fa2V5UGF0aDsgfQotICAg
IHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tdWx0aUVudHJ5OyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBk
aXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0gICAg
SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIElEQkluZGV4QmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsK
LQotICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZv
aWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBnZXRPYmplY3QsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlk
SWQgPSAwOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0K
LSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKLSAgICBpbnQ2NF90IG1faWQ7Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9zdG9yZU5hbWU7Ci0gICAgU3RyaW5nIG1fa2V5UGF0
aDsKLSAgICBib29sIG1fdW5pcXVlOwotICAgIGJvb2wgbV9tdWx0aUVudHJ5OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkluZGV4QmFja2Vu
ZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCi0jZGVmaW5l
IElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJL
ZXlSYW5nZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKLQotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gewot
cHVibGljOgotICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0g
ICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzdG9yZU5h
bWUoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgdW5pcXVlKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQktleS5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCS2V5OjpJREJLZXkoKQot
ICAgIDogbV90eXBlKEludmFsaWRUeXBlKQotICAgICwgbV9zaXplRXN0aW1hdGUoa092ZXJoZWFk
U2l6ZSkKLXsKLX0KLQotSURCS2V5Ojp+SURCS2V5KCkKLXsKLX0KLQotaW50IElEQktleTo6Y29t
cGFyZShjb25zdCBJREJLZXkqIG90aGVyKSBjb25zdAotewotICAgIEFTU0VSVChvdGhlcik7Ci0g
ICAgaWYgKG1fdHlwZSAhPSBvdGhlci0+bV90eXBlKQotICAgICAgICByZXR1cm4gbV90eXBlID4g
b3RoZXItPm1fdHlwZSA/IC0xIDogMTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2Fz
ZSBBcnJheVR5cGU6Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcnJheS5zaXpl
KCkgJiYgaSA8IG90aGVyLT5tX2FycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
aW50IHJlc3VsdCA9IG1fYXJyYXlbaV0tPmNvbXBhcmUob3RoZXItPm1fYXJyYXlbaV0uZ2V0KCkp
KQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fYXJyYXkuc2l6ZSgpIDwgb3RoZXItPm1fYXJyYXkuc2l6ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgICBpZiAobV9hcnJheS5zaXplKCkgPiBvdGhlci0+bV9hcnJheS5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBT
dHJpbmdUeXBlOgotICAgICAgICByZXR1cm4gLWNvZGVQb2ludENvbXBhcmUob3RoZXItPm1fc3Ry
aW5nLCBtX3N0cmluZyk7Ci0gICAgY2FzZSBEYXRlVHlwZToKLSAgICAgICAgcmV0dXJuIChtX2Rh
dGUgPCBvdGhlci0+bV9kYXRlKSA/IC0xIDoKLSAgICAgICAgICAgICAgICAobV9kYXRlID4gb3Ro
ZXItPm1fZGF0ZSkgPyAxIDogMDsKLSAgICBjYXNlIE51bWJlclR5cGU6Ci0gICAgICAgIHJldHVy
biAobV9udW1iZXIgPCBvdGhlci0+bV9udW1iZXIpID8gLTEgOgotICAgICAgICAgICAgICAgICht
X251bWJlciA+IG90aGVyLT4gbV9udW1iZXIpID8gMSA6IDA7Ci0gICAgY2FzZSBJbnZhbGlkVHlw
ZToKLSAgICBjYXNlIE1pblR5cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBJREJLZXk6OmlzTGVzc1RoYW4oY29uc3QgSURCS2V5KiBvdGhl
cikgY29uc3QKLXsKLSAgICBBU1NFUlQob3RoZXIpOwotICAgIHJldHVybiBjb21wYXJlKG90aGVy
KSA9PSAtMTsKLX0KLQotYm9vbCBJREJLZXk6OmlzRXF1YWwoY29uc3QgSURCS2V5KiBvdGhlcikg
Y29uc3QKLXsKLSAgICBpZiAoIW90aGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gIWNvbXBhcmUob3RoZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJLZXlfaAotI2RlZmluZSBJREJLZXlfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJL
ZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5PiB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBLZXlBcnJheTsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSW52YWxpZCgpCi0gICAgewotICAgICAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOwotICAgICAgICBpZGJLZXkt
Pm1fdHlwZSA9IEludmFsaWRUeXBlOwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZU51bWJlcihkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRS
ZWYobmV3IElEQktleSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBOdW1iZXJUeXBlOwot
ICAgICAgICBpZGJLZXktPm1fbnVtYmVyID0gbnVtYmVyOwotICAgICAgICBpZGJLZXktPm1fc2l6
ZUVzdGltYXRlICs9IHNpemVvZihkb3VibGUpOwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVh
c2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGlk
YktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7Ci0gICAgICAgIGlkYktleS0+bV90eXBlID0g
U3RyaW5nVHlwZTsKLSAgICAgICAgaWRiS2V5LT5tX3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAg
aWRiS2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzdHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZURhdGUoZG91YmxlIGRhdGUpCi0gICAgewotICAgICAg
ICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOwotICAgICAg
ICBpZGJLZXktPm1fdHlwZSA9IERhdGVUeXBlOwotICAgICAgICBpZGJLZXktPm1fZGF0ZSA9IGRh
dGU7Ci0gICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gc2l6ZW9mKGRvdWJsZSk7Ci0g
ICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlQXJyYXkoY29uc3QgS2V5QXJyYXkmIGFycmF5KQotICAgIHsK
LSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktleSgpKTsK
LSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBBcnJheVR5cGU7Ci0gICAgICAgIGlkYktleS0+bV9h
cnJheSA9IGFycmF5OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBpZGJLZXktPm1fc2l6ZUVzdGltYXRlICs9IGFycmF5W2ld
LT5tX3NpemVFc3RpbWF0ZTsKLQotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICB+SURCS2V5KCk7Ci0KLSAgICAvLyBJbiBvcmRlciBvZiB0aGUgbGVhc3QgdG8g
dGhlIGhpZ2hlc3QgcHJlY2VkZW50IGluIHRlcm1zIG9mIHNvcnQgb3JkZXIuCi0gICAgZW51bSBU
eXBlIHsKLSAgICAgICAgSW52YWxpZFR5cGUgPSAwLAotICAgICAgICBBcnJheVR5cGUsCi0gICAg
ICAgIFN0cmluZ1R5cGUsCi0gICAgICAgIERhdGVUeXBlLAotICAgICAgICBOdW1iZXJUeXBlLAot
ICAgICAgICBNaW5UeXBlCi0gICAgfTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIGJvb2wgdmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52
YWxpZFR5cGU7IH0KLQotICAgIGNvbnN0IEtleUFycmF5JiBhcnJheSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IEFycmF5VHlwZSk7Ci0gICAgICAgIHJldHVybiBtX2Fy
cmF5OwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlwZSk7Ci0gICAgICAgIHJldHVybiBtX3N0
cmluZzsKLSAgICB9Ci0KLSAgICBkb3VibGUgZGF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQobV90eXBlID09IERhdGVUeXBlKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0ZTsKLSAgICB9
Ci0KLSAgICBkb3VibGUgbnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gTnVtYmVyVHlwZSk7Ci0gICAgICAgIHJldHVybiBtX251bWJlcjsKLSAgICB9Ci0KLSAg
ICBpbnQgY29tcGFyZShjb25zdCBJREJLZXkqIG90aGVyKSBjb25zdDsKLSAgICBib29sIGlzTGVz
c1RoYW4oY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBpc0VxdWFsKGNvbnN0
IElEQktleSogb3RoZXIpIGNvbnN0OwotCi0gICAgc2l6ZV90IHNpemVFc3RpbWF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZUVzdGltYXRlOyB9Ci0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVUeXBl
cyhUeXBlIGEsIFR5cGUgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBiIC0gYTsKLSAgICB9Ci0K
LSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXk+OjpyZWY7Ci0gICAgdXNpbmcg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5Pjo6ZGVyZWY7Ci0KLXByaXZhdGU6Ci0gICAgSURC
S2V5KCk7Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICBLZXlBcnJheSBtX2FycmF5OwotICAgIFN0
cmluZyBtX3N0cmluZzsKLSAgICBkb3VibGUgbV9kYXRlOwotICAgIGRvdWJsZSBtX251bWJlcjsK
LQotICAgIHNpemVfdCBtX3NpemVFc3RpbWF0ZTsKLQotICAgIC8vIFZlcnkgcm91Z2ggZXN0aW1h
dGUgb2YgbWluaW11bSBrZXkgc2l6ZSBvdmVyaGVhZC4KLSAgICBlbnVtIHsga092ZXJoZWFkU2l6
ZSA9IDE2IH07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LQotI2VuZGlmIC8vIElEQktleV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaWRsCShy
ZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQot
ICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0g
ICAgICAgIEN1c3RvbVRvSlNPYmplY3QKLSAgICBdIElEQktleSB7Ci0gICAgICAgIC8vIFRoaXMg
c3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgotICAgIH07Ci19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0
aC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvQVND
SUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCS2V5UGF0aExleGVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFRva2VuVHlwZSB7
Ci0gICAgICAgIFRva2VuSWRlbnRpZmllciwKLSAgICAgICAgVG9rZW5Eb3QsCi0gICAgICAgIFRv
a2VuRW5kLAotICAgICAgICBUb2tlbkVycm9yCi0gICAgfTsKLQotICAgIGV4cGxpY2l0IElEQktl
eVBhdGhMZXhlcihjb25zdCBTdHJpbmcmIHMpCi0gICAgICAgIDogbV9zdHJpbmcocykKLSAgICAg
ICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKLSAgICAgICAgLCBtX2VuZChzLmNoYXJhY3RlcnMo
KSArIHMubGVuZ3RoKCkpCi0gICAgICAgICwgbV9jdXJyZW50VG9rZW5UeXBlKFRva2VuRXJyb3Ip
Ci0gICAgewotICAgIH0KLQotICAgIFRva2VuVHlwZSBjdXJyZW50VG9rZW5UeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOyB9Ci0KLSAgICBUb2tlblR5cGUgbmV4dFRva2Vu
VHlwZSgpCi0gICAgewotICAgICAgICBtX2N1cnJlbnRUb2tlblR5cGUgPSBsZXgobV9jdXJyZW50
RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRUb2tlblR5cGU7Ci0gICAgfQotCi0g
ICAgY29uc3QgU3RyaW5nJiBjdXJyZW50RWxlbWVudCgpIHsgcmV0dXJuIG1fY3VycmVudEVsZW1l
bnQ7IH0KLQotcHJpdmF0ZToKLSAgICBUb2tlblR5cGUgbGV4KFN0cmluZyYpOwotICAgIFRva2Vu
VHlwZSBsZXhJZGVudGlmaWVyKFN0cmluZyYpOwotICAgIFN0cmluZyBtX2N1cnJlbnRFbGVtZW50
OwotICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICBjb25zdCBVQ2hhciogbV9wdHI7Ci0gICAgY29u
c3QgVUNoYXIqIG1fZW5kOwotICAgIFRva2VuVHlwZSBtX2N1cnJlbnRUb2tlblR5cGU7Ci19Owot
Ci1JREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQYXRoTGV4ZXI6OmxleChTdHJpbmcm
IGVsZW1lbnQpCi17Ci0gICAgaWYgKG1fcHRyID49IG1fZW5kKQotICAgICAgICByZXR1cm4gVG9r
ZW5FbmQ7Ci0gICAgQVNTRVJUKG1fcHRyIDwgbV9lbmQpOwotCi0gICAgaWYgKCptX3B0ciA9PSAn
LicpIHsKLSAgICAgICAgKyttX3B0cjsKLSAgICAgICAgcmV0dXJuIFRva2VuRG90OwotICAgIH0K
LSAgICByZXR1cm4gbGV4SWRlbnRpZmllcihlbGVtZW50KTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3RlcihVQ2hhciBjKQotewotICAgIHJldHVy
biBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0gJ18nKSB8fCAoYyA9PSAnJCcpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQotewotICAg
IHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQn
KTsKLX0KLQotSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJ
ZGVudGlmaWVyKFN0cmluZyYgZWxlbWVudCkKLXsKLSAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBt
X3B0cjsKLSAgICBpZiAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFy
YWN0ZXIoKm1fcHRyKSkKLSAgICAgICAgKyttX3B0cjsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBUb2tlbkVycm9yOwotCi0gICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRp
ZmllckNoYXJhY3RlcigqbV9wdHIpKQotICAgICAgICArK21fcHRyOwotCi0gICAgZWxlbWVudCA9
IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7Ci0gICAgcmV0dXJuIFRva2VuSWRlbnRpZmll
cjsKLX0KLQotYm9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCi17
Ci0gICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAgVmVjdG9yPFN0cmluZz4ga2V5
UGF0aEVsZW1lbnRzOwotICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVu
dHMsIGVycm9yKTsKLSAgICByZXR1cm4gZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25l
OwotfQotCi12b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3Rv
cjxTdHJpbmc+JiBlbGVtZW50cywgSURCS2V5UGF0aFBhcnNlRXJyb3ImIGVycm9yKQotewotICAg
IC8vIElEQktleVBhdGggOjo9IEVNUFRZX1NUUklORyB8IGlkZW50aWZpZXIgKCcuJyBpZGVudGlm
aWVyKSoKLSAgICAvLyBUaGUgYmFzaWMgc3RhdGUgbWFjaGluZSBpczoKLSAgICAvLyAgIFN0YXJ0
ID0+IHtJZGVudGlmaWVyLCBFbmR9Ci0gICAgLy8gICBJZGVudGlmaWVyID0+IHtEb3QsIEVuZH0K
LSAgICAvLyAgIERvdCA9PiB7SWRlbnRpZmllcn0KLSAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29v
biBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBt
YW5hZ2VkIHRvIHBhcnNlLgotICAgIGVudW0gUGFyc2VyU3RhdGUgeyBJZGVudGlmaWVyLCBEb3Qs
IEVuZCB9OwotCi0gICAgSURCS2V5UGF0aExleGVyIGxleGVyKGtleVBhdGgpOwotICAgIElEQktl
eVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsK
LSAgICBQYXJzZXJTdGF0ZSBzdGF0ZTsKLSAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhM
ZXhlcjo6VG9rZW5JZGVudGlmaWVyKQotICAgICAgICBzdGF0ZSA9IElkZW50aWZpZXI7Ci0gICAg
ZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCi0gICAgICAg
IHN0YXRlID0gRW5kOwotICAgIGVsc2UgewotICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJz
ZUVycm9yU3RhcnQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3aGlsZSAoMSkgewot
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKLSAg
ICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1
cnJlbnRUb2tlblR5cGUoKTsKLSAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5
UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpOwotCi0gICAgICAgICAgICBTdHJpbmcgZWxlbWVu
dCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQo
ZWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUo
KTsKLSAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRv
dCkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRv
a2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQotICAgICAgICAgICAgICAgIHN0
YXRlID0gRW5kOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IgPSBJ
REJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBEb3Q6IHsKLSAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlw
ZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKLSAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5
cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCk7Ci0KLSAgICAgICAgICAgIHRva2VuVHlw
ZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKLSAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0g
SURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgc3RhdGUg
PSBJZGVudGlmaWVyOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyb3Ig
PSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVu
ZDogewotICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmU7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCS2V5UGF0aF9oCi0jZGVmaW5lIElEQktleVBh
dGhfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWVudW0gSURCS2V5UGF0aFBhcnNlRXJyb3IgewotICAgIElEQktleVBhdGhQYXJz
ZUVycm9yTm9uZSwKLSAgICBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0LAotICAgIElEQktleVBh
dGhQYXJzZUVycm9ySWRlbnRpZmllciwKLSAgICBJREJLZXlQYXRoUGFyc2VFcnJvckRvdCwKLX07
Ci0KLWJvb2wgSURCSXNWYWxpZEtleVBhdGgoY29uc3QgU3RyaW5nJik7Ci12b2lkIElEQlBhcnNl
S2V5UGF0aChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYsIElEQktleVBhdGhQYXJzZUVy
cm9yJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJLZXlQYXRoX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tl
bmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBh
dGhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQktleVBhdGhC
YWNrZW5kSW1wbC5oIgotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0jZXJyb3IgIkNocm9taXVt
IHNob3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0cyBvd24g
dmVyc2lvbiBvZiB0aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMgdGhlIG11bHRpLXByb2Nlc3Mg
Ym91bmRyeS4iCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi12b2lk
IElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVz
QW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mLCAw
PiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAw
PiYga2V5cykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uY2UgSlND
IHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KLX0KLQotUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5q
ZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBv
cnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KLSAgICByZXR1cm4gMDsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQktleVBhdGhC
YWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOwotCi1jbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgewotcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpOwotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1Nl
cmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCS2V5UGF0aEJhY2tlbmRJ
bXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgotI2luY2x1ZGUgIklEQktleS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCS2V5UmFuZ2U6OklEQktleVJhbmdlKFBhc3NS
ZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBMb3dlckJvdW5k
VHlwZSBsb3dlclR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSkKLSAgICA6IG1fbG93ZXIo
bG93ZXIpCi0gICAgLCBtX3VwcGVyKHVwcGVyKQotICAgICwgbV9sb3dlclR5cGUobG93ZXJUeXBl
KQotICAgICwgbV91cHBlclR5cGUodXBwZXJUeXBlKQotewotfQotCi1QYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBJREJLZXlSYW5nZTo6b25seShQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAg
aWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKGtleSwga2V5LCBMb3dl
ckJvdW5kQ2xvc2VkLCBVcHBlckJvdW5kQ2xvc2VkKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBi
b29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChib3VuZCAmJiAoYm91bmQt
PnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
cmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoYm91bmQsIDAsIG9wZW4gPyBMb3dlckJvdW5kT3Bl
biA6IExvd2VyQm91bmRDbG9zZWQsIFVwcGVyQm91bmRDbG9zZWQpOwotfQotCi1QYXNzUmVmUHRy
PElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6dXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4g
Ym91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJvdW5kICYm
IChib3VuZC0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZSgwLCBib3VuZCwgTG93ZXJCb3VuZENs
b3NlZCwgb3BlbiA/IFVwcGVyQm91bmRPcGVuIDogVXBwZXJCb3VuZENsb3NlZCk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpib3VuZChQYXNzUmVmUHRyPElEQktl
eT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgYm9vbCBsb3dlck9wZW4sIGJvb2wg
dXBwZXJPcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoKGxvd2VyICYmIChsb3dl
ci0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB8fCAodXBwZXIgJiYgKHVwcGVyLT50
eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KGxvd2VyICYmIHVwcGVyICYmIHVwcGVyLT5pc0xlc3NUaGFuKGxvd2VyLmdldCgpKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmIChsb3dlciAmJiB1cHBlciAmJiB1cHBlci0+aXNFcXVhbChsb3dl
ci5nZXQoKSkgJiYgKGxvd2VyT3BlbiB8fCB1cHBlck9wZW4pKSB7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShsb3dlciwgdXBwZXIsIGxvd2VyT3BlbiA/
IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3VuZENsb3NlZCwgdXBwZXJPcGVuID8gVXBwZXJCb3Vu
ZE9wZW4gOiBVcHBlckJvdW5kQ2xvc2VkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXlSYW5nZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQktleVJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCS2V5UmFuZ2VfaAotI2RlZmluZSBJREJLZXlSYW5nZV9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUg
Ik9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJLZXlSYW5nZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJREJLZXlSYW5nZT4gewotcHVibGljOgotICAgIGVudW0gTG93ZXJCb3VuZFR5cGUg
ewotICAgICAgICBMb3dlckJvdW5kT3BlbiwKLSAgICAgICAgTG93ZXJCb3VuZENsb3NlZAotICAg
IH07Ci0gICAgZW51bSBVcHBlckJvdW5kVHlwZSB7Ci0gICAgICAgIFVwcGVyQm91bmRPcGVuLAot
ICAgICAgICBVcHBlckJvdW5kQ2xvc2VkCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyLCBQYXNzUmVmUHRy
PElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlwZSwgVXBwZXJCb3VuZFR5cGUg
dXBwZXJUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXlSYW5n
ZShsb3dlciwgdXBwZXIsIGxvd2VyVHlwZSwgdXBwZXJUeXBlKSk7Ci0gICAgfQotICAgIH5JREJL
ZXlSYW5nZSgpIHsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGxvd2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb3dlcjsgfQotICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdXBwZXI7IH0KLSAgICBib29sIGxvd2VyT3BlbigpIGNvbnN0IHsgcmV0dXJuIG1f
bG93ZXJUeXBlID09IExvd2VyQm91bmRPcGVuOyB9Ci0gICAgYm9vbCB1cHBlck9wZW4oKSBjb25z
dCB7IHJldHVybiBtX3VwcGVyVHlwZSA9PSBVcHBlckJvdW5kT3BlbjsgfQotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG9ubHkoUGFzc1JlZlB0cjxJREJLZXk+IHZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbG93
ZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAg
IHsKLSAgICAgIHJldHVybiBsb3dlckJvdW5kKGJvdW5kLCBmYWxzZSwgZWMpOwotICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbG93ZXJCb3VuZChQYXNzUmVmUHRyPElE
QktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHVwcGVyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5k
LCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0gICAgICByZXR1cm4gdXBwZXJCb3VuZChib3Vu
ZCwgZmFsc2UsIGVjKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHVwcGVyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBib3VuZChQYXNz
UmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgRXhjZXB0aW9u
Q29kZSYgZWMpCi0gICAgewotICAgICAgcmV0dXJuIGJvdW5kKGxvd2VyLCB1cHBlciwgZmFsc2Us
IGZhbHNlLCBlYyk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBi
b3VuZChQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwg
Ym9vbCBsb3dlck9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIHsKLSAgICAgIHJldHVybiBi
b3VuZChsb3dlciwgdXBwZXIsIGxvd2VyT3BlbiwgZmFsc2UsIGVjKTsKLSAgICB9Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dl
ciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9w
ZW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBJREJLZXlSYW5nZShQYXNzUmVm
UHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgTG93ZXJCb3VuZFR5
cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlwZSB1cHBlclR5cGUpOwotCi0gICAgUmVmUHRyPElE
QktleT4gbV9sb3dlcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX3VwcGVyOwotICAgIExvd2VyQm91
bmRUeXBlIG1fbG93ZXJUeXBlOwotICAgIFVwcGVyQm91bmRUeXBlIG1fdXBwZXJUeXBlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQktleVJh
bmdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQotICAg
IF0gSURCS2V5UmFuZ2UgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IGxvd2Vy
OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHVwcGVyOwotICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsb3dlck9wZW47Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIHVwcGVyT3BlbjsKLQotICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2Ugb25s
eShpbiBJREJLZXkgdmFsdWUpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKLSAgICAgICAgc3RhdGljIElEQktleVJhbmdlIGxvd2VyQm91bmQoaW4gSURCS2V5IGJv
dW5kLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gb3BlbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURC
RGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgdXBwZXJCb3Vu
ZChpbiBJREJLZXkgYm91bmQsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBvcGVuKQotICAgICAgICAg
ICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHN0YXRpYyBJREJLZXlS
YW5nZSBib3VuZChpbiBJREJLZXkgbG93ZXIsIGluIElEQktleSB1cHBlciwgaW4gW09wdGlvbmFs
XSBib29sZWFuIGxvd2VyT3BlbiwgaW4gW09wdGlvbmFsXSBib29sZWFuIHVwcGVyT3BlbikKLSAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgIH07Ci0KLX0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTMwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0K
LSNpbmNsdWRlICJBc3NlcnRpb25zLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1
ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0j
aW5jbHVkZSAiSURCTGV2ZWxEQkNvZGluZy5oIgotI2luY2x1ZGUgIkxldmVsREJDb21wYXJhdG9y
LmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQlRyYW5z
YWN0aW9uLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi11c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZzsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rp
b24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCi17Ci0g
ICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZEludCA9IGRlY29kZUludChyZXN1bHQu
YmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIHB1dEludChEQk9yVHJhbnNh
Y3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gZGItPnB1dChrZXksIGVuY29kZUludCh2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgZ2V0U3RyaW5nKERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBTdHJpbmcmIGZvdW5kU3RyaW5n
KQotewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVz
dWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRTdHJpbmcgPSBkZWNvZGVT
dHJpbmcocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBwdXRT
dHJpbmcoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+IGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAoIWRiLT5wdXQoa2V5LCBlbmNvZGVTdHJpbmcodmFs
dWUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgaW50IGNvbXBhcmVLZXlzKGNvbnN0IExldmVsREJTbGljZSYgYSwgY29uc3QgTGV2ZWxEQlNs
aWNlJiBiKQotewotICAgIHJldHVybiBjb21wYXJlKGEsIGIpOwotfQotCi1zdGF0aWMgaW50IGNv
bXBhcmVJbmRleEtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2Um
IGIpCi17Ci0gICAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgdHJ1ZSk7Ci19Ci0KLWNsYXNzIENvbXBh
cmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkNvbXBhcmF0b3IgewotcHVibGljOgotICAgIHZpcnR1YWwg
aW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIp
IGNvbnN0IHsgcmV0dXJuIElEQkxldmVsREJDb2Rpbmc6OmNvbXBhcmUoYSwgYik7IH0KLSAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiAiaWRiX2NtcDEiOyB9Ci19
OwotCi1zdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIpCi17Ci0g
ICAgY29uc3QgVmVjdG9yPGNoYXI+IG1ldGFEYXRhS2V5ID0gU2NoZW1hVmVyc2lvbktleTo6ZW5j
b2RlKCk7Ci0KLSAgICBpbnQ2NF90IHNjaGVtYVZlcnNpb24gPSAwOwotICAgIGlmICghZ2V0SW50
KGRiLCBtZXRhRGF0YUtleSwgc2NoZW1hVmVyc2lvbikpIHsKLSAgICAgICAgc2NoZW1hVmVyc2lv
biA9IDA7Ci0gICAgICAgIGlmICghcHV0SW50KGRiLCBtZXRhRGF0YUtleSwgc2NoZW1hVmVyc2lv
bikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2
ZW50dWFsbHksIHdlJ2xsIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFuc2l0aW9uIGJldHdlZW4gc2No
ZW1hcy4KLSAgICBpZiAoc2NoZW1hVmVyc2lvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBE
b24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGlzIHZlcnNpb24uCi0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwg
UGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fZGIoZGIpCi17Ci0gICAg
bV9mYWN0b3J5LT5hZGRJREJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgdGhpcyk7Ci19Ci0KLUlE
QkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2luZ1N0b3JlKCkKLXsKLSAgICBt
X2ZhY3RvcnktPnJlbW92ZUlEQkJhY2tpbmdTdG9yZShtX2lkZW50aWZpZXIpOwotCi0gICAgLy8g
bV9kYidzIGRlc3RydWN0b3IgdXNlcyBtX2NvbXBhcmF0b3IuIFRoZSBvcmRlciBvZiBkZXN0cnVj
dGlvbiBpcyBpbXBvcnRhbnQuCi0gICAgbV9kYi5jbGVhcigpOwotICAgIG1fY29tcGFyYXRvci5j
bGVhcigpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW1wbCogZmFjdG9yeSkKLXsKLSAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFy
ZzsKLQotICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFyYXRvciA9IGFkb3B0UHRy
KG5ldyBDb21wYXJhdG9yKCkpOwotICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiOwotCi0g
ICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6
Om9wZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYg
KCFtYWtlQWxsRGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjcmVhdGUgSW5kZXhlZERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4oKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFs
bHkgdXNlIHRoZSBzYW1lIExldmVsREIgZGF0YWJhc2UgZm9yIGFsbCBvcmlnaW5zLgotICAgICAg
ICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJp
dHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwot
Ci0gICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0
KCkpOwotICAgIH0KLQotICAgIGlmICghZGIpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4oKTsKLQotICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tcGFyYXRvciBuYW1l
IGNoYW5nZXMuCi0KLSAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlKGFkb3B0UmVmKG5ldyBJREJMZXZlbERCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBm
YWN0b3J5LCBkYi5yZWxlYXNlKCkpKSk7Ci0gICAgYmFja2luZ1N0b3JlLT5tX2NvbXBhcmF0b3Ig
PSBjb21wYXJhdG9yLnJlbGVhc2UoKTsKLQotICAgIGlmICghc2V0VXBNZXRhZGF0YShiYWNraW5n
U3RvcmUtPm1fZGIuZ2V0KCkpKQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+KCk7Ci0KLSAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFi
YXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7Ci0gICAgY29u
c3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlG
b3JPcmlnaW4obV9pZGVudGlmaWVyKTsKLQotICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHko
KSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJh
dG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29t
cGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAg
Y29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBjaGFyICps
aW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBEYXRhYmFzZU5hbWVLZXkgZGF0YWJh
c2VOYW1lS2V5OwotICAgICAgICBwID0gRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUocCwgbGltaXQs
ICZkYXRhYmFzZU5hbWVLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0KLSAgICAgICAgZm91bmRO
YW1lcy5hcHBlbmQoZGF0YWJhc2VOYW1lS2V5LmRhdGFiYXNlTmFtZSgpKTsKLSAgICB9Ci19Ci0K
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQot
ewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZSht
X2lkZW50aWZpZXIsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9IGdldEludChtX2RiLmdldCgpLCBr
ZXksIGZvdW5kSWQpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShm
b3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pLCBmb3VuZFZlcnNpb24p
OwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSog
ZGIpCi17Ci0gICAgaW50NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQo
ZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkKSkKLSAgICAgICAg
bWF4RGF0YWJhc2VJZCA9IDA7Ci0KLSAgICBBU1NFUlQobWF4RGF0YWJhc2VJZCA+PSAwKTsKLQot
ICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IG1heERhdGFiYXNlSWQgKyAxOwotICAgIGlmICghcHV0
SW50KGRiLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0YWJhc2VJZCkpCi0gICAgICAg
IHJldHVybiAtMTsKLQotICAgIHJldHVybiBkYXRhYmFzZUlkOwotfQotCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkKQotewotICAgIHJvd0lk
ID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpKTsKLSAgICBpZiAocm93SWQgPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJh
c2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKLSAgICBpZiAoIXB1dEludCht
X2RiLmdldCgpLCBrZXksIHJvd0lkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
cHV0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSwgdmVyc2lvbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAg
IGlmICghcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lvbiks
IHZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQpCi17
Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKLSAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBjb21w
YXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICgh
dHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICht
X2N1cnJlbnRUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRy
PElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7Ci0gICAgdHJhbnNh
Y3Rpb24tPmJlZ2luKCk7Ci0KLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7Ci0gICAgU3RyaW5nIHZl
cnNpb247Ci0gICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNpb24sIGRh
dGFiYXNlSWQpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBE
YXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6a09yaWdpbk5hbWUpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQgKyAxLCBEYXRhYmFzZU1ldGFEYXRhS2V5
OjprT3JpZ2luTmFtZSk7Ci0gICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9y
PGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7
Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXkpOwotCi0gICAgdHJhbnNhY3Rp
b24tPmNvbW1pdCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja09i
amVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0
IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1l
dGFEYXRhVHlwZSkKLXsKLSAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMoaXQt
PmtleSgpLCBzdG9wS2V5KSA+PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OwotICAgIGNvbnN0IGNoYXIqIHAgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUoaXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5l
bmQoKSwgJm1ldGFEYXRhS2V5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHAsIHApOwotICAgIGlmICht
ZXRhRGF0YUtleS5vYmplY3RTdG9yZUlkKCkgIT0gb2JqZWN0U3RvcmVJZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBtZXRhRGF0
YVR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1l
cywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRv
SW5jcmVtZW50RmxhZ3MpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIDEsIDApOwotICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGRhdGFiYXNlSWQpOwotCi0gICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRLZXlQYXRocy5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5pc0VtcHR5KCkp
OwotCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRv
cigpOwotICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKLSAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAm
JiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewotICAgICAgICBjb25zdCBj
aGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0g
aXQtPmtleSgpLmVuZCgpOwotCi0gICAgICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgbWV0YURh
dGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGlt
aXQsICZtZXRhRGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgaWYgKG1ldGFE
YXRhS2V5Lm1ldGFEYXRhVHlwZSgpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtZXRhRGF0YUtleS5vYmplY3RTdG9yZUlk
KCk7Ci0gICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZh
bHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7
Ci0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwg
c3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgMSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBTdHJpbmcga2V5UGF0aCA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdp
bigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0gICAgICAgIGJvb2wgaGFzS2V5UGF0aCA9IHRydWU7
Ci0KLSAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5k
TWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAyKSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2Rl
Y29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgotICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSAq
aXQtPnZhbHVlKCkuYmVnaW4oKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBJcyBldmljYXRi
bGUuCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQo
KSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgMykpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIExhc3QgdmVyc2lvbi4KLSAgICAgICAgaWYg
KCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmpl
Y3RTdG9yZUlkLCA0KSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aXQtPm5leHQoKTsgLy8gTWF4aXVtIGluZGV4IGlkIGFsbG9jYXRlZC4KLSAgICAgICAgaWYgKCFj
aGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RT
dG9yZUlkLCA1KSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaXQt
Pm5leHQoKTsgLy8gW29wdGlvbmFsXSBoYXMga2V5IHBhdGggKGlzIG5vdCBudWxsKQotICAgICAg
ICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwg
b2JqZWN0U3RvcmVJZCwgNikpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2Rl
Y29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgotICAgICAgICAgICAgaGFzS2V5UGF0aCA9ICppdC0+
dmFsdWUoKS5iZWdpbigpOwotICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRoICYmICFrZXlQYXRo
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm91bmRJZHMuYXBw
ZW5kKG9iamVjdFN0b3JlSWQpOwotICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChvYmplY3RTdG9y
ZU5hbWUpOwotICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChoYXNLZXlQYXRoID8ga2V5UGF0
aCA6IFN0cmluZygpKTsKLSAgICAgICAgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MuYXBwZW5kKGF1
dG9JbmNyZW1lbnQpOwotICAgIH0KLX0KLQotc3RhdGljIGludDY0X3QgZ2V0TmV3T2JqZWN0U3Rv
cmVJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQp
Ci17Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gLTE7Ci0gICAgY29uc3QgVmVjdG9y
PGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a01heE9iamVjdFN0b3JlSWQpOwotICAg
IGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RT
dG9yZUlkKSkKLSAgICAgICAgbWF4T2JqZWN0U3RvcmVJZCA9IDA7Ci0KLSAgICBBU1NFUlQobWF4
T2JqZWN0U3RvcmVJZCA+PSAwKTsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1heE9i
amVjdFN0b3JlSWQgKyAxOwotICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RT
dG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcmV0
dXJuIG9iamVjdFN0b3JlSWQ7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25l
ZE9iamVjdFN0b3JlSWQpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKLSAgICBpZiAob2JqZWN0U3RvcmVJZCA8IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5
ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDApOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDEpOwotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBhdXRvSW5jcmVtZW50S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDIpOwotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBldmljdGFibGVLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMyk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGxhc3RW
ZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIDQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0g
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IDUpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBoYXNLZXlQYXRoS2V5ICA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA2KTsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkgPSBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgbmFtZSk7Ci0KLSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBldmljdGFibGVLZXksIGZhbHNlKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBsYXN0VmVyc2lvbktleSwgMSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbWF4SW5k
ZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19F
UlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBo
YXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7Ci0gICAgaWYgKCFvaykgewotICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgYXNzaWduZWRPYmplY3RTdG9yZUlkID0gb2JqZWN0U3RvcmVJ
ZDsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0KLSAgICBTdHJpbmcg
b2JqZWN0U3RvcmVOYW1lOwotICAgIGdldFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDApLCBvYmplY3RTdG9yZU5hbWUpOwotCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVN
YXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQotICAgICAgICByZXR1cm47IC8vIEZJ
WE1FOiBSZXBvcnQgZXJyb3IuCi0KLSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKE9i
amVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsK
LQotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4
RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgSW5kZXhG
cmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAgIGlmICghZGVsZXRlUmFu
Z2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
TWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKLSAgICAgICAgcmV0dXJuOyAvLyBG
SVhNRTogUmVwb3J0IGVycm9yLgotCi0gICAgY2xlYXJPYmplY3RTdG9yZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkKTsKLX0KLQotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50VHJh
bnNhY3Rpb24pOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5
LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaW50NjRfdCB2ZXJzaW9u
OwotICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVu
ZCgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICAodm9pZCkgdmVyc2lvbjsKLQotICAgIHJldHVybiBkZWNvZGVTdHJpbmcocCwgZGF0YS5lbmQo
KSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jbGFzcyBMZXZlbERCUmVjb3JkSWRlbnRpZmllciA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyByZXR1
cm4gYWRvcHRSZWYobmV3IExldmVsREJSZWNvcmRJZGVudGlmaWVyKHByaW1hcnlLZXksIHZlcnNp
b24pKTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSk7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5
S2V5LmlzRW1wdHkoKTsgfQotICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5S2V5KGNvbnN0IFZlY3Rv
cjxjaGFyPiYgcHJpbWFyeUtleSkgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyB9Ci0gICAg
aW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgdm9pZCBz
ZXRWZXJzaW9uKGludDY0X3QgdmVyc2lvbikgeyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBw
cmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkpLCBt
X3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQotICAg
IExldmVsREJSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0x
KSB7fQotCi0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQg
bW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXku
Ci0gICAgaW50NjRfdCBtX3ZlcnNpb247Ci19OwotfQotCi1zdGF0aWMgaW50NjRfdCBnZXROZXdW
ZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKLQotICAgIGludDY0X3QgbGFzdFZlcnNpb24gPSAtMTsK
LSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9u
KSkKLSAgICAgICAgbGFzdFZlcnNpb24gPSAwOwotCi0gICAgQVNTRVJUKGxhc3RWZXJzaW9uID49
IDApOwotCi0gICAgaW50NjRfdCB2ZXJzaW9uID0gbGFzdFZlcnNpb24gKyAxOwotICAgIGJvb2wg
b2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsKLSAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBBU1NFUlQodmVyc2lvbiA+IGxhc3RWZXJzaW9u
KTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRvIGhhbmRsZSB0aGUgb3ZlcmZs
b3cgc2NlbmFyaW8uCi0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0KLQotYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKLXsKLSAg
ICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGludDY0X3QgdmVyc2lvbiA9IGdl
dE5ld1ZlcnNpb25OdW1iZXIobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBrZXkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHY7Ci0gICAgdi5hcHBlbmQoZW5jb2RlVmFySW50
KHZlcnNpb24pKTsKLSAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKLQotICAgIGlm
ICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlL
ZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtl
eSk7Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBl
bmNvZGVJbnQodmVyc2lvbikpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMZXZlbERC
UmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBs
ZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5
ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLmVuY29kZSgpOwotICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQgKyAxLCAwKS5lbmNvZGUoKTsKLQotICAgIGRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4g
TGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQotCi12b2lkIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
LSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElk
ZW50aWZpZXIpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fY3VycmVudFRyYW5z
YWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKLQotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0g
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7Ci19Ci0KLWRv
dWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9i
amVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklE
QktleSgpKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKLQot
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNy
ZWF0ZUl0ZXJhdG9yKCk7Ci0KLSAgICBpbnQgbWF4TnVtZXJpY0tleSA9IDA7Ci0KLSAgICAvLyBG
SVhNRTogQmUgbW9yZSBlZmZpY2llbnQ6IHNlZWsgdG8gc29tZXRoaW5nIGFmdGVyIHRoZSBvYmpl
Y3Qgc3RvcmUgZGF0YSwgdGhlbiByZXZlcnNlLgotCi0gICAgZm9yIChpdC0+c2VlayhzdGFydEtl
eSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7
IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigp
OwotICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAg
ICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLQot
ICAgICAgICBpZiAoZGF0YUtleS51c2VyS2V5KCktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKLSAgICAgICAgICAgIGludDY0X3QgbiA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGRhdGFL
ZXkudXNlcktleSgpLT5udW1iZXIoKSk7Ci0gICAgICAgICAgICBpZiAobiA+IG1heE51bWVyaWNL
ZXkpCi0gICAgICAgICAgICAgICAgbWF4TnVtZXJpY0tleSA9IG47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gbWF4TnVtZXJpY0tleSArIDE7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwot
ICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+
Z2V0KGxldmVsZGJLZXksIGRhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQ2
NF90IHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVu
ZCgpLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGV2ZWxEQlJlY29y
ZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxE
QlJlY29yZElkZW50aWZpZXIqPihmb3VuZFJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBs
ZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRU
cmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3Rv
cmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkp
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwotCi0gICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKLSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAg
ICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIg
KmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwotICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0
YUtleTsKLSAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAm
ZGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLQotICAgICAgICBSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5ID0gZGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICAgICAgaW50NjRfdCB2ZXJzaW9u
OwotICAgICAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKLSAgICAgICAgaWYgKCFxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRp
Zmllcj4gcmkgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgq
cHJpbWFyeUtleSksIHZlcnNpb24pOwotICAgICAgICBTdHJpbmcgaWRiVmFsdWUgPSBkZWNvZGVT
dHJpbmcocSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotCi0gICAgICAgIGlmICghY2FsbGJhY2suY2Fs
bGJhY2socmkuZ2V0KCksIGlkYlZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY2hlY2tJbmRleEFuZE1l
dGFEYXRhS2V5KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
c3RvcEtleSwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSkKLXsK
LSAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5
KSA+PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbmRleE1ldGFEYXRhS2V5IG1l
dGFEYXRhS2V5OwotICAgIGNvbnN0IGNoYXIqIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUo
aXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5lbmQoKSwgJm1ldGFEYXRhS2V5KTsKLSAgICBB
U1NFUlRfVU5VU0VEKHAsIHApOwotICAgIGlmIChtZXRhRGF0YUtleS5pbmRleElkKCkgIT0gaW5k
ZXhJZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0
YVR5cGUoKSAhPSBtZXRhRGF0YVR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90
PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYg
Zm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9v
bD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFy
dEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAwLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEluZGV4TWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCwgMCk7Ci0KLSAgICBB
U1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVChmb3VuZEtleVBhdGhzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZv
dW5kVW5pcXVlRmxhZ3MuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRNdWx0aUVudHJ5Rmxh
Z3MuaXNFbXB0eSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+
Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+c2VlayhzdGFydEtleSk7Ci0gICAgd2hpbGUgKGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDApIHsKLSAg
ICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBj
aGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBJbmRleE1ldGFEYXRhS2V5
IG1ldGFEYXRhS2V5OwotICAgICAgICBwID0gSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2RlKHAsIGxp
bWl0LCAmbWV0YURhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0KLSAgICAgICAgaW50NjRf
dCBpbmRleElkID0gbWV0YURhdGFLZXkuaW5kZXhJZCgpOwotICAgICAgICBBU1NFUlQoIW1ldGFE
YXRhS2V5Lm1ldGFEYXRhVHlwZSgpKTsKLQotICAgICAgICBTdHJpbmcgaW5kZXhOYW1lID0gZGVj
b2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAg
ICAgICBpdC0+bmV4dCgpOyAvLyB1bmlxdWUgZmxhZwotICAgICAgICBpZiAoIWNoZWNrSW5kZXhB
bmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgMSkpIHsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogQWRkIGVuY29kZS9kZWNvZGUg
ZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAgYm9vbCBpbmRleFVuaXF1ZSA9ICppdC0+dmFs
dWUoKS5iZWdpbigpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIGtleVBhdGgKLSAgICAgICAg
aWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQs
IDIpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGtleVBh
dGggPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkp
OwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIFtvcHRpb25hbF0gbXVsdGlFbnRyeSBmbGFnCi0g
ICAgICAgIGJvb2wgaW5kZXhNdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChjaGVja0lu
ZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQsIDMpKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogQWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4K
LSAgICAgICAgICAgIGluZGV4TXVsdGlFbnRyeSA9ICppdC0+dmFsdWUoKS5iZWdpbigpOwotICAg
ICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kSWRzLmFwcGVu
ZChpbmRleElkKTsKLSAgICAgICAgZm91bmROYW1lcy5hcHBlbmQoaW5kZXhOYW1lKTsKLSAgICAg
ICAgZm91bmRLZXlQYXRocy5hcHBlbmQoa2V5UGF0aCk7Ci0gICAgICAgIGZvdW5kVW5pcXVlRmxh
Z3MuYXBwZW5kKGluZGV4VW5pcXVlKTsKLSAgICAgICAgZm91bmRNdWx0aUVudHJ5RmxhZ3MuYXBw
ZW5kKGluZGV4TXVsdGlFbnRyeSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50NjRfdCBnZXROZXdJ
bmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IC0x
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDUpOwotICAgIGlmICgh
Z2V0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBtYXhJbmRleElkKSkKLSAgICAgICAg
bWF4SW5kZXhJZCA9IGtNaW5pbXVtSW5kZXhJZDsKLQotICAgIEFTU0VSVChtYXhJbmRleElkID49
IDApOwotCi0gICAgaW50NjRfdCBpbmRleElkID0gbWF4SW5kZXhJZCArIDE7Ci0gICAgaWYgKCFw
dXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIGluZGV4SWQpKQotICAgICAgICByZXR1
cm4gLTE7Ci0KLSAgICByZXR1cm4gaW5kZXhJZDsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKQotewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW5kZXhJZCA9IGdldE5ld0luZGV4SWQobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwotICAg
IGlmIChpbmRleElkIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHVuaXF1
ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9IEluZGV4
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAy
KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbXVsdGlFbnRyeUtleSA9IEluZGV4TWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAzKTsKLQotICAg
IGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXks
IG5hbWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sg
PSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHVuaXF1ZUtleSwgaXNVbmlxdWUp
OwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRT
dHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVy
cm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlLZXksIGlzTXVsdGlFbnRyeSk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewot
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gdW5pcXVlS2V5ID0g
SW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIDEpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDIpOwotCi0g
ICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG5hbWVLZXkpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUodW5pcXVlS2V5
KSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVt
b3ZlKGtleVBhdGhLZXkpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBpbmRleERhdGFTdGFydCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRl
eERhdGFFbmQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkKTsKLQotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogcmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoaW5kZXhJZCA+PSBrTWluaW11
bUluZGV4SWQpOwotICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVj
b3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVy
Kj4ocmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkoa2V5
KSwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0KLSAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChlbmNvZGVWYXJJbnQobGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnZlcnNpb24oKSkpOwotICAgIGRhdGEuYXBwZW5kKGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyLT5wcmltYXJ5S2V5KCkpOwotCi0gICAgcmV0dXJuIG1fY3VycmVudFRyYW5zYWN0aW9u
LT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKLX0KLQotc3RhdGljIGJvb2wgZmluZEdyZWF0ZXN0
S2V5TGVzc1RoYW5PckVxdWFsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0
IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hhcj4mIGZvdW5kS2V5KQotewotICAgIE93
blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7
Ci0gICAgaXQtPnNlZWsodGFyZ2V0KTsKLQotICAgIGlmICghaXQtPmlzVmFsaWQoKSkgewotICAg
ICAgICBpdC0+c2Vla1RvTGFzdCgpOwotICAgICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKGNvbXBhcmVJbmRleEtl
eXMoaXQtPmtleSgpLCB0YXJnZXQpID4gMCkgewotICAgICAgICBpdC0+cHJldigpOwotICAgICAg
ICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgZG8gewotICAgICAgICBmb3VuZEtleS5jbGVhcigpOwotICAgICAgICBmb3VuZEtleS5h
cHBlbmQoaXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5lbmQoKSAtIGl0LT5rZXkoKS5iZWdp
bigpKTsKLQotICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc2V2ZXJhbCBpbmRleCBrZXlzIHRoYXQg
Y29tcGFyZSBlcXVhbC4gV2Ugd2FudCB0aGUgbGFzdCBvbmUuCi0gICAgICAgIGl0LT5uZXh0KCk7
Ci0gICAgfSB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiAhY29tcGFyZUluZGV4S2V5cyhpdC0+a2V5
KCksIHRhcmdldCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QsIGludDY0X3QsIGlu
dDY0X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEg
dGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3Ry
aW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYga2V5KQotewotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5
S2V5VmlhSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKLSAg
ICBpZiAoIXByaW1hcnlLZXkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVy
biBnZXRPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFy
eUtleSk7Ci19Ci0KLXN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgdmVyc2lvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkK
LXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVkUHJpbWFyeUtleSk7Ci0gICAgVmVjdG9y
PGNoYXI+IGRhdGE7Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5nZXQoa2V5LCBkYXRhKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCkpID09IHZlcnNpb247Ci19Ci0KLXN0YXRpYyBib29sIGZpbmRLZXlJbkluZGV4
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBW
ZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCi17Ci0gICAgQVNTRVJUKGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
ZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwotCi0g
ICAgZm9yICg7OykgewotICAgICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgbGV2
ZWxkYktleSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGludDY0
X3QgdmVyc2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgICAgIGlmICgh
cCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFy
eUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKLQotICAgICAgICBpZiAoIXZl
cnNpb25FeGlzdHModHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNp
b24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7Ci0gICAgICAgICAgICAvLyBEZWxldGUgc3Rh
bGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0gICAgICAgICAgICB0cmFuc2FjdGlv
bi0+cmVtb3ZlKGl0LT5rZXkoKSk7Ci0gICAgICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5
S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKLQotICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5
OwotICAgIGlmIChmaW5kS2V5SW5JbmRleChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5KSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgICAgICBkZWNv
ZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5LmVuZCgpLCBwcmltYXJ5S2V5KTsKLSAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkucmVs
ZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVm
UHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJh
bnNhY3Rpb24pOwotCi0gICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0g
ICAgaWYgKCFmaW5kS2V5SW5JbmRleChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkZWNvZGVJREJLZXkoZm91bmRF
bmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBm
b3VuZFByaW1hcnlLZXkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1uYW1lc3BhY2UgewotCi1z
dHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7Ci0gICAgVmVjdG9yPGNoYXI+IGxvd0tleTsKLSAgICBib29s
IGxvd09wZW47Ci0gICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7Ci0gICAgYm9vbCBoaWdoT3BlbjsK
LSAgICBib29sIGZvcndhcmQ7Ci0gICAgYm9vbCB1bmlxdWU7Ci19OwotCi1jbGFzcyBDdXJzb3JJ
bXBsQ29tbW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKLXB1YmxpYzoKLSAg
ICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1
bmN0aW9uKGNvbnN0IElEQktleSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cigpID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsb3NlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3co
KSA9IDA7Ci0gICAgYm9vbCBmaXJzdFNlZWsoKTsKLQotcHJvdGVjdGVkOgotICAgIEN1cnNvcklt
cGxDb21tb24oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICB9
Ci0KLSAgICBDdXJzb3JJbXBsQ29tbW9uKGNvbnN0IEN1cnNvckltcGxDb21tb24qIG90aGVyKQot
ICAgICAgICA6IG1fdHJhbnNhY3Rpb24ob3RoZXItPm1fdHJhbnNhY3Rpb24pCi0gICAgICAgICwg
bV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCi0gICAgICAgICwgbV9jdXJy
ZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkpCi0gICAgewotICAgICAgICBpZiAob3RoZXItPm1f
aXRlcmF0b3IpIHsKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwotCi0gICAgICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3ItPmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnNlZWsob3RoZXItPm1faXRlcmF0
b3ItPmtleSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9pdGVyYXRvci0+aXNWYWxpZCgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgfkN1cnNv
ckltcGxDb21tb24oKSB7fQotCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9u
OwotICAgIEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwotICAgIE93blB0cjxMZXZlbERC
SXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5Owot
fTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQotewotICAgIG1faXRlcmF0
b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotCi0gICAgaWYgKG1fY3Vyc29y
T3B0aW9ucy5mb3J3YXJkKQotICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1fY3Vyc29yT3B0aW9u
cy5sb3dLZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pdGVyYXRvci0+c2VlayhtX2N1cnNvck9w
dGlvbnMuaGlnaEtleSk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmICghbV9pdGVyYXRv
ci0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICht
X2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29t
cGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkp
ID49IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX2N1cnNvck9w
dGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRl
eEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+IDApCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZv
cndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0
ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPD0gMCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAh
bV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5r
ZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9w
dGlvbnMubG93T3BlbikgewotICAgICAgICAgICAgLy8gbG93S2V5IG5vdCBpbmNsdWRlZCBpbiB0
aGUgcmFuZ2UuCi0gICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5r
ZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPD0gMCkgewotICAgICAgICAgICAgICAgIG1f
aXRlcmF0b3ItPm5leHQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1f
Y3Vyc29yT3B0aW9ucy5oaWdoT3BlbikgewotICAgICAgICAgICAgLy8gaGlnaEtleSBub3QgaW5j
bHVkZWQgaW4gdGhlIHJhbmdlLgotICAgICAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMobV9p
dGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsb2FkQ3VycmVudFJvdygp
KSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCi0gICAgICAgICAg
ICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1faXRlcmF0b3ItPnByZXYoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIEN1cnNvckltcGxDb21t
b246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgc2hhcmVzIGEgbG90IG9mIGNvZGUgd2l0aCBmaXJzdFNlZWsuCi0gICAgUmVmUHRyPElE
QktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgICAgIG1faXRlcmF0b3It
Pm5leHQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOwot
Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxjaGFyPiB0cmFzaDsKLSAgICAgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNoKSkKLSAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJz
b3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCks
IG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+PSAwKSAvLyBoaWdoIGtleSBub3QgaW5jbHVkZWQg
aW4gcmFuZ2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fY3Vyc29y
T3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUlu
ZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID4gMCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2N1cnNvck9wdGlvbnMu
Zm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1f
aXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKSAvLyBsb3cga2V5
IG5vdCBpbmNsdWRlZCBpbiByYW5nZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMubG93T3Bl
biAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMu
bG93S2V5KSA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFs
b2FkQ3VycmVudFJvdygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGtl
eSkgewotICAgICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEtleS0+aXNMZXNzVGhhbihrZXkpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGtleS0+aXNMZXNzVGhhbihtX2N1cnJlbnRLZXkuZ2V0KCkpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
X2N1cnNvck9wdGlvbnMudW5pcXVlICYmIG1fY3VycmVudEtleS0+aXNFcXVhbChwcmV2aW91c0tl
eS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDog
cHVibGljIEN1cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykpOwotICAgIH0KLQotICAgIC8vIEN1cnNv
ckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVu
dFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSBPVkVS
UklERQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKLSAgICB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKLQotcHJpdmF0ZToKLSAg
ICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICB9Ci0KLSAgICBP
YmplY3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKiBvdGhlcikK
LSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQotICAgICAgICAsIG1fY3VycmVudFZh
bHVlKG90aGVyLT5tX2N1cnJlbnRWYWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1f
Y3VycmVudFZhbHVlOwotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVu
dGlmaWVyOwotfTsKLQotYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93
KCkKLXsKLSAgICBjb25zdCBjaGFyKiBwID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKLSAg
ICBjb25zdCBjaGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgpOwotCi0gICAg
T2JqZWN0U3RvcmVEYXRhS2V5IG9iamVjdFN0b3JlRGF0YUtleTsKLSAgICBwID0gT2JqZWN0U3Rv
cmVEYXRhS2V5OjpkZWNvZGUocCwga2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwotICAg
IEFTU0VSVChwKTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
Y3VycmVudEtleSA9IG9iamVjdFN0b3JlRGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICBpbnQ2NF90
IHZlcnNpb247Ci0gICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52
YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAg
IEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9w
dGltaXplLgotICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKLQotICAgIG1fY3VycmVu
dFZhbHVlID0gZGVjb2RlU3RyaW5nKHEsIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBD
dXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtl
eUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25z
dCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlD
dXJzb3JJbXBsKHRoaXMpKTsKLSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyBy
ZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
aW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7Ci0KLXByaXZhdGU6Ci0gICAgSW5k
ZXhLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1
cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0
cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0gICAgSW5kZXhLZXlD
dXJzb3JJbXBsKGNvbnN0IEluZGV4S2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vy
c29ySW1wbENvbW1vbihvdGhlcikKLSAgICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJp
bWFyeUtleSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5
OwotfTsKLQotYm9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKLXsKLSAg
ICBjb25zdCBjaGFyKiBwID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKLSAgICBjb25zdCBj
aGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgpOwotICAgIEluZGV4RGF0YUtl
eSBpbmRleERhdGFLZXk7Ci0gICAgcCA9IEluZGV4RGF0YUtleTo6ZGVjb2RlKHAsIGtleUxpbWl0
LCAmaW5kZXhEYXRhS2V5KTsKLQotICAgIG1fY3VycmVudEtleSA9IGluZGV4RGF0YUtleS51c2Vy
S2V5KCk7Ci0KLSAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247Ci0gICAgY29uc3QgY2hhciog
cSA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3It
PnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24pOwotICAgIEFTU0VSVChxKTsKLSAgICBp
ZiAoIXEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHEgPSBkZWNvZGVJREJLZXkocSwg
bV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5KTsKLSAgICBBU1NFUlQocSk7
Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
cHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFL
ZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5
S2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9u
LT5nZXQocHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiB0
ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3Jl
RGF0YVZlcnNpb24pOwotICAgIEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZl
cnNpb24pIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1jbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBs
KHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0aGlzKSk7Ci0gICAgfQotCi0gICAg
Ly8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4g
bV92YWx1ZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7
IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVh
bCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7
IH0KLSAgICBib29sIGxvYWRDdXJyZW50Um93KCk7Ci0KLXByaXZhdGU6Ci0gICAgSW5kZXhDdXJz
b3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0gICAgSW5kZXhDdXJzb3JJbXBsKGNv
bnN0IEluZGV4Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihv
dGhlcikKLSAgICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKLSAgICAg
ICAgLCBtX3ZhbHVlKG90aGVyLT5tX3ZhbHVlKQotICAgICAgICAsIG1fcHJpbWFyeUxldmVsREJL
ZXkob3RoZXItPm1fcHJpbWFyeUxldmVsREJLZXkpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBWZWN0b3I8
Y2hhcj4gbV9wcmltYXJ5TGV2ZWxEQktleTsKLX07Ci0KLWJvb2wgSW5kZXhDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciAqcCA9IG1faXRlcmF0b3ItPmtleSgp
LmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciAqbGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQo
KTsKLQotICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXk7Ci0gICAgcCA9IEluZGV4RGF0YUtl
eTo6ZGVjb2RlKHAsIGxpbWl0LCAmaW5kZXhEYXRhS2V5KTsKLQotICAgIG1fY3VycmVudEtleSA9
IGluZGV4RGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICBjb25zdCBjaGFyICpxID0gbV9pdGVyYXRv
ci0+dmFsdWUoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIgKnZhbHVlTGltaXQgPSBtX2l0ZXJh
dG9yLT52YWx1ZSgpLmVuZCgpOwotCi0gICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwotICAg
IHEgPSBkZWNvZGVWYXJJbnQocSwgdmFsdWVMaW1pdCwgaW5kZXhEYXRhVmVyc2lvbik7Ci0gICAg
QVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHEgPSBk
ZWNvZGVJREJLZXkocSwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsKLSAgICBBU1NFUlQocSk7
Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3ByaW1hcnlMZXZl
bERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNl
SWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KG1fcHJp
bWFyeUxldmVsREJLZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2Rl
VmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNp
b24pOwotICAgIEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fdmFsdWUgPSBkZWNvZGVTdHJpbmcodCwg
cmVzdWx0LmVuZCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi1QYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQot
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBj
dXJzb3JPcHRpb25zOwotCi0gICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxv
d2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0g
ICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRf
Tk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGN1cnNv
ck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElD
QVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFKTsKLQotICAg
IGlmICghbG93ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktl
eSgpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gdHJ1ZTsgLy8gTm90IGluY2x1
ZGVkLgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgKnJhbmdlLT5s
b3dlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3Bl
bigpOwotICAgIH0KLQotICAgIGlmICghdXBwZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRp
b25zLmhpZ2hLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuZm9y
d2FyZCkKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSB0cnVlOyAvLyBOb3Qg
aW5jbHVkZWQuCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCBhIGtleSB0
aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVx
dWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1
cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAg
ICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0gICAg
ICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7Ci0gICAgICAgICAgICAvLyBGb3IgcmV2
ZXJzZSBjdXJzb3JzLCB3ZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgVmVj
dG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5
TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25z
LmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1
dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0Lgot
ICAgICAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5
cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQotICAgICAgICAgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLQotICAgICAgICAgICAgY3Vyc29y
T3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
UmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwot
ICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQot
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBj
dXJzb3JPcHRpb25zOwotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dl
cigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwotICAg
IGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05P
X0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKLSAgICBjdXJzb3JP
cHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FU
RSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7Ci0KLSAgICBp
ZiAoIWxvd2VyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsK
LSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigp
KTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOwot
ICAgIH0KLQotICAgIGlmICghdXBwZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhp
Z2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAv
LyBJbmNsdWRlZC4KLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBX
ZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RL
ZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlv
bnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5n
ZS0+dXBwZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBw
ZXJPcGVuKCk7Ci0KLSAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKLSAgICAgICAg
aWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0
aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KLSAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUg
aW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5j
bHVkZSB0aGF0LgotICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJl
SW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCi0gICAg
ICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0KLSAgICAgICAgY3Vyc29y
T3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgIH0KLQotICAgIFJlZlB0cjxJbmRl
eEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKLSAgICBpZiAoIWN1cnNvci0+
Zmlyc3RTZWVrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGN1cnNvci5yZWxl
YXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBi
b29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVy
Qm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLSAgICBjdXJzb3JPcHRpb25zLmZvcndh
cmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0
aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGly
ZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElE
QkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpOwotCi0gICAgaWYgKCFsb3dlckJvdW5kKSB7Ci0g
ICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlv
bnMubG93T3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KLSAgICB9IGVsc2UgewotICAgICAgICBj
dXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+bG93ZXIoKSk7Ci0gICAgICAgIGN1cnNvck9w
dGlvbnMubG93T3BlbiA9IHJhbmdlLT5sb3dlck9wZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoIXVw
cGVyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5
OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0KLSAgICAg
ICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4
aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9w
dGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBj
dXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0gICAgICAg
IFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5
TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25z
LmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhl
IHNldCBvZiBub24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAg
ICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5k
IHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAg
aWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hL
ZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9u
cy5oaWdoT3BlbiA9IGZhbHNlOwotCi0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZv
dW5kSGlnaEtleTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3Ig
PSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vy
c29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0
ZVRyYW5zYWN0aW9uKCkKLXsKLSAgICByZXR1cm4gVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsK
LX0KLQotUGFzc1JlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZShJREJMZXZlbERCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2Fj
dGlvbihiYWNraW5nU3RvcmUpKTsKLX0KLQotSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkK
LSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLXsKLX0KLQotdm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4oKQotewotICAgIEFTU0VSVCghbV9i
YWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+
bV9jdXJyZW50VHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShtX2JhY2tp
bmdTdG9yZS0+bV9kYi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0
aW9uLT5jb21taXQoKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24u
Y2xlYXIoKTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
cm9sbGJhY2soKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNh
Y3Rpb24pOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsK
LX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHBhdGhCYXNlQXJnKQotewotICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJnOwotCi0g
ICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERCIGRhdGFi
YXNlIGZvciBhbGwgb3JpZ2lucy4KLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5pbmRleGVkZGIubGV2ZWxkYiIpOwotCi0gICAgLy8gRklYTUU6IHRoaXMgaXMgY2hlY2tpbmcg
Zm9yIHByZXNlbmNlIG9mIHRoZSBkb21haW4sIG5vdCB0aGUgZGF0YWJhc2UgaXRzZWxmCi0gICAg
cmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJCYWNraW5nU3RvcmVfaAotI2RlZmluZSBJ
REJMZXZlbERCQmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
I2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExldmVsREJD
b21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotY2xhc3MgTGV2ZWxEQlRyYW5zYWN0
aW9uOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwotCi1jbGFzcyBJREJMZXZlbERCQmFj
a2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwotICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7Ci0gICAgdmlydHVhbCBi
b29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRh
YmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRB
dXRvSW5jcmVtZW50RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1
YWwgZG91YmxlIG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIp
OwotCi0gICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFj
ayYpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9y
PGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZs
YWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJ
ZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIHZpcnR1YWwgYm9vbCBw
dXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFs
IFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
Jik7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBp
bmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7Ci0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtl
eUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBi
YWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgcGF0aEJhc2UpOwotCi1wcml2YXRlOgotICAgIElEQkxldmVsREJCYWNraW5n
U3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQ
YXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4pOwotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
LSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7Ci0gICAgT3duUHRy
PExldmVsREJEYXRhYmFzZT4gbV9kYjsKLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1f
Y29tcGFyYXRvcjsKLSAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX2N1cnJlbnRUcmFu
c2FjdGlvbjsKLQotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VHJhbnNhY3Rpb24+IGNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBiZWdpbigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVHJh
bnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAgICAgICBJREJMZXZlbERCQmFj
a2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKLSAgICB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkxldmVsREJCYWNraW5nU3RvcmVfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQktleS5oIgotI2lu
Y2x1ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotLy8gTGV2ZWxEQiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJzLiBLZXlzIGFuZCB2YWx1ZXMg
YXJlIHN0cmluZ3Mgb2YgYnl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUgVmVjdG9yPGNoYXI+LgotLy8K
LS8vIFRoZSBrZXlzIGluIHRoZSBiYWNraW5nIHN0b3JlIGFyZSB2YXJpYWJsZS1sZW5ndGggdHVw
bGVzIHdpdGggZGlmZmVyZW50IHR5cGVzCi0vLyBvZiBmaWVsZHMuIEVhY2gga2V5IGluIHRoZSBi
YWNraW5nIHN0b3JlIHN0YXJ0cyB3aXRoIGEgdGVybmFyeSBwcmVmaXg6IChkYXRhYmFzZSBpZCwg
b2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCkuIEZvciBlYWNoLCAwIGlzIHJlc2VydmVkIGZvciBt
ZXRhLWRhdGEuCi0vLyBUaGUgcHJlZml4IG1ha2VzIHN1cmUgdGhhdCBkYXRhIGZvciBhIHNwZWNp
ZmljIGRhdGFiYXNlLCBvYmplY3Qgc3RvcmUsIGFuZCBpbmRleCBhcmUgZ3JvdXBlZCB0b2dldGhl
ci4gVGhlIGxvY2FsaXR5IGlzIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2U6IGNvbW1vbgotLy8g
b3BlcmF0aW9ucyBzaG91bGQgb25seSBuZWVkIGEgbWluaW1hbCBudW1iZXIgb2Ygc2VlayBvcGVy
YXRpb25zLiBGb3IgZXhhbXBsZSwgYWxsIHRoZSBtZXRhLWRhdGEgZm9yIGEgZGF0YWJhc2UgaXMg
Z3JvdXBlZCB0b2dldGhlciBzbyB0aGF0IHJlYWRpbmcgdGhhdAotLy8gbWV0YS1kYXRhIG9ubHkg
cmVxdWlyZXMgb25lIHNlZWsuCi0vLwotLy8gRWFjaCBrZXkgdHlwZSBoYXMgYSBjbGFzcyAoaW4g
c3F1YXJlIGJyYWNrZXRzIGJlbG93KSB3aGljaCBrbm93cyBob3cgdG8gZW5jb2RlLCBkZWNvZGUs
IGFuZCBjb21wYXJlIHRoYXQga2V5IHR5cGUuCi0vLwotLy8gR2xvYmFsIG1ldGEtZGF0YSBoYXZl
IGtleXMgd2l0aCBwcmVmaXggKDAsMCwwKSwgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGU6Ci0vLwot
Ly8gICAgIDwwLCAwLCAwLCAwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9PiBJbmRleGVkREIvTGV2ZWxEQiBzY2hlbWEgdmVyc2lvbiAoMCBmb3Igbm93KSBbU2No
ZW1hVmVyc2lvbktleV0KLS8vICAgICA8MCwgMCwgMCwgMT4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPT4gVGhlIG1heGltdW0gZGF0YWJhc2UgaWQgZXZlciBhbGxv
Y2F0ZWQgW01heERhdGFiYXNlSWRLZXldCi0vLyAgICAgPDAsIDAsIDAsIDEwMCwgZGF0YWJhc2Ug
aWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IEV4aXN0ZW5jZSBpbXBsaWVzIHRoZSBk
YXRhYmFzZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtEYXRhYmFzZUZyZWVMaXN0S2V5XQotLy8g
ICAgIDwwLCAwLCAwLCAyMDEsIHV0ZjE2IG9yaWdpbiBuYW1lLCB1dGYxNiBkYXRhYmFzZSBuYW1l
PiA9PiBEYXRhYmFzZSBpZCBbRGF0YWJhc2VOYW1lS2V5XQotLy8KLS8vCi0vLyBEYXRhYmFzZSBt
ZXRhLWRhdGE6Ci0vLwotLy8gICAgIEFnYWluLCB0aGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEg
dHlwZSBieXRlLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDA+ID0+IHV0ZjE2IG9y
aWdpbiBuYW1lIFtEYXRhYmFzZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgMT4gPT4gdXRmMTYgZGF0YWJhc2UgbmFtZSBbRGF0YWJhc2VNZXRhRGF0YUtleV0KLS8vICAg
ICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDI+ID0+IHV0ZjE2IHVzZXIgdmVyc2lvbiBkYXRhIFtEYXRh
YmFzZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMz4gPT4gbWF4aW11
bSBvYmplY3Qgc3RvcmUgaWQgZXZlciBhbGxvY2F0ZWQgW0RhdGFiYXNlTWV0YURhdGFLZXldCi0v
LwotLy8KLS8vIE9iamVjdCBzdG9yZSBtZXRhLWRhdGE6Ci0vLwotLy8gICAgIFRoZSBwcmVmaXgg
aXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdl
ciwgYW5kIHRoZW4gYW5vdGhlciB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciAoRklYTUU6IHRoaXMg
c2hvdWxkIGJlIGEgYnl0ZSkuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9i
amVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWUgW09iamVjdFN0b3Jl
TWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3Jl
IGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAg
ICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDI+ID0+IGhhcyBhdXRv
IGluY3JlbWVudCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQs
IDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDM+ID0+IGlzIGV2aWN0YWJsZSBbT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3Rv
cmUgaWQsIDQ+ID0+IGxhc3QgInZlcnNpb24iIG51bWJlciBbT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDU+ID0+
IG1heGltdW0gaW5kZXggaWQgZXZlciBhbGxvY2F0ZWQgW09iamVjdFN0b3JlTWV0YURhdGFLZXld
Ci0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA2PiA9PiBo
YXMga2V5IHBhdGggKHZzLiBudWxsKSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vCi0vLwot
Ly8gSW5kZXggbWV0YS1kYXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5
IGEgdHlwZSBieXRlLCB0aGVuIHR3byB2YXJpYWJsZS1sZW5ndGggaW50ZWdlcnMsIGFuZCB0aGVu
IGFub3RoZXIgdHlwZSBieXRlLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwg
b2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgMD4gPT4gdXRmMTYgaW5kZXggbmFtZSBbSW5kZXhN
ZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0IHN0b3Jl
IGlkLCBpbmRleCBpZCwgMT4gPT4gYXJlIGluZGV4IGtleXMgdW5pcXVlIFtJbmRleE1ldGFEYXRh
S2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGlu
ZGV4IGlkLCAyPiA9PiB1dGYxNiBrZXkgcGF0aCBbSW5kZXhNZXRhRGF0YUtleV0KLS8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgMz4gPT4g
aXMgaW5kZXggbXVsdGktZW50cnkgW0luZGV4TWV0YURhdGFLZXldCi0vLwotLy8KLS8vIE90aGVy
IG9iamVjdCBzdG9yZSBhbmQgaW5kZXggbWV0YS1kYXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4
IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgb2JqZWN0IHN0b3JlIGFuZCBpbmRleCBp
ZCBhcmUgdmFyaWFibGUgbGVuZ3RoIGludGVnZXJzLCB0aGUgdXRmMTYgc3RyaW5ncyBhcmUgdmFy
aWFibGUgbGVuZ3RoIHN0cmluZ3MuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTUw
LCBvYmplY3Qgc3RvcmUgaWQ+ICAgICAgICAgICAgICAgICAgID0+IGV4aXN0ZW5jZSBpbXBsaWVz
IHRoZSBvYmplY3Qgc3RvcmUgaWQgaXMgaW4gdGhlIGZyZWUgbGlzdCBbT2JqZWN0U3RvcmVGcmVl
TGlzdEtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDE1MSwgb2JqZWN0IHN0b3JlIGlk
LCBpbmRleCBpZD4gICAgICAgICA9PiBleGlzdGVuY2UgaW1wbGllcyB0aGUgaW5kZXggaWQgaXMg
aW4gdGhlIGZyZWUgbGlzdCBbSW5kZXhGcmVlTGlzdEtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQs
IDAsIDAsIDIwMCwgdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWU+ICAgICAgICAgICA9PiBvYmplY3Qg
c3RvcmUgaWQgW09iamVjdFN0b3JlTmFtZXNLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAw
LCAyMDEsIG9iamVjdCBzdG9yZSBpZCwgdXRmMTYgaW5kZXggbmFtZT4gPT4gaW5kZXggaWQgW0lu
ZGV4TmFtZXNLZXldCi0vLwotLy8KLS8vIE9iamVjdCBzdG9yZSBkYXRhOgotLy8KLS8vICAgICBU
aGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgdXNlciBrZXkgaXMgYW4g
ZW5jb2RlZCBJREJLZXkuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBpZCwgb2JqZWN0IHN0b3JlIGlk
LCAxLCB1c2VyIGtleT4gPT4gInZlcnNpb24iLCBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSBbT2Jq
ZWN0U3RvcmVEYXRhS2V5XQotLy8KLS8vCi0vLyAiRXhpc3RzIiBlbnRyeToKLS8vCi0vLyAgICAg
VGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIHVzZXIga2V5IGlzIGFu
IGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBp
ZCwgMiwgdXNlciBrZXk+ID0+ICJ2ZXJzaW9uIiBbRXhpc3RzRW50cnlLZXldCi0vLwotLy8KLS8v
IEluZGV4IGRhdGE6Ci0vLwotLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBl
IGJ5dGUuIFRoZSBpbmRleCBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuIFRoZSBzZXF1ZW5jZSBu
dW1iZXIgaXMgYSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlci4KLS8vICAgICBUaGUgcHJpbWFyeSBr
ZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBpZCwgb2JqZWN0
IHN0b3JlIGlkLCBpbmRleCBpZCwgaW5kZXgga2V5LCBzZXF1ZW5jZSBudW1iZXIsIHByaW1hcnkg
a2V5PiA9PiAidmVyc2lvbiIsIHByaW1hcnkga2V5IFtJbmRleERhdGFLZXldCi0vLwotLy8gICAg
IChUaGUgc2VxdWVuY2UgbnVtYmVyIGlzIG9ic29sZXRlOyBpdCB3YXMgdXNlZCB0byBhbGxvdyB0
d28gZW50cmllcyB3aXRoCi0vLyAgICAgdGhlIHNhbWUgdXNlciAoaW5kZXgpIGtleSBpbiBub24t
dW5pcXVlIGluZGV4ZXMgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZgotLy8gICAgIHRoZSBwcmlt
YXJ5IGtleSBpbiB0aGUgZGF0YS4gVGhlICJ2ZXJzaW9uIiBmaWVsZCBpcyB1c2VkIHRvIHdlZWQg
b3V0IHN0YWxlCi0vLyAgICAgaW5kZXggZGF0YS4gV2hlbmV2ZXIgbmV3IG9iamVjdCBzdG9yZSBk
YXRhIGlzIGluc2VydGVkLCBpdCBnZXRzIGEgbmV3Ci0vLyAgICAgInZlcnNpb24iIG51bWJlciwg
YW5kIG5ldyBpbmRleCBkYXRhIGlzIHdyaXR0ZW4gd2l0aCB0aGlzIG51bWJlci4gV2hlbgotLy8g
ICAgIHRoZSBpbmRleCBpcyB1c2VkIGZvciBsb29rLXVwcywgZW50cmllcyBhcmUgdmFsaWRhdGVk
IGFnYWluc3QgdGhlCi0vLyAgICAgImV4aXN0cyIgZW50cmllcywgYW5kIHJlY29yZHMgd2l0aCBv
bGQgInZlcnNpb24iIG51bWJlcnMgYXJlIGRlbGV0ZWQKLS8vICAgICB3aGVuIHRoZXkgYXJlIGVu
Y291bnRlcmVkIGluIGdldFByaW1hcnlLZXlWaWFJbmRleCwKLS8vICAgICBJbmRleEN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93LCBhbmQgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dykuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nIHsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleU51bGxUeXBlQnl0ZSA9IDA7Ci1z
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5U3RyaW5nVHlwZUJ5dGUgPSAxOwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleURhdGVUeXBlQnl0ZSA9IDI7Ci1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TnVtYmVyVHlwZUJ5dGUgPSAzOwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIga0lEQktleUFycmF5VHlwZUJ5dGUgPSA0Owotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIga0lEQktleU1pbktleVR5cGVCeXRlID0gNTsKLQotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlRGF0YUluZGV4SWQgPSAxOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIga0V4aXN0c0VudHJ5SW5kZXhJZCA9IDI7Ci0KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUgPSAwOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIga01heERhdGFiYXNlSWRUeXBlQnl0ZSA9IDE7Ci1zdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBrRGF0YWJhc2VGcmVlTGlzdFR5cGVCeXRlID0gMTAwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIga0RhdGFiYXNlTmFtZVR5cGVCeXRlID0gMjAxOwotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlID0gNTA7Ci1zdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5kZXhNZXRhRGF0YVR5cGVCeXRlID0gMTAwOwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlRnJlZUxpc3RUeXBlQnl0ZSA9IDE1
MDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleEZyZWVMaXN0VHlwZUJ5dGUgPSAx
NTE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRl
ID0gMjAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0luZGV4TmFtZXNLZXlUeXBlQnl0
ZSA9IDIwMTsKLQotI2lmbmRlZiBJTlQ2NF9NQVgKLSNkZWZpbmUgSU5UNjRfTUFYIDB4N2ZmZmZm
ZmZmZmZmZmZmZkxMCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01B
WCAweDdmZmZmZmZmTAotI2VuZGlmCi0KLQotVmVjdG9yPGNoYXI+IGVuY29kZUJ5dGUodW5zaWdu
ZWQgY2hhciBjKQotewotICAgIFZlY3RvcjxjaGFyPiB2OwotICAgIHYuYXBwZW5kKGMpOwotICAg
IHJldHVybiB2OwotfQotCi1WZWN0b3I8Y2hhcj4gbWF4SURCS2V5KCkKLXsKLSAgICByZXR1cm4g
ZW5jb2RlQnl0ZShrSURCS2V5TnVsbFR5cGVCeXRlKTsKLX0KLQotVmVjdG9yPGNoYXI+IG1pbklE
QktleSgpCi17Ci0gICAgcmV0dXJuIGVuY29kZUJ5dGUoa0lEQktleU1pbktleVR5cGVCeXRlKTsK
LX0KLQotVmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90IG4pCi17Ci0gICAgQVNTRVJUKG4g
Pj0gMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsgLy8gRklYTUU6IFNpemUgdGhpcyBhdCBjcmVh
dGlvbi4KLQotICAgIGRvIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gbjsKLSAgICAgICAg
cmV0LmFwcGVuZChjKTsKLSAgICAgICAgbiA+Pj0gODsKLSAgICB9IHdoaWxlIChuKTsKLQotICAg
IHJldHVybiByZXQ7Ci19Ci0KLWludDY0X3QgZGVjb2RlSW50KGNvbnN0IGNoYXIqIGJlZ2luLCBj
b25zdCBjaGFyKiBlbmQpCi17Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgaW50NjRf
dCByZXQgPSAwOwotCi0gICAgaW50IHNoaWZ0ID0gMDsKLSAgICB3aGlsZSAoYmVnaW4gPCBlbmQp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKmJlZ2luKys7Ci0gICAgICAgIHJldCB8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihjKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0gODsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVJbnRzKGludDY0
X3QgYSwgaW50NjRfdCBiKQotewotICAgIEFTU0VSVChhID49IDApOwotICAgIEFTU0VSVChiID49
IDApOwotCi0gICAgaW50NjRfdCBkaWZmID0gYSAtIGI7Ci0gICAgaWYgKGRpZmYgPCAwKQotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGRpZmYgPiAwKQotICAgICAgICByZXR1cm4gMTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotVmVjdG9yPGNoYXI+IGVuY29kZVZhckludChpbnQ2NF90IG4pCi17
Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsgLy8gRklYTUU6IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4K
LQotICAgIGRvIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gbiAmIDB4N2Y7Ci0gICAgICAg
IG4gPj49IDc7Ci0gICAgICAgIGlmIChuKQotICAgICAgICAgICAgYyB8PSAweDgwOwotICAgICAg
ICByZXQuYXBwZW5kKGMpOwotICAgIH0gd2hpbGUgKG4pOwotCi0gICAgcmV0dXJuIHJldDsKLX0K
LQotY29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIgKnAsIGNvbnN0IGNoYXIqIGxp
bWl0LCBpbnQ2NF90JiBmb3VuZEludCkKLXsKLSAgICBBU1NFUlQobGltaXQgPj0gcCk7Ci0gICAg
Zm91bmRJbnQgPSAwOwotICAgIGludCBzaGlmdCA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlm
IChwID49IGxpbWl0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgdW5zaWduZWQg
Y2hhciBjID0gKnA7Ci0gICAgICAgIGZvdW5kSW50IHw9IHN0YXRpY19jYXN0PGludDY0X3Q+KGMg
JiAweDdmKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0gNzsKLSAgICB9IHdoaWxlICgqcCsr
ICYgMHg4MCk7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBzKQotewotICAgIFZlY3RvcjxjaGFyPiByZXQ7IC8vIEZJWE1FOiBTaXpl
IHRoaXMgYXQgY3JlYXRpb24uCi0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcy5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIHUgPSBzW2ldOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGhpID0gdSA+PiA4OwotICAgICAgICB1bnNpZ25lZCBjaGFyIGxvID0gdTsKLSAgICAgICAg
cmV0LmFwcGVuZChoaSk7Ci0gICAgICAgIHJldC5hcHBlbmQobG8pOwotICAgIH0KLQotICAgIHJl
dHVybiByZXQ7Ci19Ci0KLVN0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3Qg
Y2hhciogZW5kKQotewotICAgIEFTU0VSVChlbmQgPj0gcCk7Ci0gICAgQVNTRVJUKCEoKGVuZCAt
IHApICUgMikpOwotCi0gICAgc2l6ZV90IGxlbiA9IChlbmQgLSBwKSAvIDI7Ci0gICAgU3RyaW5n
QnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW4pOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjaGFy
IGhpID0gKnArKzsKLSAgICAgICAgdW5zaWduZWQgY2hhciBsbyA9ICpwKys7Ci0KLSAgICAgICAg
cmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oKGhpIDw8IDgpIHwgbG8pKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNv
ZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBWZWN0b3I8Y2hhcj4g
cmV0ID0gZW5jb2RlVmFySW50KHMubGVuZ3RoKCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlU3Ry
aW5nKHMpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1jb25zdCBjaGFyKiBkZWNvZGVTdHJpbmdX
aXRoTGVuZ3RoKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBTdHJpbmcmIGZvdW5k
U3RyaW5nKQotewotICAgIEFTU0VSVChsaW1pdCA+PSBwKTsKLSAgICBpbnQ2NF90IGxlbjsKLSAg
ICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW4pOwotICAgIGlmICghcCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKHAgKyBsZW4gKiAyID4gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgZm91bmRTdHJpbmcgPSBkZWNvZGVTdHJpbmcocCwgcCArIGxlbiAqIDIpOwotICAg
IHAgKz0gbGVuICogMjsKLSAgICByZXR1cm4gcDsKLX0KLQotaW50IGNvbXBhcmVFbmNvZGVkU3Ry
aW5nc1dpdGhMZW5ndGgoY29uc3QgY2hhciomIHAsIGNvbnN0IGNoYXIqIGxpbWl0UCwgY29uc3Qg
Y2hhciomIHEsIGNvbnN0IGNoYXIqIGxpbWl0USkKLXsKLSAgICBBU1NFUlQoJnAgIT0gJnEpOwot
ICAgIEFTU0VSVChsaW1pdFAgPj0gcCk7Ci0gICAgQVNTRVJUKGxpbWl0USA+PSBxKTsKLSAgICBp
bnQ2NF90IGxlblAsIGxlblE7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdFAsIGxlblAp
OwotICAgIHEgPSBkZWNvZGVWYXJJbnQocSwgbGltaXRRLCBsZW5RKTsKLSAgICBBU1NFUlQocCAm
JiBxKTsKLSAgICBBU1NFUlQobGVuUCA+PSAwKTsKLSAgICBBU1NFUlQobGVuUSA+PSAwKTsKLSAg
ICBBU1NFUlQocCArIGxlblAgKiAyIDw9IGxpbWl0UCk7Ci0gICAgQVNTRVJUKHEgKyBsZW5RICog
MiA8PSBsaW1pdFEpOwotCi0gICAgY29uc3QgY2hhciogc3RhcnRQID0gcDsKLSAgICBjb25zdCBj
aGFyKiBzdGFydFEgPSBxOwotICAgIHAgKz0gbGVuUCAqIDI7Ci0gICAgcSArPSBsZW5RICogMjsK
LQotICAgIGlmIChwID4gbGltaXRQIHx8IHEgPiBsaW1pdFEpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY29uc3Qgc2l6ZV90IGxtaW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlblAgPCBsZW5R
ID8gbGVuUCA6IGxlblEpOwotICAgIGlmIChpbnQgeCA9IG1lbWNtcChzdGFydFAsIHN0YXJ0USwg
bG1pbiAqIDIpKQotICAgICAgICByZXR1cm4geDsKLQotICAgIGlmIChsZW5QID09IGxlblEpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIChsZW5QID4gbGVuUSkgPyAxIDogLTE7Ci19
Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlIHgpCi17Ci0gICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgYmUgYnl0ZSBvcmRlciBpbmRlcGVuZGVudC4K
LSAgICBjb25zdCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJngpOwotICAgIFZl
Y3RvcjxjaGFyPiB2OwotICAgIHYuYXBwZW5kKHAsIHNpemVvZih4KSk7Ci0gICAgQVNTRVJUKHYu
c2l6ZSgpID09IHNpemVvZih4KSk7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLWNvbnN0IGNoYXIqIGRl
Y29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgZG91YmxlKiBkKQot
ewotICAgIGlmIChwICsgc2l6ZW9mKCpkKSA+IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGNoYXIqIHggPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemVvZigqZCk7ICsraSkKLSAgICAgICAgKngrKyA9ICpwKys7Ci0gICAg
cmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVJREJLZXkoY29uc3QgSURCS2V5JiBr
ZXkpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsKLSAgICBlbmNvZGVJREJLZXkoa2V5LCByZXQp
OwotICAgIHJldHVybiByZXQ7Ci19Ci0KLXZvaWQgZW5jb2RlSURCS2V5KGNvbnN0IElEQktleSYg
a2V5LCBWZWN0b3I8Y2hhcj4mIGludG8pCi17Ci0gICAgc2l6ZV90IHByZXZpb3VzU2l6ZSA9IGlu
dG8uc2l6ZSgpOwotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5OjpJ
bnZhbGlkVHlwZToKLSAgICBjYXNlIElEQktleTo6TWluVHlwZToKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lEQktleU51bGxU
eXBlQnl0ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJREJLZXk6OkFycmF5VHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURCS2V5QXJy
YXlUeXBlQnl0ZSkpOwotICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGtleS5hcnJheSgpLnNp
emUoKTsKLSAgICAgICAgICAgIGludG8uYXBwZW5kKGVuY29kZVZhckludChsZW5ndGgpKTsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgZW5jb2RlSURCS2V5KCprZXkuYXJyYXkoKVtpXSwgaW50byk7Ci0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkgPiBwcmV2aW91c1NpemUpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5
cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lEQktleVN0cmluZ1R5cGVCeXRl
KSk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoa2V5LnN0cmlu
ZygpKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRvLnNpemUoKSA+
IHByZXZpb3VzU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElEQktleTo6RGF0ZVR5
cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lEQktleURhdGVUeXBlQnl0ZSkp
OwotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUoa2V5LmRhdGUoKSkpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkgLSBwcmV2aW91c1NpemUg
PT0gOSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAg
ICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURCS2V5TnVtYmVyVHlwZUJ5dGUpKTsKLSAg
ICAgICAgaW50by5hcHBlbmQoZW5jb2RlRG91YmxlKGtleS5udW1iZXIoKSkpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkgLSBwcmV2aW91c1NpemUgPT0g
OSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotCi1jb25zdCBjaGFyKiBkZWNvZGVJREJLZXkoY29uc3QgY2hhciogcCwgY29uc3QgY2hh
ciogbGltaXQsIFJlZlB0cjxJREJLZXk+JiBmb3VuZEtleSkKLXsKLSAgICBBU1NFUlQobGltaXQg
Pj0gcCk7Ci0gICAgaWYgKHAgPj0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5z
aWduZWQgY2hhciB0eXBlID0gKnArKzsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
a0lEQktleU51bGxUeXBlQnl0ZToKLSAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZUlu
dmFsaWQoKTsKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVC
eXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKLSAgICAgICAgICAg
IHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXAp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIElEQktleTo6S2V5QXJyYXkg
YXJyYXk7Ci0gICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAgICAgICAgICAgICAgcCA9IGRlY29kZUlEQktleShwLCBs
aW1pdCwga2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZChrZXkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZUFycmF5KGFycmF5KTsK
LSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5U3RyaW5n
VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBzOwotICAgICAgICAgICAg
cCA9IGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHMpOwotICAgICAgICAgICAgaWYg
KCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgZm91bmRLZXkgPSBJ
REJLZXk6OmNyZWF0ZVN0cmluZyhzKTsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9
Ci0gICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBk
b3VibGUgZDsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVEb3VibGUocCwgbGltaXQsICZkKTsKLSAg
ICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGQpOwotICAgICAgICAgICAgcmV0dXJuIHA7
Ci0gICAgICAgIH0KLSAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKLSAgICAgICAgewot
ICAgICAgICAgICAgZG91YmxlIGQ7Ci0gICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxp
bWl0LCAmZCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKGQpOwotICAgICAg
ICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotY29uc3QgY2hhciogZXh0cmFjdEVuY29kZWRJREJL
ZXkoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBWZWN0b3I8Y2hhcj4qIHJl
c3VsdCkKLXsKLSAgICBBU1NFUlQocmVzdWx0KTsKLSAgICBjb25zdCBjaGFyKiBwID0gc3RhcnQ7
Ci0gICAgaWYgKHAgPj0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQg
Y2hhciB0eXBlID0gKnArKzsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Uga0lEQktl
eU51bGxUeXBlQnl0ZToKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlUeXBlQnl0ZToKLSAgICAgICAg
KnJlc3VsdCA9IGVuY29kZUJ5dGUodHlwZSk7Ci0gICAgICAgIHJldHVybiBwOwotICAgIGNhc2Ug
a0lEQktleUFycmF5VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludDY0X3QgbGVu
Z3RoOwotICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
cmVzdWx0LT5jbGVhcigpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3RhcnQsIHAgLSBz
dGFydCk7Ci0gICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gc3Via2V5OwotICAgICAgICAgICAgICAgIHAgPSBleHRyYWN0RW5jb2RlZElE
QktleShwLCBsaW1pdCwgJnN1YmtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChz
dWJrZXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0K
LSAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAg
aW50NjRfdCBsZW5ndGg7Ci0gICAgICAgICAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBs
ZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgaWYgKHAgKyBsZW5ndGggKiAyID4gbGltaXQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICByZXN1bHQtPmNsZWFyKCk7Ci0gICAgICAgICAgICByZXN1
bHQtPmFwcGVuZChzdGFydCwgcCAtIHN0YXJ0ICsgbGVuZ3RoICogMik7Ci0gICAgICAgICAgICBy
ZXR1cm4gcCArIGxlbmd0aCAqIDI7Ci0gICAgICAgIH0KLSAgICBjYXNlIGtJREJLZXlEYXRlVHlw
ZUJ5dGU6Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6Ci0gICAgICAgIGlmIChwICsg
c2l6ZW9mKGRvdWJsZSkgPiBsaW1pdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXN1bHQtPmNsZWFyKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0YXJ0LCAxICsgc2l6ZW9m
KGRvdWJsZSkpOwotICAgICAgICByZXR1cm4gcCArIHNpemVvZihkb3VibGUpOwotICAgIH0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIElEQktl
eTo6VHlwZSBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh1bnNpZ25lZCBjaGFyIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgotICAgICAgICBy
ZXR1cm4gSURCS2V5OjpJbnZhbGlkVHlwZTsKLSAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRl
OgotICAgICAgICByZXR1cm4gSURCS2V5OjpBcnJheVR5cGU7Ci0gICAgY2FzZSBrSURCS2V5U3Ry
aW5nVHlwZUJ5dGU6Ci0gICAgICAgIHJldHVybiBJREJLZXk6OlN0cmluZ1R5cGU7Ci0gICAgY2Fz
ZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpEYXRlVHlwZTsK
LSAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6
TnVtYmVyVHlwZTsKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlUeXBlQnl0ZToKLSAgICAgICAgcmV0
dXJuIElEQktleTo6TWluVHlwZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gSURCS2V5OjpJbnZhbGlkVHlwZTsKLX0KLQotaW50IGNvbXBhcmVFbmNvZGVk
SURCS2V5cyhjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRBLCBjb25zdCBjaGFyKiYg
cSwgY29uc3QgY2hhciogbGltaXRCKQotewotICAgIEFTU0VSVCgmcCAhPSAmcSk7Ci0gICAgQVNT
RVJUKHAgPCBsaW1pdEEpOwotICAgIEFTU0VSVChxIDwgbGltaXRCKTsKLSAgICB1bnNpZ25lZCBj
aGFyIHR5cGVBID0gKnArKzsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCID0gKnErKzsKLQotICAg
IGlmIChpbnQgeCA9IElEQktleTo6Y29tcGFyZVR5cGVzKGtleVR5cGVCeXRlVG9LZXlUeXBlKHR5
cGVBKSwga2V5VHlwZUJ5dGVUb0tleVR5cGUodHlwZUIpKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0K
LSAgICBzd2l0Y2ggKHR5cGVBKSB7Ci0gICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgotICAg
IGNhc2Uga0lEQktleU1pbktleVR5cGVCeXRlOgotICAgICAgICAvLyBOdWxsIHR5cGUgb3IgbWF4
IHR5cGU7IG5vIHBheWxvYWQgdG8gY29tcGFyZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2Fz
ZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgaW50NjRfdCBs
ZW5ndGhBLCBsZW5ndGhCOwotICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdEEs
IGxlbmd0aEEpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1pdEIsIGxlbmd0aEIpOwotICAg
ICAgICAgICAgaWYgKCFxKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
aWYgKGxlbmd0aEEgPCAwIHx8IGxlbmd0aEIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBpIDwgbGVuZ3RoQSAmJiBpIDwgbGVu
Z3RoQjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGludCBjbXAgPSBjb21wYXJlRW5jb2Rl
ZElEQktleXMocCwgbGltaXRBLCBxLCBsaW1pdEIpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY21wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlbmd0aEEgPCBsZW5ndGhC
KQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChsZW5ndGhBID4g
bGVuZ3RoQikKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5U3RyaW5nVHlwZUJ5dGU6Ci0gICAgICAgIHJl
dHVybiBjb21wYXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKHAsIGxpbWl0QSwgcSwgbGltaXRC
KTsKLSAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVy
VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBkLCBlOwotICAgICAgICAg
ICAgcCA9IGRlY29kZURvdWJsZShwLCBsaW1pdEEsICZkKTsKLSAgICAgICAgICAgIEFTU0VSVChw
KTsKLSAgICAgICAgICAgIHEgPSBkZWNvZGVEb3VibGUocSwgbGltaXRCLCAmZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQocSk7Ci0gICAgICAgICAgICBpZiAoZCA8IGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGQgPiBlKQotICAgICAgICAgICAgICAgIHJldHVy
biAxOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGNvbXBhcmVFbmNvZGVk
SURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGtleUEsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
QikKLXsKLSAgICBBU1NFUlQoa2V5QS5zaXplKCkgPj0gMSk7Ci0gICAgQVNTRVJUKGtleUIuc2l6
ZSgpID49IDEpOwotCi0gICAgY29uc3QgY2hhciogcCA9IGtleUEuZGF0YSgpOwotICAgIGNvbnN0
IGNoYXIqIGxpbWl0QSA9IHAgKyBrZXlBLnNpemUoKTsKLSAgICBjb25zdCBjaGFyKiBxID0ga2V5
Qi5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogbGltaXRCID0gcSArIGtleUIuc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwLCBsaW1pdEEsIHEsIGxpbWl0Qik7Ci19
Ci0KLW5hbWVzcGFjZSB7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlPgotaW50IGRlY29kZUFu
ZENvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIpCi17
Ci0gICAgS2V5VHlwZSBrZXlBOwotICAgIEtleVR5cGUga2V5QjsKLQotICAgIGNvbnN0IGNoYXIq
IHB0ckEgPSBLZXlUeXBlOjpkZWNvZGUoYS5iZWdpbigpLCBhLmVuZCgpLCAma2V5QSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChwdHJBLCBwdHJBKTsKLSAgICBjb25zdCBjaGFyKiBwdHJCID0gS2V5VHlw
ZTo6ZGVjb2RlKGIuYmVnaW4oKSwgYi5lbmQoKSwgJmtleUIpOwotICAgIEFTU0VSVF9VTlVTRUQo
cHRyQiwgcHRyQik7Ci0KLSAgICByZXR1cm4ga2V5QS5jb21wYXJlKGtleUIpOwotfQotfQotCi1p
bnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYiwg
Ym9vbCBpbmRleEtleXMpCi17Ci0gICAgY29uc3QgY2hhciogcHRyQSA9IGEuYmVnaW4oKTsKLSAg
ICBjb25zdCBjaGFyKiBwdHJCID0gYi5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIqIGVuZEEgPSBh
LmVuZCgpOwotICAgIGNvbnN0IGNoYXIqIGVuZEIgPSBiLmVuZCgpOwotCi0gICAgS2V5UHJlZml4
IHByZWZpeEE7Ci0gICAgS2V5UHJlZml4IHByZWZpeEI7Ci0KLSAgICBwdHJBID0gS2V5UHJlZml4
OjpkZWNvZGUocHRyQSwgZW5kQSwgJnByZWZpeEEpOwotICAgIHB0ckIgPSBLZXlQcmVmaXg6OmRl
Y29kZShwdHJCLCBlbmRCLCAmcHJlZml4Qik7Ci0gICAgQVNTRVJUKHB0ckEpOwotICAgIEFTU0VS
VChwdHJCKTsKLQotICAgIGlmIChpbnQgeCA9IHByZWZpeEEuY29tcGFyZShwcmVmaXhCKSkKLSAg
ICAgICAgcmV0dXJuIHg7Ci0KLSAgICBpZiAocHJlZml4QS50eXBlKCkgPT0gS2V5UHJlZml4Ojpr
R2xvYmFsTWV0YURhdGEpIHsKLSAgICAgICAgQVNTRVJUKHB0ckEgIT0gZW5kQSk7Ci0gICAgICAg
IEFTU0VSVChwdHJCICE9IGVuZEIpOwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVB
ID0gKnB0ckErKzsKLSAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZUIgPSAqcHRyQisrOwot
Ci0gICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVCeXRlQikKLSAgICAgICAgICAg
IHJldHVybiB4OwotCi0gICAgICAgIGlmICh0eXBlQnl0ZUEgPD0gMSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtEYXRhYmFzZUZyZWVMaXN0VHlwZUJ5
dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxEYXRhYmFzZUZyZWVMaXN0
S2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrRGF0YWJhc2VOYW1lVHlwZUJ5
dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxEYXRhYmFzZU5hbWVLZXk+
KGEsIGIpOwotICAgIH0KLQotICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtE
YXRhYmFzZU1ldGFEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChwdHJBICE9IGVuZEEpOwotICAgICAg
ICBBU1NFUlQocHRyQiAhPSBlbmRCKTsKLQotICAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRl
QSA9ICpwdHJBKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVCID0gKnB0ckIrKzsK
LQotICAgICAgICBpZiAoaW50IHggPSB0eXBlQnl0ZUEgLSB0eXBlQnl0ZUIpCi0gICAgICAgICAg
ICByZXR1cm4geDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVBIDw9IDMpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtPYmplY3RTdG9yZU1ldGFEYXRh
VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrSW5kZXhNZXRh
RGF0YVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8SW5kZXhN
ZXRhRGF0YUtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga09iamVjdFN0b3Jl
RnJlZUxpc3RUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPE9i
amVjdFN0b3JlRnJlZUxpc3RLZXk+KGEsIGIpOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtJ
bmRleEZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFy
ZTxJbmRleEZyZWVMaXN0S2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrT2Jq
ZWN0U3RvcmVOYW1lc1R5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBh
cmU8T2JqZWN0U3RvcmVOYW1lc0tleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEgPT0g
a0luZGV4TmFtZXNLZXlUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21w
YXJlPEluZGV4TmFtZXNLZXk+KGEsIGIpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAocHJlZml4QS50eXBlKCkgPT0g
S2V5UHJlZml4OjprT2JqZWN0U3RvcmVEYXRhKSB7Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEg
JiYgcHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChwdHJB
ID09IGVuZEEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChwdHJCID09IGVu
ZEIpCi0gICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRoaXMgY2FzZSBvZiBub24tZXhp
c3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5Lgot
Ci0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPE9iamVjdFN0b3JlRGF0YUtleT4oYSwg
Yik7Ci0gICAgfQotICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtFeGlzdHNF
bnRyeSkgewotICAgICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQotICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJu
IDE7IC8vIEZJWE1FOiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQg
bm90IGhhdmUgdG8gYmUgaGFuZGxlZCB0aGlzIHdheS4KLQotICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ29tcGFyZTxFeGlzdHNFbnRyeUtleT4oYSwgYik7Ci0gICAgfQotICAgIGlmIChwcmVmaXhB
LnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtJbmRleERhdGEpIHsKLSAgICAgICAgaWYgKHB0ckEgPT0g
ZW5kQSAmJiBwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYg
KHB0ckEgPT0gZW5kQSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHB0ckIg
PT0gZW5kQikKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhpcyBjYXNlIG9mIG5v
bi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgdGhpcyB3
YXkuCi0KLSAgICAgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleUE7Ci0gICAgICAgIEluZGV4
RGF0YUtleSBpbmRleERhdGFLZXlCOwotCi0gICAgICAgIHB0ckEgPSBJbmRleERhdGFLZXk6OmRl
Y29kZShhLmJlZ2luKCksIGVuZEEsICZpbmRleERhdGFLZXlBKTsKLSAgICAgICAgcHRyQiA9IElu
ZGV4RGF0YUtleTo6ZGVjb2RlKGIuYmVnaW4oKSwgZW5kQiwgJmluZGV4RGF0YUtleUIpOwotICAg
ICAgICBBU1NFUlQocHRyQSk7Ci0gICAgICAgIEFTU0VSVChwdHJCKTsKLQotICAgICAgICBib29s
IGlnbm9yZUR1cGxpY2F0ZXMgPSBpbmRleEtleXM7Ci0gICAgICAgIHJldHVybiBpbmRleERhdGFL
ZXlBLmNvbXBhcmUoaW5kZXhEYXRhS2V5QiwgaWdub3JlRHVwbGljYXRlcyk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotS2V5UHJlZml4
OjpLZXlQcmVmaXgoKQotICAgIDogbV9kYXRhYmFzZUlkKGtJbnZhbGlkVHlwZSkKLSAgICAsIG1f
b2JqZWN0U3RvcmVJZChrSW52YWxpZFR5cGUpCi0gICAgLCBtX2luZGV4SWQoa0ludmFsaWRUeXBl
KQotewotfQotCi1LZXlQcmVmaXg6OktleVByZWZpeChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotICAgIDogbV9kYXRhYmFzZUlkKGRh
dGFiYXNlSWQpCi0gICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAsIG1f
aW5kZXhJZChpbmRleElkKQotewotfQotCi1jb25zdCBjaGFyKiBLZXlQcmVmaXg6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEtleVByZWZpeCogcmVzdWx0KQot
ewotICAgIGlmIChzdGFydCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNp
Z25lZCBjaGFyIGZpcnN0Qnl0ZSA9ICpzdGFydCsrOwotCi0gICAgaW50IGRhdGFiYXNlSWRCeXRl
cyA9ICgoZmlyc3RCeXRlID4+IDUpICYgMHg3KSArIDE7Ci0gICAgaW50IG9iamVjdFN0b3JlSWRC
eXRlcyA9ICgoZmlyc3RCeXRlID4+IDIpICYgMHg3KSArIDE7Ci0gICAgaW50IGluZGV4SWRCeXRl
cyA9IChmaXJzdEJ5dGUgJiAweDMpICsgMTsKLQotICAgIGlmIChzdGFydCArIGRhdGFiYXNlSWRC
eXRlcyArIG9iamVjdFN0b3JlSWRCeXRlcyArIGluZGV4SWRCeXRlcyA+IGxpbWl0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJlc3VsdC0+bV9kYXRhYmFzZUlkID0gZGVjb2RlSW50KHN0YXJ0
LCBzdGFydCArIGRhdGFiYXNlSWRCeXRlcyk7Ci0gICAgc3RhcnQgKz0gZGF0YWJhc2VJZEJ5dGVz
OwotICAgIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkID0gZGVjb2RlSW50KHN0YXJ0LCBzdGFydCAr
IG9iamVjdFN0b3JlSWRCeXRlcyk7Ci0gICAgc3RhcnQgKz0gb2JqZWN0U3RvcmVJZEJ5dGVzOwot
ICAgIHJlc3VsdC0+bV9pbmRleElkID0gZGVjb2RlSW50KHN0YXJ0LCBzdGFydCArIGluZGV4SWRC
eXRlcyk7Ci0gICAgc3RhcnQgKz0gaW5kZXhJZEJ5dGVzOwotCi0gICAgcmV0dXJuIHN0YXJ0Owot
fQotCi1WZWN0b3I8Y2hhcj4gS2V5UHJlZml4OjplbmNvZGUoKSBjb25zdAotewotICAgIEFTU0VS
VChtX2RhdGFiYXNlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJ
ZCAhPSBrSW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRleElkICE9IGtJbnZhbGlkSWQpOwot
Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGFiYXNlSWRTdHJpbmcgPSBlbmNvZGVJbnQobV9kYXRhYmFz
ZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVJZFN0cmluZyA9IGVuY29kZUludCht
X29iamVjdFN0b3JlSWQpOwotICAgIFZlY3RvcjxjaGFyPiBpbmRleElkU3RyaW5nID0gZW5jb2Rl
SW50KG1faW5kZXhJZCk7Ci0KLSAgICBBU1NFUlQoZGF0YWJhc2VJZFN0cmluZy5zaXplKCkgPD0g
OCk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlSWRTdHJpbmcuc2l6ZSgpIDw9IDgpOwotICAgIEFT
U0VSVChpbmRleElkU3RyaW5nLnNpemUoKSA8PSA0KTsKLQotCi0gICAgdW5zaWduZWQgY2hhciBm
aXJzdEJ5dGUgPSAoZGF0YWJhc2VJZFN0cmluZy5zaXplKCkgLSAxKSA8PCA1IHwgKG9iamVjdFN0
b3JlSWRTdHJpbmcuc2l6ZSgpIC0gMSkgPDwgMiB8IChpbmRleElkU3RyaW5nLnNpemUoKSAtIDEp
OwotICAgIFZlY3RvcjxjaGFyPiByZXQ7Ci0gICAgcmV0LmFwcGVuZChmaXJzdEJ5dGUpOwotICAg
IHJldC5hcHBlbmQoZGF0YWJhc2VJZFN0cmluZyk7Ci0gICAgcmV0LmFwcGVuZChvYmplY3RTdG9y
ZUlkU3RyaW5nKTsKLSAgICByZXQuYXBwZW5kKGluZGV4SWRTdHJpbmcpOwotCi0gICAgcmV0dXJu
IHJldDsKLX0KLQotaW50IEtleVByZWZpeDo6Y29tcGFyZShjb25zdCBLZXlQcmVmaXgmIG90aGVy
KSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAg
QVNTRVJUKG1fb2JqZWN0U3RvcmVJZCAhPSBrSW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRl
eElkICE9IGtJbnZhbGlkSWQpOwotCi0gICAgaWYgKG1fZGF0YWJhc2VJZCAhPSBvdGhlci5tX2Rh
dGFiYXNlSWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyhtX2RhdGFiYXNlSWQsIG90aGVy
Lm1fZGF0YWJhc2VJZCk7Ci0gICAgaWYgKG1fb2JqZWN0U3RvcmVJZCAhPSBvdGhlci5tX29iamVj
dFN0b3JlSWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90
aGVyLm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKG1faW5kZXhJZCAhPSBvdGhlci5tX2luZGV4
SWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVyLm1faW5kZXhJ
ZCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUtleVByZWZpeDo6VHlwZSBLZXlQcmVmaXg6OnR5cGUo
KSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAg
QVNTRVJUKG1fb2JqZWN0U3RvcmVJZCAhPSBrSW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRl
eElkICE9IGtJbnZhbGlkSWQpOwotCi0gICAgaWYgKCFtX2RhdGFiYXNlSWQpCi0gICAgICAgIHJl
dHVybiBrR2xvYmFsTWV0YURhdGE7Ci0gICAgaWYgKCFtX29iamVjdFN0b3JlSWQpCi0gICAgICAg
IHJldHVybiBrRGF0YWJhc2VNZXRhRGF0YTsKLSAgICBpZiAobV9pbmRleElkID09IGtPYmplY3RT
dG9yZURhdGFJbmRleElkKQotICAgICAgICByZXR1cm4ga09iamVjdFN0b3JlRGF0YTsKLSAgICBp
ZiAobV9pbmRleElkID09IGtFeGlzdHNFbnRyeUluZGV4SWQpCi0gICAgICAgIHJldHVybiBrRXhp
c3RzRW50cnk7Ci0gICAgaWYgKG1faW5kZXhJZCA+PSBrTWluaW11bUluZGV4SWQpCi0gICAgICAg
IHJldHVybiBrSW5kZXhEYXRhOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGtJbnZhbGlkVHlwZTsKLX0KLQotVmVjdG9yPGNoYXI+IFNjaGVtYVZlcnNpb25LZXk6OmVu
Y29kZSgpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hh
cj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrU2No
ZW1hVmVyc2lvblR5cGVCeXRlKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+
IE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeCgwLCAw
LCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5h
cHBlbmQoZW5jb2RlQnl0ZShrTWF4RGF0YWJhc2VJZFR5cGVCeXRlKSk7Ci0gICAgcmV0dXJuIHJl
dDsKLX0KLQotRGF0YWJhc2VGcmVlTGlzdEtleTo6RGF0YWJhc2VGcmVlTGlzdEtleSgpCi0gICAg
OiBtX2RhdGFiYXNlSWQoLTEpCi17Ci19Ci0KLWNvbnN0IGNoYXIqIERhdGFiYXNlRnJlZUxpc3RL
ZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNl
RnJlZUxpc3RLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0
IGNoYXIgKnAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOwotICAg
IGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9kYXRhYmFz
ZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCgh
cHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQo
dHlwZUJ5dGUsIHR5cGVCeXRlID09IGtEYXRhYmFzZUZyZWVMaXN0VHlwZUJ5dGUpOwotICAgIGlm
IChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlVmFySW50
KHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VJZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRh
YmFzZUZyZWVMaXN0S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIEtleVBy
ZWZpeCBwcmVmaXgoMCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNv
ZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0RhdGFiYXNlRnJlZUxpc3RUeXBlQnl0
ZSkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KGRhdGFiYXNlSWQpKTsKLSAgICByZXR1
cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VGcmVlTGlzdEtleTo6ZW5jb2RlTWF4
S2V5KCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKElOVDY0X01BWCk7Ci19Ci0KLWludDY0X3QgRGF0
YWJhc2VGcmVlTGlzdEtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZGF0
YWJhc2VJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUlkOwotfQotCi1pbnQgRGF0YWJh
c2VGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBEYXRhYmFzZUZyZWVMaXN0S2V5JiBvdGhlcikg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDApOwotICAgIHJldHVybiBjb21w
YXJlSW50cyhtX2RhdGFiYXNlSWQsIG90aGVyLm1fZGF0YWJhc2VJZCk7Ci19Ci0KLWNvbnN0IGNo
YXIqIERhdGFiYXNlTmFtZUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgRGF0YWJhc2VOYW1lS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZp
eDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAm
cHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBwOwotICAgIEFTU0VSVCghcHJl
Zml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsK
LSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKLSAgICBB
U1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrRGF0YWJhc2VOYW1lVHlwZUJ5dGUp
OwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2Rl
U3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX29yaWdpbik7Ci0gICAgaWYgKCFw
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChw
LCBsaW1pdCwgcmVzdWx0LT5tX2RhdGFiYXNlTmFtZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRh
YmFzZU5hbWVLZXk6OmVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKLSAgICBWZWN0
b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0
ZShrRGF0YWJhc2VOYW1lVHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVN0cmluZ1dp
dGhMZW5ndGgob3JpZ2luKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3Ro
KGRhdGFiYXNlTmFtZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRh
YmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikK
LXsKLSAgICByZXR1cm4gZW5jb2RlKG9yaWdpbiwgIiIpOwotfQotCi1WZWN0b3I8Y2hhcj4gRGF0
YWJhc2VOYW1lS2V5OjplbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
KQotewotICAgIC8vIGp1c3QgYWZ0ZXIgb3JpZ2luIGluIGNvbGxhdGlvbiBvcmRlcgotICAgIHJl
dHVybiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4ob3JpZ2luICsgIlx4MDEiKTsKLX0KLQotaW50IERh
dGFiYXNlTmFtZUtleTo6Y29tcGFyZShjb25zdCBEYXRhYmFzZU5hbWVLZXkmIG90aGVyKQotewot
ICAgIGlmIChpbnQgeCA9IGNvZGVQb2ludENvbXBhcmUobV9vcmlnaW4sIG90aGVyLm1fb3JpZ2lu
KSkKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobV9kYXRh
YmFzZU5hbWUsIG90aGVyLm1fZGF0YWJhc2VOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+IERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSBt
ZXRhRGF0YVR5cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsK
LSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQo
ZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1PYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpPYmplY3RTdG9yZU1ldGFEYXRhS2V5KCkKLSAgICA6IG1fb2JqZWN0
U3RvcmVJZCgtMSkKLSAgICAsIG1fbWV0YURhdGFUeXBlKC0xKQotewotfQotCi1jb25zdCBjaGFy
KiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5
UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3Rh
cnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAg
IEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVj
dFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0g
bGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAq
cCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtPYmplY3RTdG9y
ZU1ldGFEYXRhVHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocmVzdWx0LT5t
X29iamVjdFN0b3JlSWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fbWV0YURhdGFUeXBl
KTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBtZXRhRGF0YVR5
cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0
b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0
ZShrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVW
YXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG1ldGFE
YXRhVHlwZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIHJl
dHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYLCBJTlQ2NF9NQVgpOwotfQotCi1WZWN0
b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKTsKLX0KLQotaW50NjRfdCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlSWQ7Ci19Ci1pbnQ2
NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om1ldGFEYXRhVHlwZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fbWV0YURhdGFUeXBlID49IDApOwotICAgIHJldHVybiBtX21ldGFEYXRhVHlwZTsK
LX0KLQotaW50IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAw
KTsKLSAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7Ci0gICAgaWYgKGludCB4ID0gY29t
cGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAg
ICByZXR1cm4geDsKLSAgICByZXR1cm4gbV9tZXRhRGF0YVR5cGUgLSBvdGhlci5tX21ldGFEYXRh
VHlwZTsKLX0KLQotSW5kZXhNZXRhRGF0YUtleTo6SW5kZXhNZXRhRGF0YUtleSgpCi0gICAgOiBt
X29iamVjdFN0b3JlSWQoLTEpCi0gICAgLCBtX2luZGV4SWQoLTEpCi0gICAgLCBtX21ldGFEYXRh
VHlwZSgwKQotewotfQotCi1jb25zdCBjaGFyKiBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUoY29u
c3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE1ldGFEYXRhS2V5KiByZXN1
bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJl
Zml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAg
IHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQo
IXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7
Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNo
YXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRl
ID09IGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVj
b2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhJZCk7Ci0gICAgaWYgKCFwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSA9ICpwKys7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLVZl
Y3RvcjxjaGFyPiBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgdW5zaWduZWQgY2hhciBtZXRh
RGF0YVR5cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKLSAg
ICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5j
b2RlQnl0ZShrSW5kZXhNZXRhRGF0YVR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVW
YXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KGluZGV4
SWQpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUobWV0YURhdGFUeXBlKSk7Ci0gICAgcmV0
dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICByZXR1
cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCwgMjU1KTsKLX0K
LQotaW50IEluZGV4TWV0YURhdGFLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhNZXRhRGF0YUtleSYg
b3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICBBU1NFUlQo
bV9pbmRleElkID49IDApOwotCi0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmplY3RT
dG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICBp
ZiAoaW50IHggPSBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVyLm1faW5kZXhJZCkpCi0gICAg
ICAgIHJldHVybiB4OwotICAgIHJldHVybiBtX21ldGFEYXRhVHlwZSAtIG90aGVyLm1fbWV0YURh
dGFUeXBlOwotfQotCi1pbnQ2NF90IEluZGV4TWV0YURhdGFLZXk6OmluZGV4SWQoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1faW5kZXhJZDsKLX0K
LQotT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6T2JqZWN0U3RvcmVGcmVlTGlzdEtleSgpCi0gICAg
OiBtX29iamVjdFN0b3JlSWQoLTEpCi17Ci19Ci0KLWNvbnN0IGNoYXIqIE9iamVjdFN0b3JlRnJl
ZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9i
amVjdFN0b3JlRnJlZUxpc3RLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4Owot
ICAgIGNvbnN0IGNoYXIgKnAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVm
aXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5t
X2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAg
QVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7Ci0gICAgQVNTRVJU
X1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga09iamVjdFN0b3JlRnJlZUxpc3RUeXBlQnl0
ZSk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBk
ZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLX0KLQotVmVj
dG9yPGNoYXI+IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFi
YXNlSWQsIDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0g
ICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZUZyZWVMaXN0VHlwZUJ5dGUpKTsK
LSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7Ci0gICAgcmV0dXJu
IHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29kZU1h
eEtleShpbnQ2NF90IGRhdGFiYXNlSWQpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlk
LCBJTlQ2NF9NQVgpOwotfQotCi1pbnQ2NF90IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6Om9iamVj
dFN0b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0g
ICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50IE9iamVjdFN0b3JlRnJlZUxpc3RL
ZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSYgb3RoZXIpCi17Ci0gICAg
Ly8gRklYTUU6IEl0IG1heSBzZWVtIHN0cmFuZ2UgdGhhdCB3ZSdyZSBub3QgY29tcGFyaW5nIGRh
dGFiYXNlIGlkJ3MsCi0gICAgLy8gYnV0IHRoYXQgY29tcGFyaXNvbiB3aWxsIGhhdmUgYmVlbiBt
YWRlIGVhcmxpZXIuCi0gICAgLy8gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBtb3JlIGNs
ZWFyLCB0aG91Z2guLi4KLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIHJl
dHVybiBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCk7
Ci19Ci0KLUluZGV4RnJlZUxpc3RLZXk6OkluZGV4RnJlZUxpc3RLZXkoKQotICAgIDogbV9vYmpl
Y3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQotewotfQotCi1jb25zdCBjaGFyKiBJ
bmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBJbmRleEZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsK
LSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJl
Zml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgu
bV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAg
IEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VS
VF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtJbmRleEZyZWVMaXN0VHlwZUJ5dGUpOwot
ICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlVmFy
SW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQt
Pm1faW5kZXhJZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOwotICAgIFZlY3Rv
cjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRl
KGtJbmRleEZyZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChv
YmplY3RTdG9yZUlkKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQoaW5kZXhJZCkpOwot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleEZyZWVMaXN0S2V5OjplbmNv
ZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0g
ICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgpOwot
fQotCi1pbnQgSW5kZXhGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBJbmRleEZyZWVMaXN0S2V5
JiBvdGhlcikKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIEFTU0VS
VChtX2luZGV4SWQgPj0gMCk7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmplY3RT
dG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICBy
ZXR1cm4gY29tcGFyZUludHMobV9pbmRleElkLCBvdGhlci5tX2luZGV4SWQpOwotfQotCi1pbnQ2
NF90IEluZGV4RnJlZUxpc3RLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VS
VChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0K
LQotaW50NjRfdCBJbmRleEZyZWVMaXN0S2V5OjppbmRleElkKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9pbmRleElkID49IDApOwotICAgIHJldHVybiBtX2luZGV4SWQ7Ci19Ci0KLS8vIEZJWE1F
OiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2Ug
YSBtYXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4g
dGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/Ci0vLyBDYW4gd2UgcmVtb3ZlIHRoaXM/Ci1j
b25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQs
IGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpCi17Ci0gICAg
S2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUo
c3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwot
ICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29i
amVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAg
PT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUg
PSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtPYmplY3RT
dG9yZU5hbWVzVHlwZUJ5dGUpOwotICAgIHJldHVybiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAs
IGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+IE9i
amVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwg
MCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQu
YXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSkpOwotICAgIHJldC5h
cHBlbmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChvYmplY3RTdG9yZU5hbWUpKTsKLSAgICByZXR1
cm4gcmV0OwotfQotCi1pbnQgT2JqZWN0U3RvcmVOYW1lc0tleTo6Y29tcGFyZShjb25zdCBPYmpl
Y3RTdG9yZU5hbWVzS2V5JiBvdGhlcikKLXsKLSAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSht
X29iamVjdFN0b3JlTmFtZSwgb3RoZXIubV9vYmplY3RTdG9yZU5hbWUpOwotfQotCi1JbmRleE5h
bWVzS2V5OjpJbmRleE5hbWVzS2V5KCkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLXsKLX0K
LQotLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgaW5kZXggaWRzLCBiZWNh
dXNlIGEgbWFwcGluZwotLy8gaXMga2VwdCBhdCBhIGhpZ2hlciBsZXZlbC4KLWNvbnN0IGNoYXIq
IEluZGV4TmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIEluZGV4TmFtZXNLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4OwotICAg
IGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgp
OwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2Rh
dGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgQVNT
RVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7Ci0gICAgQVNTRVJUX1VO
VVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4TmFtZXNLZXlUeXBlQnl0ZSk7Ci0gICAg
aWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHAgPSBkZWNvZGVWYXJJbnQo
cCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoIXApCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCBy
ZXN1bHQtPm1faW5kZXhOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4TmFtZXNLZXk6OmVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAw
KTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBl
bmQoZW5jb2RlQnl0ZShrSW5kZXhOYW1lc0tleVR5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlU3RyaW5n
V2l0aExlbmd0aChpbmRleE5hbWUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQgSW5kZXhO
YW1lc0tleTo6Y29tcGFyZShjb25zdCBJbmRleE5hbWVzS2V5JiBvdGhlcikKLXsKLSAgICBBU1NF
UlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1f
b2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0dXJuIHg7
Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobV9pbmRleE5hbWUsIG90aGVyLm1faW5kZXhO
YW1lKTsKLX0KLQotY29uc3QgY2hhciogT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoY29uc3Qg
Y2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgT2JqZWN0U3RvcmVEYXRhS2V5KiByZXN1bHQp
Ci17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4
OjpkZWNvZGUoc3RhcnQsIGVuZCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZp
eC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9pbmRleElkID09IGtTcGVj
aWFsSW5kZXhOdW1iZXIpOwotICAgIGlmIChwID09IGVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGVuZCwgJnJlc3VsdC0+bV9lbmNvZGVk
VXNlcktleSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNo
YXI+IGVuY29kZWRVc2VyS2V5KQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga1NwZWNpYWxJbmRleE51bWJlcik7Ci0gICAgVmVjdG9yPGNoYXI+IHJl
dCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZWRVc2VyS2V5KTsKLQot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZURhdGFLZXk6OmVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiB1c2VyS2V5KQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpKTsKLX0KLQotaW50IE9iamVjdFN0b3JlRGF0YUtl
eTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZURhdGFLZXkmIG90aGVyKQotewotICAgIHJldHVy
biBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkVXNlcktleSwgb3RoZXIubV9lbmNvZGVk
VXNlcktleSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBPYmplY3RTdG9yZURhdGFLZXk6OnVz
ZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAgICBkZWNvZGVJREJL
ZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29kZWRVc2VyS2V5LmVuZCgpLCBrZXkp
OwotICAgIHJldHVybiBrZXk7Ci19Ci0KLWNvbnN0IGludDY0X3QgT2JqZWN0U3RvcmVEYXRhS2V5
OjprU3BlY2lhbEluZGV4TnVtYmVyID0ga09iamVjdFN0b3JlRGF0YUluZGV4SWQ7Ci0KLWNvbnN0
IGNoYXIqIEV4aXN0c0VudHJ5S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNo
YXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4
OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJl
Zml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgu
bV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAg
QVNTRVJUKHByZWZpeC5tX2luZGV4SWQgPT0ga1NwZWNpYWxJbmRleE51bWJlcik7Ci0gICAgaWYg
KHAgPT0gZW5kKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZXh0cmFjdEVuY29kZWRJ
REJLZXkocCwgZW5kLCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKLX0KLQotVmVjdG9yPGNo
YXI+IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZEtleSkKLXsKLSAgICBLZXlQ
cmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtTcGVjaWFsSW5kZXhOdW1i
ZXIpOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFw
cGVuZChlbmNvZGVkS2V5KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4gRXhp
c3RzRW50cnlLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpKTsKLX0KLQotaW50IEV4
aXN0c0VudHJ5S2V5Ojpjb21wYXJlKGNvbnN0IEV4aXN0c0VudHJ5S2V5JiBvdGhlcikKLXsKLSAg
ICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2RlZFVzZXJLZXksIG90aGVyLm1f
ZW5jb2RlZFVzZXJLZXkpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gRXhpc3RzRW50cnlLZXk6
OnVzZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAgICBkZWNvZGVJ
REJLZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29kZWRVc2VyS2V5LmVuZCgpLCBr
ZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLWNvbnN0IGludDY0X3QgRXhpc3RzRW50cnlLZXk6
OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrRXhpc3RzRW50cnlJbmRleElkOwotCi1JbmRleERhdGFL
ZXk6OkluZGV4RGF0YUtleSgpCi0gICAgOiBtX2RhdGFiYXNlSWQoLTEpCi0gICAgLCBtX29iamVj
dFN0b3JlSWQoLTEpCi0gICAgLCBtX2luZGV4SWQoLTEpCi0gICAgLCBtX3NlcXVlbmNlTnVtYmVy
KC0xKQotewotfQotCi1jb25zdCBjaGFyKiBJbmRleERhdGFLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RGF0YUtleSogcmVzdWx0KQotewotICAg
IEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVjb2Rl
KHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZpeC5tX29i
amVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9pbmRleElkID49IGtNaW5pbXVtSW5k
ZXhJZCk7Ci0gICAgcmVzdWx0LT5tX2RhdGFiYXNlSWQgPSBwcmVmaXgubV9kYXRhYmFzZUlkOwot
ICAgIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkID0gcHJlZml4Lm1fb2JqZWN0U3RvcmVJZDsKLSAg
ICByZXN1bHQtPm1faW5kZXhJZCA9IHByZWZpeC5tX2luZGV4SWQ7Ci0gICAgcmVzdWx0LT5tX3Nl
cXVlbmNlTnVtYmVyID0gLTE7Ci0gICAgcmVzdWx0LT5tX2VuY29kZWRQcmltYXJ5S2V5ID0gbWlu
SURCS2V5KCk7Ci0KLSAgICBwID0gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgbGltaXQsICZyZXN1
bHQtPm1fZW5jb2RlZFVzZXJLZXkpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBbb3B0aW9uYWxdIHNlcXVlbmNlIG51bWJlcgotICAgIGlmIChwID09IGxpbWl0KQot
ICAgICAgICByZXR1cm4gcDsKLSAgICBwID0gIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0
LT5tX3NlcXVlbmNlTnVtYmVyKTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgLy8gW29wdGlvbmFsXSBwcmltYXJ5IGtleQotICAgIGlmIChwID09IGxpbWl0KQotICAgICAg
ICByZXR1cm4gcDsKLSAgICBwID0gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgbGltaXQsICZyZXN1
bHQtPm1fZW5jb2RlZFByaW1hcnlLZXkpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gcDsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFVzZXJLZXksIGNvbnN0IFZlY3RvcjxjaGFy
PiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCi17Ci0gICAgS2V5
UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICBW
ZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2Rl
ZFVzZXJLZXkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KHNlcXVlbmNlTnVtYmVyKSk7
Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVkUHJpbWFyeUtleSk7Ci0gICAgcmV0dXJuIHJldDsKLX0K
LQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgdXNl
cktleSkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIGVuY29kZUlEQktleSh1c2VyS2V5KSwgbWluSURCS2V5KCkpOwotfQotCi1WZWN0b3I8
Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICByZXR1cm4gZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIG1pbklEQktleSgpLCBtaW5JREJL
ZXkoKSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQot
ewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
bWF4SURCS2V5KCksIG1heElEQktleSgpLCBJTlQ2NF9NQVgpOwotfQotCi1pbnQgSW5kZXhEYXRh
S2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4RGF0YUtleSYgb3RoZXIsIGJvb2wgaWdub3JlRHVwbGlj
YXRlcykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDApOwotICAgIEFTU0VSVChtX29i
amVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKLSAgICBpZiAo
aW50IHggPSBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkVXNlcktleSwgb3RoZXIubV9l
bmNvZGVkVXNlcktleSkpCi0gICAgICAgIHJldHVybiB4OwotICAgIGlmIChpZ25vcmVEdXBsaWNh
dGVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoaW50IHggPSBjb21wYXJlRW5jb2RlZElE
QktleXMobV9lbmNvZGVkUHJpbWFyeUtleSwgb3RoZXIubV9lbmNvZGVkUHJpbWFyeUtleSkpCi0g
ICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBjb21wYXJlSW50cyhtX3NlcXVlbmNlTnVtYmVy
LCBvdGhlci5tX3NlcXVlbmNlTnVtYmVyKTsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6OmRh
dGFiYXNlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAg
cmV0dXJuIG1fZGF0YWJhc2VJZDsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6Om9iamVjdFN0
b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6OmluZGV4
SWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1f
aW5kZXhJZDsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEluZGV4RGF0YUtleTo6dXNlcktleSgp
IGNvbnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGRlY29kZUlEQktleShtX2Vu
Y29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVzZXJLZXkuZW5kKCksIGtleSk7Ci0gICAg
cmV0dXJuIGtleTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEluZGV4RGF0YUtleTo6cHJpbWFy
eUtleSgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGRlY29kZUlEQktl
eShtX2VuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIG1fZW5jb2RlZFByaW1hcnlLZXkuZW5kKCks
IGtleSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNv
ZGluZwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0j
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJDb2RpbmdfaAotI2RlZmluZSBJREJM
ZXZlbERCQ29kaW5nX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShM
RVZFTERCKQotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJLZXk7Ci1jbGFzcyBMZXZlbERCU2xpY2U7Ci0KLW5hbWVzcGFjZSBJREJM
ZXZlbERCQ29kaW5nIHsKLQotY29uc3QgdW5zaWduZWQgY2hhciBrTWluaW11bUluZGV4SWQgPSAz
MDsKLQotVmVjdG9yPGNoYXI+IGVuY29kZUJ5dGUodW5zaWduZWQgY2hhcik7Ci1WZWN0b3I8Y2hh
cj4gbWF4SURCS2V5KCk7Ci1WZWN0b3I8Y2hhcj4gbWluSURCS2V5KCk7Ci1WZWN0b3I8Y2hhcj4g
ZW5jb2RlSW50KGludDY0X3QpOwotaW50NjRfdCBkZWNvZGVJbnQoY29uc3QgY2hhciogYmVnaW4s
IGNvbnN0IGNoYXIqIGVuZCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlVmFySW50KGludDY0X3QpOwot
Y29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIgKnAsIGNvbnN0IGNoYXIqIGxpbWl0
LCBpbnQ2NF90JiBmb3VuZEludCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlU3RyaW5nKGNvbnN0IFN0
cmluZyYpOwotU3RyaW5nIGRlY29kZVN0cmluZyhjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBl
bmQpOwotVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5nJik7
Ci1jb25zdCBjaGFyKiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqIHAsIGNvbnN0
IGNoYXIqIGxpbWl0LCBTdHJpbmcmIGZvdW5kU3RyaW5nKTsKLWludCBjb21wYXJlRW5jb2RlZFN0
cmluZ3NXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBsaW1pdFAsIGNvbnN0
IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdFEpOwotVmVjdG9yPGNoYXI+IGVuY29kZURvdWJs
ZShkb3VibGUpOwotY29uc3QgY2hhciogZGVjb2RlRG91YmxlKGNvbnN0IGNoYXIqIHAsIGNvbnN0
IGNoYXIqIGxpbWl0LCBkb3VibGUqKTsKLXZvaWQgZW5jb2RlSURCS2V5KGNvbnN0IElEQktleSYs
IFZlY3RvcjxjaGFyPiYgaW50byk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlSURCS2V5KGNvbnN0IElE
QktleSYpOwotY29uc3QgY2hhciogZGVjb2RlSURCS2V5KGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNo
YXIqIGxpbWl0LCBSZWZQdHI8SURCS2V5PiYgZm91bmRLZXkpOwotY29uc3QgY2hhciogZXh0cmFj
dEVuY29kZWRJREJLZXkoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBWZWN0
b3I8Y2hhcj4qIHJlc3VsdCk7Ci1pbnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IFZlY3Rv
cjxjaGFyPiYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotCi1pbnQgY29tcGFyZShjb25zdCBMZXZl
bERCU2xpY2UmLCBjb25zdCBMZXZlbERCU2xpY2UmLCBib29sIGluZGV4S2V5cyA9IGZhbHNlKTsK
LQotY2xhc3MgS2V5UHJlZml4IHsKLXB1YmxpYzoKLSAgICBLZXlQcmVmaXgoKTsKLSAgICBLZXlQ
cmVmaXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgS2V5UHJlZml4KiByZXN1bHQpOwotICAgIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoKSBjb25zdDsKLSAgICBpbnQgY29tcGFyZShjb25zdCBLZXlQcmVmaXgmIG90
aGVyKSBjb25zdDsKLQotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIGtHbG9iYWxNZXRhRGF0YSwK
LSAgICAgICAga0RhdGFiYXNlTWV0YURhdGEsCi0gICAgICAgIGtPYmplY3RTdG9yZURhdGEsCi0g
ICAgICAgIGtFeGlzdHNFbnRyeSwKLSAgICAgICAga0luZGV4RGF0YSwKLSAgICAgICAga0ludmFs
aWRUeXBlCi0gICAgfTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0OwotCi0gICAgaW50NjRfdCBt
X2RhdGFiYXNlSWQ7Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgaW50NjRfdCBt
X2luZGV4SWQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrSW52YWxpZElkID0gLTE7Ci19
OwotCi1jbGFzcyBTY2hlbWFWZXJzaW9uS2V5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZSgpOwotfTsKLQotY2xhc3MgTWF4RGF0YWJhc2VJZEtleSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNl
RnJlZUxpc3RLZXkgewotcHVibGljOgotICAgIERhdGFiYXNlRnJlZUxpc3RLZXkoKTsKLSAgICBz
dGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgRGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
ZW5jb2RlTWF4S2V5KCk7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3Q7Ci0gICAgaW50
IGNvbXBhcmUoY29uc3QgRGF0YWJhc2VGcmVlTGlzdEtleSYgb3RoZXIpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotfTsKLQotY2xhc3MgRGF0YWJhc2VOYW1l
S2V5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VOYW1lS2V5KiByZXN1bHQpOwotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNaW5L
ZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hh
cj4gZW5jb2RlU3RvcEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7Ci0gICAgU3Ry
aW5nIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0gICAgU3RyaW5nIGRhdGFi
YXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VOYW1lOyB9Ci0gICAgaW50IGNvbXBh
cmUoY29uc3QgRGF0YWJhc2VOYW1lS2V5JiBvdGhlcik7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5n
IG1fb3JpZ2luOyAvLyBGSVhNRTogU3RvcmUgZW5jb2RlZCBzdHJpbmdzLCBvciBqdXN0IHBvaW50
ZXJzLgotICAgIFN0cmluZyBtX2RhdGFiYXNlTmFtZTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlTWV0
YURhdGFLZXkgewotcHVibGljOgotICAgIGVudW0gTWV0YURhdGFUeXBlIHsKLSAgICAgICAga09y
aWdpbk5hbWUgPSAwLAotICAgICAgICBrRGF0YWJhc2VOYW1lID0gMSwKLSAgICAgICAga1VzZXJW
ZXJzaW9uID0gMiwKLSAgICAgICAga01heE9iamVjdFN0b3JlSWQgPSAzCi0gICAgfTsKLQotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgTWV0YURhdGFU
eXBlKTsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgewotcHVibGljOgotICAg
IE9iamVjdFN0b3JlTWV0YURhdGFLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2Rl
KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBtZXRhRGF0YVR5cGUpOwot
ICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCk7
Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNv
bnN0OwotICAgIGludDY0X3QgbWV0YURhdGFUeXBlKCkgY29uc3Q7Ci0gICAgaW50IGNvbXBhcmUo
Y29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIpOwotCi1wcml2YXRlOgotICAgIGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9tZXRhRGF0YVR5cGU7IC8vIEZJ
WE1FOiBNYWtlIHRoaXMgYSBieXRlLgotfTsKLQotY2xhc3MgSW5kZXhNZXRhRGF0YUtleSB7Ci1w
dWJsaWM6Ci0gICAgSW5kZXhNZXRhRGF0YUtleSgpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBk
ZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE1ldGFEYXRh
S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVk
IGNoYXIgbWV0YURhdGFUeXBlKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgaW50IGNv
bXBhcmUoY29uc3QgSW5kZXhNZXRhRGF0YUtleSYgb3RoZXIpOwotICAgIGludDY0X3QgaW5kZXhJ
ZCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhRGF0YVR5cGU7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICB1bnNpZ25lZCBjaGFyIG1fbWV0YURh
dGFUeXBlOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSB7Ci1wdWJsaWM6Ci0g
ICAgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSgpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNv
ZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZUZyZWVM
aXN0S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOwotICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCgpIGNvbnN0OwotICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRnJlZUxp
c3RLZXkmIG90aGVyKTsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
LX07Ci0KLWNsYXNzIEluZGV4RnJlZUxpc3RLZXkgewotcHVibGljOgotICAgIEluZGV4RnJlZUxp
c3RLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhGcmVlTGlzdEtleSogcmVzdWx0KTsKLSAgICBzdGF0
aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29k
ZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAg
aW50IGNvbXBhcmUoY29uc3QgSW5kZXhGcmVlTGlzdEtleSYgb3RoZXIpOwotICAgIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9pbmRl
eElkOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVOYW1lc0tleSB7Ci1wdWJsaWM6Ci0gICAgLy8g
RklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0b3JlIGlkcywgYmVj
YXVzZSBhIG1hcHBpbmcKLSAgICAvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/Ci0gICAgLy8gQ2FuIHdlIHJl
bW92ZSB0aGlzPwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3Rh
cnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpOwotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBvYmplY3RTdG9yZU5hbWUpOwotICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3Jl
TmFtZXNLZXkmIG90aGVyKTsKLSAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RTdG9yZU5hbWU7IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9vYmpl
Y3RTdG9yZU5hbWU7IC8vIEZJWE1FOiBTdG9yZSB0aGUgZW5jb2RlZCBzdHJpbmcsIG9yIGp1c3Qg
cG9pbnRlcnMgdG8gaXQuCi19OwotCi1jbGFzcyBJbmRleE5hbWVzS2V5IHsKLXB1YmxpYzoKLSAg
ICBJbmRleE5hbWVzS2V5KCk7Ci0gICAgLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxv
b2sgdXAgaW5kZXggaWRzLCBiZWNhdXNlIGEgbWFwcGluZwotICAgIC8vIGlzIGtlcHQgYXQgYSBo
aWdoZXIgbGV2ZWwuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBz
dGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4TmFtZXNLZXkqIHJlc3VsdCk7Ci0gICAgc3Rh
dGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKLSAgICBpbnQgY29tcGFyZShjb25z
dCBJbmRleE5hbWVzS2V5JiBvdGhlcik7Ci0gICAgU3RyaW5nIGluZGV4TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhOYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX29iamVjdFN0
b3JlSWQ7Ci0gICAgU3RyaW5nIG1faW5kZXhOYW1lOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVE
YXRhS2V5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIE9iamVjdFN0b3JlRGF0YUtleSogcmVzdWx0KTsK
LSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+IGVuY29kZWRVc2VyS2V5KTsKLSAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKLSAgICBpbnQgY29tcGFyZShj
b25zdCBPYmplY3RTdG9yZURhdGFLZXkmIG90aGVyKTsKLSAgICBQYXNzUmVmUHRyPElEQktleT4g
dXNlcktleSgpIGNvbnN0OwotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGtTcGVjaWFsSW5kZXhO
dW1iZXI7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPGNoYXI+IG1fZW5jb2RlZFVzZXJLZXk7Ci19
OwotCi1jbGFzcyBFeGlzdHNFbnRyeUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRy
eUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNv
ZGVkS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKLSAgICBp
bnQgY29tcGFyZShjb25zdCBFeGlzdHNFbnRyeUtleSYgb3RoZXIpOwotICAgIFBhc3NSZWZQdHI8
SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrU3Bl
Y2lhbEluZGV4TnVtYmVyOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRV
c2VyS2V5OwotfTsKLQotY2xhc3MgSW5kZXhEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBJbmRleERh
dGFLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFVzZXJLZXks
IGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3Qgc2VxdWVuY2VO
dW1iZXIgPSAwKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmIHVzZXJLZXkpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwot
ICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIGludCBjb21wYXJl
KGNvbnN0IEluZGV4RGF0YUtleSYgb3RoZXIsIGJvb2wgaWdub3JlRHVwbGljYXRlcyk7Ci0gICAg
aW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3Q7Ci0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlkKCkg
Y29uc3Q7Ci0gICAgaW50NjRfdCBpbmRleElkKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJREJL
ZXk+IHVzZXJLZXkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9pbmRleElkOwotICAgIFZlY3Rvcjxj
aGFyPiBtX2VuY29kZWRVc2VyS2V5OwotICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRQcmltYXJ5
S2V5OwotICAgIGludDY0X3QgbV9zZXF1ZW5jZU51bWJlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IElEQkxldmVsREJDb2RpbmcKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRp
ZiAvLyBJREJMZXZlbERCQ29kaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyODEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUg
IklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlRy
YWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0
aW9uID0gSURCQ3Vyc29yOjpORVhUOwotCi1JREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUo
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3Jl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX2JhY2tlbmQoaWRiT2JqZWN0
U3RvcmUpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCht
X2JhY2tlbmQpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICAvLyBXZSBwYXNzIGEg
cmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KLSAgICBy
ZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLX0KLQotU3RyaW5nIElEQk9iamVjdFN0b3JlOjpu
YW1lKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpuYW1lIik7Ci0g
ICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOwotfQotCi1TdHJpbmcgSURCT2JqZWN0U3RvcmU6
OmtleVBhdGgoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmtleVBh
dGgiKTsKLSAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXlQYXRoKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKLSAgICByZXR1cm4gbV9i
YWNrZW5kLT5pbmRleE5hbWVzKCk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uKiBJREJPYmplY3RTdG9y
ZTo6dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6
OnRyYW5zYWN0aW9uIik7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLSAgICBpZiAoa2V5
ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOwotICAgIGlmIChrZXkgJiYgKGtleS0+
dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5k
LT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5
LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6cHV0Iik7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJ
bnZhbGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIpOwotICAgIGlmICgha2V5UmFu
Z2UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKGtleVJhbmdlLCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAg
ICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRlIik7Ci0gICAgaWYgKCFrZXkg
fHwgIWtleS0+dmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rp
b24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6Y2xlYXIiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlv
bi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5
RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJl
bGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBjb25zdCBP
cHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCIpOwotICAgIGlmICghSURCSXNWYWxpZEtl
eVBhdGgoa2V5UGF0aCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9O
X1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgdW5p
cXVlID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5nZXQoInVuaXF1ZSIsIHVuaXF1ZSk7Ci0KLSAgICBi
b29sIG11bHRpRW50cnkgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgibXVsdGlFbnRyeSIsIG11
bHRpRW50cnkpOwotCi0gICAgLy8gRklYTUU6IFdoZW4gQXJyYXktdHlwZSBrZXlQYXRocyBhcmUg
c3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBpcyBBcnJheSBhbmQgbXVsdGlF
bnRyeSBpcyB0cnVlLgotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUs
IG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
aW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNo
b3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCi0gICAg
aWYgKCFpbmRleEJhY2tlbmQpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJREJJbmRl
eD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsK
LSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjppbmRleCIpOwotICAgIGlmICht
X3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
SURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOwotICAgIGlm
IChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKLQot
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFj
a2VuZC0+aW5kZXgobmFtZSwgZWMpOwotICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7
IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBl
eGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCi0gICAgaWYgKCFpbmRleEJhY2tlbmQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4
OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQo
KSk7Ci0gICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwotICAgIHJldHVybiBpbmRleC5y
ZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVJ
bmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklE
Qk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7Ci0gICAgaWYgKGRpcmVjdGlvbiAhPSBJREJDdXJz
b3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgJiYg
ZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpQ
UkVWX05PX0RVUExJQ0FURSkgewotICAgICAgICAvLyBGSVhNRTogTWF5IG5lZWQgdG8gY2hhbmdl
IHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dp
P2lkPTExNDA2Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcik7Ci0gICAgbV9iYWNrZW5k
LT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlE
ZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtF
YXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVz
dC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmU6OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJh
bmdlOjpvbmx5KGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwotfQotCi12b2lk
IElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKLXsKLSAgICBBU1NFUlQobV90
cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7Ci0KLSAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVz
LgotICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCT2JqZWN0U3RvcmVfaAotI2RlZmluZSBJREJPYmpl
Y3RTdG9yZV9oCi0KLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJJbmRleC5o
IgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVk
ZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVz
dC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiT3B0aW9uc09iamVj
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVN0cmluZ0xp
c3Q7Ci1jbGFzcyBJREJBbnk7Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCT2JqZWN0U3RvcmU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShpZGJPYmplY3RT
dG9yZSwgdHJhbnNhY3Rpb24pKTsKLSAgICB9Ci0gICAgfklEQk9iamVjdFN0b3JlKCkgeyB9Ci0K
LSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7Ci0gICAgSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogVHJ5IHRv
IG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBhZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBwdXQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KLSAgICBQYXNzUmVmUHRyPElEQklu
ZGV4PiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgs
IE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsg
fSAKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVh
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3Qg
T3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQkluZGV4
PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJik7IAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNv
bnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNl
cHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKLQotcHJpdmF0
ZToKLSAgICBJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZy
b21QZW5kaW5nTGlzdCgpOwotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4gPiBJREJJ
bmRleE1hcDsKLSAgICBJREJJbmRleE1hcCBtX2luZGV4TWFwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKLQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCi0gICAg
XSBJREJPYmplY3RTdG9yZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1
cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBrZXlQ
YXRoOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBpbmRleE5hbWVz
OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247
Ci0KLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
cHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkg
a2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGFkZChpbiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKLSAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlvbl0gSURC
UmVxdWVzdCBkZWxldGUoaW4gSURCS2V5UmFuZ2Uga2V5UmFuZ2UpCi0gICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVs
ZXRlKGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3QgY2xlYXIoKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0g
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGdldChp
biBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9w
ZW5DdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKLSAgICAgICAgSURCSW5kZXggY3JlYXRlSW5kZXgoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIERPTVN0cmluZyBrZXlQYXRoLCBpbiBbT3B0aW9uYWxdIE9wdGlvbnNPYmplY3Qgb3B0
aW9ucykKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAg
ICBJREJJbmRleCBpbmRleChpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAo
SURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGRlbGV0ZUluZGV4KGluIERPTVN0
cmluZyBuYW1lKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0g
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50
KGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UpCi0gICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gSURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAJKHJldmlz
aW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklEQkNh
bGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleS5o
IgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZElt
cGwuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQotewotfQot
Ci1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElE
QkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAsIG1faWQoaWQpCi0gICAgLCBtX25hbWUobmFtZSkK
LSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNy
ZW1lbnQpCi0gICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCi17Ci0gICAgbG9hZEluZGV4
ZXMoKTsKLX0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICwgbV9kYXRh
YmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX2lkKEludmFsaWRJZCkKLSAgICAsIG1fbmFtZShu
YW1lKQotICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCi0gICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0
b0luY3JlbWVudCkKLSAgICAsIG1fYXV0b0luY3JlbWVudE51bWJlcigtMSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5h
bWVzKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERP
TVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgaW5kZXhOYW1lcy0+c29y
dCgpOwotICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHBycEtleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCBrZXksIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOwotICAgIFN0cmlu
ZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkp
OwotICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOwotICAgIFZlY3RvcjxSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKLSAgICB2YWx1ZXMuYXBwZW5kKHZhbHVl
KTsKLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOwotICAgIElEQktleVBhdGhCYWNr
ZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1
ZXMsIGtleVBhdGgsIGtleXMpOwotICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOwotICAgIHJldHVybiBrZXlzWzBd
LnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKLXsK
LSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluamVjdEtleUludG9L
ZXlQYXRoIik7Ci0gICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKLX0KLQotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7Ci0gICAgaWYgKHRy
YW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gdGhpczsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0
cjsKLQotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBi
b29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwotICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKLQotICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKLSAgICAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVudCAmJiAha2V5
KSB7Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewot
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBh
dGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYg
KGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWF1dG9JbmNyZW1lbnQgJiYgIWtl
eVBhdGhLZXkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoLTEpOwotICAg
ICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmpl
Y3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwgdmFsdWUsIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5ICYmICFrZXktPnZhbGlkKCkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5
RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOwotICAgICAgICAgICAg
aWYgKGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VS
VChrZXkpOwotICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1f
a2V5UGF0aC5pc051bGwoKTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdl
dCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgLy8gRklY
TUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5
IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9i
amVjdFN0b3JlKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCi17Ci0gICAgb2Jq
ZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci19Ci0KLXZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCIpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFs
dWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotCi0gICAgaWYgKHB1dE1vZGUg
IT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9i
amVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0
aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwotICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgewotICAgICAgICAgICAgQVNTRVJUKCFrZXkpOwotICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVj
dFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkpCi0gICAgICAg
ICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXV0b0lu
Y3JlbWVudCkgewotICAgICAgICAgICAgaWYgKCFrZXkpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXko
KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5q
ZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBh
dGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMg
c2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2Vz
IG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGlu
c2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRlIGdlbmVyYXRvciBzdGF0ZSBz
aG91bGQgZ28gaGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2FuLgotICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGtleSAmJiBrZXktPnZhbGlkKCkpOwot
Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYg
b2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVj
dFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKSkgewotICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKTsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFk
eSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleXM7Ci0gICAgZm9yIChJbmRl
eE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7Ci0KLSAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgp
LCBpbmRleC0+a2V5UGF0aCgpKTsKLSAgICAgICAgaWYgKCFpbmRleEtleSkgewotICAgICAgICAg
ICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGluZGV4S2V5LT52YWxpZCgpKTsKLQot
ICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBlKCkgIT0g
SURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5n
ZXQoKSwga2V5LmdldCgpKSkgewotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwg
Ik9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRv
ZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbmRleC0+bXVsdGlFbnRyeSgp
ICYmIGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpIHsKLSAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewot
ICAgICAgICAgICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXktPmFy
cmF5KClbal0uZ2V0KCksIGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0
U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5
UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyBy
ZXF1aXJlbWVudHMuIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW5kZXhLZXlzLmFw
cGVuZChpbmRleEtleS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSB0aGlzIHBv
aW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0
aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLQotICAgIGlmICghb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRh
YmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Ig
d3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgaSA9IDA7Ci0gICAg
Zm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkgewotICAg
ICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQotICAgICAgICAgICAgY29udGludWU7IC8v
IFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGlu
IHRoZSBkYXRhYmFzZSB5ZXQuCi0KLSAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5n
U3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlk
LCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNh
dGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMu
Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0
byBzdGFibGUgc3RvcmFnZS4iKSk7Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5kZXhLZXlz
W2ldKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gaW5kZXhLZXlzW2ldOwotCi0gICAgICAgIGlmICghaW5kZXgtPm11bHRpRW50cnkoKSB8
fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG9i
amVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSwg
KmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUg
YW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KLSAgICAgICAgICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgQVNTRVJUKGluZGV4LT5tdWx0aUVudHJ5KCkpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewotICAgICAgICAg
ICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JS
ZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4
LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVj
aWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVy
cm9ycy4KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLSAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBwcnBLZXk7Ci0gICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6
b25seShrZXksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0
ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwg
ZWMpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAg
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLQotICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNr
cykpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50
aWZpZXI7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7
Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdT
dG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBk
b2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgotCi0gICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFG
b3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0
LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpOwotCi0gICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9z
ZSgpOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwot
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkp
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBvYmplY3RTdG9yZS0+bV9iYWNr
aW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCkpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jbGFzcyBQb3B1
bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFj
a2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOwotICAgICAgICBSZWZQdHI8SURCS2V5
PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1faW5k
ZXgtPmtleVBhdGgoKSk7Ci0KLSAgICAgICAgaWYgKCFpbmRleEtleSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIGlmICghbV9pbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4
S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKLSAgICAgICAgICAgIGlmICghbV9p
bmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERh
dGFGb3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCks
ICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXgtPm11bHRp
RW50cnkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6
OkFycmF5VHlwZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4S2V5
LT5hcnJheSgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5h
ZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUucHV0SW5kZXhE
YXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgp
LCAqaW5kZXhLZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZpZXIpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIElEQkJhY2tpbmdTdG9yZSYgbV9i
YWNraW5nU3RvcmU7Ci0gICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci19
OwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotewot
ICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZS5mb3JFYWNo
T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkp
IHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV9pbmRleGVzLmNvbnRhaW5zKG5h
bWUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIHRoaXMs
IG5hbWUsIG1fbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKLSAgICBBU1NFUlQo
aW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rp
b25QdHIpLAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7Ci0gICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgaW50NjRfdCBpZDsKLSAgICBpZiAoIW9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4
LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7Ci0gICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5kZXgtPnNldElk
KGlkKTsKLQotICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0
b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgp
KSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotfQotCi1QYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFt
ZSk7Ci0gICAgaWYgKCFpbmRleCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGlu
ZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICh0cmFuc2FjdGlv
bi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2lu
ZGV4ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7
Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25Q
dHIgPSB0cmFuc2FjdGlvbjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0g
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAotICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkg
ewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9pbmRleGVzLnJlbW92ZShuYW1l
KTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCi17Ci0gICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwot
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLX0KLQotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSA9IHBycFJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0
aW9uUHRyKSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOwotICAgIH0KLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOwotICAgIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih0bXBEaXJl
Y3Rpb24pOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2Uu
Z2V0KCksIGRpcmVjdGlvbik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5n
U3RvcmVDdXJzb3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0
KCkpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotfQotCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNr
cywgdHJhbnNhY3Rpb24pKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7Ci0gICAg
dWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlk
KCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3It
PmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgp
OwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVy
VmFsdWUoY291bnQpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcygpCi17Ci0gICAgVmVjdG9yPGludDY0X3Q+IGlkczsKLSAgICBWZWN0b3I8U3RyaW5n
PiBuYW1lczsKLSAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKLSAgICBWZWN0b3I8Ym9vbD4g
dW5pcXVlRmxhZ3M7Ci0gICAgVmVjdG9yPGJvb2w+IG11bHRpRW50cnlGbGFnczsKLSAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywgbmFtZXMsIGtl
eVBhdGhzLCB1bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsKLQotICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBp
ZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkp
OwotICAgIEFTU0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1faW5k
ZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUs
IGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRyeUZsYWdzW2ldKSk7Ci19Ci0K
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotewot
ICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5uYW1lKCkp
KTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFtZSgpKTsKLX0K
LQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotewotICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4OwotICAgIEFTU0VS
VCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFtZSgpKSk7Ci0g
ICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQdHIp
OwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
QXV0b0luY3JlbWVudEtleSgpCi17Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDAp
Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1i
ZXIrKyk7Ci0KLSAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
YmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihtX2RhdGFiYXNlSWQsIGlkKCkp
KTsKLSAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVy
KyspOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsX2gKLQotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDsKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gY3JlYXRlKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBkYXRhYmFz
ZUlkLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwotICAgIH0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNr
aW5nU3RvcmUsIGRhdGFiYXNlSWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpOwotCi0gICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLSAgICBpbnQ2NF90IGlkKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2lkICE9IEludmFsaWRJZCk7Ci0gICAgICAgIHJldHVy
biBtX2lkOwotICAgIH0KLSAgICB2b2lkIHNldElkKGludDY0X3QgaWQpIHsgbV9pZCA9IGlkOyB9
Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUlkOyB9
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0g
ICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UGF0aDsgfQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9J
bmNyZW1lbnQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8
SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJh
Y2tpbmdTdG9yZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKLQotcHJpdmF0ZToKLSAgICBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCk7Ci0gICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNr
aW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwotCi0gICAgdm9pZCBsb2FkSW5k
ZXhlcygpOwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5BdXRvSW5jcmVtZW50S2V5KCk7Ci0g
ICAgdm9pZCByZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpIHsgbV9hdXRvSW5jcmVtZW50TnVt
YmVyID0gLTE7IH0KLQotICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2
b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4s
IFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgZGVs
ZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICBzdGF0aWMg
dm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICBzdGF0aWMg
dm9pZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4pOwotCi0gICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlv
biBhYm9ydCB0YXNrcy4KLSAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGFkZElu
ZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotICAgIHN0
YXRpYyB2b2lkIHJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLQotICAgIGludDY0X3QgbV9kYXRh
YmFzZUlkOwotICAgIGludDY0X3QgbV9pZDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmlu
ZyBtX2tleVBhdGg7Ci0gICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKLSAg
ICBJbmRleE1hcCBtX2luZGV4ZXM7Ci0gICAgaW50IG1fYXV0b0luY3JlbWVudE51bWJlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgSURCQ2FsbGJhY2tz
OwotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCS2V5OwotY2xhc3Mg
SURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFz
cyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0K
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KLQotICAgIHZp
cnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0
aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5k
ZXhOYW1lcygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJ
REJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICBlbnVtIFB1dE1vZGUgewotICAg
ICAgICBBZGRPclVwZGF0ZSwKLSAgICAgICAgQWRkT25seSwKLSAgICAgICAgQ3Vyc29yVXBkYXRl
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5Piwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAw
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmlj
Lmg+Ci0KLXVzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UaHJlYWRTcGVjaWZpYzxWZWN0b3I8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25zKCkKLXsKLSAg
ICAvLyBGSVhNRTogTW92ZSB0aGUgVmVjdG9yIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8g
YXZvaWQgZGVhbGluZyB3aXRoCi0gICAgLy8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UuCi0gICAgQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljKFRocmVhZFNwZWNpZmljPFZlY3RvcjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqPiA+KiwgdHJhbnNhY3Rpb25zID0gbmV3IFRocmVhZFNwZWNp
ZmljPFZlY3RvcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqPiA+KTsKLSAgICByZXR1
cm4gKnRyYW5zYWN0aW9uczsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
OjphZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbikKLXsKLSAgICB0cmFuc2FjdGlvbnMoKS0+YXBwZW5kKHRyYW5zYWN0aW9uKTsK
LX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Kj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJhbnNhY3Rpb25zKCk7Ci0gICAgc2l6ZV90IHBvcyA9
IHRyYW5zYWN0aW9uTGlzdC0+ZmluZCh0cmFuc2FjdGlvbik7Ci0gICAgaWYgKHBvcyA9PSBub3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb25MaXN0LT5yZW1vdmUocG9z
KTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphYm9ydFBlbmRpbmdU
cmFuc2FjdGlvbnMoKQotewotICAgIFRocmVhZFNwZWNpZmljPFZlY3RvcjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqPiA+JiB0cmFuc2FjdGlvbkxpc3QgPSB0cmFuc2FjdGlvbnMoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zYWN0aW9ucygpLT5zaXplKCk7ICsraSkK
LSAgICAgICAgdHJhbnNhY3Rpb25MaXN0LT5hdChpKS0+YWJvcnQoKTsKLSAgICAvLyBGSVhNRTog
RXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlvdXQgdGVzdC4KLSAgICB0cmFu
c2FjdGlvbkxpc3QtPmNsZWFyKCk7Ci19Ci0KLX07Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlBl
bmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0aW9u
TW9uaXRvcl9oCi0jZGVmaW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotCi0vLyBUaGlzIGNsYXNzIGtlZXBzIHRy
YWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKLS8vIEph
dmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rpb24gaXMgJ3BlbmRpbmcnIGlm
IG5vIGFzeW5jaHJvbm91cwotLy8gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBxdWV1ZWQgZm9yIGl0
IChlLmcuIGFuIElEQk9iamVjdFN0b3JlOjpwdXQoKSBvciBzaW1pbGFyKS4KLS8vIEFsbCBwZW5k
aW5nIHRyYW5zYWN0aW9ucyBhcmUgYWJvcnRlZCBhcyBzb29uIGFzIGV4ZWN1dGlvbiByZXR1cm5z
IGZyb20KLS8vIHRoZSBzY3JpcHQgZW5naW5lLgotCi1jbGFzcyBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGRQZW5kaW5nVHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVt
b3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwot
ICAgIHN0YXRpYyB2b2lkIGFib3J0UGVuZGluZ1RyYW5zYWN0aW9ucygpOwotCi1wcml2YXRlOgot
ICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYg
Ly8gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDM0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVk
ZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9w
dFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSkpOwotICAg
IHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKLX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKLSAgICAsIG1fZXJy
b3JDb2RlKDApCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICwgbV9yZWFkeVN0YXRlKExPQURJTkcpCi0gICAgLCBtX3JlcXVlc3RG
aW5pc2hlZChmYWxzZSkKLSAgICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCi0gICAgLCBtX2Nv
bnRleHRTdG9wcGVkKGZhbHNlKQotICAgICwgbV9jdXJzb3JUeXBlKElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKQotICAgICwgbV9jdXJzb3IoMCkKLXsKLSAgICBp
ZiAobV90cmFuc2FjdGlvbikgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZWdpc3RlclJlcXVl
c3QodGhpcyk7Ci0gICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBl
bmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCkpOwotICAgIH0KLX0KLQot
SURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0g
RE9ORSB8fCBtX3JlYWR5U3RhdGUgPT0gRWFybHlEZWF0aCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKLSAgICBpZiAobV90cmFuc2FjdGlvbikKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+
dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQW55PiBJREJSZXF1
ZXN0OjpyZXN1bHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlT
dGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9B
TExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX3Jlc3Vs
dDsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6ZXJyb3JDb2RlKEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgewotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbV9lcnJvckNvZGU7Ci19Ci0KLVN0cmluZyBJREJS
ZXF1ZXN0Ojp3ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IH0KLSAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQW55PiBJ
REJSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3NvdXJjZTsKLX0KLQot
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCUmVxdWVzdDo6dHJhbnNhY3Rpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtX3RyYW5zYWN0aW9uOwotfQotCi11bnNpZ25lZCBzaG9ydCBJREJS
ZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IExPQURJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgIHJldHVybiBtX3JlYWR5U3Rh
dGU7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6bWFya0Vhcmx5RGVhdGgoKQotewotICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gTE9BRElORyk7Ci0gICAgbV9yZWFkeVN0YXRlID0gRWFybHlEZWF0
aDsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0RmluaXNoZWQpOwotICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbiA9
PSBtX3RyYW5zYWN0aW9uKTsKLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IERPTkUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IExPQURJTkc7Ci0gICAgbV9yZXN1
bHQuY2xlYXIoKTsKLSAgICBtX2Vycm9yQ29kZSA9IDA7Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBT
dHJpbmcoKTsKLQotICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRp
bmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCkpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLUlEQkFueSogSURCUmVxdWVzdDo6c291cmNlKCkKLXsKLSAgICByZXR1cm4gbV9z
b3VyY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQotewotICAgIGlmICht
X2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTE9BRElORykgewotICAgICAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
RXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLT5jYW5jZWxFdmVu
dChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKLSAgICB9Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5jbGVhcigpOwotCi0g
ICAgbV9lcnJvckNvZGUgPSAwOwotICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7Ci0gICAg
bV9yZXN1bHQuY2xlYXIoKTsKLSAgICBvbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6QUJPUlRfRVJSLCAiVGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9y
dGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkLiIpKTsKLX0KLQotdm9pZCBJ
REJSZXF1ZXN0OjpzZXRDdXJzb3JUeXBlKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSkKLXsKLSAgICBBU1NFUlQobV9jdXJzb3JUeXBlID09IElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKTsKLSAgICBtX2N1cnNvclR5cGUg
PSBjdXJzb3JUeXBlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldEN1cnNvcihQYXNzUmVmUHRy
PElEQkN1cnNvcj4gY3Vyc29yKQotewotICAgIEFTU0VSVCghbV9jdXJzb3IpOwotICAgIG1fY3Vy
c29yID0gY3Vyc29yOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcigpCi17Ci0g
ICAgbV9jdXJzb3JGaW5pc2hlZCA9IHRydWU7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBMT0FE
SU5HKQotICAgICAgICBtX3JlcXVlc3RGaW5pc2hlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAg
IEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVz
dWx0KTsKLSAgICBtX2Vycm9yQ29kZSA9IGVycm9yLT5jb2RlKCk7Ci0gICAgbV9lcnJvck1lc3Nh
Z2UgPSBlcnJvci0+bWVzc2FnZSgpOwotICAgIG1fY3Vyc29yLmNsZWFyKCk7Ci0gICAgZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUp
KTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVN1Y2Nlc3NFdmVudCgpCi17
Ci0gICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgZmFs
c2UsIGZhbHNlKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQotewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVz
dDo6b25TdWNjZXNzKERPTVN0cmluZ0xpc3QpIik7Ci0gICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAm
JiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwotICAgIG1fcmVzdWx0ID0g
SURCQW55OjpjcmVhdGUoZG9tU3RyaW5nTGlzdCk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQotewotICAgIElEQl9UUkFDRSgi
SURCUmVxdWVzdDo6b25TdWNjZXNzKElEQkN1cnNvcikiKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JD
b2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgQVNTRVJU
KG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29y
VHlwZSk7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yOwotICAgIGlmIChtX2N1cnNvclR5
cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAgICAg
IGN1cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1fc291cmNlLmdldCgp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGN1cnNvciA9IElEQkN1
cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLQotICAgIHNldFJlc3VsdEN1cnNvcihjdXJzb3IsIG1fY3Vyc29y
VHlwZSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhJREJEYXRhYmFzZSkiKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kKTsKLSAgICBpZGJEYXRhYmFzZS0+b3BlbigpOwotCi0g
ICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwotICAg
IGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCS2V5KSIpOwotICAgIEFTU0VSVCghbV9lcnJvckNv
ZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBpZiAoaWRi
S2V5ICYmIGlkYktleS0+dmFsaWQoKSkKLSAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZShpZGJLZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwotICAgIGVucXVldWVFdmVu
dChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kKQot
ewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQlRyYW5zYWN0aW9uKSIp
OwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYg
IW1fcmVzdWx0KTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kID0gcHJwQmFja2VuZDsKLQotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgYmFja2VuZC0+YWJvcnQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQg
PSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2Vu
ZCwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwotICAgIGJhY2tlbmQtPnNldENhbGxi
YWNrcyhmcm9udGVuZC5nZXQoKSk7Ci0gICAgbV90cmFuc2FjdGlvbiA9IGZyb250ZW5kOwotCi0g
ICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJEYXRhYmFzZVR5cGUpOwot
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJ
T05fQ0hBTkdFKTsKLSAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS0+c2V0VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKGZyb250ZW5kLmdldCgpKTsKLQotICAgIElEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCkpOwotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShmcm9udGVuZC5yZWxlYXNlKCkp
OwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkU2NyaXB0VmFsdWUpCi17Ci0gICAgSURCX1RSQUNFKCJJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlKSIpOwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk7Ci0gICAgbV9jdXJzb3IuY2xlYXIo
KTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwotfQotCi12b2lkIElE
QlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKQotewotICAgIElEQl9UUkFDRSgi
SURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbiIpOwotICAgIEFTU0VSVCghbV9l
cnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBB
U1NFUlQobV9jdXJzb3IpOwotICAgIHNldFJlc3VsdEN1cnNvcihtX2N1cnNvciwgbV9jdXJzb3JU
eXBlKTsKLSAgICBtX2N1cnNvci5jbGVhcigpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNj
ZXNzRXZlbnQoKSk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1
cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4KLSAgICAvLyAgICAgICAgZ2V0
IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2ZW50IGxpc3RlbmVycy4gVGhpcyBpcyBvcmRl
ciB0byBoYW5kbGUKLSAgICAvLyAgICAgICAgdXNlciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5
LgotICAgIHJldHVybiAhbV9yZXF1ZXN0RmluaXNoZWQgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKLXsKLSAgICBB
Y3RpdmVET01PYmplY3Q6OnN0b3AoKTsKLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci0gICAgaWYgKG1fcmVh
ZHlTdGF0ZSA9PSBMT0FESU5HKQotICAgICAgICBtYXJrRWFybHlEZWF0aCgpOwotfQotCi12b2lk
IElEQlJlcXVlc3Q6Om9uQmxvY2tlZCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSURCUmVxdWVzdDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJSZXF1ZXN0OwotfQot
Ci1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6OmRpc3BhdGNo
RXZlbnQiKTsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKLSAgICBBU1NFUlQoIW1f
Y29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7Ci0g
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50
YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8
IERPTkUsICJtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwgRE9ORSwgbV9yZWFkeVN0
YXRlKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50
KQotICAgICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVl
dWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdl
dD4gPiB0YXJnZXRzOwotICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOwotICAgIGlmIChtX3RyYW5z
YWN0aW9uKSB7Ci0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24pOwotICAgICAg
ICAvLyBJZiB0aGVyZSBldmVyIGFyZSBldmVudHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEg
ZGF0YWJhc2UgYnV0Ci0gICAgICAgIC8vIHRoYXQgZG8gbm90IGhhdmUgYSB0cmFuc2FjdGlvbiwg
dGhlbiB0aGlzIHdpbGwgbm90IHdvcmsgYW5kIHdlIG5lZWQKLSAgICAgICAgLy8gdGhpcyBvYmpl
Y3QgdG8gYWN0dWFsbHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgZGF0YWJhc2UgKHRvIGVuc3Vy
ZQotICAgICAgICAvLyBpdCBzdGF5cyBhbGl2ZSkuCi0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1f
dHJhbnNhY3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNv
clRvTm90aWZ5OwotICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAgICBpZiAobV9yZXN1bHQtPnR5
cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvclR5cGUpCi0gICAgICAgICAgICBjdXJzb3JUb05vdGlm
eSA9IG1fcmVzdWx0LT5pZGJDdXJzb3IoKTsKLSAgICAgICAgZWxzZSBpZiAobV9yZXN1bHQtPnR5
cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCi0gICAgICAgICAgICBjdXJz
b3JUb05vdGlmeSA9IG1fcmVzdWx0LT5pZGJDdXJzb3JXaXRoVmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcsIHRoaXMg
d2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50KTsKLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwotCi0gICAgLy8gSWYgdGhlIHJlc3VsdCB3
YXMgb2YgdHlwZSBJREJDdXJzb3IsIG9yIGEgb25CbG9ja2VkIGV2ZW50LCB0aGVuIHdlJ2xsIGZp
cmUgYWdhaW4uCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmluaXNoZWQpKQotICAgICAgICBt
X3JlcXVlc3RGaW5pc2hlZCA9IHRydWU7Ci0KLSAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCi0gICAg
ICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwotCi0gICAg
aWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgLy8gSWYgYW4gZXJyb3IgZXZlbnQgYW5kIHRo
ZSBkZWZhdWx0IHdhc24ndCBwcmV2ZW50ZWQuLi4KLSAgICAgICAgaWYgKGRvbnRQcmV2ZW50RGVm
YXVsdCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KQotICAgICAg
ICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgpOwotICAgICAgICBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCktPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgIH0KLSAgICBy
ZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0
RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQotewotICAgIGlmIChtX3RyYW5zYWN0aW9uKQotICAg
ICAgICBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCktPmFib3J0KCk7Ci19Ci0KLXZvaWQgSURCUmVx
dWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIEFTU0VS
VCghbV9yZXF1ZXN0RmluaXNoZWQpOwotCi0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1f
cmVhZHlTdGF0ZSA8IERPTkUpOwotCi0gICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQo
dGhpcyk7Ci0KLSAgICBpZiAoZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKSkK
LSAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwotfQotCi1FdmVudFRhcmdl
dERhdGEqIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2
ZW50VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjplbnN1cmVF
dmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0K
LXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBw
cnBDdXJzb3IsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNv
cikgewotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKHBycEN1cnNvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKElEQkN1
cnNvcldpdGhWYWx1ZTo6ZnJvbUN1cnNvcihwcnBDdXJzb3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5o
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUmVxdWVzdF9o
Ci0jZGVmaW5lIElEQlJlcXVlc3RfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0Lmgi
Ci0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSURC
QW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCVHJhbnNhY3Rpb247Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0K
LWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJn
ZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2aXJ0dWFsIH5JREJSZXF1
ZXN0KCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwotICAgIFN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0OwotCi0gICAgLy8gRGVmaW5lZCBpbiB0
aGUgSURMCi0gICAgZW51bSBSZWFkeVN0YXRlIHsKLSAgICAgICAgTE9BRElORyA9IDEsCi0gICAg
ICAgIERPTkUgPSAyLAotICAgICAgICBFYXJseURlYXRoID0gMwotICAgIH07Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNvbnN0OwotCi0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihzdWNjZXNzKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGVycm9yKTsKLQotICAgIHZvaWQgbWFya0Vhcmx5RGVhdGgoKTsKLSAgICBib29sIHJlc2V0UmVh
ZHlTdGF0ZShJREJUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKLSAgICB2b2lkIHNldEN1cnNvcihQYXNz
UmVmUHRyPElEQkN1cnNvcj4pOwotICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7Ci0gICAgSURCQW55
KiBzb3VyY2UoKTsKLSAgICB2b2lkIGFib3J0KCk7Ci0KLSAgICAvLyBJREJDYWxsYmFja3MKLSAg
ICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwotICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZT4pOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJLZXk+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwotICAgIHZpcnR1YWwgdm9pZCBvblN1
Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQ
cmVmZXRjaChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9y
PFJlZlB0cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8v
IE5vdCBpbXBsZW1lbnRlZC4gQ2FsbGJhY2sgc2hvdWxkIG5vdCByZWFjaCB0aGUgcmVuZGVyZXIg
c2lkZS4KLSAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7Ci0KLSAgICAvLyBBY3RpdmVET01P
YmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVSUklERTsKLQotICAgIC8vIEV2ZW50VGFy
Z2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQo
ZXZlbnQsIGVjKTsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRI
YW5kbGVyKCk7Ci0KLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+
OjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVy
ZWY7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBSZWZQdHI8SURCQW55PiBtX3Jl
c3VsdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKLSAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7Ci0KLXByaXZhdGU6Ci0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIHZv
aWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZl
bnRUYXJnZXREYXRhKCk7Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSgpOwotCi0gICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJD
dXJzb3I+LCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKLQotICAgIFJl
ZlB0cjxJREJBbnk+IG1fc291cmNlOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFu
c2FjdGlvbjsKLQotICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9yZXF1
ZXN0RmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBl
dmVudHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCi0gICAgYm9vbCBtX2N1cnNvckZpbmlzaGVk
OwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+
IG1fZW5xdWV1ZWRFdmVudHM7Ci0KLSAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBl
IHdpbGwgYmUgYSBjdXJzb3IuCi0gICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29y
VHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7Ci0KLSAg
ICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlm
IC8vIElEQlJlcXVlc3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaWRs
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3Qu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAg
ICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gSURCUmVx
dWVzdCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgcmVzdWx0Ci0gICAgICAg
ICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUKLSAgICAgICAgICAgIGdldHRl
ciByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gRE9NU3RyaW5nIHdlYmtp
dEVycm9yTWVzc2FnZQotICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHNvdXJjZTsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwotCi0gICAg
ICAgIC8vIFN0YXRlcwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBMT0FESU5HID0gMTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9ORSA9IDI7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOwotCi0gICAgICAgIC8vIEV2ZW50
cwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnN1Y2Nlc3M7Ci0gICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0KLSAgICAgICAgLy8gRXZlbnRUYXJnZXQg
aW50ZXJmYWNlCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVu
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4g
dXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJp
bmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVu
ZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChp
biBFdmVudCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwotICAgIH07
Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYWNpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYWNpbmcuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFjaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYWNpbmdfaAotI2RlZmluZSBJREJUcmFj
aW5nX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaWYgUExBVEZPUk0oQ0hS
T01JVU0pCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jZGVmaW5lIElEQl9UUkFDRShhKSBU
UkFDRV9FVkVOVDAoIkluZGV4ZWREQiIsIChhKSk7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgSURCX1RS
QUNFKGEpICgodm9pZCkwKQotCi0jZW5kaWYgLy8gIFBMQVRGT1JNKENIUk9NSVVNKQotCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFjaW5nX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lv
biAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwyODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50UXVl
dWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiSURC
SW5kZXguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQotewotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9u
KGNvbnRleHQsIGJhY2tlbmQsIGRiKSkpOwotICAgIHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVk
ZWQoKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwotfQotCi1JREJUcmFuc2Fj
dGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFi
YXNlKiBkYikKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQotICAgICwgbV9i
YWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2RhdGFiYXNlKGRiKQotICAgICwgbV9tb2RlKG1fYmFj
a2VuZC0+bW9kZSgpKQotICAgICwgbV90cmFuc2FjdGlvbkZpbmlzaGVkKGZhbHNlKQotICAgICwg
bV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5nVHJhbnNhY3Rpb24obV9iYWNr
ZW5kLmdldCgpKTsKLX0KLQotSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlvbigpCi17Ci19
Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246OmJhY2tl
bmQoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7Ci19Ci0KLWJvb2wgSURC
VHJhbnNhY3Rpb246OmZpbmlzaGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2FjdGlv
bkZpbmlzaGVkOwotfQotCi11bnNpZ25lZCBzaG9ydCBJREJUcmFuc2FjdGlvbjo6bW9kZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kZTsKLX0KLQotSURCRGF0YWJhc2UqIElEQlRyYW5zYWN0
aW9uOjpkYigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChtX3RyYW5zYWN0
aW9uRmluaXNoZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FM
TE9XRURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBJREJPYmplY3RTdG9y
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYg
KGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OwotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7Ci0gICAgaWYgKCFv
YmplY3RTdG9yZUJhY2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVjKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJP
YmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7Ci0gICAgb2JqZWN0
U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUu
cmVsZWFzZSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZUNyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9y
ZSkKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7Ci0gICAgbV9vYmplY3RT
dG9yZU1hcC5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKLSAgICBtX29iamVjdFN0b3JlTWFwLnJlbW92ZShuYW1l
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQotewotICAgIGlmIChtX3RyYW5z
YWN0aW9uRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHNlbGZSZWYgPSB0aGlzOwotICAgIGlmIChtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2Vu
ZC0+YWJvcnQoKTsKLX0KLQotSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllcjo6T3Bl
bkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uLCBJ
REJDdXJzb3IqIGN1cnNvcikKLSAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pLAotICAg
ICAgbV9jdXJzb3IoY3Vyc29yKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyT3BlbkN1
cnNvcihtX2N1cnNvcik7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjpPcGVuQ3Vyc29yTm90aWZpZXI6
On5PcGVuQ3Vyc29yTm90aWZpZXIoKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJP
cGVuQ3Vyc29yKG1fY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJP
cGVuQ3Vyc29yKElEQkN1cnNvciogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1
cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvciogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNsb3NlT3BlbkN1cnNvcnMoKQotewotICAgIEhhc2hT
ZXQ8SURCQ3Vyc29yKj4gY3Vyc29yczsKLSAgICBjdXJzb3JzLnN3YXAobV9vcGVuQ3Vyc29ycyk7
Ci0gICAgZm9yIChIYXNoU2V0PElEQkN1cnNvcio+OjppdGVyYXRvciBpID0gY3Vyc29ycy5iZWdp
bigpOyBpICE9IGN1cnNvcnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+Y2xvc2UoKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqIHJlcXVl
c3QpCi17Ci0gICAgbV9jaGlsZFJlcXVlc3RzLmFkZChyZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbjo6dW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAg
ICAvLyBJZiB3ZSBhYm9ydGVkIHRoZSByZXF1ZXN0LCBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVu
IHJlbW92ZWQuCi0gICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0KTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9u
RmluaXNoZWQpOwotICAgIHdoaWxlICghbV9jaGlsZFJlcXVlc3RzLmlzRW1wdHkoKSkgewotICAg
ICAgICBJREJSZXF1ZXN0KiByZXF1ZXN0ID0gKm1fY2hpbGRSZXF1ZXN0cy5iZWdpbigpOwotICAg
ICAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOwotICAgICAgICByZXF1ZXN0LT5h
Ym9ydCgpOwotICAgIH0KLQotICAgIGlmIChtX21vZGUgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJ
T05fQ0hBTkdFKQotICAgICAgICBtX2RhdGFiYXNlLT5jbGVhclZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbih0aGlzKTsKLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBpZiAobV9jb250ZXh0
U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCwg
dHJ1ZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCi17
Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOwotICAgIGlmIChtX21vZGUgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKQotICAgICAgICBtX2RhdGFiYXNlLT5jbGVh
clZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLWJvb2wgSURCVHJh
bnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IElu
IGFuIGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUg
aGFzIGEgb3IgY2FuCi0gICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBvciBhbnkgY2hp
bGQgcmVxdWVzdCBvYmplY3QgYW5kIGFueSBvZiB0aG9zZSBoYXZlCi0gICAgLy8gICAgICAgIGV2
ZW50IGxpc3RlbmVycy4gVGhpcyBpcyAgaW4gb3JkZXIgdG8gaGFuZGxlIHVzZXIgZ2VuZXJhdGVk
IGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCB8fCBB
Y3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIElEQlRyYW5zYWN0aW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQlRyYW5zYWN0aW9uOwotfQotCi1TY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBJREJUcmFuc2FjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb246OmRpc3Bh
dGNoRXZlbnQiKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7Ci0gICAgQVNT
RVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQo
KSA9PSB0aGlzKTsKLSAgICBtX3RyYW5zYWN0aW9uRmluaXNoZWQgPSB0cnVlOwotCi0gICAgLy8g
QnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBmb3IgKElEQk9iamVjdFN0b3JlTWFwOjppdGVy
YXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZU1h
cC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJhbnNhY3Rpb25GaW5pc2hlZCgp
OwotICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8RXZl
bnRUYXJnZXQ+ID4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKLSAgICB0YXJn
ZXRzLmFwcGVuZChkYigpKTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBl
dmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAg
IEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwotICAgIHJldHVybiBJREJF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKLX0KLQotYm9v
bCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRl
Y2huaWNhbGx5IHdlIGNhbiBzdXNwZW5kIGJlZm9yZSB0aGUgZmlyc3QgcmVxdWVzdCBpcyBzY2hl
ZHVsZQotICAgIC8vICAgICAgICBhbmQgYWZ0ZXIgdGhlIGNvbXBsZXRlL2Fib3J0IGV2ZW50IGlz
IGVucXVldWVkLgotICAgIHJldHVybiBtX3RyYW5zYWN0aW9uRmluaXNoZWQ7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OnN0b3AoKQotewotICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOwot
ICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOwotCi0gICAgYWJvcnQoKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewot
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCwgIkEgZmluaXNo
ZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gZW5xdWV1ZSBhbiBldmVudCBvZiB0eXBlICVzLiIsIGV2
ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dFN0
b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZl
bnRRdWV1ZSgpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnRRdWV1ZS0+
ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlv
bjo6ZXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwot
fQotCi1FdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERh
dGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uX2gK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvcjsKLWNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3Mg
SURCT2JqZWN0U3RvcmU7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlv
bigpOwotCi0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgUkVBRF9PTkxZID0gMCwKLSAgICAgICAg
UkVBRF9XUklURSA9IDEsCi0gICAgICAgIFZFUlNJT05fQ0hBTkdFID0gMgotICAgIH07Ci0KLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKLSAgICBi
b29sIGZpbmlzaGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3Q7
Ci0gICAgSURCRGF0YWJhc2UqIGRiKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBhYm9ydCgpOwotCi0gICAgY2xhc3MgT3BlbkN1cnNvck5vdGlmaWVyIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIE9wZW5DdXJzb3JOb3RpZmllcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiwgSURCQ3Vyc29yKik7Ci0gICAgICAgIH5PcGVuQ3Vyc29yTm90aWZpZXIoKTsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0g
ICAgICAgIElEQkN1cnNvciogbV9jdXJzb3I7Ci0gICAgfTsKLQotICAgIHZvaWQgcmVnaXN0ZXJS
ZXF1ZXN0KElEQlJlcXVlc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVl
c3QqKTsKLSAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcmLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPik7Ci0gICAgdm9pZCBvYmplY3RTdG9yZURlbGV0ZWQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsK
LSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbXBsZXRlKTsKLSAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKLQotICAgIC8vIElEQlRyYW5zYWN0
aW9uQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgb25Db21wbGV0ZSgpOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOyB9Ci0KLSAgICAv
LyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwotCi0gICAgdXNpbmcgUmVm
Q291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OnJlZjsKLSAgICB1c2luZyBSZWZDb3Vu
dGVkPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6ZGVyZWY7Ci0KLXByaXZhdGU6Ci0gICAgSURC
VHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsKLQotICAgIHZvaWQgZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsK
LQotICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvciopOwotICAgIHZvaWQgdW5y
ZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKik7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSog
ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFi
YXNlOwotICAgIHVuc2lnbmVkIHNob3J0IG1fbW9kZTsKLSAgICBib29sIG1fdHJhbnNhY3Rpb25G
aW5pc2hlZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSdsbCBmaXJlIGFueSBtb3JlIGV2ZW50
cyBvciBhbGxvdyBhbnkgbmV3IHJlcXVlc3RzPyBJZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgotICAg
IGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLQotICAgIExpc3RIYXNoU2V0PElEQlJlcXVlc3QqPiBt
X2NoaWxkUmVxdWVzdHM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+ID4gSURCT2JqZWN0U3RvcmVNYXA7Ci0gICAgSURCT2JqZWN0U3RvcmVNYXAg
bV9vYmplY3RTdG9yZU1hcDsKLQotICAgIEhhc2hTZXQ8SURCQ3Vyc29yKj4gbV9vcGVuQ3Vyc29y
czsKLQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAg
QEAKLSAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAg
ICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIElEQlRyYW5zYWN0aW9uIHsKLSAgICAgICAgLy8gTW9k
ZXMKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9PTkxZID0gMDsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9XUklURSA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFZFUlNJT05fQ0hBTkdFID0gMjsKLQotICAgICAgICAvLyBQcm9wZXJ0aWVzCi0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBtb2RlOwotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSURCRGF0YWJhc2UgZGI7Ci0gICAgICAgIC8vIE1ldGhvZHMKLSAg
ICAgICAgSURCT2JqZWN0U3RvcmUgb2JqZWN0U3RvcmUgKGluIERPTVN0cmluZyBuYW1lKQotICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWJv
cnQgKCk7Ci0gICAgICAgIC8vIEV2ZW50cwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmFib3J0OwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNvbXBsZXRlOwot
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwotICAgICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKLSAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0
cmluZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGlu
IERPTVN0cmluZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZl
bnRMaXN0ZW5lciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgYm9vbGVhbiBkaXNwYXRj
aEV2ZW50KGluIEV2ZW50IGV2dCkgCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24p
OwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwob2JqZWN0U3Rv
cmVzLCBtb2RlLCBkYXRhYmFzZSkpOwotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAg
OiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQotICAgICwgbV9tb2RlKG1vZGUpCi0g
ICAgLCBtX3N0YXRlKFVudXNlZCkKLSAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgLCBt
X3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlVHJhbnNhY3Rpb24o
KSkKLSAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0
YXNrVGltZXJGaXJlZCkKLSAgICAsIG1fdGFza0V2ZW50VGltZXIodGhpcywgJklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQpCi0gICAgLCBtX3BlbmRpbmdFdmVu
dHMoMCkKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZU5hbWVzKTsKLSAgICBBU1NFUlQobV9t
b2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSB8fCAhbV9vYmplY3RTdG9yZU5h
bWVzLT5pc0VtcHR5KCkpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKLXsKLSAgICAvLyBJdCBzaG91bGRu
J3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2JqZWN0IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3Mg
ZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQuCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNo
ZWQpOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIERvZXMgYSBsaW5lYXIgc2VhcmNoLCBidXQgaXQg
cmVhbGx5IHNob3VsZG4ndCBiZSB0aGF0IHNsb3cgaW4gcHJhY3RpY2UuCi0gICAgaWYgKG1fbW9k
ZSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgJiYgIW1fb2JqZWN0U3RvcmVOYW1l
cy0+Y29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlLT5v
YmplY3RTdG9yZShuYW1lKTsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBy
aWdodCBub3cgYmVhY3VzZSBhIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gY291bGQgbW9kaWZ5IHRo
aW5ncwotICAgIC8vICAgICAgICBiZXR3ZWVuIGl0cyBjcmVhdGlvbiAod2hlcmUgYW5vdGhlciBj
aGVjayBvY2N1cnMpIGFuZCB0aGUgLm9iamVjdFN0b3JlIGNhbGwuCi0gICAgLy8gICAgICAgIFRo
ZXJlJ3MgYSBidWcgdG8gbWFrZSB0aGlzIGltcG9zc2libGUgaW4gdGhlIHNwZWMuIFdoZW4gd2Ug
bWFrZSBpdCBpbXBvc3NpYmxlIGhlcmUsIHdlCi0gICAgLy8gICAgICAgIGNhbiByZW1vdmUgdGhp
cyBjaGVjay4KLSAgICBpZiAoIW9iamVjdFN0b3JlKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
YWJvcnRUYXNrKQotewotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgaWYgKGFib3J0
VGFzaykKLSAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7Ci0KLSAg
ICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0KCk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCIpOwotICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHdhc1J1
bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2Ug
dG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAg
Ly8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2Ug
dG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRo
b2QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHNlbGYodGhpcyk7Ci0K
LSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgbV90YXNrVGltZXIuc3RvcCgpOwotICAgIG1f
dGFza0V2ZW50VGltZXIuc3RvcCgpOwotCi0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIGlm
ICh3YXNSdW5uaW5nKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotCi0gICAg
Ly8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgotICAgIHdoaWxlICghbV9hYm9ydFRhc2tR
dWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS5maXJzdCgpLnJlbGVhc2UoKSk7Ci0gICAgICAg
IG1fYWJvcnRUYXNrUXVldWUucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRh
c2soMCk7Ci0gICAgfQotCi0gICAgaWYgKG1fY2FsbGJhY2tzKQotICAgICAgICBtX2NhbGxiYWNr
cy0+b25BYm9ydCgpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKLSAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi12b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JC
YWNrZW5kSW1wbCogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dW5yZWdpc3Rlck9wZW5DdXJzb3Io
SURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLnJlbW92
ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFkZFBlbmRp
bmdFdmVudHMoaW50IG4pCi17Ci0gICAgbV9wZW5kaW5nRXZlbnRzICs9IG47Ci0gICAgQVNTRVJU
KG1fcGVuZGluZ0V2ZW50cyA+PSAwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpkaWRDb21wbGV0ZVRhc2tFdmVudHMoKQotewotICAgIGlmIChtX3N0YXRlID09IEZpbmlz
aGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsK
LSAgICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzKTsKLSAgICBtX3BlbmRpbmdFdmVudHMtLTsKLQot
ICAgIGlmICghbV90YXNrRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Rhc2tFdmVu
dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpydW4oKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0
YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7Ci0K
LSAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6c3RhcnQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCk7
Ci0KLSAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6Y29tbWl0KCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmNvbW1pdCIpOwotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKLSAgICAvLyBjb21taXQg
c3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBv
dXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHNlbGYodGhpcyk7Ci0gICAgQVNTRVJU
KG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKG1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7
Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAg
IG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKCk7
Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFu
c2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMp
OwotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKLXsK
LSAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVk
Iik7Ci0gICAgQVNTRVJUKCFtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0g
ICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOwotICAgIH0KLQotICAgIFRhc2tRdWV1ZSBxdWV1ZTsK
LSAgICBxdWV1ZS5zd2FwKG1fdGFza1F1ZXVlKTsKLSAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHko
KSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1
bm5pbmcpOwotICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
ayhxdWV1ZS5maXJzdCgpLnJlbGVhc2UoKSk7Ci0gICAgICAgIHF1ZXVlLnJlbW92ZUZpcnN0KCk7
Ci0gICAgICAgIG1fcGVuZGluZ0V2ZW50cysrOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50
VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopCi17Ci0gICAgSURC
X1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkIik7
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0V2
ZW50cyAmJiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhlIGxhc3QgdGFz
ayBldmVudCBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGFzawotICAgICAgICAvLyBxdWV1ZSBpcyBl
bXB0eS4gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4KLSAgICAgICAgY29tbWl0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgc3RpbGwgd2FpdGluZyBmb3Igb3RoZXIg
ZXZlbnRzIHRvIGNvbXBsZXRlLiBIb3dldmVyLAotICAgIC8vIHRoZSB0YXNrIHF1ZXVlIGlzIG5v
bi1lbXB0eSBhbmQgdGhlIHRpbWVyIGlzIGluYWN0aXZlLgotICAgIC8vIFdlIGNhbiB0aGVyZm9y
ZSBzY2hlZHVsZSB0aGUgdGltZXIgYWdhaW4uCi0gICAgaWYgKCFtX3Rhc2tRdWV1ZS5pc0VtcHR5
KCkgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9w
ZW5DdXJzb3JzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPjo6
aXRlcmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5DdXJzb3JzLmVu
ZCgpOyArK2kpCi0gICAgICAgICgqaSktPmNsb3NlKCk7Ci0gICAgbV9vcGVuQ3Vyc29ycy5jbGVh
cigpOwotfQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOwotCi1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0
b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwotICAg
IHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzY2hl
ZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzayk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxiYWNrczsgfQotICAgIHZpcnR1
YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpOwotCi0gICAgdm9pZCBydW4o
KTsKLQotcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xp
c3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCopOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwg
YnV0IG5vIHRhc2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNr
cywgYnV0IFNRTGl0ZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0YXJ0ZWQuCi0gICAgICAgIFJ1bm5p
bmcsIC8vIFNRTGl0ZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlzaGVkLgot
ICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgotICAgIH07
Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBjb21taXQoKTsKLQotICAgIHZvaWQgdGFz
a1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsKLSAgICB2b2lk
IHRhc2tFdmVudFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKTsK
LSAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0
PiBtX29iamVjdFN0b3JlTmFtZXM7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwotCi0gICAg
U3RhdGUgbV9zdGF0ZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IG1fY2Fs
bGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwot
Ci0gICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
PiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBt
X2Fib3J0VGFza1F1ZXVlOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24+IG1fdHJhbnNhY3Rpb247Ci0KLSAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNl
IHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IG1fdGFza1RpbWVyOwotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IG1fdGFza0V2ZW50VGltZXI7Ci0gICAgaW50IG1fcGVuZGluZ0V2ZW50czsKLQotICAgIEhhc2hT
ZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPiBtX29wZW5DdXJzb3JzOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNl
bmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ3Vyc29yQmFj
a2VuZEltcGw7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBJ
REJUcmFuc2FjdGlvbkNhbGxiYWNrczsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQot
Ly8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCVHJhbnNhY3Rpb24gKGFzeW5jKSBhbmQgSURC
VHJhbnNhY3Rpb25TeW5jIChzeW5jKS4KLS8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRvIHBy
b3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0aGVz
ZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCi0vLyB0cmlnZ2VyIHdvcmsgb24g
YSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBtb2RlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzayA9IG51bGxwdHIpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29y
QmFja2VuZEltcGwqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmRJbXBsKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRQZW5kaW5n
RXZlbnRzKGludCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
LQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJh
bnNhY3Rpb25DYWxsYmFja3NfaAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkNhbGxiYWNrc19oCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3MgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydCgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkNhbGxiYWNr
c19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpOwotfQotCi1JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgCi17Ci19Ci0KLUlEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuYWRkKHRy
YW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFu
c2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b24pKTsKLQotICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOwotICAg
IHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSk7Ci0KLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpOwotICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3Zl
KHRyYW5zYWN0aW9uKTsKLSAgICB9IGVsc2UgaWYgKG1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIG1fcnVubmluZ1RyYW5zYWN0aW9ucy5yZW1vdmUo
dHJhbnNhY3Rpb24pOwotCi0gICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsK
LQotICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0vLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVuY3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRo
ZXIgYW55dGhpbmcgaXMgZm91bmQuCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6Omlz
QWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSkKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgIGlmIChtX3J1bm5pbmdU
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKSB7Ci0gICAgICAgIEFTU0VSVCghZm91
bmQpOwotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgfQotICAgIEFTU0VSVChmb3VuZCA9PSBt
X3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgIHJldHVybiBmb3VuZDsK
LX0KLSNlbmRpZgotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NTdGFy
dGVkVHJhbnNhY3Rpb25zKCkKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdywgd2Ugb25seSBhbGxv
dyBvbmUgdHJhbnNhY3Rpb24gdG8gcnVuIGF0IGEgdGltZS4KLSAgICBpZiAoIW1fcnVubmluZ1Ry
YW5zYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXJ0
ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9ICptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
YmVnaW4oKTsKLSAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsK
LSAgICBtX3J1bm5pbmdUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICB0cmFuc2Fj
dGlvbi0+cnVuKCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKLSNkZWZpbmUg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzOwotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotLy8gVHJhbnNhY3Rpb25zIGFyZSBleGVjdXRl
ZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwot
Ci0gICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBhcyB0aGV5IHN0YXJ0IGFuZCBmaW5pc2gu
Ci0gICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci0gICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLSAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGlzQWN0aXZlKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKTsKLQotICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsK
LQotICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJlbmNl
cyB0byBhbGwgdHJhbnNhY3Rpb25zLgotICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCosIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiA+IG1fdHJhbnNhY3Rpb25z
OwotICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJlbnQgc3RhdGVzIGFyZSBncm91cGVkIGJl
bG93LgotICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPiBtX3N0YXJ0
ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4g
bV9ydW5uaW5nVHJhbnNhY3Rpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlZl
cnNpb25DaGFuZ2VFdmVudC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IElEQlZlcnNpb25D
aGFuZ2VFdmVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQodmVyc2lvbiwgZXZlbnRUeXBlKSk7Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VFdmVu
dDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGZhbHNlIC8qY2Fu
QnViYmxlKi8sIGZhbHNlIC8qY2FuY2VsYWJsZSovKQotICAgICwgbV92ZXJzaW9uKHZlcnNpb24p
Ci17Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklEQlZlcnNpb25DaGFuZ2VFdmVudCgp
Ci17Ci19Ci0KLVN0cmluZyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OnZlcnNpb24oKQotewotICAg
IHJldHVybiBtX3ZlcnNpb247Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSURCVmVyc2lvbkNo
YW5nZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvcklEQlZlcnNpb25DaGFuZ2VFdmVudDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAotI2RlZmlu
ZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQW55OwotCi1jbGFzcyBJREJWZXJzaW9uQ2hhbmdl
RXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiA9IFN0cmlu
ZygpLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IEF0b21pY1N0cmluZygpKTsKLSAg
ICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZlbnQoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5n
IHZlcnNpb24oKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgSURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwotCi0gICAg
U3RyaW5nIG1fdmVyc2lvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5n
ZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQotICAgIF0gSURCVmVyc2lvbkNoYW5nZUV2ZW50
IDogRXZlbnQgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247
Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KGNvbnRleHQs
IHNvdXJjZSwgdmVyc2lvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAg
ICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci0KLX0KLQotSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q6OklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLSAg
ICA6IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCAwKQotICAgICwgbV92ZXJzaW9uKHZlcnNp
b24pCi17Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp+SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QoKQotewotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvcklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OwotfQotCi12b2lkIElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0OjpvbkJsb2NrZWQoKQotewotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBlbnF1ZXVlRXZlbnQo
SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUobV92ZXJzaW9uLCBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5o
CShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RfaAotI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklE
QlJlcXVlc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
OwotICAgIHZpcnR1YWwgfklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgb25CbG9ja2VkKCk7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0KLSAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsb2NrZWQpOwotCi1wcml2YXRlOgotICAgIElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotCi0gICAgU3RyaW5nIG1fdmVyc2lv
bjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUmVxdWVzdF9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBz
dG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UsCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgRXZlbnRUYXJnZXQK
LSAgICBdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogSURCUmVxdWVzdCB7Ci0gICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKLSAgICB9OwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129787</attachid>
            <date>2012-03-01 18:12:19 -0800</date>
            <delta_ts>2012-03-01 20:20:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80071-20120301181218.patch</filename>
            <type>text/plain</type>
            <size>1151405</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wMy0wMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgV2ViQ29yZS9zdG9yYWdl
L0lEQiogZmlsZXMgaW50byBXZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQg
YWxsIHRoZSBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgaWZkZWZzIGZyb20KKyAgICAgICAgV2Vi
Q29yZSBwcm9wZXIsIHdlIGNhbiBtb3ZlIEluZGV4ZWREQiBpbnRvIGl0cyBvd24gbW9kdWxlLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFr
ZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNh
bGxiYWNrcy5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhW
YWx1ZS5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFcnJvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUV4Y2VwdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RXZlbnREaXNwYXRjaGVyLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmguCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXkuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoQmFja2VuZEltcGwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmguCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlJlcXVlc3QuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhY2luZy5oLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5pZGwuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmguCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdl
RXZlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwuCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQkFueS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQW55LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuaWRsOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZUVycm9yLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJE
YXRhYmFzZUVycm9yLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJJbmRleC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGguY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0
b3JhZ2UvSURCS2V5UmFuZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5
UmFuZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVJhbmdlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUGVuZGluZ1Ry
YW5zYWN0aW9uTW9uaXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL0lEQlRyYWNpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6IFJlbW92ZWQuCisK
IDIwMTItMDMtMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbmFtZSBMYXllckNocm9taXVtOjpuYW1lIHRvIGRlYnVnTmFtZSB0
byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBkZWJ1ZyBwcm9wZXJ0aWVzLCBtYWtlIHRo
cmVhZHNhZmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIFNFVChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0i
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCisgICAgIiR7V0VCQ09S
RV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dl
YnNvY2tldHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L2JpbmRpbmdzIgpAQCAtOTEsNiArOTIsNyBAQCBTRVQoV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAKIFNFVChXZWJDb3JlX0lETF9JTkNMVURFUwogICAgIE1vZHVsZXMvZ2Vv
bG9jYXRpb24KKyAgICBNb2R1bGVzL2luZGV4ZWRkYgogICAgIE1vZHVsZXMvd2Vic29ja2V0cwog
ICAgIGJpbmRpbmdzL2dlbmVyaWMKICAgICBjc3MKQEAgLTQxMyw2ICs0MTUsMjQgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9s
bGVyLmNwcAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3Bw
CiAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCisgICAgTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAor
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
LmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNw
cAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKwogICAg
IGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuY3BwCkBAIC0xMzkyLDIzICsxNDEyLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwog
ICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwCiAgICAgc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCi0gICAgc3RvcmFnZS9JREJBbnku
Y3BwCi0gICAgc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKLSAgICBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwCi0gICAgc3RvcmFnZS9JREJDdXJzb3IuY3BwCi0gICAgc3RvcmFnZS9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKLSAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmNwcAotICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcAotICAgIHN0b3JhZ2UvSURC
SW5kZXguY3BwCi0gICAgc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAotICAgIHN0b3Jh
Z2UvSURCS2V5LmNwcAotICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9J
REJSZXF1ZXN0LmNwcAotICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgc3RvcmFn
ZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAotICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5j
cHAKLSAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAotICAgIHN0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVRhc2suY3Bw
CiAgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAogICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFN
YW5hZ2VyLmNwcApAQCAtMTUzNiwxOCArMTUzOSwxOCBAQCBFTkRJRiAoKQogCiBJRiAoRU5BQkxF
X0lOREVYRURfREFUQUJBU0UpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKLSAg
ICAgICAgc3RvcmFnZS9JREJBbnkuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAot
ICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCi0g
ICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJJbmRleC5p
ZGwKLSAgICAgICAgc3RvcmFnZS9JREJLZXkuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5UmFu
Z2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCi0gICAgICAgIHN0b3Jh
Z2UvSURCUmVxdWVzdC5pZGwKLSAgICAgICAgc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
RXJyb3IuaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKyAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguaWRsCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKyAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCisgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmlkbAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5p
ZGwKICAgICApCiBFTkRJRiAoKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIFZQQVRIID0gXAogICAgICQoV2ViQ29y
ZSkgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCisgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMg
XAogICAgICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJChXZWJDb3JlKS9iaW5k
aW5ncy9qcyBcCkBAIC02MSw2ICs2MiwxOCBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKICAgICAkKFdl
YkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAogICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwgXAorICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5p
ZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgXAor
ICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKICAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vic29ja2V0cy9DbG9zZUV2ZW50LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCBcCkBAIC0zNTUsMTgg
KzM2OCw2IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvRGF0YWJh
c2UuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5pZGwgXAog
ICAgICQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvSURCQW55LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQkN1cnNvci5p
ZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQoV2Vi
Q29yZSkvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL3N0b3JhZ2UvSURCS2V5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdl
L0lEQktleVJhbmdlLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0lEQlJlcXVlc3QuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3Jh
Z2UvU1FMRXJyb3IuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwgXApJbmRleDogU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxOCBAQCBJ
RExfQklORElOR1MgKz0gXAogICAgICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25D
YWxsYmFjay5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJv
ci5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxi
YWNrLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBcCisgICAgJCRQV0QvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsIFwKKyAgICAkJFBXRC9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaWRsIFwKICAg
ICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvRE9NV2luZG93V2ViU29ja2V0LmlkbCBcCiAgICAg
JCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwgXApAQCAtMzc4LDE4ICszOTAs
NiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwK
ICAgICAkJFBXRC9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC9zdG9y
YWdlL0RhdGFiYXNlU3luYy5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0g
ICAgJCRQV0Qvc3RvcmFnZS9JREJDdXJzb3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQkRh
dGFiYXNlRXJyb3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9u
LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwgXAotICAgICQkUFdEL3N0
b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCSW5kZXguaWRsIFwK
LSAgICAkJFBXRC9zdG9yYWdlL0lEQktleS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvSURCS2V5
UmFuZ2UuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBcCi0gICAg
JCRQV0Qvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbi5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQkUFdE
L3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5m
by5pZGwgXApAQCAtNjkzLDYgKzY5Myw3IEBAIGdlbmVyYXRlQmluZGluZ3MuY29tbWFuZHMgPSBw
ZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRlZmluZXMgXCIkJHtG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLS1nZW5lcmF0b3IgJCRnZW5lcmF0b3IgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMgXAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9kb20gXAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9maWxlYXBpIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsNyBAQCB3ZWJjb3JlX2NwcGZs
YWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dM
U0xBTkcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5IFwK
QEAgLTc2MSw2ICs3NjIsNyBAQCBEZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nX3RhYi5oOiBE
ZXJpCiAKIElETF9QQVRIIDo9IFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24g
XAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9tZWRpYXN0cmVhbSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAog
ICAgICQoV2ViQ29yZSkvYmluZGluZ3MvanMgXApAQCAtOTAyLDYgKzkwNCw3IEBAIGxpYldlYkNv
cmVHdGtfbGFfQ1BQRkxBR1MgPSBcCiAKIEVYVFJBX0RJU1QgKz0gXAogCSQoc2hlbGwgbHMgJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vKi5pZGwpIFwKKwkkKHNo
ZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi8qLmlkbCkg
XAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvKi5pZGwpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTcwLDYgKzk3MCw2MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9ucy5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRp
b24uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UGF0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFj
a2VuZEltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQ29kaW5nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkNvZGluZy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2NhbE1l
ZGlhU3RyZWFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2Nh
bE1lZGlhU3RyZWFtLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0uY3BwIFwKQEAgLTM4NzksNjIgKzM5MzUsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggXAogCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJBbnkuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUNhbGxiYWNrcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmggXAotCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJFdmVudERpc3BhdGNo
ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCSW5kZXguaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UmFuZ2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuY3BwIFwKQEAgLTQ3ODgsMTYgKzQ3ODgsMTYgQEAgd2ViY29yZV9idWlsdF9zb3Vy
Y2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uaAogCiBk
b21fYmluZGluZ19pZGxzICs9IFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCQW55LmlkbCBcCi0J
JChXZWJDb3JlKS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXJyb3IuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRGF0YWJhc2VF
eGNlcHRpb24uaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwgXAotCSQo
V2ViQ29yZSkvc3RvcmFnZS9JREJJbmRleC5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJL
ZXlSYW5nZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwgXAot
CSQoV2ViQ29yZSkvc3RvcmFnZS9JREJSZXF1ZXN0LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55
LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgXAor
CSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwgXAorCSQo
V2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIFwKKwkkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKIAogIyAtLS0tCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTI5ODYsMzEgKzI5ODYsMzEgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX0lOREVYRURfREFUQUJBUwogICAgIH0KIAogICAgIEhFQURFUlMgKz0gXAotICAg
ICAgICBzdG9yYWdlL0lEQkFueS5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJDYWxsYmFja3MuaCBc
Ci0gICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmggXAotICAgICAgICBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaCBcCi0gICAgICAgIHN0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIFwKLSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKLSAgICAgICAgc3RvcmFn
ZS9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeS5oIFwK
LSAgICAgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwKLSAgICAgICAg
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5k
ZXguaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggXAotICAg
ICAgICBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
S2V5LmggXAotICAgICAgICBzdG9yYWdlL0lEQktleVJhbmdlLmggXAotICAgICAgICBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlLmggXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmggXAotICAgICAgICBzdG9yYWdlL0lEQlJlcXVlc3QuaCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uaCBcCi0gICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmgKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAorICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCisgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBcCisgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBcCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAogCiAgICAgIXY4IHsK
ICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0zMDIwLDI0ICszMDIwLDI0IEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVMKICAgICB9CiAKICAgICBTT1VSQ0VTICs9IFwK
LSAgICAgICAgc3RvcmFnZS9JREJBbnkuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3Iu
Y3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAotICAgICAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCi0gICAgICAgIHN0
b3JhZ2UvSURCRmFjdG9yeS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cCBcCi0gICAgICAgIHN0b3JhZ2UvSURCSW5kZXguY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURCS2V5LmNwcCBcCi0gICAg
ICAgIHN0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5jcHAgXAotICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IFwKLSAgICAgICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uY3BwCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAgXAor
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIFwKKyAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVu
dERpc3BhdGNoZXIuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5j
cHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UmFuZ2UuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBcCisgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiAxMDk0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsMjEgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dl
b2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xv
Y2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXJyb3IuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5p
ZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0RP
TVdpbmRvd0ludGVudHMuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50
LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNr
LmlkbCcsCkBAIC0xMDQ3LDIxICsxMDYyLDYgQEAKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFi
YXNlLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAgICAgICAgICAgICdzdG9y
YWdlL0lEQkFueS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmlkbCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlRXhjZXB0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCSW5kZXguaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5p
ZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJS
ZXF1ZXN0LmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU1FMRXJyb3IuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlv
bi5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCcsCkBAIC0xMjk2
LDYgKzEyOTYsNzYgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRv
ckdlb2xvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRv
d0luZGV4ZWREYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RP
TVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3Bw
JywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkNvZGluZy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhY2luZy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oJywK
ICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2Uu
Y3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2luZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0
YWJhc2UuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLApAQCAt
NDY1Miw3NiArNDcyMiw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5j
cHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QkFueS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQW55LmgnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ2Fs
bGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yLmNwcCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJDdXJzb3IuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJz
b3JCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCcsCi0gICAg
ICAgICAgICAnc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaCcsCi0gICAgICAgICAgICAnc3Rv
cmFnZS9JREJEYXRhYmFzZS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCcsCi0gICAgICAg
ICAgICAnc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKLSAgICAgICAgICAgICdzdG9y
YWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRXZl
bnREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeS5oJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXguY3BwJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL0lEQkluZGV4LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5k
SW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5o
JywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCS2V5LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleVBhdGhCYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJhbmdlLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCTGV2ZWxEQkNvZGluZy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxE
QkNvZGluZy5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCcsCi0g
ICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAnLAotICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9J
REJUcmFjaW5nLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwJywK
LSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAotICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmgn
LAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3Jh
Z2VUYXNrLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAnLApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcmkJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBAIFdFQkNPUkVfR0VORVJBVEVE
X1NPVVJDRVNfRElSID0gJCR7Uk9PVF8KIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9E
SVIgXAogICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKKyAgICAkJFNPVVJD
RV9ESVIvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL3dlYnNv
Y2tldHMgXAogICAgICQkU09VUkNFX0RJUi9hY2Nlc3NpYmlsaXR5IFwKICAgICAkJFNPVVJDRV9E
SVIvYmluZGluZ3MgXApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRlICJJREJJbmRl
eC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJBbnk+
IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJB
bnkoKSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZU51bGwoKQorewor
ICAgIFJlZlB0cjxJREJBbnk+IGlkYkFueSA9IGFkb3B0UmVmKG5ldyBJREJBbnkoKSk7CisgICAg
aWRiQW55LT5zZXROdWxsKCk7CisgICAgcmV0dXJuIGlkYkFueS5yZWxlYXNlKCk7Cit9CisKK0lE
QkFueTo6SURCQW55KCkKKyAgICA6IG1fdHlwZShVbmRlZmluZWRUeXBlKQoreworfQorCitJREJB
bnk6On5JREJBbnkoKQoreworfQorCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkFueTo6
ZG9tU3RyaW5nTGlzdCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBET01TdHJpbmdMaXN0VHlw
ZSk7CisgICAgcmV0dXJuIG1fZG9tU3RyaW5nTGlzdDsKK30KKworUGFzc1JlZlB0cjxJREJDdXJz
b3I+IElEQkFueTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkN1cnNv
clR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNvcjsKK30KKworUGFzc1JlZlB0cjxJREJDdXJz
b3JXaXRoVmFsdWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IElEQkN1cnNvcldpdGhWYWx1ZVR5cGUpOworICAgIHJldHVybiBtX2lkYkN1cnNv
cldpdGhWYWx1ZTsKK30KKworUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRh
YmFzZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJEYXRhYmFzZVR5cGUpOworICAgIHJl
dHVybiBtX2lkYkRhdGFiYXNlOworfQorCitQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IElEQkFueTo6
aWRiRmFjdG9yeSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJGYWN0b3J5VHlwZSk7Cisg
ICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKK30KKworUGFzc1JlZlB0cjxJREJJbmRleD4gSURCQW55
OjppZGJJbmRleCgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJJbmRleFR5cGUpOworICAg
IHJldHVybiBtX2lkYkluZGV4OworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQW55OjppZGJL
ZXkoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCS2V5VHlwZSk7CisgICAgcmV0dXJuIG1f
aWRiS2V5OworfQorCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVj
dFN0b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQk9iamVjdFN0b3JlVHlwZSk7Cisg
ICAgcmV0dXJuIG1faWRiT2JqZWN0U3RvcmU7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURC
VHJhbnNhY3Rpb25UeXBlKTsKKyAgICByZXR1cm4gbV9pZGJUcmFuc2FjdGlvbjsKK30KKworUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkFueTo6c2VyaWFsaXplZFNjcmlwdFZh
bHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUp
OworICAgIHJldHVybiBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK30KKwordm9pZCBJREJBbnk6
OnNldE51bGwoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAg
bV90eXBlID0gTnVsbFR5cGU7Cit9CisKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUp
OworICAgIG1fdHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9
IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZh
bHVlPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAg
IG1fdHlwZSA9IElEQkN1cnNvcldpdGhWYWx1ZVR5cGU7CisgICAgbV9pZGJDdXJzb3JXaXRoVmFs
dWUgPSB2YWx1ZTsKK30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcj4g
dmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5
cGUgPSBJREJDdXJzb3JUeXBlOworICAgIG1faWRiQ3Vyc29yID0gdmFsdWU7Cit9CisKK3ZvaWQg
SURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gdmFsdWUpCit7CisgICAgQVNTRVJU
KG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJEYXRhYmFzZVR5cGU7
CisgICAgbV9pZGJEYXRhYmFzZSA9IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NS
ZWZQdHI8SURCRmFjdG9yeT4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmlu
ZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJGYWN0b3J5VHlwZTsKKyAgICBtX2lkYkZhY3Rvcnkg
PSB2YWx1ZTsKK30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkluZGV4PiB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9
IElEQkluZGV4VHlwZTsKKyAgICBtX2lkYkluZGV4ID0gdmFsdWU7Cit9CisKK3ZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJLZXk+IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0g
VW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gSURCS2V5VHlwZTsKKyAgICBtX2lkYktleSA9
IHZhbHVlOworfQorCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IHZhbHVlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90
eXBlID0gSURCVHJhbnNhY3Rpb25UeXBlOworICAgIG1faWRiVHJhbnNhY3Rpb24gPSB2YWx1ZTsK
K30KKwordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IElE
Qk9iamVjdFN0b3JlVHlwZTsKKyAgICBtX2lkYk9iamVjdFN0b3JlID0gdmFsdWU7Cit9CisKK3Zv
aWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlVHlwZTsKKyAgICBtX3NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHZh
bHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQW55X2gKKyNkZWZpbmUgSURCQW55X2gKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCQ3Vy
c29yOworY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFz
cyBJREJGYWN0b3J5OworY2xhc3MgSURCSW5kZXg7CitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJP
YmplY3RTdG9yZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOworY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOworCitjbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZUludmFsaWQoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwoKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFueT4gY3JlYXRlKFQqIGlkYk9i
amVjdCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRl
SW52YWxpZCgpOworICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4g
YW55LnJlbGVhc2UoKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZShQYXNzUmVmUHRyPFQ+IGlkYk9iamVjdCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgp
OworICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOworICAgICAgICByZXR1cm4gYW55LnJlbGVh
c2UoKTsKKyAgICB9CisgICAgfklEQkFueSgpOworCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAg
VW5kZWZpbmVkVHlwZSA9IDAsCisgICAgICAgIE51bGxUeXBlLAorICAgICAgICBET01TdHJpbmdM
aXN0VHlwZSwKKyAgICAgICAgSURCQ3Vyc29yVHlwZSwKKyAgICAgICAgSURCQ3Vyc29yV2l0aFZh
bHVlVHlwZSwKKyAgICAgICAgSURCRGF0YWJhc2VUeXBlLAorICAgICAgICBJREJGYWN0b3J5VHlw
ZSwKKyAgICAgICAgSURCSW5kZXhUeXBlLAorICAgICAgICBJREJLZXlUeXBlLAorICAgICAgICBJ
REJPYmplY3RTdG9yZVR5cGUsCisgICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKKyAgICAgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAvLyBVc2UgdHlwZSgpIHRvIGZpZ3VyZSBvdXQgd2hp
Y2ggb25lIG9mIHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNhbGwuCisgICAgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCk7CisgICAgUGFzc1JlZlB0cjxJREJDdXJzb3I+
IGlkYkN1cnNvcigpOworICAgIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBpZGJDdXJz
b3JXaXRoVmFsdWUoKTsKKyAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgp
OworICAgIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOworICAgIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IGlkYkluZGV4KCk7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgp
OworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisKKyAg
ICAvLyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCisgICAgdm9pZCBzZXROdWxsKCk7Cisg
ICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CisgICAgdm9pZCBzZXQoUGFz
c1JlZlB0cjxJREJDdXJzb3I+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldp
dGhWYWx1ZT4pOworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKKyAgICB2
b2lkIHNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRy
PElEQkluZGV4Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lk
IHNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4pOworICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPik7CisKK3ByaXZhdGU6CisgICAgSURCQW55KCk7CisKKyAgICBUeXBlIG1fdHlw
ZTsKKworICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGV2ZXIgYmUgaW4g
dXNlIGF0IGFueSBnaXZlbiB0aW1lLgorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX2RvbVN0
cmluZ0xpc3Q7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9pZGJDdXJzb3I7CisgICAgUmVmUHRy
PElEQkN1cnNvcldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlPiBtX2lkYkRhdGFiYXNlOworICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZh
Y3Rvcnk7CisgICAgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4OworICAgIFJlZlB0cjxJREJL
ZXk+IG1faWRiS2V5OworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9pZGJPYmplY3RTdG9y
ZTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1faWRiVHJhbnNhY3Rpb247CisgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworI2VuZGlmIC8vIElEQkFueV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJBbnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEN1c3RvbVRvSlNPYmplY3QKKyAgICBd
IElEQkFueSB7CisgICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJs
YW5rLgorICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2RlZmlu
ZSBJREJCYWNraW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNp
bmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKwor
Y2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3Jl
PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0
cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8
Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWdu
ZWRPYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisKKyAgICBj
bGFzcyBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIoKSB7fQorICAgIH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1i
ZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0
b3JlUmVjb3JkQ2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcm
IHZhbHVlKSA9IDA7CisgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNr
KCkge307CisgICAgfTsKKyAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91
bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kTXVsdGlFbnRyeUZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50
cnksIGludDY0X3QmIGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUlu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5
PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCBp
bnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsKKyAgICB9OworCisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworCisgICAgY2xh
c3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbj4geworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGJlZ2luKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkJhY2tpbmdT
dG9yZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkNhbGxiYWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIElEQkNhbGxiYWNrc19oCisjZGVmaW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNzZXMgbmVlZCB0byBi
ZSBtYWRlIHRocmVhZHNhZmUuCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ2Fs
bGJhY2tzKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aENv
bnRpbnVhdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNo
KGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRy
PElEQktleT4gPiYgcHJpbWFyeUtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiA+JiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8v
IElEQkNhbGxiYWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3IuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1
ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJD
dXJzb3I6OmNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tl
bmQsIElEQlJlcXVlc3QqIHJlcXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3IoYmFja2Vu
ZCwgcmVxdWVzdCwgc291cmNlLCB0cmFuc2FjdGlvbikpOworfQorCitJREJDdXJzb3I6OklEQkN1
cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlJl
cXVlc3QqIHJlcXVlc3QsIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCisgICAgOiBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQor
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
KyAgICAsIG1fdHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKK3sKKyAgICBB
U1NFUlQobV9iYWNrZW5kKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsKKyAgICBBU1NFUlQobV9z
b3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSB8fCBtX3NvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bik7Cit9CisKK0lEQkN1cnNvcjo6fklEQkN1cnNvcigpCit7Cit9CisKK3Vuc2lnbmVkIHNob3J0
IElEQkN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNv
cjo6ZGlyZWN0aW9uIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+ZGlyZWN0aW9uKCk7Cit9CisK
K1Bhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgSURCX1RS
QUNFKCJJREJDdXJzb3I6OmtleSIpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmtleSgpOworfQor
CitQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAg
ICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6cHJpbWFyeUtleSIpOworICAgIHJldHVybiBtX2JhY2tl
bmQtPnByaW1hcnlLZXkoKTsKK30KKworUGFzc1JlZlB0cjxJREJBbnk+IElEQkN1cnNvcjo6dmFs
dWUoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp2YWx1ZSIpOworICAgIHJl
dHVybiBJREJBbnk6OmNyZWF0ZShtX2JhY2tlbmQtPnZhbHVlKCkpOworfQorCitJREJBbnkqIElE
QkN1cnNvcjo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBk
YXRlIik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgIG1fYmFja2VuZC0+dXBkYXRlKHZhbHVlLCByZXF1ZXN0LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29y
Ojpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjpjb250aW51ZSIpOworICAgIGlmIChr
ZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRp
bnVlIHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjaworICAgIC8vICAgICAgICB3
aWxsIGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4g
SXMgdGhpcyByaWdodD8KKyAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFu
c2FjdGlvbi5nZXQoKSkpIHsKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXRDdXJzb3IodGhpcyk7Cisg
ICAgICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOwor
ICAgIH0gZWxzZQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6ZGVsZXRlIik7CisgICAgUmVmUHRyPElEQlJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVh
dGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVu
Y3Rpb24ocmVxdWVzdCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5tYXJr
RWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlcXVl
c3QucmVsZWFzZSgpOworfQorCit2b2lkIElEQkN1cnNvcjo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2Fs
bGJhY2soKQoreworICAgIG1fYmFja2VuZC0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsK
K30KKwordm9pZCBJREJDdXJzb3I6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9yZXF1ZXN0KTsK
KyAgICBtX3JlcXVlc3QtPmZpbmlzaEN1cnNvcigpOworICAgIG1fcmVxdWVzdC5jbGVhcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
Q3Vyc29yLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SURCQ3Vyc29yX2gKKyNkZWZpbmUgSURCQ3Vyc29yX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQkFueTsKK2NsYXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U7CitjbGFzcyBJREJSZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKKworY2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7
CitwdWJsaWM6CisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgICBORVhUID0gMCwKKyAgICAg
ICAgTkVYVF9OT19EVVBMSUNBVEUgPSAxLAorICAgICAgICBQUkVWID0gMiwKKyAgICAgICAgUFJF
Vl9OT19EVVBMSUNBVEUgPSAzLAorICAgIH07CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vy
c29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVx
dWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgfklE
QkN1cnNvcigpOworCisgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJh
dG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9CisKKyAgICAvLyBJbXBs
ZW1lbnQgdGhlIElETAorICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0OworICAg
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpIGNvbnN0
OworICAgIElEQkFueSogc291cmNlKCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKKyAgICB2
b2lkIGNsb3NlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJU
cmFuc2FjdGlvbiopOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlPiBtX2JhY2tlbmQ7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKKyAg
ICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247CisgICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3RpZmllciBtX3Ry
YW5zYWN0aW9uTm90aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gSURCQ3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBdIElEQkN1cnNvciB7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5FWFQgPSAwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBORVhUX05PX0RVUExJQ0FURSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IFBSRVYgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RV
UExJQ0FURSA9IDM7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFyeUtleTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7CisKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICBbSW1wbGVtZW50ZWRBcz1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtP
cHRpb25hbF0gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVt
ZW50ZWRBcz1kZWxldGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQorICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQktleVJhbmdl
LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklE
QlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1
cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNv
ciwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCisgICAgOiBtX2N1cnNvcihjdXJzb3Ip
CisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29y
VHlwZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgLCBtX29iamVjdFN0
b3JlKG9iamVjdFN0b3JlKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2Fj
dGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kSW1w
bDo6fklEQkN1cnNvckJhY2tlbmRJbXBsKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lz
dGVyT3BlbkN1cnNvcih0aGlzKTsKKyAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQsIHRoZSBjdXJz
b3JzIGhhdmUgdG8gYmUgZGVzdHJ1Y3RlZCBiZWZvcmUgdGhlIG9iamVjdFN0b3JlLgorICAgIG1f
Y3Vyc29yLmNsZWFyKCk7CisgICAgbV9zYXZlZEN1cnNvci5jbGVhcigpOworCisgICAgbV9vYmpl
Y3RTdG9yZS5jbGVhcigpOworfQorCit1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpkaXJlY3Rpb24iKTsKKyAgICByZXR1cm4gbV9kaXJlY3Rpb247Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5KCkgY29uc3QKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjprZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3It
PmtleSgpOworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnBy
aW1hcnlLZXkoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6
OnByaW1hcnlLZXkiKTsKKyAgICByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsKK30KKwor
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2
YWx1ZSgpIGNvbnN0Cit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFs
dWUiKTsKKyAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKQorICAgICAgcmV0
dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7CisgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOworfQor
Cit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp1cGRhdGUiKTsKKyAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtl
eUN1cnNvcikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX29iamVjdFN0b3JlLT5wdXQo
dmFsdWUsIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlLCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsK
K30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjb250aW51ZSIpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKworICAg
IGlmIChtX2N1cnNvciAmJiBrZXkpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yLT5rZXkoKSk7
CisgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgbV9kaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSkgeworICAgICAgICAgICAgaWYgKCFt
X2N1cnNvci0+a2V5KCktPmlzTGVzc1RoYW4oa2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgh
a2V5LT5pc0xlc3NUaGFuKG1fY3Vyc29yLT5rZXkoKS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tl
bmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwsIHRoaXMsIGtleSwgcHJwQ2FsbGJhY2tz
KSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKK30KKworLy8gSU1QT1JUQU5UOiBJZiB0aGlzIGV2ZXIgMSkgZmlyZXMgYW4gJ2Vy
cm9yJyBldmVudCBhbmQgMikgaXQncyBwb3NzaWJsZSB0byBmaXJlIGFub3RoZXIgZXZlbnQgYWZ0
ZXJ3YXJkcywKKy8vICAgICAgICAgICAgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
d2lsbCBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGlzISEhCit2b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUludGVybmFs
Iik7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKCFjdXJzb3ItPm1f
Y3Vyc29yIHx8ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkp
IHsKKyAgICAgICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7
Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICghbV9j
dXJzb3IgfHwgbV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKG1fY3Vyc29yLT5wcmlt
YXJ5S2V5KCksIHBycENhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworfQorCit2
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0Zl
dGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENv
bnRpbnVlIik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFs
LCB0aGlzLCBudW1iZXJUb0ZldGNoLCBwcnBDYWxsYmFja3MpKSkKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwg
aW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7
CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUlu
dGVybmFsIik7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBD
dXJzb3I7CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVj
dG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiBmb3VuZFZhbHVlczsKKworICAgIGlmIChjdXJzb3It
Pm1fY3Vyc29yKQorICAgICAgICBjdXJzb3ItPm1fc2F2ZWRDdXJzb3IgPSBjdXJzb3ItPm1fY3Vy
c29yLT5jbG9uZSgpOworCisgICAgY29uc3Qgc2l6ZV90IGtNYXhTaXplRXN0aW1hdGUgPSAxMCAq
IDEwMjQgKiAxMDI0OworICAgIHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsKKyAgICAgICAgaWYgKCFjdXJzb3It
Pm1fY3Vyc29yIHx8ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7Cisg
ICAgICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5rZXko
KSk7CisgICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKGN1cnNvci0+bV9jdXJzb3ItPnBy
aW1hcnlLZXkoKSk7CisKKyAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgZm91bmRW
YWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY3Vyc29y
LT5tX2N1cnNvci0+dmFsdWUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFZh
bHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKSk7CisKKyAgICAgICAg
c2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsK
KyAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+
c2l6ZUVzdGltYXRlKCk7CisgICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKKyAgICAgICAgICAgIHNpemVF
c3RpbWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVD
aGFyKTsKKworICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4ga01heFNpemVFc3RpbWF0ZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgewor
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN1cnNvci0+bV90cmFuc2Fj
dGlvbi0+YWRkUGVuZGluZ0V2ZW50cyhmb3VuZEtleXMuc2l6ZSgpIC0gMSk7CisgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBm
b3VuZFZhbHVlcyk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVz
ZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcykKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7CisgICAgbV90cmFu
c2FjdGlvbi0+YWRkUGVuZGluZ0V2ZW50cygtdW51c2VkUHJlZmV0Y2hlcyk7CisgICAgbV9jdXJz
b3IgPSBtX3NhdmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJzb3IgPSAwOworCisgICAgaWYgKG1f
Y2xvc2VkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsraSkgeworICAgICAgICAgICAgYm9v
bCBvayA9IG1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNsb3NlKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
OjpjbG9zZSIpOworICAgIG1fY2xvc2VkID0gdHJ1ZTsKKyAgICBpZiAobV9jdXJzb3IpCisgICAg
ICAgIG1fY3Vyc29yLT5jbG9zZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaWZuZGVmIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFj
a2VuZEltcGxfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJ
REJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJREJJ
bmRleEJhY2tlbmRJbXBsOworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisK
K2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJ
bXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlKiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBkaXJlY3Rpb24sIGN1cnNvclR5
cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5JREJD
dXJzb3JCYWNrZW5kSW1wbCgpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmly
dHVhbCB2b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOworICAgIHZv
aWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2so
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKK3ByaXZhdGU6CisgICAgSURCQ3Vyc29yQmFj
a2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIElEQkN1cnNvcjo6
RGlyZWN0aW9uLCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnRp
bnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBp
bnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBtX3NhdmVkQ3Vyc29yOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9u
IG1fZGlyZWN0aW9uOworICAgIEN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CisgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9vYmplY3RTdG9yZTsKKyAgICAKKyAg
ICBib29sIG1fY2xvc2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5k
SW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOjEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQW55
OworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCUmVxdWVzdDsK
K2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSgpIHt9CisKKyAgICBlbnVtIEN1cnNvclR5
cGUgeworICAgICAgICBJbnZhbGlkQ3Vyc29yVHlwZSA9IDAsCisgICAgICAgIEluZGV4Q3Vyc29y
LAorICAgICAgICBJbmRleEtleUN1cnNvciwKKyAgICAgICAgT2JqZWN0U3RvcmVDdXJzb3IKKyAg
ICB9OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24oKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25D
b2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJU
b0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51
c2VkUHJlZmV0Y2hlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisK
KyNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNv
cldpdGhWYWx1ZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhW
YWx1ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvcldpdGhWYWx1
ZShiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoUGFz
c1JlZlB0cjxJREJDdXJzb3I+IHBycEN1cnNvcikKK3sKKyAgICBSZWZQdHI8SURCQ3Vyc29yV2l0
aFZhbHVlPiBjdXJzb3JXaXRoVmFsdWUoc3RhdGljX2Nhc3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4o
cHJwQ3Vyc29yLmdldCgpKSk7CisgICAgcmV0dXJuIGN1cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7
Cit9CisKK0lEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwg
SURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IElEQkN1
cnNvcihiYWNrZW5kLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKQoreworfQorCitJREJD
dXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldp
dGhWYWx1ZS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQ3Vyc29yV2l0aFZhbHVlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKyNkZWZpbmUgSURCQ3Vy
c29yV2l0aFZhbHVlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiSURCQ3Vyc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ3Vyc29y
V2l0aFZhbHVlIDogcHVibGljIElEQkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlv
biopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gZnJvbUN1cnNv
cihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOworICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1
ZSgpOworCisgICAgLy8gVGhlIHZhbHVlIGF0dHJpYnV0ZSBkZWZpbmVkIGluIHRoZSBJREwgaXMg
c2ltcGx5IGltcGxlbWVudGVkIGluIElEQkN1cnNvciAoYnV0IG5vdCBleHBvc2VkIHZpYQorICAg
IC8vIGl0cyBJREwpLiBUaGlzIGlzIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG1vcmUgc2lt
cGxlIHdoaWxlIG1hdGNoaW5nIHdoYXQgdGhlIHNwZWMgc2F5cy4KKworcHJpdmF0ZToKKyAgICBJ
REJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwg
SURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkN1cnNvcldpdGhW
YWx1ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JX
aXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAg
IGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBd
IElEQkN1cnNvcldpdGhWYWx1ZSA6IElEQkN1cnNvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBJREJBbnkgdmFsdWU7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hl
ci5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
SURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0
cjxJREJEYXRhYmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGF0YWJh
c2UpCit7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZShhZG9wdFJlZihuZXcg
SURCRGF0YWJhc2UoY29udGV4dCwgZGF0YWJhc2UpKSk7CisgICAgaWRiRGF0YWJhc2UtPnN1c3Bl
bmRJZk5lZWRlZCgpOworICAgIHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7Cit9CisKK0lE
QkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKKyAgICA6IEFj
dGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisg
ICAgLCBtX2Nsb3NlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY29udGV4dFN0b3BwZWQoZmFsc2Up
Cit7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQg
Y2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisgICAgbV9k
YXRhYmFzZUNhbGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKHRoaXMp
OworfQorCitJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKK3sKKyAgICBjbG9zZSgpOworICAg
IG1fZGF0YWJhc2VDYWxsYmFja3MtPnVucmVnaXN0ZXJEYXRhYmFzZSh0aGlzKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZTo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KTsKKyAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworfQorCit2
b2lkIElEQkRhdGFiYXNlOjpjbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOworICAgIG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uID0gMDsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0
aW9uc09iamVjdCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFN0
cmluZyBrZXlQYXRoOworICAgIGJvb2wga2V5UGF0aEV4aXN0cyA9IG9wdGlvbnMuZ2V0V2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKCJrZXlQYXRoIiwga2V5UGF0aCk7CisgICAgaWYgKGtleVBhdGhF
eGlzdHMgJiYgIUlEQklzVmFsaWRLZXlQYXRoKGtleVBhdGgpKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dCgiYXV0b0luY3JlbWVudCIsIGF1dG9JbmNyZW1lbnQpOworICAgIC8vIEZJWE1FOiBMb29rIHVw
IGV2aWN0YWJsZSBhbmQgcGFzcyB0aGF0IG9uIGFzIHdlbGwuCisKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQt
PmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoIW9iamVjdFN0b3Jl
QmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZShvYmplY3RTdG9yZUJhY2tlbmQucmVsZWFzZSgpLCBtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVj
dFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2Vu
ZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9y
ZURlbGV0ZWQobmFtZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+
IElEQkRhdGFiYXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHZl
cnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9O
X1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIHZlcnNpb24pOworICAgIG1f
YmFja2VuZC0+c2V0VmVyc2lvbih2ZXJzaW9uLCByZXF1ZXN0LCBtX2RhdGFiYXNlQ2FsbGJhY2tz
LCBlYyk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0b3JlTmFtZXMgPSBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBzdG9yZU5hbWVzLT5hcHBlbmQoc3RvcmVOYW1l
KTsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgZWMp
OworfQorCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBwcnBTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IHBycFN0b3JlTmFt
ZXM7CisgICAgaWYgKCFzdG9yZU5hbWVzIHx8IHN0b3JlTmFtZXMtPmlzRW1wdHkoKSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgaWYgKG1vZGUgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfV1JJVEUgJiYgbW9kZSAhPSBJ
REJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
aWYgKG1fY2xvc2VQZW5kaW5nKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2Ug
bmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJl
IGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBPcGVyYXRpb25zCisgICAgLy8gY2FuIGJlIHF1ZXVl
ZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBhdCBhbnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBl
eGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJl
ZW4gYWNxdWlyZWQuCisgICAgLy8gQWxzbyBub3RlIHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBj
b3JyZXNwb25kcyB0byBleGFjdGx5IG9uZSBJREJUcmFuc2FjdGlvbiBvYmplY3QuCisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0g
bV9iYWNrZW5kLT50cmFuc2FjdGlvbihzdG9yZU5hbWVzLmdldCgpLCBtb2RlLCBlYyk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbkJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVjKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5zYWN0aW9uQmFja2VuZCwgdGhp
cyk7CisgICAgdHJhbnNhY3Rpb25CYWNrZW5kLT5zZXRDYWxsYmFja3ModHJhbnNhY3Rpb24uZ2V0
KCkpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2U6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmQtPmNsb3NlKG1f
ZGF0YWJhc2VDYWxsYmFja3MpOworCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXZlbnRRdWV1ZSog
ZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOworICAg
IC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8g
ZmlyZSBvbiB0aGlzCisgICAgLy8gY29ubmVjdGlvbi4gVGhleSB3b3VsZCBoYXZlIGJlZW4gc2No
ZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhlcgorICAgIC8vIGNvbm5lY3Rpb24gY2Fs
bGVkIHNldFZlcnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZworICAg
IC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJlLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIHJlbW92
ZWQgPSBldmVudFF1ZXVlLT5jYW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICB9Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7
CisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVu
dDo6Y3JlYXRlKHZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZTo6b3BlbigpCit7CisgICAgbV9iYWNrZW5kLT5vcGVuKG1fZGF0
YWJhc2VDYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsK
KyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBFdmVudFF1ZXVlKiBl
dmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAg
ZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZl
bnQuZ2V0KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKK30KKworYm9v
bCBJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJU
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQorICAg
ICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CisgICAgfQorICAgIHJldHVybiBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2U6OnN0b3AoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOworICAgIC8vIFN0
b3AgZmlyZXMgYXQgYSBkZXRlcm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9z
ZSBpbiBpdC4KKyAgICBjbG9zZSgpOworCisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Cit9
CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSURCRGF0YWJhc2U6OmludGVyZmFjZU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCRGF0YWJhc2U7Cit9
CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQkRhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCRGF0YWJhc2U6OmV2ZW50
VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZl
bnRUYXJnZXREYXRhKiBJREJEYXRhYmFzZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAg
ICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmg6MTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VfaAorI2Rl
ZmluZSBJREJEYXRhYmFzZV9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0
b3JlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2Jq
ZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwordHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKKworY2xhc3MgSURCRGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJE
YXRhYmFzZT4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+
KTsKKyAgICB+SURCRGF0YWJhc2UoKTsKKworICAgIHZvaWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCBjbGVhclZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiopOworCisgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKKyAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOyB9CisgICAg
U3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPnZlcnNpb24oKTsgfQor
ICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZC0+b2JqZWN0U3RvcmVOYW1lcygpOyB9CisKKyAgICAvLyBGSVhNRTog
VHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAg
ICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShu
YW1lLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09i
amVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBzZXRWZXJzaW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGFib3J0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9y
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHZlcnNpb25jaGFuZ2UpOwor
CisgICAgLy8gSURCRGF0YWJhc2VDYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9u
Q2hhbmdlKGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkVmVyc2lvbik7CisKKyAgICAvLyBBY3RpdmVE
T01PYmplY3QKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOworCisgICAgLy8gRXZl
bnRUYXJnZXQKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0OworCisgICAgdm9pZCBvcGVuKCk7CisgICAgdm9pZCBlbnF1ZXVl
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0
OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFi
YXNlPjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKKwor
cHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKKworICAgIC8vIEV2ZW50VGFyZ2V0
CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRE
YXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKKyAg
ICBib29sIG1fY29udGV4dFN0b3BwZWQ7CisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50
cyB3YWl0aW5nIHRvIGJlIGZpcmVkIG9uIHRoaXMKKyAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdl
IGNhbiBjYW5jZWwgdGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgorICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50czsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGw+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VfaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNp
b24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7
CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNF
LAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJ
REJEYXRhYmFzZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOworCisgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
dmVyc2lvbmNoYW5nZTsKKworICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9y
ZShpbiBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMp
CisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dF0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJp
bmcgdmVyc2lvbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwor
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24oaW4gRE9NU3RyaW5nTGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9y
ZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBt
b2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbihpbiBET01TdHJpbmcgc3RvcmVOYW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZp
bmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVudFRh
cmdldCBpbnRlcmZhY2UKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmlu
ZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9v
bGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERP
TVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRM
aXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtP
cHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2
ZW50KGluIEV2ZW50IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7Cisg
ICAgfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJ
KGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBlbmRpbmdPcGVuQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxs
YmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygp
IHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ09wZW5DYWxs
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVs
ZXRlQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisK
K3ByaXZhdGU6CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAg
IH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZD
b3VudGVkPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbCh2ZXJzaW9uLCBjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgfQorICAgIFN0cmluZyB2ZXJzaW9uKCkgeyByZXR1cm4g
bV92ZXJzaW9uOyB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsg
cmV0dXJuIG1fY2FsbGJhY2tzOyB9CisgICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gZGF0YWJhc2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzOyB9CisK
K3ByaXZhdGU6CisgICAgUGVuZGluZ1NldFZlcnNpb25DYWxsKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgIDogbV92ZXJzaW9uKHZl
cnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0
YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBTdHJp
bmcgbV92ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAg
IFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisK
K0lEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQorICAgICwgbV9pZChJbnZhbGlkSWQpCisgICAgLCBtX25hbWUobmFtZSkKKyAg
ICAsIG1fdmVyc2lvbigiIikKKyAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQor
ICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCisgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
Y29vcmRpbmF0b3IpCit7CisgICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOworICAgIG9wZW5J
bnRlcm5hbCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5h
bCgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNl
TWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVChzdWNjZXNzID09
IChtX2lkICE9IEludmFsaWRJZCkpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIGxvYWRP
YmplY3RTdG9yZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lk
KSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBl
cnJvciBoYW5kbGluZy4KK30KKworSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNl
QmFja2VuZEltcGwoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5k
KG1faWRlbnRpZmllcik7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsKK30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAg
IGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMu
YmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCisgICAgICAgIG9iamVj
dFN0b3JlTmFtZXMtPmFwcGVuZChpdC0+Zmlyc3QpOworICAgIG9iamVjdFN0b3JlTmFtZXMtPnNv
cnQoKTsKKyAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwor
CisgICAgaWYgKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0
KCksIG1faWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwg
dHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJv
bU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVybiBv
YmplY3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBpbnQ2NF90IG9iamVjdFN0
b3JlSWQ7CisKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0
U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5r
ZXlQYXRoKCksIG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7
CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgb2JqZWN0U3RvcmUtPnNldElkKG9iamVjdFN0b3JlSWQpOworICAgIHRyYW5zYWN0aW9u
LT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAg
IGlmICghb2JqZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9i
amVjdFN0b3JlLCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0
U3RvcmVUb01hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKK30KKwordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgZGF0
YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwg
b2JqZWN0U3RvcmUtPmlkKCkpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVu
dHMoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9
IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNl
Q2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgaWYgKCFtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmNvbnRhaW5zKGRhdGFiYXNlQ2FsbGJhY2tzKSkgeworICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpBQk9SVF9FUlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2ZXJzaW9uIHRy
YW5zYWN0aW9uIHdhcyBjcmVhdGVkIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZv
ciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNh
bGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAg
ICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOworICAgIH0KKyAgICAvLyBGSVhNRTog
T25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0
aGUKKyAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0
IHVwIHRvIGZpcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMTMwCisgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgewor
ICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1Nl
dFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNh
bGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAg
ICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVu
ZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lv
biwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZl
cnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShv
YmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRo
aXMpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2Us
IHZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICB9Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sK
KyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKKyAgICBkYXRhYmFzZS0+
bV92ZXJzaW9uID0gdmVyc2lvbjsKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9u
KSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlv
biBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJs
ZSBzdG9yYWdlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7Cisg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBw
cnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2Fj
dGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsK
KyAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi5jbGVhcigpOworICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQor
eworICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKKyAgICBE
ZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2Fs
bHM7CisgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ1NldFZlcnNpb25D
YWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewor
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gcGVuZGluZ1NldFZlcnNpb25DYWxs
cy50YWtlRmlyc3QoKTsKKyAgICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwt
PnZlcnNpb24oKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1Nl
dFZlcnNpb25DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7CisgICAgICAgIEFTU0VSVCgh
ZWMpOworICAgIH0KKworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
fHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERlcXVlPFJlZlB0
cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAgbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGlu
Z0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNh
bGw+IHBlbmRpbmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOwor
ICAgICAgICBkZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwor
ICAgIH0KKworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1f
cGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVu
Q2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRp
bmdPcGVuQ2FsbCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3Bl
bkNvbm5lY3Rpb24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlm
ICghbV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVOYW1lcy0+aXRlbShpKSkpIHsK
KyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBS
ZXR1cm4gbm90IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KKyAgICByZXR1
cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1v
ZGUsIHRoaXMpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG1fZGF0YWJhc2VD
YWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2FsbGJhY2tzKSk7
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwg
IW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09w
ZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5J
bnRlcm5hbCgpOworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2Fs
bDo6Y3JlYXRlKHBycENhbGxiYWNrcykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhN
RTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24n
dCBpbgorICAgIC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTI5CisgICAgZm9yIChEYXRhYmFzZUNhbGxi
YWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2lu
KCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCisgICAgICAgICgq
aXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9j
a2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNp
b25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBp
ZiAoIW1fZGF0YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykp
OworICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFtZSkpIHsKKyAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV92ZXJzaW9uID0gIiI7CisgICAgbV9pZCA9IEludmFsaWRJ
ZDsKKyAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBy
cENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNr
cyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250
YWlucyhjYWxsYmFja3MpKTsKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnJlbW92ZShjYWxs
YmFja3MpOworICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCisgICAg
ICAgIHJldHVybjsKKworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8aW50
NjRfdD4gaWRzOworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+
IGtleVBhdGhzOworICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgbV9i
YWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBpZHMsIG5hbWVzLCBrZXlQYXRocywg
YXV0b0luY3JlbWVudEZsYWdzKTsKKworICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNp
emUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKyAgICBB
U1NFUlQoYXV0b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX29iamVjdFN0
b3Jlcy5zZXQobmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZS5nZXQoKSwgbV9pZCwgaWRzW2ldLCBuYW1lc1tpXSwga2V5UGF0aHNbaV0sIGF1
dG9JbmNyZW1lbnRGbGFnc1tpXSkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2Ut
Pm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5uYW1lKCkpKTsKKyAgICBkYXRh
YmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlLT5uYW1lKCkpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlVG9NYXAoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7
CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlUHRyID0g
b2JqZWN0U3RvcmU7CisgICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFp
bnMob2JqZWN0U3RvcmVQdHItPm5hbWUoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jl
cy5zZXQob2JqZWN0U3RvcmVQdHItPm5hbWUoKSwgb2JqZWN0U3RvcmVQdHIpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKQoreworICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QkRhdGFiYXNlQmFja2VuZEltcGxfaAorI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gK
KworI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsKK2NsYXNzIElEQkRh
dGFiYXNlOworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOworY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNl
LCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwg
ZGF0YWJhc2UsIGNvb3JkaW5hdG9yLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7CisgICAg
fQorICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsKKworICAgIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBj
b25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KKworICAgIC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBt
b3JlIGRlc2NyaXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCisgICAgdm9p
ZCBvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5D
b25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVEYXRh
YmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgdmlydHVhbCBTdHJpbmcgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0OworCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2
b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNl
QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNl
LCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29u
c3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkludGVybmFsKCk7
CisgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCk7CisKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZv
aWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+KTsKKworICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24g
YWJvcnQgdGFza3MuCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYg
dmVyc2lvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBpbnQ2NCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmVyc2lv
bjsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVl
ZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2Yg
dGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBz
b3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gPiBPYmplY3RTdG9yZU1hcDsKKyAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsK
KworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9y
dW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgUGVuZGluZ1NldFZl
cnNpb25DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzOworCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCisg
ICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxl
dGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7Cisg
ICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKKyNkZWZpbmUg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBJREJDYWxsYmFj
a3M7CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKKwor
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkg
SURCRGF0YWJhc2UgKGFzeW5jKSBhbmQgSURCRGF0YWJhc2VTeW5jIChzeW5jKS4KKy8vIFRoaXMg
aXMgaW1wbGVtZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBv
dGhlcnMgKGluIG9yZGVyIHRvIHByb3h5CisvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVy
cykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5k
CisvLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCitj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBuYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFt
ZXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxi
YWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VDYWxsYmFja3Nf
aAorI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUNh
bGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJh
c2VDYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAx
MDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklE
QkRhdGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGw+IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKElEQkRh
dGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbChkYXRhYmFzZSkpOworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6
OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbChJREJEYXRhYmFzZSogZGF0YWJhc2UpCisgICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQoreworfQorCitJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6On5J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwoKQoreworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbDo6b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBp
ZiAobV9kYXRhYmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNp
b24pOworfQorCit2b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6dW5yZWdpc3RlckRhdGFi
YXNlKElEQkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2UgPT0gbV9k
YXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
OjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCisjZGVmaW5lIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzSW1wbF9oCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElEQkRhdGFiYXNlOworCitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwgOiBwdWJsaWMg
SURCRGF0YWJhc2VDYWxsYmFja3MgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbD4gY3JlYXRlKElEQkRhdGFiYXNlKik7CisgICAgdmlydHVh
bCB+SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25WZXJz
aW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRGF0
YWJhc2UoSURCRGF0YWJhc2UqKTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwoSURCRGF0YWJhc2UqKTsKKworICAgIC8vIG1fZGF0YWJhc2UgaGFzIGEgUmVmUHRyIHRv
IHRoaXMsIHNvIHVzZSBhIHdlYWsgcG9pbnRlciB0byBhdm9pZCBhIGN5Y2xlLgorICAgIElEQkRh
dGFiYXNlKiBtX2RhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VF
cnJvci5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJEYXRhYmFzZUVycm9yX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VFcnJvcl9oCisKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSURCRGF0YWJhc2VFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFi
YXNlRXJyb3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBjcmVhdGUodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGNvZGUgPj0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRh
dGFiYXNlRXhjZXB0aW9uT2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGNvZGUgPCBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25NYXgpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSAtIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCwgbWVzc2FnZSkpOworICAgIH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGNyZWF0ZVdpdGhvdXRPZmZzZXQodW5zaWdu
ZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGNvZGUgPCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZz
ZXQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwg
bWVzc2FnZSkpOworICAgIH0KKworICAgIH5JREJEYXRhYmFzZUVycm9yKCkgeyB9CisKKyAgICB1
bnNpZ25lZCBzaG9ydCBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgdm9pZCBz
ZXRDb2RlKHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IG1fY29kZSA9IHZhbHVlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9p
ZCBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9tZXNzYWdlID0gdmFsdWU7IH0K
KworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZSht
ZXNzYWdlKSB7IH0KKworICAgIHVuc2lnbmVkIHNob3J0IG1fY29kZTsKKyAgICBTdHJpbmcgbV9t
ZXNzYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlm
IC8vIElEQkRhdGFiYXNlRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJ
KGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2Ug
eworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RQorICAgIF0gSURCRGF0YWJhc2VFcnJvciB7CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBz
aG9ydCBjb2RlOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CisgICAgfTsK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VF
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDoxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGFuIGFycmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9u
cy4KK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0geworICAgICJV
TktOT1dOX0VSUiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwKKyAgICAiTk9UX0ZPVU5EX0VS
UiIsCisgICAgIkNPTlNUUkFJTlRfRVJSIiwKKyAgICAiREFUQV9FUlIiLAorICAgICJOT1RfQUxM
T1dFRF9FUlIiLAorICAgICJUUkFOU0FDVElPTl9JTkFDVElWRV9FUlIiLAorICAgICJBQk9SVF9F
UlIiLAorICAgICJSRUFEX09OTFlfRVJSIiwKKyAgICAiVElNRU9VVF9FUlIiLAorICAgICJRVU9U
QV9FUlIiLAorICAgICJWRVJfRVJSIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4
Y2VwdGlvbkRlc2NyaXB0aW9uc1tdID0geworICAgICJBbiB1bmtub3duIGVycm9yIG9jY3VycmVk
IHdpdGhpbiBJbmRleGVkIERhdGFiYXNlLiIsCisgICAgIk5PTl9UUkFOU0lFTlRfRVJSIiwgLy8g
RklYTUU6IFdyaXRlIGEgYmV0dGVyIG1lc3NhZ2UgaWYgaXQncyBldmVyIHBvc3NpYmxlIHRoaXMg
aXMgdGhyb3duLgorICAgICJUaGUgbmFtZSBzdXBwbGllZCBkb2VzIG5vdCBtYXRjaCBhbnkgZXhp
c3RpbmcgaXRlbS4iLAorICAgICJUaGUgcmVxdWVzdCBjYW5ub3QgYmUgY29tcGxldGVkIGR1ZSB0
byBhIGZhaWxlZCBjb25zdHJhaW50LiIsCisgICAgIlRoZSBkYXRhIHByb3ZpZGVkIGRvZXMgbm90
IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgZnVuY3Rpb24uIiwKKyAgICAiVGhpcyBmdW5j
dGlvbiBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgaW4gc3VjaCBhIGNvbnRleHQuIiwKKyAg
ICAiQSByZXF1ZXN0IHdhcyBwbGFjZWQgYWdhaW5zdCBhIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGVp
dGhlciBjdXJyZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIiwKKyAgICAi
VGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVs
ZmlsbGVkLiIsCisgICAgIkEgd3JpdGUgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgaW4gYSByZWFk
LW9ubHkgdHJhbnNhY3Rpb24uIiwKKyAgICAiQSBsb2NrIGZvciB0aGUgdHJhbnNhY3Rpb24gY291
bGQgbm90IGJlIG9idGFpbmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIsIC8vIEZJWE1FOiBUaGlz
IGlzbid0IHVzZWQgeWV0LgorICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZXJl
IHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBx
dW90YSB3YXMgcmVhY2hlZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gZ2l2ZSBtb3JlIHNwYWNl
IHRvIHRoZSBkYXRhYmFzZS4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2VkIHlldAorICAgICJB
biBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRhYmFzZSB1c2luZyBhIGxvd2VyIHZlcnNp
b24gdGhhbiB0aGUgZXhpc3RpbmcgdmVyc2lvbi4iLCAvLyBGSVhNRTogVGhpcyBpc24ndCB1c2Vk
IHlldAorfTsKKworQ09NUElMRV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25OYW1l
cykgPT0gV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25EZXNjcmlwdGlvbnMpLCBJREJEYXRhYmFz
ZUV4Y2VwdGlvblRhYmxlc011c3RNYXRjaCk7CisKK2Jvb2wgSURCRGF0YWJhc2VFeGNlcHRpb246
OmluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlIGVjLCBFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChlYyA8IElEQkRhdGFiYXNlRXhjZXB0
aW9uT2Zmc2V0IHx8IGVjID4gSURCRGF0YWJhc2VFeGNlcHRpb25NYXgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGRlc2NyaXB0aW9uLT50eXBlTmFtZSA9ICJET00gSURCRGF0YWJhc2Ui
OworICAgIGRlc2NyaXB0aW9uLT5jb2RlID0gZWMgLSBJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNl
dDsKKyAgICBkZXNjcmlwdGlvbi0+dHlwZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZTsKKwor
ICAgIHNpemVfdCB0YWJsZVNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsK
KyAgICBzaXplX3QgdGFibGVJbmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7CisKKyAgICBkZXNjcmlw
dGlvbi0+bmFtZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0YWJs
ZUluZGV4XSA6IDA7CisgICAgZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRleCA8
IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5o
OjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSURCRGF0YWJhc2VFeGNlcHRpb25faAorI2RlZmluZSBJREJEYXRhYmFzZUV4Y2VwdGlvbl9o
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJh
c2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUV4Y2VwdGlv
biA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkRhdGFiYXNlRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IGludCBJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCA9IDEyMDA7CisgICAgc3RhdGljIGNv
bnN0IGludCBJREJEYXRhYmFzZUV4Y2VwdGlvbk1heCA9IDEyOTk7CisKKyAgICBlbnVtIElEQkRh
dGFiYXNlRXhjZXB0aW9uQ29kZSB7CisgICAgICAgIE5PX0VSUiA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uT2Zmc2V0LAorICAgICAgICBVTktOT1dOX0VSUiwKKyAgICAgICAgTk9OX1RSQU5TSUVOVF9F
UlIsCisgICAgICAgIE5PVF9GT1VORF9FUlIsCisgICAgICAgIENPTlNUUkFJTlRfRVJSLAorICAg
ICAgICBEQVRBX0VSUiwKKyAgICAgICAgTk9UX0FMTE9XRURfRVJSLAorICAgICAgICBUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlIsCisgICAgICAgIEFCT1JUX0VSUiwKKyAgICAgICAgUkVBRF9PTkxZ
X0VSUiwKKyAgICAgICAgVElNRU9VVF9FUlIsCisgICAgICAgIFFVT1RBX0VSUiwKKyAgICAgICAg
VkVSX0VSUgorICAgIH07CisKKyAgICBzdGF0aWMgaW50IEVycm9yQ29kZVRvRXhjZXB0aW9uQ29k
ZShpbnQgZXJyb3JDb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFlcnJvckNvZGUpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZSArIElEQkRhdGFiYXNlRXhj
ZXB0aW9uT2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlw
dGlvbihFeGNlcHRpb25Db2RlLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qKTsKKworcHJpdmF0
ZToKKyAgICBJREJEYXRhYmFzZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQorICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisg
ICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNl
bmRpZiAvLyBJREJEYXRhYmFzZUV4Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCShy
ZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VF
eGNlcHRpb24uaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cwor
ICAgIF0gSURCRGF0YWJhc2VFeGNlcHRpb24geworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBzaG9ydCAgIGNvZGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIG1lc3NhZ2U7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExB
TkdVQUdFX0pBVkFTQ1JJUFQKKyAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3ppbGxhIGNvbXBh
dGlibGUgZm9ybWF0CisgICAgICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmco
KTsKKyNlbmRpZgorCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VSUiA9IDA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgTk9OX1RSQU5TSUVOVF9FUlIgPSAyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBOT1RfRk9VTkRfRVJSID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgQ09OU1RSQUlOVF9FUlIgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBE
QVRBX0VSUiA9IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9BTExPV0VEX0VS
UiA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUiA9IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VSUiA9IDg7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDEwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBRVU9UQV9FUlIgPSAxMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
VkVSX0VSUiA9IDEyOworICAgIH07CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24g
MTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5j
cHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJREJFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYg
ZXZlbnRUYXJnZXRzKQoreworICAgIHNpemVfdCBzaXplID0gZXZlbnRUYXJnZXRzLnNpemUoKTsK
KyAgICBBU1NFUlQoc2l6ZSk7CisKKyAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQ
VFVSSU5HX1BIQVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAv
LyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRU
YXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5m
aXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpKQorICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CisgICAgfQorCisg
ICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQtPnNl
dEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzWzBdLmdldCgpKTsKKyAgICBldmVudFRhcmdldHNb
MF0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7CisgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlv
blN0b3BwZWQoKSB8fCAhZXZlbnQtPmJ1YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkp
CisgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworCisgICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNp
emU7ICsraSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnRU
YXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAg
ICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOworICAgIH0KKworICAgIC8vIEZJWE1FOiAiLi4uSG93
ZXZlciwgd2UgYWxzbyB3YW50ZWQgdG8gaW50ZWdyYXRlIHRoZSB3aW5kb3cub25lcnJvciBmZWF0
dXJlIGluCisgICAgLy8gICAgICAgIEhUTUw1LiBTbyBhZnRlciB3ZSd2ZSBmaXJlZCBhbiAiZXJy
b3IiIGV2ZW50LCBpZiAucHJldmVudERlZmF1bHQoKSB3YXMKKyAgICAvLyAgICAgICAgbmV2ZXIg
Y2FsbGVkIG9uIHRoZSBldmVudCwgd2UgZmlyZSBhbiBlcnJvciBldmVudCBvbiB0aGUgd2luZG93
IChjYW4ndAorICAgIC8vICAgICAgICByZW1lbWJlciBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIG9y
IGFmdGVyIHdlIGFib3J0IHRoZSB0cmFuc2FjdGlvbikuCisgICAgLy8gICAgICAgIFRoaXMgaXMg
YSBzZXBhcmF0ZSBldmVudCwgd2hpY2ggZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCBldmVuIGlmIHlv
dQorICAgIC8vICAgICAgICBhdHRhY2ggYSBjYXB0dXJpbmcgImVycm9yIiBoYW5kbGVyIG9uIHdp
bmRvdywgeW91IHdvbid0IHNlZSBhbnkgZXZlbnRzCisgICAgLy8gICAgICAgIHVubGVzcyBhbiBl
cnJvciByZWFsbHkgd2VudCB1bmhhbmRsZWQuIEFuZCB5b3UgYWxzbyBjYW4ndCBjYWxsCisgICAg
Ly8gICAgICAgIC5wcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXJyb3IgZXZlbnQgZmlyZWQgb24gdGhl
IHdpbmRvdyBpbiBvcmRlciB0bworICAgIC8vICAgICAgICBwcmV2ZW50IHRoZSB0cmFuc2FjdGlv
biBmcm9tIGJlaW5nIGFib3J0ZWQuIEl0J3MgcHVyZWx5IHRoZXJlIGZvcgorICAgIC8vICAgICAg
ICBlcnJvciByZXBvcnRpbmcgYW5kIGRpc3RpbmN0bHkgZGlmZmVyZW50IGZyb20gdGhlIGV2ZW50
IHByb3BhZ2F0aW5nIHRvCisgICAgLy8gICAgICAgIHRoZSB3aW5kb3cuCisgICAgLy8gICAgICAg
IAorICAgIC8vICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gaG93ICJlcnJvciIgZXZlbnRzIGFy
ZSBoYW5kbGVkIGluIHdvcmtlcnMuCisgICAgLy8gICAgICAgIAorICAgIC8vICAgICAgICAoSSB0
aGluayB0aGF0IHNvIGZhciB3ZWJraXQgaGFzbid0IGltcGxlbWVudGVkIHRoZSB3aW5kb3cub25l
cnJvcgorICAgIC8vICAgICAgICBmZWF0dXJlIHlldCwgc28geW91IHByb2JhYmx5IGRvbid0IHdh
bnQgdG8gZmlyZSB0aGUgc2VwYXJhdGUgZXJyb3IKKyAgICAvLyAgICAgICAgZXZlbnQgb24gdGhl
IHdpbmRvdyB1bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tp
bmcKKworZG9uZURpc3BhdGNoaW5nOgorICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwor
ICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlz
cGF0Y2hlci5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRXZlbnREaXNwYXRjaGVyLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSURCRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSURCRXZlbnREaXNw
YXRjaGVyX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBFdmVudDsKK2NsYXNzIEV2ZW50VGFyZ2V0OworCitjbGFzcyBJREJFdmVudERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50KiwgVmVj
dG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVu
IGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgorCitwcml2
YXRlOgorICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJ
REJFdmVudERpc3BhdGNoZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5LmgiCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNp
bmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUg
IldvcmtlclRocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkZhY3Rvcnk6OklE
QkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBtX2Jh
Y2tlbmQoZmFjdG9yeSkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1l
bnQoKTsKK30KKworSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQoreworfQorCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3Vt
ZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCAwKTsKKyAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBh
Z2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7CisgICAgbV9iYWNrZW5kLT5nZXREYXRhYmFz
ZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJh
bWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVy
biByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpIHx8IGNv
bnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRl
eHQpOworICAgICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAgICAgIG1f
YmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLCBmcmFtZSwgU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9Cisj
aWYgRU5BQkxFKFdPUktFUlMpCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIG1f
YmFja2VuZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJp
bmcoKSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRl
bGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
IHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1l
LmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFO
U0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3Jl
YXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGlu
Z3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGlu
Z3MoKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+
aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzaG9y
dCBJREJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElE
QktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoZmlyc3QpOwor
ICAgIEFTU0VSVChzZWNvbmQpOworCisgICAgaWYgKGZpcnN0LT50eXBlKCkgPT0gSURCS2V5OjpJ
bnZhbGlkVHlwZSB8fCBzZWNvbmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9ICAgIAorICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmly
c3QtPmNvbXBhcmUoc2Vjb25kLmdldCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaWZuZGVmIElEQkZhY3RvcnlfaAorI2RlZmluZSBJREJGYWN0b3J5
X2gKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7Citj
bGFzcyBJREJLZXlSYW5nZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xh
c3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJREJGYWN0b3J5IDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9y
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeShmYWN0b3J5
KSk7CisgICAgfQorICAgIH5JREJGYWN0b3J5KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzaG9ydCBjbXAoUGFzc1Jl
ZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25D
b2RlJik7CisKK3ByaXZhdGU6CisgICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZSopOworCisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tl
bmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
SURCRmFjdG9yeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgXSBJREJGYWN0b3J5IHsKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0RGF0YWJhc2VOYW1l
cygpOworCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1l
KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisKKyAgICAgICAg
c2hvcnQgY21wKGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKKyAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgIH07CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJG
YWN0b3J5QmFja2VuZEltcGwuaCIKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtMZXZlbERCRmlsZVN1ZmZp
eFtdID0gIkAxIjsKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpICsga0xldmVsREJGaWxlU3VmZml4OworfQorCitzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlx
dWVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luKQoreworICAgIHJldHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmln
aW4pICsgbmFtZTsKK30KKworSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2Vu
ZEltcGwoKQorICAgIDogbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OmNyZWF0ZSgpKQoreworfQorCitJREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJG
YWN0b3J5QmFja2VuZEltcGwoKQoreworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUJhY2tlbmRNYXAuY29udGFpbnModW5pcXVlSWRlbnRp
ZmllcikpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVy
KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmFkZElEQkJhY2tpbmdTdG9yZShj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSkKK3sKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlm
aWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVNYXAuc2V0KGZpbGVJZGVudGlmaWVyLCBiYWNraW5n
U3RvcmUpOworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fYmFj
a2luZ1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3Rv
cmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJl
Y3RvcnkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05P
V05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7CisgICAgYmFja2luZ1N0
b3JlLT5nZXREYXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMpOworICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm91bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5h
bWVzLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKwor
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwor
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIG9wZW5J
bnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsK
K30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyZWN0b3J5KQoreworICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5
T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmlu
ZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJp
dHlPcmlnaW4uZ2V0KCkpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBp
dCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYg
KGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJl
IGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhl
CisgICAgICAgIC8vIGRhdGFiYXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFz
ZShjYWxsYmFja3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2
ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9y
ZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUp
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUs
IGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlz
LCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVl
SWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQt
PmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9y
eSkKK3sKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50
aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlOworICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0g
bV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBt
X2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNv
bmQ7CisgICAgZWxzZSB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgIGJhY2tpbmdTdG9yZSA9
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFE
aXJlY3RvcnksIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKGJhY2tpbmdTdG9yZSkKKyAg
ICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdp
bjsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVu
dGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFj
a2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlk
ZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewor
ICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBm
b3IgYW55IHBlbmRpbmcKKyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4K
KyAgICAgICAgaXQtPnNlY29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNo
b3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXJlY3RvcnkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1f
dHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Cisg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZT4oZGF0YWJhc2VCYWNrZW5kLmdldCgpKS5yZWxlYXNlKCkpOworICAgIG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1w
bF9oCisjZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCisKKyNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3Mg
SURCQmFja2luZ1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKK2NsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbCA6
IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2VuZEltcGwoKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworCisgICAgLy8gTm90aWZpY2F0
aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCisgICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tl
bmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tp
bmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsK
KyAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlm
aWVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOworCitwcml2YXRlOgorICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOworICAg
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3Blbklu
dGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFw
OworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkJhY2tpbmdTdG9yZSo+IElEQkJhY2tpbmdTdG9y
ZU1hcDsKKyAgICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
OworCisgICAgLy8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0
IGF0IGFueSBnaXZlbiB0aW1lLgorICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlk
YkZhY3RvcnlCYWNrZW5kSW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisKKyNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3IgIkNo
cm9taXVtIHNob3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0
cyBvd24gdmVyc2lvbiBvZiB0aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMgdGhlIG11bHRpLXBy
b2Nlc3MgYm91bmRyeS4iCisjZW5kaWYKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQoreworICAgIHJldHVy
biBJREJGYWN0b3J5QmFja2VuZEltcGw6OmNyZWF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6MTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2VfaAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFt
ZTsKK2NsYXNzIElEQkRhdGFiYXNlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXb3Jr
ZXJDb250ZXh0OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNz
IGlzIHNoYXJlZCBieSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5j
KS4KKy8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBv
cHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9j
ZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1i
bG9ja2luZyBhbmQKKy8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5l
Y2Vzc2FyeS4KK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgp
OworICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxs
YmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29y
a2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisj
ZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAkocmV2aXNpb24gMTA5NDYxKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcDoxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SURCSW5kZXguaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAi
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
SURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RT
dG9yZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgi
CisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6
TkVYVDsKKworSURCSW5kZXg6OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKKyAgICA6IG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9vYmpl
Y3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7
CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKK30KKworSURCSW5kZXg6On5JREJJbmRleCgpCit7Cit9
CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURC
X1RSQUNFKCJJREJJbmRleDo6b3BlbkN1cnNvciIpOworICAgIGlmIChkaXJlY3Rpb24gIT0gSURC
Q3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRF
ICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNv
cjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIHRvIGNo
YW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVn
LmNnaT9pZD0xMTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUo
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IpOworICAgIG1fYmFja2VuZC0+
b3BlbkN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5
RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0Owor
fQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNr
ZW5kLT5jb3VudChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgSURCX1RSQUNFKCJJREJJbmRleDo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY291bnQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFz
ZSgpLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlD
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIGlm
IChkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpORVhUICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFICYmIGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6OlBSRVYgJiYgZGly
ZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpIHsKKyAgICAgICAgLy8gRklY
TUU6IE1heSBuZWVkIHRvIGNoYW5nZSB3aGVuIHNwZWNjZWQ6IGh0dHA6Ly93d3cudzMub3JnL0J1
Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMTQwNgorICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHJlcXVl
c3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3IpOworICAgIG1fYmFja2VuZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleDo6
Z2V0Iik7CisgICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlw
ZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICByZXF1ZXN0LT5t
YXJrRWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJl
cXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXRLZXkiKTsKKyAg
ICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOworICAgIG1fYmFja2VuZC0+Z2V0S2V5KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+
YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJs
eURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJ
bmRleC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURC
SW5kZXhfaAorI2RlZmluZSBJREJJbmRleF9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNp
bmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJPYmplY3RTdG9yZTsKKworY2xh
c3MgSURCSW5kZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJJbmRleChiYWNrZW5kLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKKyAgICB9
CisgICAgfklEQkluZGV4KCk7CisKKyAgICAvLyBJbXBsZW1lbnQgdGhlIElETAorICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KKyAgICBJREJPYmpl
Y3RTdG9yZSogb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgp
OyB9CisgICAgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPmtleVBh
dGgoKTsgfQorICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT51bmlx
dWUoKTsgfQorICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+
bXVsdGlFbnRyeSgpOyB9CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBn
ZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBl
Yyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0K
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJz
b3I6Ok5FWFQsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5
PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUm
KTsKKworcHJpdmF0ZToKKyAgICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKworICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3Ry
YW5zYWN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIElEQkluZGV4X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgXSBJREJJbmRleCB7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElE
Qk9iamVjdFN0b3JlIG9iamVjdFN0b3JlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1
ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKKworICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vy
c29yKGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2Vw
dGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IG9wZW5LZXlDdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09w
dGlvbmFsXSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCisgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0S2V5KGluIElEQktleSBrZXkpCisgICAgICAgICAgICBy
YWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5n
ZSByYW5nZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChp
biBJREJLZXkga2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
CisgICAgfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1
ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURC
S2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1f
b2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoaWQpCisg
ICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFtZSkKKyAgICAsIG1f
a2V5UGF0aChrZXlQYXRoKQorICAgICwgbV91bmlxdWUodW5pcXVlKQorICAgICwgbV9tdWx0aUVu
dHJ5KG11bHRpRW50cnkpCit7Cit9CisKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCisgICAgOiBtX2JhY2tpbmdT
dG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAs
IG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKKyAgICAsIG1faWQoSW52
YWxpZElkKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUp
CisgICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1fdW5pcXVlKHVuaXF1ZSkKKyAgICAs
IG1fbXVsdGlFbnRyeShtdWx0aUVudHJ5KQoreworfQorCitJREJJbmRleEJhY2tlbmRJbXBsOjp+
SURCSW5kZXhCYWNrZW5kSW1wbCgpCit7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6
b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwg
dW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50
ZXJuYWwiKTsKKyAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2Fz
dDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVjdGlvbik7CisKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIHN3aXRj
aCAoY3Vyc29yVHlwZSkgeworICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3I6CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tp
bmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJl
Y3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4Q3Vyc29yOgorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9i
YWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+
bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGly
ZWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkludmFsaWRDdXJzb3JUeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAg
ICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFs
dWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9y
ZSA9IHRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZShpbmRleC0+bV9zdG9yZU5hbWUsIGVjKTsKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmUgJiYgIWVjKTsKKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tp
bmdTdG9yZUN1cnNvci5nZXQoKSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbi5n
ZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNv
ci5yZWxlYXNlKCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3Io
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7CisgICAg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvcklu
dGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2
b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJ
REJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlID0gcHJwS2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwg
a2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlD
dXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4
QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RS
QUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgdWludDMyX3Qg
Y291bnQgPSAwOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5n
U3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihp
bmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGlu
ZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3Jl
Q3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNs
b3NlKCk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpu
dW1iZXJWYWx1ZShjb3VudCkpOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6
OmNvdW50Iik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmY291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rp
b24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5B
Q1RJVkVfRVJSOworfQorCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2Vu
ZEltcGw6OmdldEludGVybmFsIik7CisgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVybmFsIGlu
dG8gdHdvIGZ1bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgorICAgIGlmIChn
ZXRPYmplY3QpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3Jl
LT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKHZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8
SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlW
aWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgaWYgKCFrZXlSZXN1bHQpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhrZXlSZXN1bHQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQiKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0
aGlzOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXks
IHRydWUsIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6
Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Z2V0S2V5Iik7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0g
dGhpczsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5
LCBmYWxzZSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBs
OjphZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSog
cHJpbWFyeUtleSkKK3sKKyAgICBpZiAoIW1fdW5pcXVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICBib29sIGZvdW5kID0g
bV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luSW5kZXgobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgbV9pZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAg
IGlmICghZm91bmQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmltYXJ5S2V5ICYm
IGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlz
aW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJ
bXBsLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1w
bF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFz
cyBJREJLZXk7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBv
YmplY3RTdG9yZUJhY2tlbmQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5k
ZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2Vu
ZCwgaWQsIG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Cisg
ICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJ
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlQmFja2VuZCwgbmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOworCisg
ICAgaW50NjRfdCBpZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZh
bGlkSWQpOworICAgICAgICByZXR1cm4gbV9pZDsKKyAgICB9CisgICAgdm9pZCBzZXRJZChpbnQ2
NF90IGlkKSB7IG1faWQgPSBpZDsgfQorICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQgIT0gSW52YWxpZElkOyB9OworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNv
bnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOworCisg
ICAgLy8gSW1wbGVtZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCisgICAgdmlydHVhbCBT
dHJpbmcgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHN0b3Jl
TmFtZSgpIHsgcmV0dXJuIG1fc3RvcmVOYW1lOyB9CisgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0
aCgpIHsgcmV0dXJuIG1fa2V5UGF0aDsgfQorICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJl
dHVybiBtX3VuaXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4g
bV9tdWx0aUVudHJ5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNr
aW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3Rv
cmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnkpOworICAgIElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKworICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJz
b3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4p
OworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5PiwgYm9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisKKyAg
ICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworCisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsK
KyAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2Vu
ZDsKKyAgICBpbnQ2NF90IG1faWQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9z
dG9yZU5hbWU7CisgICAgU3RyaW5nIG1fa2V5UGF0aDsKKyAgICBib29sIG1fdW5pcXVlOworICAg
IGJvb2wgbV9tdWx0aUVudHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Vf
aAorI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCS2V5Owor
Y2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQkluZGV4QmFja2VuZElu
dGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uo
KSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSA9IDA7CisgICAgdmlydHVhbCBTdHJp
bmcgc3RvcmVOYW1lKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHVuaXF1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRy
eSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKworI2VuZGlmIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJREJLZXkuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0lEQktleTo6SURCS2V5KCkKKyAgICA6IG1fdHlwZShJbnZhbGlkVHlwZSkK
KyAgICAsIG1fc2l6ZUVzdGltYXRlKGtPdmVyaGVhZFNpemUpCit7Cit9CisKK0lEQktleTo6fklE
QktleSgpCit7Cit9CisKK2ludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5KiBvdGhlcikg
Y29uc3QKK3sKKyAgICBBU1NFUlQob3RoZXIpOworICAgIGlmIChtX3R5cGUgIT0gb3RoZXItPm1f
dHlwZSkKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA+IG90aGVyLT5tX3R5cGUgPyAtMSA6IDE7CisK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlci0+bV9hcnJheS5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGludCByZXN1bHQgPSBtX2FycmF5W2ldLT5j
b21wYXJlKG90aGVyLT5tX2FycmF5W2ldLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChtX2FycmF5LnNpemUoKSA8IG90aGVyLT5t
X2FycmF5LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1fYXJy
YXkuc2l6ZSgpID4gb3RoZXItPm1fYXJyYXkuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJu
IC1jb2RlUG9pbnRDb21wYXJlKG90aGVyLT5tX3N0cmluZywgbV9zdHJpbmcpOworICAgIGNhc2Ug
RGF0ZVR5cGU6CisgICAgICAgIHJldHVybiAobV9kYXRlIDwgb3RoZXItPm1fZGF0ZSkgPyAtMSA6
CisgICAgICAgICAgICAgICAgKG1fZGF0ZSA+IG90aGVyLT5tX2RhdGUpID8gMSA6IDA7CisgICAg
Y2FzZSBOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gKG1fbnVtYmVyIDwgb3RoZXItPm1fbnVt
YmVyKSA/IC0xIDoKKyAgICAgICAgICAgICAgICAobV9udW1iZXIgPiBvdGhlci0+IG1fbnVtYmVy
KSA/IDEgOiAwOworICAgIGNhc2UgSW52YWxpZFR5cGU6CisgICAgY2FzZSBNaW5UeXBlOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSURCS2V5
Ojppc0xlc3NUaGFuKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG90
aGVyKTsKKyAgICByZXR1cm4gY29tcGFyZShvdGhlcikgPT0gLTE7Cit9CisKK2Jvb2wgSURCS2V5
Ojppc0VxdWFsKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFjb21wYXJlKG90aGVyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIElEQktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXk+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEtleUFycmF5OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJbnZhbGlkKCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktleS0+bV90eXBl
ID0gSW52YWxpZFR5cGU7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0K
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlTnVtYmVyKGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcg
SURCS2V5KCkpOworICAgICAgICBpZGJLZXktPm1fdHlwZSA9IE51bWJlclR5cGU7CisgICAgICAg
IGlkYktleS0+bV9udW1iZXIgPSBudW1iZXI7CisgICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1h
dGUgKz0gc2l6ZW9mKGRvdWJsZSk7CisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOwor
ICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0g
YWRvcHRSZWYobmV3IElEQktleSgpKTsKKyAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBTdHJpbmdU
eXBlOworICAgICAgICBpZGJLZXktPm1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBpZGJLZXkt
Pm1fc2l6ZUVzdGltYXRlICs9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAg
ICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQktleT4gY3JlYXRlRGF0ZShkb3VibGUgZGF0ZSkKKyAgICB7CisgICAgICAgIFJlZlB0
cjxJREJLZXk+IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgICAgIGlkYktl
eS0+bV90eXBlID0gRGF0ZVR5cGU7CisgICAgICAgIGlkYktleS0+bV9kYXRlID0gZGF0ZTsKKyAg
ICAgICAgaWRiS2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzaXplb2YoZG91YmxlKTsKKyAgICAgICAg
cmV0dXJuIGlkYktleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCS2V5PiBjcmVhdGVBcnJheShjb25zdCBLZXlBcnJheSYgYXJyYXkpCisgICAgeworICAgICAg
ICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkpOworICAgICAg
ICBpZGJLZXktPm1fdHlwZSA9IEFycmF5VHlwZTsKKyAgICAgICAgaWRiS2V5LT5tX2FycmF5ID0g
YXJyYXk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0gYXJyYXlbaV0tPm1fc2l6
ZUVzdGltYXRlOworCisgICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOworICAgIH0KKwor
ICAgIH5JREJLZXkoKTsKKworICAgIC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGln
aGVzdCBwcmVjZWRlbnQgaW4gdGVybXMgb2Ygc29ydCBvcmRlci4KKyAgICBlbnVtIFR5cGUgewor
ICAgICAgICBJbnZhbGlkVHlwZSA9IDAsCisgICAgICAgIEFycmF5VHlwZSwKKyAgICAgICAgU3Ry
aW5nVHlwZSwKKyAgICAgICAgRGF0ZVR5cGUsCisgICAgICAgIE51bWJlclR5cGUsCisgICAgICAg
IE1pblR5cGUKKyAgICB9OworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkVHlw
ZTsgfQorCisgICAgY29uc3QgS2V5QXJyYXkmIGFycmF5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gQXJyYXlUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fYXJyYXk7Cisg
ICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwor
ICAgIH0KKworICAgIGRvdWJsZSBkYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gRGF0ZVR5cGUpOworICAgICAgICByZXR1cm4gbV9kYXRlOworICAgIH0KKworICAg
IGRvdWJsZSBudW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBO
dW1iZXJUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgIH0KKworICAgIGludCBj
b21wYXJlKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNMZXNzVGhhbihj
b25zdCBJREJLZXkqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoY29uc3QgSURCS2V5
KiBvdGhlcikgY29uc3Q7CisKKyAgICBzaXplX3Qgc2l6ZUVzdGltYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplRXN0aW1hdGU7IH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZVR5cGVzKFR5cGUg
YSwgVHlwZSBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGIgLSBhOworICAgIH0KKworICAgIHVz
aW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OnJlZjsKKyAgICB1c2luZyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxJREJLZXk+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJLZXkoKTsK
KworICAgIFR5cGUgbV90eXBlOworICAgIEtleUFycmF5IG1fYXJyYXk7CisgICAgU3RyaW5nIG1f
c3RyaW5nOworICAgIGRvdWJsZSBtX2RhdGU7CisgICAgZG91YmxlIG1fbnVtYmVyOworCisgICAg
c2l6ZV90IG1fc2l6ZUVzdGltYXRlOworCisgICAgLy8gVmVyeSByb3VnaCBlc3RpbWF0ZSBvZiBt
aW5pbXVtIGtleSBzaXplIG92ZXJoZWFkLgorICAgIGVudW0geyBrT3ZlcmhlYWRTaXplID0gMTYg
fTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5k
aWYgLy8gSURCS2V5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQktleS5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxl
IHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKKyAgICAgICAgQ3VzdG9tVG9KU09iamVjdAorICAgIF0gSURCS2V5IHsKKyAg
ICAgICAgLy8gVGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuCisgICAgfTsK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UGF0aC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0
aExleGVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuSWRl
bnRpZmllciwKKyAgICAgICAgVG9rZW5Eb3QsCisgICAgICAgIFRva2VuRW5kLAorICAgICAgICBU
b2tlbkVycm9yCisgICAgfTsKKworICAgIGV4cGxpY2l0IElEQktleVBhdGhMZXhlcihjb25zdCBT
dHJpbmcmIHMpCisgICAgICAgIDogbV9zdHJpbmcocykKKyAgICAgICAgLCBtX3B0cihzLmNoYXJh
Y3RlcnMoKSkKKyAgICAgICAgLCBtX2VuZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCisg
ICAgICAgICwgbV9jdXJyZW50VG9rZW5UeXBlKFRva2VuRXJyb3IpCisgICAgeworICAgIH0KKwor
ICAgIFRva2VuVHlwZSBjdXJyZW50VG9rZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
VG9rZW5UeXBlOyB9CisKKyAgICBUb2tlblR5cGUgbmV4dFRva2VuVHlwZSgpCisgICAgeworICAg
ICAgICBtX2N1cnJlbnRUb2tlblR5cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAg
IHJldHVybiBtX2N1cnJlbnRUb2tlblR5cGU7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBj
dXJyZW50RWxlbWVudCgpIHsgcmV0dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KKworcHJpdmF0ZToK
KyAgICBUb2tlblR5cGUgbGV4KFN0cmluZyYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVy
KFN0cmluZyYpOworICAgIFN0cmluZyBtX2N1cnJlbnRFbGVtZW50OworICAgIFN0cmluZyBtX3N0
cmluZzsKKyAgICBjb25zdCBVQ2hhciogbV9wdHI7CisgICAgY29uc3QgVUNoYXIqIG1fZW5kOwor
ICAgIFRva2VuVHlwZSBtX2N1cnJlbnRUb2tlblR5cGU7Cit9OworCitJREJLZXlQYXRoTGV4ZXI6
OlRva2VuVHlwZSBJREJLZXlQYXRoTGV4ZXI6OmxleChTdHJpbmcmIGVsZW1lbnQpCit7CisgICAg
aWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FbmQ7CisgICAgQVNTRVJU
KG1fcHRyIDwgbV9lbmQpOworCisgICAgaWYgKCptX3B0ciA9PSAnLicpIHsKKyAgICAgICAgKytt
X3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIH0KKyAgICByZXR1cm4gbGV4SWRl
bnRpZmllcihlbGVtZW50KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZp
ZXJTdGFydENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykg
fHwgKGMgPT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNT
YWZlSWRlbnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxw
aGFudW1lcmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0
aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKFN0cmluZyYg
ZWxlbWVudCkKK3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9w
dHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKKyAg
ICAgICAgKyttX3B0cjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisg
ICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9w
dHIpKQorICAgICAgICArK21fcHRyOworCisgICAgZWxlbWVudCA9IFN0cmluZyhzdGFydCwgbV9w
dHIgLSBzdGFydCk7CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworYm9vbCBJREJJ
c1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgSURCS2V5UGF0aFBh
cnNlRXJyb3IgZXJyb3I7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAg
IElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBy
ZXR1cm4gZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lOworfQorCit2b2lkIElEQlBh
cnNlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+JiBlbGVtZW50
cywgSURCS2V5UGF0aFBhcnNlRXJyb3ImIGVycm9yKQoreworICAgIC8vIElEQktleVBhdGggOjo9
IEVNUFRZX1NUUklORyB8IGlkZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSoKKyAgICAvLyBUaGUg
YmFzaWMgc3RhdGUgbWFjaGluZSBpczoKKyAgICAvLyAgIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBF
bmR9CisgICAgLy8gICBJZGVudGlmaWVyID0+IHtEb3QsIEVuZH0KKyAgICAvLyAgIERvdCA9PiB7
SWRlbnRpZmllcn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBl
cnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgor
ICAgIGVudW0gUGFyc2VyU3RhdGUgeyBJZGVudGlmaWVyLCBEb3QsIEVuZCB9OworCisgICAgSURC
S2V5UGF0aExleGVyIGxleGVyKGtleVBhdGgpOworICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5U
eXBlIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICBQYXJzZXJTdGF0ZSBz
dGF0ZTsKKyAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlm
aWVyKQorICAgICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgZWxzZSBpZiAodG9rZW5UeXBl
ID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgIHN0YXRlID0gRW5kOworICAg
IGVsc2UgeworICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0
YXRlKSB7CisgICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIElEQktleVBh
dGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsK
KyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklk
ZW50aWZpZXIpOworCisgICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRF
bGVtZW50KCk7CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAg
ICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIGlm
ICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCkKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9IERvdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQ
YXRoTGV4ZXI6OlRva2VuRW5kKQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJv
cklkZW50aWZpZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAg
ICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRU
b2tlblR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExl
eGVyOjpUb2tlbkRvdCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tl
blR5cGUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpU
b2tlbklkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VF
cnJvckRvdDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAg
ZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oOjEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gKKyNkZWZpbmUgSURC
S2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZW51bSBJREJLZXlQYXRoUGFyc2VFcnJvciB7CisgICAgSURCS2V5UGF0
aFBhcnNlRXJyb3JOb25lLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQsCisgICAgSURC
S2V5UGF0aFBhcnNlRXJyb3JJZGVudGlmaWVyLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yRG90
LAorfTsKKworYm9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25zdCBTdHJpbmcmKTsKK3ZvaWQgSURC
UGFyc2VLZXlQYXRoKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiwgSURCS2V5UGF0aFBh
cnNlRXJyb3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlm
IC8vIElEQktleVBhdGhfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0
NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNw
cDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCisK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNlcnJvciAiQ2hyb21pdW0gc2hvdWxkIG5vdCBjb21w
aWxlIHRoaXMgZmlsZSBhbmQgaW5zdGVhZCBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMg
ZmFjdG9yeSB0aGF0IG5hdmlnYXRlcyB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3ZvaWQgSURCS2V5UGF0aEJhY2tl
bmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0
IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZv
cm1hdCBmb3IgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2Vy
aWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBm
b3IgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24g
MTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1w
bC5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGhCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQktleVBhdGhCYWNrZW5k
SW1wbF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOworCitjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAw
PiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5Piwg
MD4mIGtleXMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8g
SURCS2V5UGF0aEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5jcHA6MTA5NDYxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJREJLZXlSYW5nZTo6SURCS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+
IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlw
ZSwgVXBwZXJCb3VuZFR5cGUgdXBwZXJUeXBlKQorICAgIDogbV9sb3dlcihsb3dlcikKKyAgICAs
IG1fdXBwZXIodXBwZXIpCisgICAgLCBtX2xvd2VyVHlwZShsb3dlclR5cGUpCisgICAgLCBtX3Vw
cGVyVHlwZSh1cHBlclR5cGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktl
eVJhbmdlOjpvbmx5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBpZiAoa2V5ICYmIChr
ZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoa2V5LCBrZXksIExvd2VyQm91bmRDbG9zZWQs
IFVwcGVyQm91bmRDbG9zZWQpOworfQorCitQYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlS
YW5nZTo6bG93ZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGJvdW5kICYmIChib3VuZC0+dHlwZSgpID09IElE
QktleTo6SW52YWxpZFR5cGUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gSURCS2V5
UmFuZ2U6OmNyZWF0ZShib3VuZCwgMCwgb3BlbiA/IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3Vu
ZENsb3NlZCwgVXBwZXJCb3VuZENsb3NlZCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IElEQktleVJhbmdlOjp1cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBv
cGVuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYm91bmQgJiYgKGJvdW5kLT50eXBl
KCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVy
biBJREJLZXlSYW5nZTo6Y3JlYXRlKDAsIGJvdW5kLCBMb3dlckJvdW5kQ2xvc2VkLCBvcGVuID8g
VXBwZXJCb3VuZE9wZW4gOiBVcHBlckJvdW5kQ2xvc2VkKTsKK30KKworUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gSURCS2V5UmFuZ2U6OmJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFz
c1JlZlB0cjxJREJLZXk+IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgobG93ZXIgJiYgKGxvd2VyLT50eXBlKCkgPT0g
SURCS2V5OjpJbnZhbGlkVHlwZSkpIHx8ICh1cHBlciAmJiAodXBwZXItPnR5cGUoKSA9PSBJREJL
ZXk6OkludmFsaWRUeXBlKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobG93ZXIgJiYgdXBw
ZXIgJiYgdXBwZXItPmlzTGVzc1RoYW4obG93ZXIuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgaWYgKGxvd2VyICYmIHVwcGVyICYmIHVwcGVyLT5pc0VxdWFsKGxvd2VyLmdldCgpKSAmJiAo
bG93ZXJPcGVuIHx8IHVwcGVyT3BlbikpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBJ
REJLZXlSYW5nZTo6Y3JlYXRlKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuID8gTG93ZXJCb3VuZE9w
ZW4gOiBMb3dlckJvdW5kQ2xvc2VkLCB1cHBlck9wZW4gPyBVcHBlckJvdW5kT3BlbiA6IFVwcGVy
Qm91bmRDbG9zZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlSYW5nZV9oCisjZGVmaW5lIElEQktleVJhbmdl
X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPElEQktleVJhbmdlPiB7CitwdWJsaWM6CisgICAgZW51bSBMb3dl
ckJvdW5kVHlwZSB7CisgICAgICAgIExvd2VyQm91bmRPcGVuLAorICAgICAgICBMb3dlckJvdW5k
Q2xvc2VkCisgICAgfTsKKyAgICBlbnVtIFVwcGVyQm91bmRUeXBlIHsKKyAgICAgICAgVXBwZXJC
b3VuZE9wZW4sCisgICAgICAgIFVwcGVyQm91bmRDbG9zZWQKKyAgICB9OworCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIs
IFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBl
ckJvdW5kVHlwZSB1cHBlclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQktleVJhbmdlKGxvd2VyLCB1cHBlciwgbG93ZXJUeXBlLCB1cHBlclR5cGUpKTsKKyAgICB9
CisgICAgfklEQktleVJhbmdlKCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gbG93ZXIo
KSBjb25zdCB7IHJldHVybiBtX2xvd2VyOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVy
KCkgY29uc3QgeyByZXR1cm4gbV91cHBlcjsgfQorICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3Qg
eyByZXR1cm4gbV9sb3dlclR5cGUgPT0gTG93ZXJCb3VuZE9wZW47IH0KKyAgICBib29sIHVwcGVy
T3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fdXBwZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gb25seShQYXNzUmVmUHRyPElEQktl
eT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBsb3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCisgICAgeworICAgICAgcmV0dXJuIGxvd2VyQm91bmQoYm91bmQsIGZhbHNlLCBlYyk7
CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5kKFBh
c3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElE
QktleT4gYm91bmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgIHJldHVybiB1cHBl
ckJvdW5kKGJvdW5kLCBmYWxzZSwgZWMpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gdXBwZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3Bl
biwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVy
LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICByZXR1cm4gYm91bmQobG93ZXIsIHVw
cGVyLCBmYWxzZSwgZmFsc2UsIGVjKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJL
ZXk+IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAg
ICAgcmV0dXJuIGJvdW5kKGxvd2VyLCB1cHBlciwgbG93ZXJPcGVuLCBmYWxzZSwgZWMpOworICAg
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gYm91bmQoUGFzc1JlZlB0cjxJ
REJLZXk+IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBi
b29sIHVwcGVyT3BlbiwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIElEQktleVJh
bmdlKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBM
b3dlckJvdW5kVHlwZSBsb3dlclR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlwZSk7CisKKyAg
ICBSZWZQdHI8SURCS2V5PiBtX2xvd2VyOworICAgIFJlZlB0cjxJREJLZXk+IG1fdXBwZXI7Cisg
ICAgTG93ZXJCb3VuZFR5cGUgbV9sb3dlclR5cGU7CisgICAgVXBwZXJCb3VuZFR5cGUgbV91cHBl
clR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYg
Ly8gSURCS2V5UmFuZ2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQktleVJhbmdlIHsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBsb3dlcjsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIElEQktleSB1cHBlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gbG93ZXJPcGVuOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1cHBlck9w
ZW47CisKKyAgICAgICAgc3RhdGljIElEQktleVJhbmdlIG9ubHkoaW4gSURCS2V5IHZhbHVlKQor
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIHN0YXRp
YyBJREJLZXlSYW5nZSBsb3dlckJvdW5kKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBi
b29sZWFuIG9wZW4pCisgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
KyAgICAgICAgc3RhdGljIElEQktleVJhbmdlIHVwcGVyQm91bmQoaW4gSURCS2V5IGJvdW5kLCBp
biBbT3B0aW9uYWxdIGJvb2xlYW4gb3BlbikKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOworICAgICAgICBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoaW4gSURCS2V5
IGxvd2VyLCBpbiBJREJLZXkgdXBwZXIsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBsb3dlck9wZW4s
IGluIFtPcHRpb25hbF0gYm9vbGVhbiB1cHBlck9wZW4pCisgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTUzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJM
ZXZlbERCQmFja2luZ1N0b3JlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNp
ZiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCisjaW5jbHVkZSAi
TGV2ZWxEQkNvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKKyNpbmNs
dWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5n
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgZ2V0
SW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90
JiBmb3VuZEludCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghZGItPmdl
dChrZXksIHJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvdW5kSW50ID0g
ZGVjb2RlSW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wg
cHV0SW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2
NF90IHZhbHVlKQoreworICAgIHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlSW50KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBn
ZXRTdHJpbmcoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0
cmluZyYgZm91bmRTdHJpbmcpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAo
IWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3Vu
ZFN0cmluZyA9IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4K
K3N0YXRpYyBib29sIHB1dFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXks
IGVuY29kZVN0cmluZyh2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZUtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBh
LCBjb25zdCBMZXZlbERCU2xpY2UmIGIpCit7CisgICAgcmV0dXJuIGNvbXBhcmUoYSwgYik7Cit9
CisKK3N0YXRpYyBpbnQgY29tcGFyZUluZGV4S2V5cyhjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNv
bnN0IExldmVsREJTbGljZSYgYikKK3sKKyAgICByZXR1cm4gY29tcGFyZShhLCBiLCB0cnVlKTsK
K30KKworY2xhc3MgQ29tcGFyYXRvciA6IHB1YmxpYyBMZXZlbERCQ29tcGFyYXRvciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCBpbnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0
IExldmVsREJTbGljZSYgYikgY29uc3QgeyByZXR1cm4gSURCTGV2ZWxEQkNvZGluZzo6Y29tcGFy
ZShhLCBiKTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJpZGJfY21wMSI7IH0KK307CisKK3N0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRh
dGFiYXNlKiBkYikKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hl
bWFWZXJzaW9uS2V5OjplbmNvZGUoKTsKKworICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7
CisgICAgaWYgKCFnZXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgeworICAg
ICAgICBzY2hlbWFWZXJzaW9uID0gMDsKKyAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRh
S2V5LCBzY2hlbWFWZXJzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSwgd2UnbGwgbmVlZCB0byBiZSBhYmxlIHRvIHRyYW5z
aXRpb24gYmV0d2VlbiBzY2hlbWFzLgorICAgIGlmIChzY2hlbWFWZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMgdmVyc2lvbi4K
KworICAgIHJldHVybiB0cnVlOworfQorCitJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiBmYWN0b3J5LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCisgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwg
bV9kYihkYikKK3sKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tpbmdTdG9yZShpZGVudGlmaWVy
LCB0aGlzKTsKK30KKworSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5n
U3RvcmUoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRp
Zmllcik7CisKKyAgICAvLyBtX2RiJ3MgZGVzdHJ1Y3RvciB1c2VzIG1fY29tcGFyYXRvci4gVGhl
IG9yZGVyIG9mIGRlc3RydWN0aW9uIGlzIGltcG9ydGFudC4KKyAgICBtX2RiLmNsZWFyKCk7Cisg
ICAgbV9jb21wYXJhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRp
ZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQoreworICAgIFN0cmluZyBwYXRo
QmFzZSA9IHBhdGhCYXNlQXJnOworCisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21w
YXJhdG9yID0gYWRvcHRQdHIobmV3IENvbXBhcmF0b3IoKSk7CisgICAgT3duUHRyPExldmVsREJE
YXRhYmFzZT4gZGI7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICBkYiA9
IExldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGVs
c2UgeworICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0
aCAlcyIsIHBhdGhCYXNlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxs
IG9yaWdpbnMuCisgICAgICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4
ZWRkYi5sZXZlbGRiIik7CisKKyAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0
aCwgY29tcGFyYXRvci5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKCFkYikKKyAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOworCisgICAgLy8gRklYTUU6IEhhbmRs
ZSBjb21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KKworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkxldmVsREJCYWNraW5nU3RvcmUo
ZmlsZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBiYWNraW5nU3Rv
cmUtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOworCisgICAgaWYgKCFzZXRV
cE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSkpCisgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKKworICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVs
ZWFzZSgpOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFt
ZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0YXJ0S2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVu
dGlmaWVyKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtl
eTo6ZW5jb2RlU3RvcEtleUZvck9yaWdpbihtX2lkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGZv
dW5kTmFtZXMuaXNFbXB0eSgpKTsKKworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0g
bV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQt
PmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5l
eHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAg
ICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIERhdGFi
YXNlTmFtZUtleSBkYXRhYmFzZU5hbWVLZXk7CisgICAgICAgIHAgPSBEYXRhYmFzZU5hbWVLZXk6
OmRlY29kZShwLCBsaW1pdCwgJmRhdGFiYXNlTmFtZUtleSk7CisgICAgICAgIEFTU0VSVChwKTsK
KworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChkYXRhYmFzZU5hbWVLZXkuZGF0YWJhc2VOYW1l
KCkpOworICAgIH0KK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSWQpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNl
TmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CisKKyAgICBib29sIG9rID0gZ2V0
SW50KG1fZGIuZ2V0KCksIGtleSwgZm91bmRJZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtVc2VyVmVyc2lv
biksIGZvdW5kVmVyc2lvbik7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQo
TGV2ZWxEQkRhdGFiYXNlKiBkYikKK3sKKyAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsK
KyAgICBpZiAoIWdldEludChkYiwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFi
YXNlSWQpKQorICAgICAgICBtYXhEYXRhYmFzZUlkID0gMDsKKworICAgIEFTU0VSVChtYXhEYXRh
YmFzZUlkID49IDApOworCisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbWF4RGF0YWJhc2VJZCAr
IDE7CisgICAgaWYgKCFwdXRJbnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBkYXRh
YmFzZUlkKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGRhdGFiYXNlSWQ7Cit9
CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93
SWQpCit7CisgICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOworICAgIGlm
IChyb3dJZCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwor
ICAgIGlmICghcHV0SW50KG1fZGIuZ2V0KCksIGtleSwgcm93SWQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pLCB2ZXJz
aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRf
dCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRU
cmFuc2FjdGlvbik7CisgICAgaWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6a1VzZXJWZXJzaW9uKSwgdmVyc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+
aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkp
IHsKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0
aGlzKTsKKyAgICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJ
ZDsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEo
bmFtZSwgdmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxi
YWNrKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBzdGFydEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0b3BLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCArIDEsIERh
dGFiYXNlTWV0YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSkpIHsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9p
ZGVudGlmaWVyLCBuYW1lKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7
CisKKyAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0
ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8
fCBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29u
c3QgY2hhciogcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVn
aW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkpOworICAgIEFTU0VSVF9VTlVTRUQo
cCwgcCk7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSAhPSBvYmplY3RTdG9y
ZUlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRh
VHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9y
PGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
MSwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CisKKyAgICBBU1NFUlQoZm91bmRJZHMu
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VS
VChmb3VuZEtleVBhdGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVu
dEZsYWdzLmlzRW1wdHkoKSk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1f
ZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsoc3RhcnRLZXkpOworICAgIHdoaWxl
IChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7
CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29u
c3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKKyAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOwor
ICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFEYXRh
S2V5Lm9iamVjdFN0b3JlSWQoKTsKKyAgICAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IGRl
Y29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAg
ICAgICAgaXQtPm5leHQoKTsKKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURh
dGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAxKSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gZGVjb2RlU3RyaW5n
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgYm9vbCBo
YXNLZXlQYXRoID0gdHJ1ZTsKKworICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICBpZiAoIWNo
ZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0
b3JlSWQsIDIpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklY
TUU6IEFkZCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgIGJvb2wg
YXV0b0luY3JlbWVudCA9ICppdC0+dmFsdWUoKS5iZWdpbigpOworCisgICAgICAgIGl0LT5uZXh0
KCk7IC8vIElzIGV2aWNhdGJsZS4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0
YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCAzKSkgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2ZXJz
aW9uLgorICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0
KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDQpKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpdW0gaW5kZXggaWQgYWxsb2NhdGVk
LgorICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCks
IHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIDUpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIGhhcyBrZXkgcGF0aCAoaXMg
bm90IG51bGwpCisgICAgICAgIGlmIChjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0
LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCA2KSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IEFkZCBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgYm9vbHMuCisgICAgICAgICAgICBo
YXNLZXlQYXRoID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIWhhc0tl
eVBhdGggJiYgIWtleVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3VuZElkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGZvdW5kTmFtZXMu
YXBwZW5kKG9iamVjdFN0b3JlTmFtZSk7CisgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGhh
c0tleVBhdGggPyBrZXlQYXRoIDogU3RyaW5nKCkpOworICAgICAgICBmb3VuZEF1dG9JbmNyZW1l
bnRGbGFncy5hcHBlbmQoYXV0b0luY3JlbWVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50NjRf
dCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprTWF4T2Jq
ZWN0U3RvcmVJZCk7CisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3Jl
SWRLZXksIG1heE9iamVjdFN0b3JlSWQpKQorICAgICAgICBtYXhPYmplY3RTdG9yZUlkID0gMDsK
KworICAgIEFTU0VSVChtYXhPYmplY3RTdG9yZUlkID49IDApOworCisgICAgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkID0gbWF4T2JqZWN0U3RvcmVJZCArIDE7CisgICAgaWYgKCFwdXRJbnQodHJhbnNh
Y3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpKQorICAgICAgICByZXR1
cm4gLTE7CisKKyAgICByZXR1cm4gb2JqZWN0U3RvcmVJZDsKK30KKworYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0
b3JlSWQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQpOworICAgIGlmIChv
YmplY3RTdG9yZUlkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IG5hbWVLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhL
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgMSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGF1dG9JbmNyZW1lbnRLZXkgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMik7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV2aWN0YWJsZUtleSA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAzKTsKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgNCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgNSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tleVBhdGhL
ZXkgID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDYpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lc0tleSA9IE9iamVjdFN0b3Jl
TmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBuYW1lKTsKKworICAgIGJvb2wgb2sgPSBwdXRT
dHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOworICAgIGlm
ICghb2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRTdHJpbmcobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBhdGgpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBpZiAoIW9rKSB7Cisg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBtYXhJbmRleElkS2V5LCBrTWluaW11bUluZGV4SWQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0SW50KG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgaWYg
KCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhc3NpZ25lZE9iamVjdFN0b3Jl
SWQgPSBvYmplY3RTdG9yZUlkOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9u
KTsKKworICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CisgICAgZ2V0U3RyaW5nKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIG9iamVjdFN0b3JlTmFtZSk7CisKKyAgICBpZiAoIWRl
bGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAg
ICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KKworICAgIG1fY3VycmVudFRyYW5z
YWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlTmFtZSkpOworCisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCkpKQorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisg
ICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAg
ICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisKKyAgICBjbGVhck9iamVjdFN0
b3JlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworfQorCitTdHJpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlv
bi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpbnQ2NF90IHZlcnNpb247CisgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChkYXRh
LmJlZ2luKCksIGRhdGEuZW5kKCksIHZlcnNpb24pOworICAgIGlmICghcCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICh2b2lkKSB2ZXJzaW9uOworCisgICAgcmV0dXJuIGRlY29kZVN0
cmluZyhwLCBkYXRhLmVuZCgpKTsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIExldmVsREJSZWNv
cmRJZGVudGlmaWVyIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRf
dCB2ZXJzaW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIo
cHJpbWFyeUtleSwgdmVyc2lvbikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJl
Y29yZElkZW50aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVj
b3JkSWRlbnRpZmllcigpKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9CisgICAgVmVjdG9yPGNoYXI+IHByaW1h
cnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2b2lkIHNldFByaW1h
cnlLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHBy
aW1hcnlLZXk7IH0KKyAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNp
b247IH0KKyAgICB2b2lkIHNldFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9
IHZlcnNpb247IH0KKworcHJpdmF0ZToKKyAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihjb25z
dCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlL
ZXkocHJpbWFyeUtleSksIG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5p
c0VtcHR5KCkpOyB9CisgICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtl
eSgpLCBtX3ZlcnNpb24oLTEpIHt9CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAv
LyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZl
cnNpb24gb2YgdGhlIGtleS4KKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307Cit9CisKK3N0YXRp
YyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDQpOworCisgICAgaW50NjRfdCBs
YXN0VmVyc2lvbiA9IC0xOworICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVyc2lv
bktleSwgbGFzdFZlcnNpb24pKQorICAgICAgICBsYXN0VmVyc2lvbiA9IDA7CisKKyAgICBBU1NF
UlQobGFzdFZlcnNpb24gPj0gMCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVyc2lv
biArIDE7CisgICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXks
IHZlcnNpb24pOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKworICAgIEFTU0VSVCh2ZXJz
aW9uID4gbGFzdFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8g
aGFuZGxlIHRoZSBvdmVyZmxvdyBzY2VuYXJpby4KKworICAgIHJldHVybiB2ZXJzaW9uOworfQor
Citib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgaW50
NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG9iamVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFw
cGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOworICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2
YWx1ZSkpOworCisgICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3Jl
ZGF0YUtleSwgdikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5wdXQo
ZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmll
cik7CisgICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURC
S2V5KGtleSkpOworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
MCkuZW5jb2RlKCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOworCisgICAgZGVsZXRl
UmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KTsKK30K
KworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIo
KQoreworICAgIHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Cit9CisK
K3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZl
bERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVu
dGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2Jq
ZWN0U3RvcmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Cisg
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOworCisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+
cHJpbWFyeUtleSgpKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0Vu
dHJ5S2V5KTsKK30KKworZG91YmxlIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5j
cmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
eworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bWF4SURCS2V5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKworICAgIGludCBtYXhOdW1lcmljS2V5
ID0gMDsKKworICAgIC8vIEZJWE1FOiBCZSBtb3JlIGVmZmljaWVudDogc2VlayB0byBzb21ldGhp
bmcgYWZ0ZXIgdGhlIG9iamVjdCBzdG9yZSBkYXRhLCB0aGVuIHJldmVyc2UuCisKKyAgICBmb3Ig
KGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5
KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0g
aXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgp
LmVuZCgpOworCisgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICBw
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKKyAgICAg
ICAgQVNTRVJUKHApOworCisgICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09
IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJlcigpKTsKKyAgICAgICAgICAgIGlm
IChuID4gbWF4TnVtZXJpY0tleSkKKyAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhOdW1lcmljS2V5ICsgMTsKK30KKwor
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleSk7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAoIW1fY3Vy
cmVudFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29kZVZhckludChkYXRh
LmJlZ2luKCksIGRhdGEuZW5kKCksIHZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBz
dGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KGZvdW5kUmVjb3JkSWRlbnRpZmll
cik7CisgICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURC
S2V5KGtleSkpOworICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBtaW5JREJLZXkoKSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJL
ZXkoKSk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBp
dC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+
bmV4dCgpKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAg
ICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisgICAgICAgIE9iamVj
dFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpk
ZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAgICAg
IFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBkYXRhS2V5LnVzZXJLZXkoKTsKKworICAgICAg
ICBpbnQ2NF90IHZlcnNpb247CisgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQo
aXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgICAg
ICBpZiAoIXEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPExl
dmVsREJSZWNvcmRJZGVudGlmaWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUoZW5jb2RlSURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lvbik7CisgICAgICAgIFN0cmluZyBp
ZGJWYWx1ZSA9IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAg
aWYgKCFjYWxsYmFjay5jYWxsYmFjayhyaS5nZXQoKSwgaWRiVmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCBjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29u
c3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIg
bWV0YURhdGFUeXBlKQoreworICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhp
dC0+a2V5KCksIHN0b3BLZXkpID49IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElu
ZGV4TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0
YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0
YURhdGFLZXkpOworICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7CisgICAgaWYgKG1ldGFEYXRhS2V5
LmluZGV4SWQoKSAhPSBpbmRleElkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1l
dGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVl
RmxhZ3MsIFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpCit7CisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAx
LCAwLCAwKTsKKworICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChm
b3VuZE5hbWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChm
b3VuZE11bHRpRW50cnlGbGFncy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVy
YXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5zZWVrKHN0YXJ0S2V5
KTsKKyAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0
b3BLZXkpIDwgMCkgeworICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7
CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAg
IEluZGV4TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgICAgIHAgPSBJbmRleE1ldGFEYXRh
S2V5OjpkZWNvZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7CisgICAgICAgIEFTU0VSVChwKTsK
KworICAgICAgICBpbnQ2NF90IGluZGV4SWQgPSBtZXRhRGF0YUtleS5pbmRleElkKCk7CisgICAg
ICAgIEFTU0VSVCghbWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkpOworCisgICAgICAgIFN0cmlu
ZyBpbmRleE5hbWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVl
KCkuZW5kKCkpOworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCisgICAgICAg
IGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElk
LCAxKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBB
ZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgorICAgICAgICBib29sIGluZGV4
VW5pcXVlID0gKml0LT52YWx1ZSgpLmJlZ2luKCk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8g
a2V5UGF0aAorICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwg
c3RvcEtleSwgaW5kZXhJZCwgMikpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwg
SW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcga2V5UGF0aCA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBp
dC0+dmFsdWUoKS5lbmQoKSk7CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBt
dWx0aUVudHJ5IGZsYWcKKyAgICAgICAgYm9vbCBpbmRleE11bHRpRW50cnkgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5k
ZXhJZCwgMykpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5j
dGlvbnMgZm9yIGJvb2xzLgorICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gKml0LT52YWx1
ZSgpLmJlZ2luKCk7CisgICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZm91bmRJZHMuYXBwZW5kKGluZGV4SWQpOworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChp
bmRleE5hbWUpOworICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChrZXlQYXRoKTsKKyAgICAg
ICAgZm91bmRVbmlxdWVGbGFncy5hcHBlbmQoaW5kZXhVbmlxdWUpOworICAgICAgICBmb3VuZE11
bHRpRW50cnlGbGFncy5hcHBlbmQoaW5kZXhNdWx0aUVudHJ5KTsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbnQ2NF90IGdldE5ld0luZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgaW50NjRf
dCBtYXhJbmRleElkID0gLTE7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkg
PSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgNSk7CisgICAgaWYgKCFnZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIG1heElu
ZGV4SWQpKQorICAgICAgICBtYXhJbmRleElkID0ga01pbmltdW1JbmRleElkOworCisgICAgQVNT
RVJUKG1heEluZGV4SWQgPj0gMCk7CisKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtYXhJbmRleElk
ICsgMTsKKyAgICBpZiAoIXB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJ
ZCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBpbmRleElkOworfQorCitib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4
SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0g
Z2V0TmV3SW5kZXhJZChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCk7CisgICAgaWYgKGluZGV4SWQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDEpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBr
ZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIDIpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIDMpOworCisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgdW5p
cXVlS2V5LCBpc1VuaXF1ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0
aEtleSwga2V5UGF0aCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbXVsdGlFbnRyeUtl
eSwgaXNNdWx0aUVudHJ5KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOworICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiB1bmlxdWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgMSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleVBhdGhL
ZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwgMik7CisKKyAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUobmFt
ZUtleSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24t
PnJlbW92ZSh1bmlxdWVLZXkpKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVu
dFRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5UGF0aEtleSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YVN0YXJ0ID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGVNaW5LZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGluZGV4RGF0YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworCisgICAgaWYgKCFkZWxldGVSYW5n
ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0YUVu
ZCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OnB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChp
bmRleElkID49IGtNaW5pbXVtSW5kZXhJZCk7CisgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50
aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxE
QlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9
IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgp
KTsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhcklu
dChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CisgICAgZGF0YS5hcHBlbmQo
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisKKyAgICByZXR1cm4gbV9j
dXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOworfQorCitzdGF0aWMg
Ym9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91
bmRLZXkpCit7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+
Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBpdC0+c2Vlayh0YXJnZXQpOworCisgICAgaWYgKCFpdC0+
aXNWYWxpZCgpKSB7CisgICAgICAgIGl0LT5zZWVrVG9MYXN0KCk7CisgICAgICAgIGlmICghaXQt
PmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aGls
ZSAoY29tcGFyZUluZGV4S2V5cyhpdC0+a2V5KCksIHRhcmdldCkgPiAwKSB7CisgICAgICAgIGl0
LT5wcmV2KCk7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGZvdW5kS2V5LmNsZWFyKCk7Cisg
ICAgICAgIGZvdW5kS2V5LmFwcGVuZChpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgp
IC0gaXQtPmtleSgpLmJlZ2luKCkpOworCisgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzZXZlcmFs
IGluZGV4IGtleXMgdGhhdCBjb21wYXJlIGVxdWFsLiBXZSB3YW50IHRoZSBsYXN0IG9uZS4KKyAg
ICAgICAgaXQtPm5leHQoKTsKKyAgICB9IHdoaWxlIChpdC0+aXNWYWxpZCgpICYmICFjb21wYXJl
SW5kZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50
NjRfdCwgaW50NjRfdCwgaW50NjRfdCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0
ZSBpbmRleCBkYXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgorICAgIHJldHVy
biB0cnVlOworfQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0Vmlh
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCit7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSA9IGdldFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXkpOworICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKK30KKworc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
Y29kZWRQcmltYXJ5S2V5KQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNF
bnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5
S2V5KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPmdl
dChrZXksIGRhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2Rl
SW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKK30KKworc3RhdGljIGJv
b2wgZmluZEtleUluSW5kZXgoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKK3sK
KyAgICBBU1NFUlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOworCisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOworICAgIE93blB0cjxMZXZlbERCSXRl
cmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWso
bGV2ZWxkYktleSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmICghaXQtPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtl
eXMoaXQtPmtleSgpLCBsZXZlbGRiS2V5KSA+IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaW50NjRfdCB2ZXJzaW9uOworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVj
b2RlVmFySW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9u
KTsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOwor
CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAg
ICAgIC8vIERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KKyAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIGl0LT5u
ZXh0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAg
ICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5k
RW5jb2RlZFByaW1hcnlLZXk7CisgICAgaWYgKGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXk7CisgICAgICAgIGRlY29kZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCks
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOworICAgICAgICByZXR1
cm4gcHJpbWFyeUtleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQoreworICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNv
ZGVkUHJpbWFyeUtleTsKKyAgICBpZiAoIWZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpbmRleEtleSwg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRl
Y29kZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXkuZW5kKCksIGZvdW5kUHJpbWFyeUtleSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K25hbWVzcGFjZSB7CisKK3N0cnVjdCBDdXJzb3JPcHRpb25zIHsKKyAgICBWZWN0b3I8Y2hhcj4g
bG93S2V5OworICAgIGJvb2wgbG93T3BlbjsKKyAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAg
ICBib29sIGhpZ2hPcGVuOworICAgIGJvb2wgZm9yd2FyZDsKKyAgICBib29sIHVuaXF1ZTsKK307
CisKK2NsYXNzIEN1cnNvckltcGxDb21tb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJz
b3IgeworcHVibGljOgorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVh
bCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5Kik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJ
ZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBsb2FkQ3VycmVudFJvdygpID0gMDsKKyAgICBib29sIGZpcnN0U2VlaygpOworCitwcm90ZWN0
ZWQ6CisgICAgQ3Vyc29ySW1wbENvbW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlv
bnMpCisgICAgeworICAgIH0KKworICAgIEN1cnNvckltcGxDb21tb24oY29uc3QgQ3Vyc29ySW1w
bENvbW1vbiogb3RoZXIpCisgICAgICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykK
KyAgICAgICAgLCBtX2N1cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKKyAgICB7CisgICAg
ICAgIGlmIChvdGhlci0+bV9pdGVyYXRvcikgeworICAgICAgICAgICAgbV9pdGVyYXRvciA9IG1f
dHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisKKyAgICAgICAgICAgIGlmIChvdGhlci0+
bV9pdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2Vl
ayhvdGhlci0+bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0
ZXJhdG9yLT5pc1ZhbGlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgdmlydHVhbCB+Q3Vyc29ySW1wbENvbW1vbigpIHt9CisKKyAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIG1fdHJhbnNhY3Rpb247CisgICAgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7Cisg
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICBSZWZQdHI8SURCS2V5
PiBtX2N1cnJlbnRLZXk7Cit9OworCitib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2Vlaygp
Cit7CisgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisK
KyAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCisgICAgICAgIG1faXRlcmF0b3ItPnNl
ZWsobV9jdXJzb3JPcHRpb25zLmxvd0tleSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZXJhdG9y
LT5zZWVrKG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KTsKKworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9u
cy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNv
ck9wdGlvbnMuaGlnaEtleSkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGlnaE9w
ZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25z
LmhpZ2hLZXkpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFt
X2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21w
YXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8
PSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fY3Vyc29yT3B0
aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDApCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3
YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuKSB7CisgICAgICAgICAgICAvLyBsb3dLZXkg
bm90IGluY2x1ZGVkIGluIHRoZSByYW5nZS4KKyAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwKSB7Cisg
ICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRp
b25zLmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuKSB7CisgICAgICAgICAgICAv
LyBoaWdoS2V5IG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UuCisgICAgICAgICAgICBpZiAoY29t
cGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkp
ID49IDApIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5wcmV2KCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWxvYWRDdXJyZW50Um93KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9y
d2FyZCkKKyAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jv
b2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSkK
K3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaGFyZXMgYSBsb3Qgb2YgY29kZSB3aXRoIGZpcnN0U2Vl
ay4KKyAgICBSZWZQdHI8SURCS2V5PiBwcmV2aW91c0tleSA9IG1fY3VycmVudEtleTsKKworICAg
IGZvciAoOzspIHsKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQorICAgICAg
ICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2l0
ZXJhdG9yLT5wcmV2KCk7CisKKyAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IHRyYXNoOwor
ICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX2l0ZXJhdG9yLT5rZXkoKSwgdHJhc2gp
KQorICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMu
Zm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyht
X2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID49IDApIC8vIGhpZ2gg
a2V5IG5vdCBpbmNsdWRlZCBpbiByYW5nZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vyc29yT3B0aW9ucy5oaWdo
T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlv
bnMuaGlnaEtleSkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuICYmIGNv
bXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkp
IDw9IDApIC8vIGxvdyBrZXkgbm90IGluY2x1ZGVkIGluIHJhbmdlCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgIW1fY3Vy
c29yT3B0aW9ucy5sb3dPcGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCks
IG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBpZiAoIWxvYWRDdXJyZW50Um93KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAoa2V5KSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZv
cndhcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtl
eSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtleS5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy51bmlxdWUgJiYgbV9jdXJyZW50S2V5LT5p
c0VxdWFsKHByZXZpb3VzS2V5LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBPYmplY3RT
dG9yZUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9u
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0aGlzKSk7CisgICAg
fQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkg
eyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcigpIE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVy
OworICAgIH0KKyAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
OworCitwcml2YXRlOgorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAg
ICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAg
eworICAgIH0KKworICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUN1
cnNvckltcGwqIG90aGVyKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAg
ICAgICwgbV9jdXJyZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQorICAgIHsKKyAgICB9
CisKKyAgICBTdHJpbmcgbV9jdXJyZW50VmFsdWU7CisgICAgUmVmUHRyPExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7Cit9OworCitib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5r
ZXkoKS5iZWdpbigpOworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5
KCkuZW5kKCk7CisKKyAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5Owor
ICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJm9iamVjdFN0
b3JlRGF0YUtleSk7CisgICAgQVNTRVJUKHApOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXko
KTsKKworICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFy
SW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQo
KSwgdmVyc2lvbik7CisgICAgQVNTRVJUKHEpOworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRl
Y29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29y
ZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24p
OworCisgICAgbV9jdXJyZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgbV9pdGVyYXRvci0+dmFs
dWUoKS5lbmQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgSW5kZXhLZXlDdXJz
b3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIEN1cnNv
ckltcGxDb21tb24KKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKwor
cHJpdmF0ZToKKyAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9
CisKKyAgICBJbmRleEtleUN1cnNvckltcGwoY29uc3QgSW5kZXhLZXlDdXJzb3JJbXBsKiBvdGhl
cikKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFy
eUtleShvdGhlci0+bV9wcmltYXJ5S2V5KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
S2V5PiBtX3ByaW1hcnlLZXk7Cit9OworCitib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdp
bigpOworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7
CisgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAgICBwID0gSW5kZXhEYXRhS2V5Ojpk
ZWNvZGUocCwga2V5TGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0g
aW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsK
KyAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVn
aW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAg
QVNTRVJUKHEpOworICAgIGlmICghcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcSA9
IGRlY29kZUlEQktleShxLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkp
OworICAgIEFTU0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9y
ZUlkKCksICptX3ByaW1hcnlLZXkpOworCisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmdldChwcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwor
ICAgIGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5l
bmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICgh
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNp
b24gIT0gaW5kZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUo
bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJ
bXBsQ29tbW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JP
cHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbmRleEN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMp
KTsKKyAgICB9CisKKyAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmlydHVhbCBTdHJpbmcg
dmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gMDsgfQorICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0
ZToKKyAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bmRleEN1cnNvckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9w
cmltYXJ5S2V5KQorICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAgICAgICwg
bV9wcmltYXJ5TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5OworICAgIFN0cmluZyBtX3Zh
bHVlOworICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OworfTsKKworYm9vbCBJ
bmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyICpwID0g
bV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyICpsaW1pdCA9IG1faXRl
cmF0b3ItPmtleSgpLmVuZCgpOworCisgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleTsKKyAg
ICBwID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZpbmRleERhdGFLZXkpOworCisg
ICAgbV9jdXJyZW50S2V5ID0gaW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGNvbnN0IGNo
YXIgKnEgPSBtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciAqdmFs
dWVMaW1pdCA9IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCk7CisKKyAgICBpbnQ2NF90IGluZGV4
RGF0YVZlcnNpb247CisgICAgcSA9IGRlY29kZVZhckludChxLCB2YWx1ZUxpbWl0LCBpbmRleERh
dGFWZXJzaW9uKTsKKyAgICBBU1NFUlQocSk7CisgICAgaWYgKCFxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcSA9IGRlY29kZUlEQktleShxLCB2YWx1ZUxpbWl0LCBtX3ByaW1hcnlLZXkp
OworICAgIEFTU0VSVChxKTsKKyAgICBpZiAoIXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRl
eERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9w
cmltYXJ5S2V5KTsKKworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5nZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOworICAgIGNvbnN0
IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHQpOworICAgIGlmICghdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5k
ZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRv
ci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV92YWx1ZSA9
IGRlY29kZVN0cmluZyh0LCByZXN1bHQuZW5kKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9
CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAg
ICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisKKyAgICBib29sIGxvd2VyQm91bmQgPSBy
YW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKKyAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+dXBwZXIoKTsKKyAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09
IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6
TkVYVCk7CisgICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19E
VVBMSUNBVEUpOworCisgICAgaWYgKCFsb3dlckJvdW5kKSB7CisgICAgICAgIGN1cnNvck9wdGlv
bnMubG93S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgbWluSURCS2V5KCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSB0
cnVlOyAvLyBOb3QgaW5jbHVkZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9u
cy5sb3dLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAqcmFuZ2UtPmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4g
PSByYW5nZS0+bG93ZXJPcGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7Cisg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBpZiAo
Y3Vyc29yT3B0aW9ucy5mb3J3YXJkKQorICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biA9IHRydWU7IC8vIE5vdCBpbmNsdWRlZC4KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRl
c3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9w
dGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9i
amVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5n
ZS0+dXBwZXIoKSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBw
ZXJPcGVuKCk7CisKKyAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAg
ICAgICAgIC8vIEZvciByZXZlcnNlIGN1cnNvcnMsIHdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMu
CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OworICAgICAgICAgICAgaWYg
KCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5v
dCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3Vs
ZCBpbmNsdWRlIHRoYXQuCisgICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAm
JiBjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8
IDApCisgICAgICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOworCisg
ICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBP
YmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
Y3Vyc29yT3B0aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5k
ZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAg
ICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgYm9vbCBsb3dlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPmxvd2VyKCk7CisgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPnVwcGVyKCk7CisgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJ
REJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5F
WFQpOworICAgIGN1cnNvck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQ
TElDQVRFKTsKKworICAgIGlmICghbG93ZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25z
Lmxvd0tleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxzZTsg
Ly8gSW5jbHVkZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkg
PSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCAqcmFuZ2UtPmxvd2VyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5n
ZS0+bG93ZXJPcGVuKCk7CisgICAgfQorCisgICAgaWYgKCF1cHBlckJvdW5kKSB7CisgICAgICAg
IGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworICAgICAgICBjdXJzb3JPcHRpb25zLmhp
Z2hPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgorCisgICAgICAgIGlmICghY3Vyc29yT3B0aW9u
cy5mb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBp
ZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3Vyc29yT3B0aW9u
cy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKnJhbmdlLT51cHBlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
T3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKKworICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRI
aWdoS2V5OworICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hL
ZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBr
ZXlzLgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBr
ZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBr
ZXksIHdlIHNob3VsZCBpbmNsdWRlIHRoYXQuCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhp
Z2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhp
Z2hLZXkpIDwgMCkKKyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsK
KworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgfQor
CisgICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJ
bXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwor
ICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigp
OworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOworICAgIGN1
cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RV
UExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKKyAgICBjdXJzb3JPcHRp
b25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8
fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7CisKKyAgICBpZiAo
IWxvd2VyQm91bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFL
ZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAg
ICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgorICAgIH0g
ZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsK
KyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOworICAg
IH0KKworICAgIGlmICghdXBwZXJCb3VuZCkgeworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hL
ZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJ
bmNsdWRlZC4KKworICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBu
ZWVkIGEga2V5IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+
dXBwZXIoKSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJP
cGVuKCk7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKKyAgICAgICAgaWYg
KCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUg
Kmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5j
bHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVk
ZSB0aGF0LgorICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5k
ZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCisgICAgICAg
ICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7CisKKyAgICAgICAgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OworICAgIH0KKworICAgIFJlZlB0cjxJbmRleEN1
cnNvckltcGw+IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVr
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9
CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBUcmFuc2FjdGlv
bjo6Y3JlYXRlKHRoaXMpOworfQorCitQYXNzUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRl
KElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkpOworfQorCitJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZSogYmFja2luZ1N0b3JlKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorewor
fQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCit7
CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAg
IG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlv
bjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKTsKK30KKwordm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+
bV9jdXJyZW50VHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3Jl
LT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRy
YW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFu
c2FjdGlvbi5jbGVhcigpOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tp
bmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcpCit7CisgICAgU3RyaW5nIHBhdGhCYXNlID0g
cGF0aEJhc2VBcmc7CisKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBz
YW1lIExldmVsREIgZGF0YWJhc2UgZm9yIGFsbCBvcmlnaW5zLgorICAgIFN0cmluZyBwYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CisKKyAgICAvLyBGSVhNRTog
dGhpcyBpcyBjaGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgdGhlIGRvbWFpbiwgbm90IHRoZSBkYXRh
YmFzZSBpdHNlbGYKKyAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBV
U0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMZXZlbERCQ29tcGFy
YXRvcjsKK2NsYXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsK
K2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmlu
ZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbCopOworICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0lu
Y3JlbWVudEZsYWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIHB1dE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29s
PiYgZm91bmRVbmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7
CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwor
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRy
YW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOworCisgICAgc3RhdGljIGJvb2wgYmFja2lu
Z1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHBhdGhCYXNlKTsKKworcHJpdmF0ZToKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3Jl
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093
blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAg
UmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxMZXZl
bERCRGF0YWJhc2U+IG1fZGI7CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBh
cmF0b3I7CisgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rp
b247CisKKyAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5z
YWN0aW9uPiBjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW4oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRyYW5zYWN0
aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworCisjZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rp
bmcuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkNvZGluZy5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxldmVsREJDb2Rp
bmcuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQor
CisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisvLyBMZXZlbERCIHN0b3JlcyBrZXkvdmFs
dWUgcGFpcnMuIEtleXMgYW5kIHZhbHVlcyBhcmUgc3RyaW5ncyBvZiBieXRlcywgbm9ybWFsbHkg
b2YgdHlwZSBWZWN0b3I8Y2hhcj4uCisvLworLy8gVGhlIGtleXMgaW4gdGhlIGJhY2tpbmcgc3Rv
cmUgYXJlIHZhcmlhYmxlLWxlbmd0aCB0dXBsZXMgd2l0aCBkaWZmZXJlbnQgdHlwZXMKKy8vIG9m
IGZpZWxkcy4gRWFjaCBrZXkgaW4gdGhlIGJhY2tpbmcgc3RvcmUgc3RhcnRzIHdpdGggYSB0ZXJu
YXJ5IHByZWZpeDogKGRhdGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkKS4gRm9y
IGVhY2gsIDAgaXMgcmVzZXJ2ZWQgZm9yIG1ldGEtZGF0YS4KKy8vIFRoZSBwcmVmaXggbWFrZXMg
c3VyZSB0aGF0IGRhdGEgZm9yIGEgc3BlY2lmaWMgZGF0YWJhc2UsIG9iamVjdCBzdG9yZSwgYW5k
IGluZGV4IGFyZSBncm91cGVkIHRvZ2V0aGVyLiBUaGUgbG9jYWxpdHkgaXMgaW1wb3J0YW50IGZv
ciBwZXJmb3JtYW5jZTogY29tbW9uCisvLyBvcGVyYXRpb25zIHNob3VsZCBvbmx5IG5lZWQgYSBt
aW5pbWFsIG51bWJlciBvZiBzZWVrIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBhbGwgdGhlIG1l
dGEtZGF0YSBmb3IgYSBkYXRhYmFzZSBpcyBncm91cGVkIHRvZ2V0aGVyIHNvIHRoYXQgcmVhZGlu
ZyB0aGF0CisvLyBtZXRhLWRhdGEgb25seSByZXF1aXJlcyBvbmUgc2Vlay4KKy8vCisvLyBFYWNo
IGtleSB0eXBlIGhhcyBhIGNsYXNzIChpbiBzcXVhcmUgYnJhY2tldHMgYmVsb3cpIHdoaWNoIGtu
b3dzIGhvdyB0byBlbmNvZGUsIGRlY29kZSwgYW5kIGNvbXBhcmUgdGhhdCBrZXkgdHlwZS4KKy8v
CisvLyBHbG9iYWwgbWV0YS1kYXRhIGhhdmUga2V5cyB3aXRoIHByZWZpeCAoMCwwLDApLCBmb2xs
b3dlZCBieSBhIHR5cGUgYnl0ZToKKy8vCisvLyAgICAgPDAsIDAsIDAsIDA+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IEluZGV4ZWREQi9MZXZlbERCIHNjaGVt
YSB2ZXJzaW9uICgwIGZvciBub3cpIFtTY2hlbWFWZXJzaW9uS2V5XQorLy8gICAgIDwwLCAwLCAw
LCAxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUaGUgbWF4
aW11bSBkYXRhYmFzZSBpZCBldmVyIGFsbG9jYXRlZCBbTWF4RGF0YWJhc2VJZEtleV0KKy8vICAg
ICA8MCwgMCwgMCwgMTAwLCBkYXRhYmFzZSBpZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PT4gRXhpc3RlbmNlIGltcGxpZXMgdGhlIGRhdGFiYXNlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3Qg
W0RhdGFiYXNlRnJlZUxpc3RLZXldCisvLyAgICAgPDAsIDAsIDAsIDIwMSwgdXRmMTYgb3JpZ2lu
IG5hbWUsIHV0ZjE2IGRhdGFiYXNlIG5hbWU+ID0+IERhdGFiYXNlIGlkIFtEYXRhYmFzZU5hbWVL
ZXldCisvLworLy8KKy8vIERhdGFiYXNlIG1ldGEtZGF0YToKKy8vCisvLyAgICAgQWdhaW4sIHRo
ZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuCisvLworLy8gICAgIDxkYXRhYmFz
ZSBpZCwgMCwgMCwgMD4gPT4gdXRmMTYgb3JpZ2luIG5hbWUgW0RhdGFiYXNlTWV0YURhdGFLZXld
CisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxPiA9PiB1dGYxNiBkYXRhYmFzZSBuYW1lIFtE
YXRhYmFzZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMj4gPT4gdXRm
MTYgdXNlciB2ZXJzaW9uIGRhdGEgW0RhdGFiYXNlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFi
YXNlIGlkLCAwLCAwLCAzPiA9PiBtYXhpbXVtIG9iamVjdCBzdG9yZSBpZCBldmVyIGFsbG9jYXRl
ZCBbRGF0YWJhc2VNZXRhRGF0YUtleV0KKy8vCisvLworLy8gT2JqZWN0IHN0b3JlIG1ldGEtZGF0
YToKKy8vCisvLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhl
biBhIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLCBhbmQgdGhlbiBhbm90aGVyIHZhcmlhYmxlLWxl
bmd0aCBpbnRlZ2VyIChGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBieXRlKS4KKy8vCisvLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAwPiA9PiB1dGYxNiBvYmpl
Y3Qgc3RvcmUgbmFtZSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2Ug
aWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDE+ID0+IHV0ZjE2IGtleSBwYXRoIFtPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVj
dCBzdG9yZSBpZCwgMj4gPT4gaGFzIGF1dG8gaW5jcmVtZW50IFtPYmplY3RTdG9yZU1ldGFEYXRh
S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMz4g
PT4gaXMgZXZpY3RhYmxlIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFz
ZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgND4gPT4gbGFzdCAidmVyc2lvbiIgbnVt
YmVyIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwg
NTAsIG9iamVjdCBzdG9yZSBpZCwgNT4gPT4gbWF4aW11bSBpbmRleCBpZCBldmVyIGFsbG9jYXRl
ZCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUw
LCBvYmplY3Qgc3RvcmUgaWQsIDY+ID0+IGhhcyBrZXkgcGF0aCAodnMuIG51bGwpIFtPYmplY3RT
dG9yZU1ldGFEYXRhS2V5XQorLy8KKy8vCisvLyBJbmRleCBtZXRhLWRhdGE6CisvLworLy8gICAg
IFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gdHdvIHZhcmlhYmxl
LWxlbmd0aCBpbnRlZ2VycywgYW5kIHRoZW4gYW5vdGhlciB0eXBlIGJ5dGUuCisvLworLy8gICAg
IDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAwPiA9
PiB1dGYxNiBpbmRleCBuYW1lIFtJbmRleE1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBp
ZCwgMCwgMCwgMTAwLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAxPiA9PiBhcmUgaW5kZXgg
a2V5cyB1bmlxdWUgW0luZGV4TWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAw
LCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDI+ID0+IHV0ZjE2IGtleSBwYXRoIFtJ
bmRleE1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBvYmplY3Qg
c3RvcmUgaWQsIGluZGV4IGlkLCAzPiA9PiBpcyBpbmRleCBtdWx0aS1lbnRyeSBbSW5kZXhNZXRh
RGF0YUtleV0KKy8vCisvLworLy8gT3RoZXIgb2JqZWN0IHN0b3JlIGFuZCBpbmRleCBtZXRhLWRh
dGE6CisvLworLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRo
ZSBvYmplY3Qgc3RvcmUgYW5kIGluZGV4IGlkIGFyZSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlcnMs
IHRoZSB1dGYxNiBzdHJpbmdzIGFyZSB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncy4KKy8vCisvLyAg
ICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxNTAsIG9iamVjdCBzdG9yZSBpZD4gICAgICAgICAgICAg
ICAgICAgPT4gZXhpc3RlbmNlIGltcGxpZXMgdGhlIG9iamVjdCBzdG9yZSBpZCBpcyBpbiB0aGUg
ZnJlZSBsaXN0IFtPYmplY3RTdG9yZUZyZWVMaXN0S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwg
MCwgMCwgMTUxLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkPiAgICAgICAgID0+IGV4aXN0ZW5j
ZSBpbXBsaWVzIHRoZSBpbmRleCBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtJbmRleEZyZWVMaXN0
S2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMjAwLCB1dGYxNiBvYmplY3Qgc3RvcmUg
bmFtZT4gICAgICAgICAgID0+IG9iamVjdCBzdG9yZSBpZCBbT2JqZWN0U3RvcmVOYW1lc0tleV0K
Ky8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDIwMSwgb2JqZWN0IHN0b3JlIGlkLCB1dGYxNiBp
bmRleCBuYW1lPiA9PiBpbmRleCBpZCBbSW5kZXhOYW1lc0tleV0KKy8vCisvLworLy8gT2JqZWN0
IHN0b3JlIGRhdGE6CisvLworLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBl
IGJ5dGUuIFRoZSB1c2VyIGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisvLyAgICAgPGRh
dGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIDEsIHVzZXIga2V5PiA9PiAidmVyc2lvbiIsIHNl
cmlhbGl6ZWQgc2NyaXB0IHZhbHVlIFtPYmplY3RTdG9yZURhdGFLZXldCisvLworLy8KKy8vICJF
eGlzdHMiIGVudHJ5OgorLy8KKy8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlw
ZSBieXRlLiBUaGUgdXNlciBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCisvLworLy8gICAgIDxk
YXRhYmFzZSBpZCwgb2JqZWN0IHN0b3JlIGlkLCAyLCB1c2VyIGtleT4gPT4gInZlcnNpb24iIFtF
eGlzdHNFbnRyeUtleV0KKy8vCisvLworLy8gSW5kZXggZGF0YToKKy8vCisvLyAgICAgVGhlIHBy
ZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIGluZGV4IGtleSBpcyBhbiBlbmNv
ZGVkIElEQktleS4gVGhlIHNlcXVlbmNlIG51bWJlciBpcyBhIHZhcmlhYmxlIGxlbmd0aCBpbnRl
Z2VyLgorLy8gICAgIFRoZSBwcmltYXJ5IGtleSBpcyBhbiBlbmNvZGVkIElEQktleS4KKy8vCisv
LyAgICAgPGRhdGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCBpbmRleCBrZXks
IHNlcXVlbmNlIG51bWJlciwgcHJpbWFyeSBrZXk+ID0+ICJ2ZXJzaW9uIiwgcHJpbWFyeSBrZXkg
W0luZGV4RGF0YUtleV0KKy8vCisvLyAgICAgKFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgb2Jzb2xl
dGU7IGl0IHdhcyB1c2VkIHRvIGFsbG93IHR3byBlbnRyaWVzIHdpdGgKKy8vICAgICB0aGUgc2Ft
ZSB1c2VyIChpbmRleCkga2V5IGluIG5vbi11bmlxdWUgaW5kZXhlcyBwcmlvciB0byB0aGUgaW5j
bHVzaW9uIG9mCisvLyAgICAgdGhlIHByaW1hcnkga2V5IGluIHRoZSBkYXRhLiBUaGUgInZlcnNp
b24iIGZpZWxkIGlzIHVzZWQgdG8gd2VlZCBvdXQgc3RhbGUKKy8vICAgICBpbmRleCBkYXRhLiBX
aGVuZXZlciBuZXcgb2JqZWN0IHN0b3JlIGRhdGEgaXMgaW5zZXJ0ZWQsIGl0IGdldHMgYSBuZXcK
Ky8vICAgICAidmVyc2lvbiIgbnVtYmVyLCBhbmQgbmV3IGluZGV4IGRhdGEgaXMgd3JpdHRlbiB3
aXRoIHRoaXMgbnVtYmVyLiBXaGVuCisvLyAgICAgdGhlIGluZGV4IGlzIHVzZWQgZm9yIGxvb2st
dXBzLCBlbnRyaWVzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUKKy8vICAgICAiZXhpc3RzIiBl
bnRyaWVzLCBhbmQgcmVjb3JkcyB3aXRoIG9sZCAidmVyc2lvbiIgbnVtYmVycyBhcmUgZGVsZXRl
ZAorLy8gICAgIHdoZW4gdGhleSBhcmUgZW5jb3VudGVyZWQgaW4gZ2V0UHJpbWFyeUtleVZpYUlu
ZGV4LAorLy8gICAgIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3csIGFuZCBJbmRleEtl
eUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KS4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIElEQkxldmVsREJDb2RpbmcgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr
SURCS2V5TnVsbFR5cGVCeXRlID0gMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJL
ZXlTdHJpbmdUeXBlQnl0ZSA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5
RGF0ZVR5cGVCeXRlID0gMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJREJLZXlOdW1i
ZXJUeXBlQnl0ZSA9IDM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5QXJyYXlU
eXBlQnl0ZSA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TWluS2V5VHlw
ZUJ5dGUgPSA1OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVEYXRh
SW5kZXhJZCA9IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRXhpc3RzRW50cnlJbmRl
eElkID0gMjsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga1NjaGVtYVZlcnNpb25UeXBl
Qnl0ZSA9IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrTWF4RGF0YWJhc2VJZFR5cGVC
eXRlID0gMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtEYXRhYmFzZUZyZWVMaXN0VHlw
ZUJ5dGUgPSAxMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRGF0YWJhc2VOYW1lVHlw
ZUJ5dGUgPSAyMDE7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtPYmplY3RTdG9yZU1l
dGFEYXRhVHlwZUJ5dGUgPSA1MDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleE1l
dGFEYXRhVHlwZUJ5dGUgPSAxMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0
U3RvcmVGcmVlTGlzdFR5cGVCeXRlID0gMTUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
a0luZGV4RnJlZUxpc3RUeXBlQnl0ZSA9IDE1MTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUgPSAyMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBrSW5kZXhOYW1lc0tleVR5cGVCeXRlID0gMjAxOworCisjaWZuZGVmIElOVDY0X01BWAor
I2RlZmluZSBJTlQ2NF9NQVggMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNlbmRpZgorI2lmbmRlZiBJ
TlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYIDB4N2ZmZmZmZmZMCisjZW5kaWYKKworCitWZWN0
b3I8Y2hhcj4gZW5jb2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgVmVjdG9yPGNoYXI+
IHY7CisgICAgdi5hcHBlbmQoYyk7CisgICAgcmV0dXJuIHY7Cit9CisKK1ZlY3RvcjxjaGFyPiBt
YXhJREJLZXkoKQoreworICAgIHJldHVybiBlbmNvZGVCeXRlKGtJREJLZXlOdWxsVHlwZUJ5dGUp
OworfQorCitWZWN0b3I8Y2hhcj4gbWluSURCS2V5KCkKK3sKKyAgICByZXR1cm4gZW5jb2RlQnl0
ZShrSURCS2V5TWluS2V5VHlwZUJ5dGUpOworfQorCitWZWN0b3I8Y2hhcj4gZW5jb2RlSW50KGlu
dDY0X3QgbikKK3sKKyAgICBBU1NFUlQobiA+PSAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAv
LyBGSVhNRTogU2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNp
Z25lZCBjaGFyIGMgPSBuOworICAgICAgICByZXQuYXBwZW5kKGMpOworICAgICAgICBuID4+PSA4
OworICAgIH0gd2hpbGUgKG4pOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50NjRfdCBkZWNv
ZGVJbnQoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBBU1NFUlQo
YmVnaW4gPD0gZW5kKTsKKyAgICBpbnQ2NF90IHJldCA9IDA7CisKKyAgICBpbnQgc2hpZnQgPSAw
OworICAgIHdoaWxlIChiZWdpbiA8IGVuZCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAq
YmVnaW4rKzsKKyAgICAgICAgcmV0IHw9IHN0YXRpY19jYXN0PGludDY0X3Q+KGMpIDw8IHNoaWZ0
OworICAgICAgICBzaGlmdCArPSA4OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyBpbnQgY29tcGFyZUludHMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgQVNTRVJU
KGEgPj0gMCk7CisgICAgQVNTRVJUKGIgPj0gMCk7CisKKyAgICBpbnQ2NF90IGRpZmYgPSBhIC0g
YjsKKyAgICBpZiAoZGlmZiA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZGlmZiA+
IDApCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitWZWN0b3I8Y2hhcj4g
ZW5jb2RlVmFySW50KGludDY0X3QgbikKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0OyAvLyBGSVhN
RTogU2l6ZSB0aGlzIGF0IGNyZWF0aW9uLgorCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBj
aGFyIGMgPSBuICYgMHg3ZjsKKyAgICAgICAgbiA+Pj0gNzsKKyAgICAgICAgaWYgKG4pCisgICAg
ICAgICAgICBjIHw9IDB4ODA7CisgICAgICAgIHJldC5hcHBlbmQoYyk7CisgICAgfSB3aGlsZSAo
bik7CisKKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyKiBkZWNvZGVWYXJJbnQoY29u
c3QgY2hhciAqcCwgY29uc3QgY2hhciogbGltaXQsIGludDY0X3QmIGZvdW5kSW50KQoreworICAg
IEFTU0VSVChsaW1pdCA+PSBwKTsKKyAgICBmb3VuZEludCA9IDA7CisgICAgaW50IHNoaWZ0ID0g
MDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPj0gbGltaXQpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqcDsKKyAgICAgICAgZm91bmRJbnQg
fD0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oYyAmIDB4N2YpIDw8IHNoaWZ0OworICAgICAgICBzaGlm
dCArPSA3OworICAgIH0gd2hpbGUgKCpwKysgJiAweDgwKTsKKyAgICByZXR1cm4gcDsKK30KKwor
VmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit7CisgICAgVmVjdG9y
PGNoYXI+IHJldDsgLy8gRklYTUU6IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4KKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgdSA9
IHNbaV07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSB1ID4+IDg7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgbG8gPSB1OworICAgICAgICByZXQuYXBwZW5kKGhpKTsKKyAgICAgICAgcmV0LmFw
cGVuZChsbyk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworU3RyaW5nIGRlY29kZVN0
cmluZyhjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgQVNTRVJUKGVuZCA+
PSBwKTsKKyAgICBBU1NFUlQoISgoZW5kIC0gcCkgJSAyKSk7CisKKyAgICBzaXplX3QgbGVuID0g
KGVuZCAtIHApIC8gMjsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVz
ZXJ2ZUNhcGFjaXR5KGxlbik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytp
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGkgPSAqcCsrOworICAgICAgICB1bnNpZ25lZCBj
aGFyIGxvID0gKnArKzsKKworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFy
PigoaGkgPDwgOCkgfCBsbykpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgU3RyaW5n
JiBzKQoreworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBlbmNvZGVWYXJJbnQocy5sZW5ndGgoKSk7
CisgICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmcocykpOworICAgIHJldHVybiByZXQ7Cit9CisK
K2NvbnN0IGNoYXIqIGRlY29kZVN0cmluZ1dpdGhMZW5ndGgoY29uc3QgY2hhciogcCwgY29uc3Qg
Y2hhciogbGltaXQsIFN0cmluZyYgZm91bmRTdHJpbmcpCit7CisgICAgQVNTRVJUKGxpbWl0ID49
IHApOworICAgIGludDY0X3QgbGVuOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxl
bik7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocCArIGxlbiAqIDIg
PiBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0
cmluZyhwLCBwICsgbGVuICogMik7CisgICAgcCArPSBsZW4gKiAyOworICAgIHJldHVybiBwOwor
fQorCitpbnQgY29tcGFyZUVuY29kZWRTdHJpbmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwg
Y29uc3QgY2hhciogbGltaXRQLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKQor
eworICAgIEFTU0VSVCgmcCAhPSAmcSk7CisgICAgQVNTRVJUKGxpbWl0UCA+PSBwKTsKKyAgICBB
U1NFUlQobGltaXRRID49IHEpOworICAgIGludDY0X3QgbGVuUCwgbGVuUTsKKyAgICBwID0gZGVj
b2RlVmFySW50KHAsIGxpbWl0UCwgbGVuUCk7CisgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1p
dFEsIGxlblEpOworICAgIEFTU0VSVChwICYmIHEpOworICAgIEFTU0VSVChsZW5QID49IDApOwor
ICAgIEFTU0VSVChsZW5RID49IDApOworICAgIEFTU0VSVChwICsgbGVuUCAqIDIgPD0gbGltaXRQ
KTsKKyAgICBBU1NFUlQocSArIGxlblEgKiAyIDw9IGxpbWl0USk7CisKKyAgICBjb25zdCBjaGFy
KiBzdGFydFAgPSBwOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0USA9IHE7CisgICAgcCArPSBsZW5Q
ICogMjsKKyAgICBxICs9IGxlblEgKiAyOworCisgICAgaWYgKHAgPiBsaW1pdFAgfHwgcSA+IGxp
bWl0USkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBzaXplX3QgbG1pbiA9IHN0YXRp
Y19jYXN0PHNpemVfdD4obGVuUCA8IGxlblEgPyBsZW5QIDogbGVuUSk7CisgICAgaWYgKGludCB4
ID0gbWVtY21wKHN0YXJ0UCwgc3RhcnRRLCBsbWluICogMikpCisgICAgICAgIHJldHVybiB4Owor
CisgICAgaWYgKGxlblAgPT0gbGVuUSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
KGxlblAgPiBsZW5RKSA/IDEgOiAtMTsKK30KKworVmVjdG9yPGNoYXI+IGVuY29kZURvdWJsZShk
b3VibGUgeCkKK3sKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBi
ZSBieXRlIG9yZGVyIGluZGVwZW5kZW50LgorICAgIGNvbnN0IGNoYXIqIHAgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPigmeCk7CisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQocCwg
c2l6ZW9mKHgpKTsKKyAgICBBU1NFUlQodi5zaXplKCkgPT0gc2l6ZW9mKHgpKTsKKyAgICByZXR1
cm4gdjsKK30KKworY29uc3QgY2hhciogZGVjb2RlRG91YmxlKGNvbnN0IGNoYXIqIHAsIGNvbnN0
IGNoYXIqIGxpbWl0LCBkb3VibGUqIGQpCit7CisgICAgaWYgKHAgKyBzaXplb2YoKmQpID4gbGlt
aXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgY2hhciogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCpkKTsgKytpKQor
ICAgICAgICAqeCsrID0gKnArKzsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IGVu
Y29kZUlEQktleShjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmV0Owor
ICAgIGVuY29kZUlEQktleShrZXksIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBl
bmNvZGVJREJLZXkoY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgaW50bykKK3sKKyAg
ICBzaXplX3QgcHJldmlvdXNTaXplID0gaW50by5zaXplKCk7CisgICAgc3dpdGNoIChrZXkudHlw
ZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OkludmFsaWRUeXBlOgorICAgIGNhc2UgSURCS2V5OjpN
aW5UeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgaW50by5hcHBl
bmQoZW5jb2RlQnl0ZShrSURCS2V5TnVsbFR5cGVCeXRlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIElEQktleTo6QXJyYXlUeXBlOgorICAgICAgICB7CisgICAgICAgICAgICBpbnRvLmFw
cGVuZChlbmNvZGVCeXRlKGtJREJLZXlBcnJheVR5cGVCeXRlKSk7CisgICAgICAgICAgICBzaXpl
X3QgbGVuZ3RoID0ga2V5LmFycmF5KCkuc2l6ZSgpOworICAgICAgICAgICAgaW50by5hcHBlbmQo
ZW5jb2RlVmFySW50KGxlbmd0aCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBlbmNvZGVJREJLZXkoKmtleS5hcnJheSgp
W2ldLCBpbnRvKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRv
LnNpemUoKSA+IHByZXZpb3VzU2l6ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2Rl
Qnl0ZShrSURCS2V5U3RyaW5nVHlwZUJ5dGUpKTsKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2Rl
U3RyaW5nV2l0aExlbmd0aChrZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChw
cmV2aW91c1NpemUsIGludG8uc2l6ZSgpID4gcHJldmlvdXNTaXplKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKKyAgICAgICAgaW50by5hcHBlbmQoZW5jb2Rl
Qnl0ZShrSURCS2V5RGF0ZVR5cGVCeXRlKSk7CisgICAgICAgIGludG8uYXBwZW5kKGVuY29kZURv
dWJsZShrZXkuZGF0ZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBp
bnRvLnNpemUoKSAtIHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVCeXRlKGtJ
REJLZXlOdW1iZXJUeXBlQnl0ZSkpOworICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUo
a2V5Lm51bWJlcigpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNTaXplLCBpbnRv
LnNpemUoKSAtIHByZXZpb3VzU2l6ZSA9PSA5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2NvbnN0IGNoYXIqIGRlY29kZUlEQktl
eShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5k
S2V5KQoreworICAgIEFTU0VSVChsaW1pdCA+PSBwKTsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgICAgICBm
b3VuZEtleSA9IElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworICAgICAgICByZXR1cm4gcDsKKwor
ICAgIGNhc2Uga0lEQktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dDY0X3QgbGVuZ3RoOworICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVu
Z3RoKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgSURCS2V5OjpLZXlBcnJheSBhcnJheTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5n
dGgtLSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICAgICAgICAg
ICAgICBwID0gZGVjb2RlSURCS2V5KHAsIGxpbWl0LCBrZXkpOworICAgICAgICAgICAgICAgIGlm
ICghcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYXJy
YXkuYXBwZW5kKGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZEtleSA9IElE
QktleTo6Y3JlYXRlQXJyYXkoYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAg
IH0KKyAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAg
ICAgU3RyaW5nIHM7CisgICAgICAgICAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBs
aW1pdCwgcyk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHMpOworICAgICAg
ICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgcCA9IGRlY29k
ZURvdWJsZShwLCBsaW1pdCwgJmQpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUo
ZCk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleU51
bWJlclR5cGVCeXRlOgorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAg
ICAgIHAgPSBkZWNvZGVEb3VibGUocCwgbGltaXQsICZkKTsKKyAgICAgICAgICAgIGlmICghcCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5
OjpjcmVhdGVOdW1iZXIoZCk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitjb25z
dCBjaGFyKiBleHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIFZlY3RvcjxjaGFyPiogcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOwor
ICAgIGNvbnN0IGNoYXIqIHAgPSBzdGFydDsKKyAgICBpZiAocCA+PSBsaW1pdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAqcCsrOworCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBrSURCS2V5TnVsbFR5cGVCeXRlOgorICAgIGNhc2Uga0lEQktl
eU1pbktleVR5cGVCeXRlOgorICAgICAgICAqcmVzdWx0ID0gZW5jb2RlQnl0ZSh0eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHA7CisgICAgY2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKKyAgICAgICAg
eworICAgICAgICAgICAgaW50NjRfdCBsZW5ndGg7CisgICAgICAgICAgICBwID0gZGVjb2RlVmFy
SW50KHAsIGxpbWl0LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgICAgICAgICBy
ZXN1bHQtPmFwcGVuZChzdGFydCwgcCAtIHN0YXJ0KTsKKyAgICAgICAgICAgIHdoaWxlIChsZW5n
dGgtLSkgeworICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBzdWJrZXk7CisgICAgICAgICAg
ICAgICAgcCA9IGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGxpbWl0LCAmc3Via2V5KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIGNhc2Uga0lEQktleVN0cmluZ1R5cGVCeXRl
OgorICAgICAgICB7CisgICAgICAgICAgICBpbnQ2NF90IGxlbmd0aDsKKyAgICAgICAgICAgIHAg
PSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAocCArIGxlbmd0aCAqIDIg
PiBsaW1pdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC0+
Y2xlYXIoKTsKKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0YXJ0LCBwIC0gc3RhcnQgKyBs
ZW5ndGggKiAyKTsKKyAgICAgICAgICAgIHJldHVybiBwICsgbGVuZ3RoICogMjsKKyAgICAgICAg
fQorICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0ZToKKyAgICBjYXNlIGtJREJLZXlOdW1iZXJU
eXBlQnl0ZToKKyAgICAgICAgaWYgKHAgKyBzaXplb2YoZG91YmxlKSA+IGxpbWl0KQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJlc3VsdC0+Y2xlYXIoKTsKKyAgICAgICAgcmVzdWx0
LT5hcHBlbmQoc3RhcnQsIDEgKyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgIHJldHVybiBwICsg
c2l6ZW9mKGRvdWJsZSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitzdGF0aWMgSURCS2V5OjpUeXBlIGtleVR5cGVCeXRlVG9LZXlUeXBlKHVu
c2lnbmVkIGNoYXIgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtJREJL
ZXlOdWxsVHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBlOworICAg
IGNhc2Uga0lEQktleUFycmF5VHlwZUJ5dGU6CisgICAgICAgIHJldHVybiBJREJLZXk6OkFycmF5
VHlwZTsKKyAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKKyAgICAgICAgcmV0dXJuIElE
QktleTo6U3RyaW5nVHlwZTsKKyAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6CisgICAgICAg
IHJldHVybiBJREJLZXk6OkRhdGVUeXBlOworICAgIGNhc2Uga0lEQktleU51bWJlclR5cGVCeXRl
OgorICAgICAgICByZXR1cm4gSURCS2V5OjpOdW1iZXJUeXBlOworICAgIGNhc2Uga0lEQktleU1p
bktleVR5cGVCeXRlOgorICAgICAgICByZXR1cm4gSURCS2V5OjpNaW5UeXBlOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJREJLZXk6OkludmFsaWRUeXBl
OworfQorCitpbnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBj
aGFyKiBsaW1pdEEsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdEIpCit7CisgICAg
QVNTRVJUKCZwICE9ICZxKTsKKyAgICBBU1NFUlQocCA8IGxpbWl0QSk7CisgICAgQVNTRVJUKHEg
PCBsaW1pdEIpOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUEgPSAqcCsrOworICAgIHVuc2lnbmVk
IGNoYXIgdHlwZUIgPSAqcSsrOworCisgICAgaWYgKGludCB4ID0gSURCS2V5Ojpjb21wYXJlVHlw
ZXMoa2V5VHlwZUJ5dGVUb0tleVR5cGUodHlwZUEpLCBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh0eXBl
QikpKQorICAgICAgICByZXR1cm4geDsKKworICAgIHN3aXRjaCAodHlwZUEpIHsKKyAgICBjYXNl
IGtJREJLZXlOdWxsVHlwZUJ5dGU6CisgICAgY2FzZSBrSURCS2V5TWluS2V5VHlwZUJ5dGU6Cisg
ICAgICAgIC8vIE51bGwgdHlwZSBvciBtYXggdHlwZTsgbm8gcGF5bG9hZCB0byBjb21wYXJlLgor
ICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIGtJREJLZXlBcnJheVR5cGVCeXRlOgorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQ2NF90IGxlbmd0aEEsIGxlbmd0aEI7CisgICAgICAgICAgICBw
ID0gZGVjb2RlVmFySW50KHAsIGxpbWl0QSwgbGVuZ3RoQSk7CisgICAgICAgICAgICBpZiAoIXAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBxID0gZGVjb2RlVmFySW50
KHEsIGxpbWl0QiwgbGVuZ3RoQik7CisgICAgICAgICAgICBpZiAoIXEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAobGVuZ3RoQSA8IDAgfHwgbGVuZ3RoQiA8IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9
IDA7IGkgPCBsZW5ndGhBICYmIGkgPCBsZW5ndGhCOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW50IGNtcCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwLCBsaW1pdEEsIHEsIGxpbWl0Qikp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbXA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobGVuZ3RoQSA8IGxlbmd0aEIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICAgICAgaWYgKGxlbmd0aEEgPiBsZW5ndGhCKQorICAgICAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBjYXNlIGtJREJLZXlT
dHJpbmdUeXBlQnl0ZToKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkU3RyaW5nc1dpdGhM
ZW5ndGgocCwgbGltaXRBLCBxLCBsaW1pdEIpOworICAgIGNhc2Uga0lEQktleURhdGVUeXBlQnl0
ZToKKyAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKKyAgICAgICAgeworICAgICAgICAg
ICAgZG91YmxlIGQsIGU7CisgICAgICAgICAgICBwID0gZGVjb2RlRG91YmxlKHAsIGxpbWl0QSwg
JmQpOworICAgICAgICAgICAgQVNTRVJUKHApOworICAgICAgICAgICAgcSA9IGRlY29kZURvdWJs
ZShxLCBsaW1pdEIsICZlKTsKKyAgICAgICAgICAgIEFTU0VSVChxKTsKKyAgICAgICAgICAgIGlm
IChkIDwgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoZCA+
IGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitpbnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
QSwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlCKQoreworICAgIEFTU0VSVChrZXlBLnNpemUoKSA+
PSAxKTsKKyAgICBBU1NFUlQoa2V5Qi5zaXplKCkgPj0gMSk7CisKKyAgICBjb25zdCBjaGFyKiBw
ID0ga2V5QS5kYXRhKCk7CisgICAgY29uc3QgY2hhciogbGltaXRBID0gcCArIGtleUEuc2l6ZSgp
OworICAgIGNvbnN0IGNoYXIqIHEgPSBrZXlCLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBsaW1p
dEIgPSBxICsga2V5Qi5zaXplKCk7CisKKyAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlz
KHAsIGxpbWl0QSwgcSwgbGltaXRCKTsKK30KKworbmFtZXNwYWNlIHsKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGU+CitpbnQgZGVjb2RlQW5kQ29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEs
IGNvbnN0IExldmVsREJTbGljZSYgYikKK3sKKyAgICBLZXlUeXBlIGtleUE7CisgICAgS2V5VHlw
ZSBrZXlCOworCisgICAgY29uc3QgY2hhciogcHRyQSA9IEtleVR5cGU6OmRlY29kZShhLmJlZ2lu
KCksIGEuZW5kKCksICZrZXlBKTsKKyAgICBBU1NFUlRfVU5VU0VEKHB0ckEsIHB0ckEpOworICAg
IGNvbnN0IGNoYXIqIHB0ckIgPSBLZXlUeXBlOjpkZWNvZGUoYi5iZWdpbigpLCBiLmVuZCgpLCAm
a2V5Qik7CisgICAgQVNTRVJUX1VOVVNFRChwdHJCLCBwdHJCKTsKKworICAgIHJldHVybiBrZXlB
LmNvbXBhcmUoa2V5Qik7Cit9Cit9CisKK2ludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGljZSYg
YSwgY29uc3QgTGV2ZWxEQlNsaWNlJiBiLCBib29sIGluZGV4S2V5cykKK3sKKyAgICBjb25zdCBj
aGFyKiBwdHJBID0gYS5iZWdpbigpOworICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBiLmJlZ2luKCk7
CisgICAgY29uc3QgY2hhciogZW5kQSA9IGEuZW5kKCk7CisgICAgY29uc3QgY2hhciogZW5kQiA9
IGIuZW5kKCk7CisKKyAgICBLZXlQcmVmaXggcHJlZml4QTsKKyAgICBLZXlQcmVmaXggcHJlZml4
QjsKKworICAgIHB0ckEgPSBLZXlQcmVmaXg6OmRlY29kZShwdHJBLCBlbmRBLCAmcHJlZml4QSk7
CisgICAgcHRyQiA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckIsIGVuZEIsICZwcmVmaXhCKTsKKyAg
ICBBU1NFUlQocHRyQSk7CisgICAgQVNTRVJUKHB0ckIpOworCisgICAgaWYgKGludCB4ID0gcHJl
Zml4QS5jb21wYXJlKHByZWZpeEIpKQorICAgICAgICByZXR1cm4geDsKKworICAgIGlmIChwcmVm
aXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtHbG9iYWxNZXRhRGF0YSkgeworICAgICAgICBBU1NF
UlQocHRyQSAhPSBlbmRBKTsKKyAgICAgICAgQVNTRVJUKHB0ckIgIT0gZW5kQik7CisKKyAgICAg
ICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZUEgPSAqcHRyQSsrOworICAgICAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlQiA9ICpwdHJCKys7CisKKyAgICAgICAgaWYgKGludCB4ID0gdHlwZUJ5dGVB
IC0gdHlwZUJ5dGVCKQorICAgICAgICAgICAgcmV0dXJuIHg7CisKKyAgICAgICAgaWYgKHR5cGVC
eXRlQSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0eXBlQnl0ZUEg
PT0ga0RhdGFiYXNlRnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVB
bmRDb21wYXJlPERhdGFiYXNlRnJlZUxpc3RLZXk+KGEsIGIpOworICAgICAgICBpZiAodHlwZUJ5
dGVBID09IGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVB
bmRDb21wYXJlPERhdGFiYXNlTmFtZUtleT4oYSwgYik7CisgICAgfQorCisgICAgaWYgKHByZWZp
eEEudHlwZSgpID09IEtleVByZWZpeDo6a0RhdGFiYXNlTWV0YURhdGEpIHsKKyAgICAgICAgQVNT
RVJUKHB0ckEgIT0gZW5kQSk7CisgICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOworCisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckErKzsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciB0eXBlQnl0ZUIgPSAqcHRyQisrOworCisgICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRl
QSAtIHR5cGVCeXRlQikKKyAgICAgICAgICAgIHJldHVybiB4OworCisgICAgICAgIGlmICh0eXBl
Qnl0ZUEgPD0gMykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0eXBlQnl0
ZUEgPT0ga09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDb21wYXJlPE9iamVjdFN0b3JlTWV0YURhdGFLZXk+KGEsIGIpOworICAgICAgICBp
ZiAodHlwZUJ5dGVBID09IGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpCisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ29tcGFyZTxJbmRleE1ldGFEYXRhS2V5PihhLCBiKTsKKyAgICAgICAgaWYg
KHR5cGVCeXRlQSA9PSBrT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKQorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVGcmVlTGlzdEtleT4oYSwgYik7Cisg
ICAgICAgIGlmICh0eXBlQnl0ZUEgPT0ga0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPEluZGV4RnJlZUxpc3RLZXk+KGEsIGIpOworICAg
ICAgICBpZiAodHlwZUJ5dGVBID09IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpCisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxPYmplY3RTdG9yZU5hbWVzS2V5PihhLCBiKTsK
KyAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBrSW5kZXhOYW1lc0tleVR5cGVCeXRlKQorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBhcmU8SW5kZXhOYW1lc0tleT4oYSwgYik7CisKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtPYmplY3RTdG9yZURhdGEpIHsK
KyAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSAmJiBwdHJCID09IGVuZEIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSkKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgaWYgKHB0ckIgPT0gZW5kQikKKyAgICAgICAgICAgIHJldHVybiAxOyAvLyBG
SVhNRTogVGhpcyBjYXNlIG9mIG5vbi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZl
IHRvIGJlIGhhbmRsZWQgdGhpcyB3YXkuCisKKyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENvbXBh
cmU8T2JqZWN0U3RvcmVEYXRhS2V5PihhLCBiKTsKKyAgICB9CisgICAgaWYgKHByZWZpeEEudHlw
ZSgpID09IEtleVByZWZpeDo6a0V4aXN0c0VudHJ5KSB7CisgICAgICAgIGlmIChwdHJBID09IGVu
ZEEgJiYgcHRyQiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChw
dHJBID09IGVuZEEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChwdHJCID09
IGVuZEIpCisgICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRoaXMgY2FzZSBvZiBub24t
ZXhpc3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHRoaXMgd2F5
LgorCisgICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPEV4aXN0c0VudHJ5S2V5PihhLCBi
KTsKKyAgICB9CisgICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6a0luZGV4RGF0
YSkgeworICAgICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQorICAgICAgICAgICAgcmV0dXJuIDE7
IC8vIEZJWE1FOiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90
IGhhdmUgdG8gYmUgaGFuZGxlZCB0aGlzIHdheS4KKworICAgICAgICBJbmRleERhdGFLZXkgaW5k
ZXhEYXRhS2V5QTsKKyAgICAgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtleUI7CisKKyAgICAg
ICAgcHRyQSA9IEluZGV4RGF0YUtleTo6ZGVjb2RlKGEuYmVnaW4oKSwgZW5kQSwgJmluZGV4RGF0
YUtleUEpOworICAgICAgICBwdHJCID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoYi5iZWdpbigpLCBl
bmRCLCAmaW5kZXhEYXRhS2V5Qik7CisgICAgICAgIEFTU0VSVChwdHJBKTsKKyAgICAgICAgQVNT
RVJUKHB0ckIpOworCisgICAgICAgIGJvb2wgaWdub3JlRHVwbGljYXRlcyA9IGluZGV4S2V5czsK
KyAgICAgICAgcmV0dXJuIGluZGV4RGF0YUtleUEuY29tcGFyZShpbmRleERhdGFLZXlCLCBpZ25v
cmVEdXBsaWNhdGVzKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworCitLZXlQcmVmaXg6OktleVByZWZpeCgpCisgICAgOiBtX2RhdGFiYXNl
SWQoa0ludmFsaWRUeXBlKQorICAgICwgbV9vYmplY3RTdG9yZUlkKGtJbnZhbGlkVHlwZSkKKyAg
ICAsIG1faW5kZXhJZChrSW52YWxpZFR5cGUpCit7Cit9CisKK0tleVByZWZpeDo6S2V5UHJlZml4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCisgICAgOiBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVJ
ZChvYmplY3RTdG9yZUlkKQorICAgICwgbV9pbmRleElkKGluZGV4SWQpCit7Cit9CisKK2NvbnN0
IGNoYXIqIEtleVByZWZpeDo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgS2V5UHJlZml4KiByZXN1bHQpCit7CisgICAgaWYgKHN0YXJ0ID09IGxpbWl0KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKnN0YXJ0Kys7
CisKKyAgICBpbnQgZGF0YWJhc2VJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gNSkgJiAweDcpICsg
MTsKKyAgICBpbnQgb2JqZWN0U3RvcmVJZEJ5dGVzID0gKChmaXJzdEJ5dGUgPj4gMikgJiAweDcp
ICsgMTsKKyAgICBpbnQgaW5kZXhJZEJ5dGVzID0gKGZpcnN0Qnl0ZSAmIDB4MykgKyAxOworCisg
ICAgaWYgKHN0YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzICsgb2JqZWN0U3RvcmVJZEJ5dGVzICsgaW5k
ZXhJZEJ5dGVzID4gbGltaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzdWx0LT5tX2Rh
dGFiYXNlSWQgPSBkZWNvZGVJbnQoc3RhcnQsIHN0YXJ0ICsgZGF0YWJhc2VJZEJ5dGVzKTsKKyAg
ICBzdGFydCArPSBkYXRhYmFzZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQg
PSBkZWNvZGVJbnQoc3RhcnQsIHN0YXJ0ICsgb2JqZWN0U3RvcmVJZEJ5dGVzKTsKKyAgICBzdGFy
dCArPSBvYmplY3RTdG9yZUlkQnl0ZXM7CisgICAgcmVzdWx0LT5tX2luZGV4SWQgPSBkZWNvZGVJ
bnQoc3RhcnQsIHN0YXJ0ICsgaW5kZXhJZEJ5dGVzKTsKKyAgICBzdGFydCArPSBpbmRleElkQnl0
ZXM7CisKKyAgICByZXR1cm4gc3RhcnQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlQcmVmaXg6OmVu
Y29kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJZCAhPSBrSW52YWxpZElkKTsK
KyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZhbGlkSWQpOworICAgIEFTU0VSVCht
X2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YWJhc2VJZFN0
cmluZyA9IGVuY29kZUludChtX2RhdGFiYXNlSWQpOworICAgIFZlY3RvcjxjaGFyPiBvYmplY3RT
dG9yZUlkU3RyaW5nID0gZW5jb2RlSW50KG1fb2JqZWN0U3RvcmVJZCk7CisgICAgVmVjdG9yPGNo
YXI+IGluZGV4SWRTdHJpbmcgPSBlbmNvZGVJbnQobV9pbmRleElkKTsKKworICAgIEFTU0VSVChk
YXRhYmFzZUlkU3RyaW5nLnNpemUoKSA8PSA4KTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZFN0
cmluZy5zaXplKCkgPD0gOCk7CisgICAgQVNTRVJUKGluZGV4SWRTdHJpbmcuc2l6ZSgpIDw9IDQp
OworCisKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSA9IChkYXRhYmFzZUlkU3RyaW5nLnNp
emUoKSAtIDEpIDw8IDUgfCAob2JqZWN0U3RvcmVJZFN0cmluZy5zaXplKCkgLSAxKSA8PCAyIHwg
KGluZGV4SWRTdHJpbmcuc2l6ZSgpIC0gMSk7CisgICAgVmVjdG9yPGNoYXI+IHJldDsKKyAgICBy
ZXQuYXBwZW5kKGZpcnN0Qnl0ZSk7CisgICAgcmV0LmFwcGVuZChkYXRhYmFzZUlkU3RyaW5nKTsK
KyAgICByZXQuYXBwZW5kKG9iamVjdFN0b3JlSWRTdHJpbmcpOworICAgIHJldC5hcHBlbmQoaW5k
ZXhJZFN0cmluZyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgS2V5UHJlZml4Ojpjb21w
YXJlKGNvbnN0IEtleVByZWZpeCYgb3RoZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VJZCAhPSBrSW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZh
bGlkSWQpOworICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAo
bV9kYXRhYmFzZUlkICE9IG90aGVyLm1fZGF0YWJhc2VJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBh
cmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKKyAgICBpZiAobV9vYmpl
Y3RTdG9yZUlkICE9IG90aGVyLm1fb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBh
cmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAo
bV9pbmRleElkICE9IG90aGVyLm1faW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbnRz
KG1faW5kZXhJZCwgb3RoZXIubV9pbmRleElkKTsKKyAgICByZXR1cm4gMDsKK30KKworS2V5UHJl
Zml4OjpUeXBlIEtleVByZWZpeDo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VJZCAhPSBrSW52YWxpZElkKTsKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkICE9IGtJbnZh
bGlkSWQpOworICAgIEFTU0VSVChtX2luZGV4SWQgIT0ga0ludmFsaWRJZCk7CisKKyAgICBpZiAo
IW1fZGF0YWJhc2VJZCkKKyAgICAgICAgcmV0dXJuIGtHbG9iYWxNZXRhRGF0YTsKKyAgICBpZiAo
IW1fb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0dXJuIGtEYXRhYmFzZU1ldGFEYXRhOworICAg
IGlmIChtX2luZGV4SWQgPT0ga09iamVjdFN0b3JlRGF0YUluZGV4SWQpCisgICAgICAgIHJldHVy
biBrT2JqZWN0U3RvcmVEYXRhOworICAgIGlmIChtX2luZGV4SWQgPT0ga0V4aXN0c0VudHJ5SW5k
ZXhJZCkKKyAgICAgICAgcmV0dXJuIGtFeGlzdHNFbnRyeTsKKyAgICBpZiAobV9pbmRleElkID49
IGtNaW5pbXVtSW5kZXhJZCkKKyAgICAgICAgcmV0dXJuIGtJbmRleERhdGE7CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga0ludmFsaWRUeXBlOworfQorCitWZWN0b3I8
Y2hhcj4gU2NoZW1hVmVyc2lvbktleTo6ZW5jb2RlKCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4
KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7CisgICAg
cmV0LmFwcGVuZChlbmNvZGVCeXRlKGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUpKTsKKyAgICByZXR1
cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCkKK3sK
KyAgICBLZXlQcmVmaXggcHJlZml4KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBw
cmVmaXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtNYXhEYXRhYmFzZUlk
VHlwZUJ5dGUpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitEYXRhYmFzZUZyZWVMaXN0S2V5OjpE
YXRhYmFzZUZyZWVMaXN0S2V5KCkKKyAgICA6IG1fZGF0YWJhc2VJZCgtMSkKK3sKK30KKworY29u
c3QgY2hhciogRGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBj
b25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KQoreworICAgIEtl
eVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6ZGVjb2RlKHN0
YXJ0LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBBU1NFUlQoIXByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9
PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0RhdGFiYXNl
RnJlZUxpc3RUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZUlk
KTsKK30KKworVmVjdG9yPGNoYXI+IERhdGFiYXNlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKKyAgICBWZWN0
b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0
ZShrRGF0YWJhc2VGcmVlTGlzdFR5cGVCeXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJ
bnQoZGF0YWJhc2VJZCkpOworICAgIHJldHVybiByZXQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRh
YmFzZUZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoKQoreworICAgIHJldHVybiBlbmNvZGUoSU5U
NjRfTUFYKTsKK30KKworaW50NjRfdCBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkYXRhYmFzZUlkKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDApOworICAgIHJldHVybiBtX2Rh
dGFiYXNlSWQ7Cit9CisKK2ludCBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IERh
dGFiYXNlRnJlZUxpc3RLZXkmIG90aGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
SWQgPj0gMCk7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9k
YXRhYmFzZUlkKTsKK30KKworY29uc3QgY2hhciogRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUoY29u
c3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3Vs
dCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVm
aXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAg
cmV0dXJuIHA7CisgICAgQVNTRVJUKCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKKyAgICBBU1NFUlQo
IXByZWZpeC5tX29iamVjdFN0b3JlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7
CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGNo
YXIgdHlwZUJ5dGUgPSAqcCsrOworICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRl
ID09IGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAg
IHJldHVybiAwOworICAgIHAgPSBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1
bHQtPm1fb3JpZ2luKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VOYW1l
KTsKK30KKworVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICBLZXlQcmVmaXgg
cHJlZml4KDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7
CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtEYXRhYmFzZU5hbWVUeXBlQnl0ZSkpOworICAg
IHJldC5hcHBlbmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChvcmlnaW4pKTsKKyAgICByZXQuYXBw
ZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoZGF0YWJhc2VOYW1lKSk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAi
Iik7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4g
aW4gY29sbGF0aW9uIG9yZGVyCisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmln
aW4gKyAiXHgwMSIpOworfQorCitpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERh
dGFiYXNlTmFtZUtleSYgb3RoZXIpCit7CisgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFy
ZShtX29yaWdpbiwgb3RoZXIubV9vcmlnaW4pKQorICAgICAgICByZXR1cm4geDsKKyAgICByZXR1
cm4gY29kZVBvaW50Q29tcGFyZShtX2RhdGFiYXNlTmFtZSwgb3RoZXIubV9kYXRhYmFzZU5hbWUp
OworfQorCitWZWN0b3I8Y2hhcj4gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgTWV0YURhdGFUeXBlIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXgg
cHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXgu
ZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlwZSkpOworICAg
IHJldHVybiByZXQ7Cit9CisKK09iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok9iamVjdFN0b3JlTWV0
YURhdGFLZXkoKQorICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQorICAgICwgbV9tZXRhRGF0YVR5
cGUoLTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29k
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIq
IHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICgh
cCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwor
ICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgu
bV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
dW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0
ZSwgdHlwZUJ5dGUgPT0ga09iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSk7CisgICAgaWYgKHAg
PT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGlt
aXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVy
biAwOworICAgIEFTU0VSVChyZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7CisgICAgaWYgKHAgPT0g
bGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGlt
aXQsIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRh
dGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7
CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUp
KTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVWYXJJbnQobWV0YURhdGFUeXBlKSk7CisgICAgcmV0dXJuIHJldDsKK30K
KworVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2
NF90IGRhdGFiYXNlSWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9N
QVgsIElOVDY0X01BWCk7Cit9CisKK1ZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
Cit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9N
QVgpOworfQorCitpbnQ2NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om9iamVjdFN0b3JlSWQo
KSBjb25zdAoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJu
IG1fb2JqZWN0U3RvcmVJZDsKK30KK2ludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0
YURhdGFUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7Cisg
ICAgcmV0dXJuIG1fbWV0YURhdGFUeXBlOworfQorCitpbnQgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBB
U1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOworICAgIEFTU0VSVChtX21ldGFEYXRhVHlwZSA+
PSAwKTsKKyAgICBpZiAoaW50IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVy
Lm1fb2JqZWN0U3RvcmVJZCkpCisgICAgICAgIHJldHVybiB4OworICAgIHJldHVybiBtX21ldGFE
YXRhVHlwZSAtIG90aGVyLm1fbWV0YURhdGFUeXBlOworfQorCitJbmRleE1ldGFEYXRhS2V5OjpJ
bmRleE1ldGFEYXRhS2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5k
ZXhJZCgtMSkKKyAgICAsIG1fbWV0YURhdGFUeXBlKDApCit7Cit9CisKK2NvbnN0IGNoYXIqIElu
ZGV4TWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIEluZGV4TWV0YURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4Owor
ICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVm
aXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5t
X2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAg
QVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJU
X1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4TWV0YURhdGFUeXBlQnl0ZSk7Cisg
ICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJ
bnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAg
ICAgIHJldHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9p
bmRleElkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwID09IGxp
bWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXN1bHQtPm1fbWV0YURhdGFUeXBlID0gKnAr
KzsKKyAgICByZXR1cm4gcDsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSkKK3sKKyAgICBLZXlQcmVmaXggcHJl
Zml4KGRhdGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5j
b2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUp
KTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7CisgICAgcmV0
LmFwcGVuZChlbmNvZGVWYXJJbnQoaW5kZXhJZCkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0
ZShtZXRhRGF0YVR5cGUpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5k
ZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgSU5UNjRfTUFYLCAyNTUpOworfQorCitpbnQgSW5kZXhNZXRhRGF0YUtleTo6Y29tcGFy
ZShjb25zdCBJbmRleE1ldGFEYXRhS2V5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9vYmplY3RT
dG9yZUlkID49IDApOworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisKKyAgICBpZiAoaW50
IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkp
CisgICAgICAgIHJldHVybiB4OworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVJbnRzKG1faW5kZXhJ
ZCwgb3RoZXIubV9pbmRleElkKSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIG1fbWV0
YURhdGFUeXBlIC0gb3RoZXIubV9tZXRhRGF0YVR5cGU7Cit9CisKK2ludDY0X3QgSW5kZXhNZXRh
RGF0YUtleTo6aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsK
KyAgICByZXR1cm4gbV9pbmRleElkOworfQorCitPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjpPYmpl
Y3RTdG9yZUZyZWVMaXN0S2V5KCkKKyAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKK3sKK30KKwor
Y29uc3QgY2hhciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KQor
eworICAgIEtleVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciAqcCA9IEtleVByZWZpeDo6
ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVm
aXgubV9vYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAg
IGlmIChwID09IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5
cGVCeXRlID0gKnArKzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBr
T2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5t
X29iamVjdFN0b3JlSWQpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVGcmVlTGlzdEtl
eTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorewor
ICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CisgICAgVmVjdG9yPGNoYXI+
IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVj
dFN0b3JlRnJlZUxpc3RUeXBlQnl0ZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9i
amVjdFN0b3JlSWQpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0
U3RvcmVGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAg
ICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIElOVDY0X01BWCk7Cit9CisKK2ludDY0X3QgT2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQor
CitpbnQgT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZy
ZWVMaXN0S2V5JiBvdGhlcikKK3sKKyAgICAvLyBGSVhNRTogSXQgbWF5IHNlZW0gc3RyYW5nZSB0
aGF0IHdlJ3JlIG5vdCBjb21wYXJpbmcgZGF0YWJhc2UgaWQncywKKyAgICAvLyBidXQgdGhhdCBj
b21wYXJpc29uIHdpbGwgaGF2ZSBiZWVuIG1hZGUgZWFybGllci4KKyAgICAvLyBXZSBzaG91bGQg
cHJvYmFibHkgbWFrZSB0aGlzIG1vcmUgY2xlYXIsIHRob3VnaC4uLgorICAgIEFTU0VSVChtX29i
amVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJuIGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJ
ZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKK30KKworSW5kZXhGcmVlTGlzdEtleTo6SW5kZXhG
cmVlTGlzdEtleSgpCisgICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCisgICAgLCBtX2luZGV4SWQo
LTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4RnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBj
aGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCkK
K3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6
OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVCghcHJl
Zml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKKyAg
ICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0g
a0luZGV4RnJlZUxpc3RUeXBlQnl0ZSk7CisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJl
dHVybiAwOworICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RT
dG9yZUlkKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkZWNv
ZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleElkKTsKK30KKworVmVjdG9yPGNoYXI+
IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0
YWJhc2VJZCwgMCwgMCk7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsK
KyAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0luZGV4RnJlZUxpc3RUeXBlQnl0ZSkpOworICAg
IHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKKyAgICByZXQuYXBwZW5k
KGVuY29kZVZhckludChpbmRleElkKSk7CisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNo
YXI+IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIElOVDY0X01BWCk7Cit9CisKK2ludCBJbmRleEZyZWVMaXN0S2V5Ojpjb21w
YXJlKGNvbnN0IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKQoreworICAgIEFTU0VSVChtX29iamVj
dFN0b3JlSWQgPj0gMCk7CisgICAgQVNTRVJUKG1faW5kZXhJZCA+PSAwKTsKKyAgICBpZiAoaW50
IHggPSBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkp
CisgICAgICAgIHJldHVybiB4OworICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90
aGVyLm1faW5kZXhJZCk7Cit9CisKK2ludDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6b2JqZWN0U3Rv
cmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICBy
ZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitpbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6Omlu
ZGV4SWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7CisgICAgcmV0dXJu
IG1faW5kZXhJZDsKK30KKworLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAg
b2JqZWN0IHN0b3JlIGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKy8vIGlzIGtlcHQgaW4gdGhlIElE
QkRhdGFiYXNlQmFja2VuZEltcGwuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUgdW5yZWxpYWJsZT8K
Ky8vIENhbiB3ZSByZW1vdmUgdGhpcz8KK2NvbnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6
OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3Jl
TmFtZXNLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAgIGNvbnN0IGNo
YXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOworICAgIGlm
ICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQp
OworICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKCFwcmVm
aXgubV9pbmRleElkKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBl
Qnl0ZSwgdHlwZUJ5dGUgPT0ga09iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CisgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5h
bWUpOworfQorCitWZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCit7CisgICAgS2V5
UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0g
cHJlZml4LmVuY29kZSgpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVO
YW1lc1R5cGVCeXRlKSk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKG9i
amVjdFN0b3JlTmFtZSkpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBPYmplY3RTdG9yZU5h
bWVzS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKQoreworICAg
IHJldHVybiBjb2RlUG9pbnRDb21wYXJlKG1fb2JqZWN0U3RvcmVOYW1lLCBvdGhlci5tX29iamVj
dFN0b3JlTmFtZSk7Cit9CisKK0luZGV4TmFtZXNLZXk6OkluZGV4TmFtZXNLZXkoKQorICAgIDog
bV9vYmplY3RTdG9yZUlkKC0xKQoreworfQorCisvLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMg
dG8gbG9vayB1cCBpbmRleCBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCisvLyBpcyBrZXB0IGF0IGEg
aGlnaGVyIGxldmVsLgorY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW1lc0tleSogcmVzdWx0KQorewor
ICAgIEtleVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZpeDo6ZGVj
b2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7CisgICAgQVNTRVJUKCFwcmVmaXgu
bV9vYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOworICAgIGlm
IChwID09IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlID0gKnArKzsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrSW5k
ZXhOYW1lc0tleVR5cGVCeXRlKTsKKyAgICBpZiAocCA9PSBsaW1pdCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3Jl
SWQpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRlY29kZVN0
cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9pbmRleE5hbWUpOworfQorCitWZWN0
b3I8Y2hhcj4gSW5kZXhOYW1lc0tleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBLZXlQcmVm
aXggcHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVm
aXguZW5jb2RlKCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleE5hbWVzS2V5VHlw
ZUJ5dGUpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGluZGV4TmFtZSkpOworICAgIHJl
dHVybiByZXQ7Cit9CisKK2ludCBJbmRleE5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4TmFt
ZXNLZXkmIG90aGVyKQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CisgICAg
aWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0
b3JlSWQpKQorICAgICAgICByZXR1cm4geDsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSht
X2luZGV4TmFtZSwgb3RoZXIubV9pbmRleE5hbWUpOworfQorCitjb25zdCBjaGFyKiBPYmplY3RT
dG9yZURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBP
YmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCkKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4OworICAg
IGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJlZml4KTsK
KyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRh
YmFzZUlkKTsKKyAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJU
KHByZWZpeC5tX2luZGV4SWQgPT0ga1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgaWYgKHAgPT0g
ZW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXh0cmFjdEVuY29kZWRJREJLZXko
cCwgZW5kLCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworVmVjdG9yPGNoYXI+IE9i
amVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8Y2hhcj4gZW5jb2RlZFVzZXJLZXkpCit7CisgICAgS2V5
UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrU3BlY2lhbEluZGV4TnVt
YmVyKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOworICAgIHJldC5h
cHBlbmQoZW5jb2RlZFVzZXJLZXkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworVmVjdG9yPGNo
YXI+IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7CisgICAgcmV0dXJuIGVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOwor
fQorCitpbnQgT2JqZWN0U3RvcmVEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRGF0
YUtleSYgb3RoZXIpCit7CisgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29k
ZWRVc2VyS2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJL
ZXk+IE9iamVjdFN0b3JlRGF0YUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPElE
QktleT4ga2V5OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1f
ZW5jb2RlZFVzZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29uc3Qg
aW50NjRfdCBPYmplY3RTdG9yZURhdGFLZXk6OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrT2JqZWN0
U3RvcmVEYXRhSW5kZXhJZDsKKworY29uc3QgY2hhciogRXhpc3RzRW50cnlLZXk6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0
KQoreworICAgIEtleVByZWZpeCBwcmVmaXg7CisgICAgY29uc3QgY2hhciogcCA9IEtleVByZWZp
eDo6ZGVjb2RlKHN0YXJ0LCBlbmQsICZwcmVmaXgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOworICAgIEFTU0VSVChwcmVm
aXgubV9vYmplY3RTdG9yZUlkKTsKKyAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA9PSBrU3Bl
Y2lhbEluZGV4TnVtYmVyKTsKKyAgICBpZiAocCA9PSBlbmQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBleHRyYWN0RW5jb2RlZElEQktleShwLCBlbmQsICZyZXN1bHQtPm1fZW5jb2Rl
ZFVzZXJLZXkpOworfQorCitWZWN0b3I8Y2hhcj4gRXhpc3RzRW50cnlLZXk6OmVuY29kZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+
JiBlbmNvZGVkS2V5KQoreworICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwga1NwZWNpYWxJbmRleE51bWJlcik7CisgICAgVmVjdG9yPGNoYXI+IHJldCA9IHBy
ZWZpeC5lbmNvZGUoKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRLZXkpOworICAgIHJldHVybiBy
ZXQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCit7
CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJL
ZXkodXNlcktleSkpOworfQorCitpbnQgRXhpc3RzRW50cnlLZXk6OmNvbXBhcmUoY29uc3QgRXhp
c3RzRW50cnlLZXkmIG90aGVyKQoreworICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMo
bV9lbmNvZGVkVXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBFeGlzdHNFbnRyeUtleTo6dXNlcktleSgpIGNvbnN0Cit7CisgICAgUmVmUHRy
PElEQktleT4ga2V5OworICAgIGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCks
IG1fZW5jb2RlZFVzZXJLZXkuZW5kKCksIGtleSk7CisgICAgcmV0dXJuIGtleTsKK30KKworY29u
c3QgaW50NjRfdCBFeGlzdHNFbnRyeUtleTo6a1NwZWNpYWxJbmRleE51bWJlciA9IGtFeGlzdHNF
bnRyeUluZGV4SWQ7CisKK0luZGV4RGF0YUtleTo6SW5kZXhEYXRhS2V5KCkKKyAgICA6IG1fZGF0
YWJhc2VJZCgtMSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZCgtMSkKKyAgICAsIG1faW5kZXhJZCgt
MSkKKyAgICAsIG1fc2VxdWVuY2VOdW1iZXIoLTEpCit7Cit9CisKK2NvbnN0IGNoYXIqIEluZGV4
RGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5k
ZXhEYXRhS2V5KiByZXN1bHQpCit7CisgICAgS2V5UHJlZml4IHByZWZpeDsKKyAgICBjb25zdCBj
aGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKKyAgICBp
ZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlk
KTsKKyAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7CisgICAgQVNTRVJUKHByZWZp
eC5tX2luZGV4SWQgPj0ga01pbmltdW1JbmRleElkKTsKKyAgICByZXN1bHQtPm1fZGF0YWJhc2VJ
ZCA9IHByZWZpeC5tX2RhdGFiYXNlSWQ7CisgICAgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQgPSBw
cmVmaXgubV9vYmplY3RTdG9yZUlkOworICAgIHJlc3VsdC0+bV9pbmRleElkID0gcHJlZml4Lm1f
aW5kZXhJZDsKKyAgICByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIgPSAtMTsKKyAgICByZXN1bHQt
Pm1fZW5jb2RlZFByaW1hcnlLZXkgPSBtaW5JREJLZXkoKTsKKworICAgIHAgPSBleHRyYWN0RW5j
b2RlZElEQktleShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7CisgICAgaWYg
KCFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFtvcHRpb25hbF0gc2VxdWVuY2UgbnVt
YmVyCisgICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSAgZGVj
b2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fc2VxdWVuY2VOdW1iZXIpOworICAgIGlmICgh
cCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBbb3B0aW9uYWxdIHByaW1hcnkga2V5Cisg
ICAgaWYgKHAgPT0gbGltaXQpCisgICAgICAgIHJldHVybiBwOworICAgIHAgPSBleHRyYWN0RW5j
b2RlZElEQktleShwLCBsaW1pdCwgJnJlc3VsdC0+bV9lbmNvZGVkUHJpbWFyeUtleSk7CisgICAg
aWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwOworfQorCitWZWN0b3I8
Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVk
VXNlcktleSwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSwgaW50NjRfdCBz
ZXF1ZW5jZU51bWJlcikKK3sKKyAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQpOworICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2Rl
KCk7CisgICAgcmV0LmFwcGVuZChlbmNvZGVkVXNlcktleSk7CisgICAgcmV0LmFwcGVuZChlbmNv
ZGVWYXJJbnQoc2VxdWVuY2VOdW1iZXIpKTsKKyAgICByZXQuYXBwZW5kKGVuY29kZWRQcmltYXJ5
S2V5KTsKKyAgICByZXR1cm4gcmV0OworfQorCitWZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5Ojpl
bmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KQoreworICAgIHJldHVybiBlbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpLCBt
aW5JREJLZXkoKSk7Cit9CisKK1ZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6OmVuY29kZU1pbktl
eShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKQoreworICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgbWluSURCS2V5KCksIG1pbklEQktleSgpKTsKK30KKworVmVjdG9yPGNoYXI+IEluZGV4
RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBtYXhJREJLZXkoKSwgbWF4SURCS2V5KCksIElOVDY0
X01BWCk7Cit9CisKK2ludCBJbmRleERhdGFLZXk6OmNvbXBhcmUoY29uc3QgSW5kZXhEYXRhS2V5
JiBvdGhlciwgYm9vbCBpZ25vcmVEdXBsaWNhdGVzKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
SWQgPj0gMCk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICBBU1NFUlQo
bV9pbmRleElkID49IDApOworICAgIGlmIChpbnQgeCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyht
X2VuY29kZWRVc2VyS2V5LCBvdGhlci5tX2VuY29kZWRVc2VyS2V5KSkKKyAgICAgICAgcmV0dXJu
IHg7CisgICAgaWYgKGlnbm9yZUR1cGxpY2F0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChpbnQgeCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhtX2VuY29kZWRQcmltYXJ5S2V5LCBvdGhl
ci5tX2VuY29kZWRQcmltYXJ5S2V5KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgcmV0dXJuIGNv
bXBhcmVJbnRzKG1fc2VxdWVuY2VOdW1iZXIsIG90aGVyLm1fc2VxdWVuY2VOdW1iZXIpOworfQor
CitpbnQ2NF90IEluZGV4RGF0YUtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUlkOworfQorCitpbnQ2
NF90IEluZGV4RGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
b2JqZWN0U3RvcmVJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOworfQorCitp
bnQ2NF90IEluZGV4RGF0YUtleTo6aW5kZXhJZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5k
ZXhJZCA+PSAwKTsKKyAgICByZXR1cm4gbV9pbmRleElkOworfQorCitQYXNzUmVmUHRyPElEQktl
eT4gSW5kZXhEYXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBr
ZXk7CisgICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9lbmNvZGVk
VXNlcktleS5lbmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCitQYXNzUmVmUHRyPElE
QktleT4gSW5kZXhEYXRhS2V5OjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SURC
S2V5PiBrZXk7CisgICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwg
bV9lbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwga2V5KTsKKyAgICByZXR1cm4ga2V5OworfQorCit9
IC8vIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQ29kaW5nLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQ29kaW5nLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJMZXZlbERCQ29kaW5nX2gKKyNkZWZpbmUgSURCTGV2
ZWxEQkNvZGluZ19oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBVU0UoTEVW
RUxEQikKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSURCS2V5OworY2xhc3MgTGV2ZWxEQlNsaWNlOworCituYW1lc3BhY2UgSURCTGV2
ZWxEQkNvZGluZyB7CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIga01pbmltdW1JbmRleElkID0gMzA7
CisKK1ZlY3RvcjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworVmVjdG9yPGNoYXI+
IG1heElEQktleSgpOworVmVjdG9yPGNoYXI+IG1pbklEQktleSgpOworVmVjdG9yPGNoYXI+IGVu
Y29kZUludChpbnQ2NF90KTsKK2ludDY0X3QgZGVjb2RlSW50KGNvbnN0IGNoYXIqIGJlZ2luLCBj
b25zdCBjaGFyKiBlbmQpOworVmVjdG9yPGNoYXI+IGVuY29kZVZhckludChpbnQ2NF90KTsKK2Nv
bnN0IGNoYXIqIGRlY29kZVZhckludChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyKiBsaW1pdCwg
aW50NjRfdCYgZm91bmRJbnQpOworVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKK1N0cmluZyBkZWNvZGVTdHJpbmcoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogZW5k
KTsKK1ZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYpOwor
Y29uc3QgY2hhciogZGVjb2RlU3RyaW5nV2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBj
aGFyKiBsaW1pdCwgU3RyaW5nJiBmb3VuZFN0cmluZyk7CitpbnQgY29tcGFyZUVuY29kZWRTdHJp
bmdzV2l0aExlbmd0aChjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGltaXRQLCBjb25zdCBj
aGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRRKTsKK1ZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUo
ZG91YmxlKTsKK2NvbnN0IGNoYXIqIGRlY29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBj
aGFyKiBsaW1pdCwgZG91YmxlKik7Cit2b2lkIGVuY29kZUlEQktleShjb25zdCBJREJLZXkmLCBW
ZWN0b3I8Y2hhcj4mIGludG8pOworVmVjdG9yPGNoYXI+IGVuY29kZUlEQktleShjb25zdCBJREJL
ZXkmKTsKK2NvbnN0IGNoYXIqIGRlY29kZUlEQktleShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFy
KiBsaW1pdCwgUmVmUHRyPElEQktleT4mIGZvdW5kS2V5KTsKK2NvbnN0IGNoYXIqIGV4dHJhY3RF
bmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVjdG9y
PGNoYXI+KiByZXN1bHQpOworaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8
Y2hhcj4mLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKworaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxE
QlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJiwgYm9vbCBpbmRleEtleXMgPSBmYWxzZSk7CisK
K2NsYXNzIEtleVByZWZpeCB7CitwdWJsaWM6CisgICAgS2V5UHJlZml4KCk7CisgICAgS2V5UHJl
Zml4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIEtleVByZWZpeCogcmVzdWx0KTsKKyAgICBWZWN0b3I8Y2hh
cj4gZW5jb2RlKCkgY29uc3Q7CisgICAgaW50IGNvbXBhcmUoY29uc3QgS2V5UHJlZml4JiBvdGhl
cikgY29uc3Q7CisKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBrR2xvYmFsTWV0YURhdGEsCisg
ICAgICAgIGtEYXRhYmFzZU1ldGFEYXRhLAorICAgICAgICBrT2JqZWN0U3RvcmVEYXRhLAorICAg
ICAgICBrRXhpc3RzRW50cnksCisgICAgICAgIGtJbmRleERhdGEsCisgICAgICAgIGtJbnZhbGlk
VHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGludDY0X3QgbV9k
YXRhYmFzZUlkOworICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGludDY0X3QgbV9p
bmRleElkOworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga0ludmFsaWRJZCA9IC0xOworfTsK
KworY2xhc3MgU2NoZW1hVmVyc2lvbktleSB7CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3Rvcjxj
aGFyPiBlbmNvZGUoKTsKK307CisKK2NsYXNzIE1heERhdGFiYXNlSWRLZXkgeworcHVibGljOgor
ICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUZy
ZWVMaXN0S2V5IHsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZUZyZWVMaXN0S2V5KCk7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIERhdGFiYXNlRnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVu
Y29kZU1heEtleSgpOworICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OworICAgIGludCBj
b21wYXJlKGNvbnN0IERhdGFiYXNlRnJlZUxpc3RLZXkmIG90aGVyKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKK307CisKK2NsYXNzIERhdGFiYXNlTmFtZUtl
eSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBz
dGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KTsKKyAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpOworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5
Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOworICAgIFN0cmlu
ZyBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyBkYXRhYmFz
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQorICAgIGludCBjb21wYXJl
KGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3RoZXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBt
X29yaWdpbjsgLy8gRklYTUU6IFN0b3JlIGVuY29kZWQgc3RyaW5ncywgb3IganVzdCBwb2ludGVy
cy4KKyAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7Cit9OworCitjbGFzcyBEYXRhYmFzZU1ldGFE
YXRhS2V5IHsKK3B1YmxpYzoKKyAgICBlbnVtIE1ldGFEYXRhVHlwZSB7CisgICAgICAgIGtPcmln
aW5OYW1lID0gMCwKKyAgICAgICAga0RhdGFiYXNlTmFtZSA9IDEsCisgICAgICAgIGtVc2VyVmVy
c2lvbiA9IDIsCisgICAgICAgIGtNYXhPYmplY3RTdG9yZUlkID0gMworICAgIH07CisKKyAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlw
ZSk7Cit9OworCitjbGFzcyBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IHsKK3B1YmxpYzoKKyAgICBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOwor
ICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25z
dDsKKyAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIGludCBjb21wYXJlKGNv
bnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKTsKKworcHJpdmF0ZToKKyAgICBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1fbWV0YURhdGFUeXBlOyAvLyBGSVhN
RTogTWFrZSB0aGlzIGEgYnl0ZS4KK307CisKK2NsYXNzIEluZGV4TWV0YURhdGFLZXkgeworcHVi
bGljOgorICAgIEluZGV4TWV0YURhdGFLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtl
eSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBj
aGFyIG1ldGFEYXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXko
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGludCBjb21w
YXJlKGNvbnN0IEluZGV4TWV0YURhdGFLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IGluZGV4SWQo
KSBjb25zdDsKKyAgICB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YURhdGFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CisgICAgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgdW5zaWduZWQgY2hhciBtX21ldGFEYXRh
VHlwZTsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkgeworcHVibGljOgorICAg
IE9iamVjdFN0b3JlRnJlZUxpc3RLZXkoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2Rl
KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlz
dEtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFy
PiBlbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0
b3JlSWQoKSBjb25zdDsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0
S2V5JiBvdGhlcik7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Cit9
OworCitjbGFzcyBJbmRleEZyZWVMaXN0S2V5IHsKK3B1YmxpYzoKKyAgICBJbmRleEZyZWVMaXN0
S2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCk7CisgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVN
YXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGlu
dCBjb21wYXJlKGNvbnN0IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsKKyAgICBpbnQ2NF90IG9i
amVjdFN0b3JlSWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJ
ZDsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgeworcHVibGljOgorICAgIC8vIEZJ
WE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1
c2UgYSBtYXBwaW5nCisgICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIENhbiB3ZSByZW1v
dmUgdGhpcz8KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKKyAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZU5h
bWVzS2V5JiBvdGhlcik7CisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0U3RvcmVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fb2JqZWN0
U3RvcmVOYW1lOyAvLyBGSVhNRTogU3RvcmUgdGhlIGVuY29kZWQgc3RyaW5nLCBvciBqdXN0IHBv
aW50ZXJzIHRvIGl0LgorfTsKKworY2xhc3MgSW5kZXhOYW1lc0tleSB7CitwdWJsaWM6CisgICAg
SW5kZXhOYW1lc0tleSgpOworICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29r
IHVwIGluZGV4IGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKKyAgICAvLyBpcyBrZXB0IGF0IGEgaGln
aGVyIGxldmVsLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3Rh
cnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleE5hbWVzS2V5KiByZXN1bHQpOworICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisgICAgaW50IGNvbXBhcmUoY29uc3Qg
SW5kZXhOYW1lc0tleSYgb3RoZXIpOworICAgIFN0cmluZyBpbmRleE5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4TmFtZTsgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIFN0cmluZyBtX2luZGV4TmFtZTsKK307CisKK2NsYXNzIE9iamVjdFN0b3JlRGF0
YUtleSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBPYmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCk7Cisg
ICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSk7CisgICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50IGNvbXBhcmUoY29u
c3QgT2JqZWN0U3RvcmVEYXRhS2V5JiBvdGhlcik7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVz
ZXJLZXkoKSBjb25zdDsKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBrU3BlY2lhbEluZGV4TnVt
YmVyOworCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OworfTsK
KworY2xhc3MgRXhpc3RzRW50cnlLZXkgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlL
ZXkqIHJlc3VsdCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2Rl
ZEtleSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYgdXNlcktleSk7CisgICAgaW50
IGNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVyKTsKKyAgICBQYXNzUmVmUHRyPElE
QktleT4gdXNlcktleSgpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qga1NwZWNp
YWxJbmRleE51bWJlcjsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNl
cktleTsKK307CisKK2NsYXNzIEluZGV4RGF0YUtleSB7CitwdWJsaWM6CisgICAgSW5kZXhEYXRh
S2V5KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIEluZGV4RGF0YUtleSogcmVzdWx0KTsKKyAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5LCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNlTnVt
YmVyID0gMCk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiB1c2VyS2V5KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1pbktleShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICBpbnQgY29tcGFyZShj
b25zdCBJbmRleERhdGFLZXkmIG90aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMpOworICAgIGlu
dDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNv
bnN0OworICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SURCS2V5
PiB1c2VyS2V5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBWZWN0b3I8Y2hh
cj4gbV9lbmNvZGVkVXNlcktleTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVkUHJpbWFyeUtl
eTsKKyAgICBpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
REJMZXZlbERCQ29kaW5nCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYg
Ly8gSURCTGV2ZWxEQkNvZGluZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwOjEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2lu
Y2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJL
ZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOworCitJREJP
YmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
CisgICAgOiBtX2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uKTsKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9y
ZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKK30K
KworU3RyaW5nIElEQk9iamVjdFN0b3JlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjpuYW1lIik7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOwor
fQorCitTdHJpbmcgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAoreworICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OmtleVBhdGgiKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5r
ZXlQYXRoKCk7Cit9CisKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4TmFtZXMoKSBjb25zdAoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6Omlu
ZGV4TmFtZXMiKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5pbmRleE5hbWVzKCk7Cit9CisKK0lE
QlRyYW5zYWN0aW9uKiBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uIik7CisgICAgcmV0dXJuIG1f
dHJhbnNhY3Rpb24uZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpnZXQiKTsKKyAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6Oklu
dmFsaWRUeXBlKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwg
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHJl
cXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBy
ZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFk
ZCIpOworICAgIGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVh
dGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVh
c2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7CisgICAgaWYgKGtleSAm
JiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBt
X2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6
OmRlbGV0ZSIpOworICAgIGlmICgha2V5UmFuZ2UpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQt
PmRlbGV0ZUZ1bmN0aW9uKGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlIik7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgeworICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgcmVxdWVzdC0+bWFya0Vh
cmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXF1ZXN0
LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jbGVh
cihyZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJJ
bmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eCIpOworICAgIGlmICghSURCSXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXQo
InVuaXF1ZSIsIHVuaXF1ZSk7CisKKyAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKKyAgICBv
cHRpb25zLmdldCgibXVsdGlFbnRyeSIsIG11bHRpRW50cnkpOworCisgICAgLy8gRklYTUU6IFdo
ZW4gQXJyYXktdHlwZSBrZXlQYXRocyBhcmUgc3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYg
a2V5UGF0aCBpcyBBcnJheSBhbmQgbXVsdGlFbnRyeSBpcyB0cnVlLgorCisgICAgUmVmUHRyPElE
QkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJ
bmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdl
IGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24g
Y29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJl
dHVybiAwOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGlu
ZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1f
aW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKKyAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwor
fQorCitQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjppbmRleCIpOworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9p
bmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIEFT
U0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgs
IHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2Eu
CisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRy
PElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2Uo
KSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwg
aW5kZXgpOworICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7Cisg
ICAgaWYgKGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1
cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAm
JiBkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgeworICAgICAgICAv
LyBGSVhNRTogTWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAg
cmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RT
dG9yZUN1cnNvcik7CisgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24s
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKKyAgICBSZWZQdHI8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5jb3VudChy
YW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CisgICAgUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdl
LnJlbGVhc2UoKSwgZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZp
bmlzaGVkKCkKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7CisKKyAg
ICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCT2JqZWN0U3RvcmVfaAorI2RlZmluZSBJREJPYmplY3RT
dG9yZV9oCisKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgor
I2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5o
IgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7
CitjbGFzcyBJREJBbnk7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCT2JqZWN0U3RvcmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBpZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZShpZGJPYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb24pKTsKKyAgICB9CisgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CisKKyAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgSURCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBhZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBwdXQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4
PiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIE9w
dGlvbnNPYmplY3QoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfSAK
KworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgT3B0
aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25D
b2RlJik7IAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRl
eHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKworcHJpdmF0ZToK
KyAgICBJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CisgICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZyb21Q
ZW5kaW5nTGlzdCgpOworCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZT4gbV9iYWNrZW5kOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4gPiBJREJJbmRl
eE1hcDsKKyAgICBJREJJbmRleE1hcCBtX2luZGV4TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKKwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9i
amVjdFN0b3JlLmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBdIElEQk9iamVjdFN0b3JlIHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmlu
ZyBuYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3Ry
aW5nQXM9TnVsbF0gRE9NU3RyaW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmdMaXN0IGluZGV4TmFtZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJ
REJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKKworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZh
bHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09w
dGlvbmFsXSBJREJLZXkga2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2Vw
dGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1l
bnRlZEFzPWRlbGV0ZUZ1bmN0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZSBr
ZXlSYW5nZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxl
dGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjbGVhcigpCisgICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJh
bmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKKyAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBJREJJbmRleCBj
cmVhdGVJbmRleChpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtP
cHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQorICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIElEQkluZGV4IGluZGV4KGluIERPTVN0cmluZyBu
YW1lKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAg
IHZvaWQgZGVsZXRlSW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5n
ZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJREJL
ZXkga2V5KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAg
fTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9z
c1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURC
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1
ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCisj
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUg
IklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJLZXlQYXRo
QmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlRy
YWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwo
KQoreworfQorCitJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25h
bWUobmFtZSkKKyAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9hdXRvSW5jcmVtZW50
KGF1dG9JbmNyZW1lbnQpCisgICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCit7CisgICAg
bG9hZEluZGV4ZXMoKTsKK30KKworSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCBhdXRvSW5jcmVtZW50KQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAg
ICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgLCBtX2lkKEludmFsaWRJZCkKKyAgICAs
IG1fbmFtZShuYW1lKQorICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2F1dG9JbmNy
ZW1lbnQoYXV0b0luY3JlbWVudCkKKyAgICAsIG1fYXV0b0luY3JlbWVudE51bWJlcigtMSkKK3sK
K30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjppbmRleE5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsg
KytpdCkKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7CisgICAgaW5kZXhO
YW1lcy0+c29ydCgpOworICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKK30KKwordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKKyAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWws
IG9iamVjdFN0b3JlLCBrZXksIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7Cisg
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOwor
ICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2Jq
ZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlk
KCksICprZXkpOworICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOworfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZh
bHVlKiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOworICAgIFZlY3Rv
cjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKKyAgICB2YWx1ZXMuYXBw
ZW5kKHZhbHVlKTsKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgIElEQktl
eVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5
UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtleXMpOworICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOworICAgIHJldHVy
biBrZXlzWzBdLnJlbGVhc2UoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluamVj
dEtleUludG9LZXlQYXRoIik7CisgICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5q
ZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2Rl
IHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7Cisg
ICAgaWYgKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFu
c2FjdGlvblB0cjsKKworICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgeworICAgICAg
ICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgp
OworICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0
aC5pc051bGwoKTsKKworICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKKyAgICAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVu
dCAmJiAha2V5KSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgeworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5
RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAg
ICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsKKyAgICAgICAg
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWF1dG9JbmNyZW1l
bnQgJiYgIWtleVBhdGhLZXkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkgeworICAgICAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIo
LTEpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
QWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwgdmFsdWUsIG9i
amVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlcklu
amVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5ICYmICFrZXktPnZh
bGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsg
KytpdCkgeworICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9
IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRoKCkpOworICAg
ICAgICAgICAgaWYgKGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgeworICAgICAgICAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIEFTU0VSVChrZXkpOworICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0
U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKKyAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRo
KHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgICAgIGlmICgh
a2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7CisgICAgICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUs
IHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAg
ICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0
J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit7
CisgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Cit9CisKK3Zv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbCIpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
ID0gcHJwVmFsdWU7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYg
KHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7CisgICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3Jl
bWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgICAgIGNvbnN0IGJvb2wg
aGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOworICAgICAgICBp
ZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAg
UmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0
KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkp
CisgICAgICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0b0luY3JlbWVudCkgeworICAgICAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNy
ZW1lbnRLZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgeworICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0
aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVj
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtl
eUNhY2hlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5z
dXJlIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNh
dGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMu
CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFs
IGVycm9yIGluc2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRlIGdlbmVyYXRv
ciBzdGF0ZSBzaG91bGQgZ28gaGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2FuLgorICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGtleSAmJiBrZXktPnZh
bGlkKCkpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIGlmIChwdXRNb2RlID09IEFk
ZE9ubHkgJiYgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0
b3JlKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRv
SW5jcmVtZW50S2V5Q2FjaGUoKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJL
ZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleXM7CisgICAg
Zm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
Y29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CisK
KyAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZh
bHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKCFpbmRleEtleSkgewor
ICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGluZGV4S2V5LT52YWxp
ZCgpKTsKKworICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGluZGV4S2V5LT50
eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5QWxsb3dlZChp
bmRleEtleS5nZXQoKSwga2V5LmdldCgpKSkgeworICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJl
c2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUiwgIk9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFu
IGluZGV4IGRvZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleC0+bXVs
dGlFbnRyeSgpICYmIGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5k
ZXhLZXktPmFycmF5KClbal0uZ2V0KCksIGtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChm
cm9tIGEga2V5UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5p
cXVlbmVzcyByZXF1aXJlbWVudHMuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5k
ZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIC8vIEJlZm9y
ZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCBy
b2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKworICAgIGlmICghb2Jq
ZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9y
ZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0
cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAvLyBGSVhNRTogVGhl
IEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNv
ZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKKyAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaSA9
IDA7CisgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsr
aSkgeworICAgICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4ID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQorICAgICAgICAgICAgY29u
dGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90
IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCisKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RTdG9yZS0+bV9k
YXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZp
ZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ug
c3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkv
TyBlcnJvcnMuCisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRp
bmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+
YWJvcnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
aW5kZXhLZXlzW2ldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGluZGV4S2V5ID0gaW5kZXhLZXlzW2ldOworCisgICAgICAgIGlmICghaW5kZXgtPm11bHRp
RW50cnkoKSB8fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAg
ICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9y
UmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRl
eC0+aWQoKSwgKmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMg
bm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KKyAgICAgICAg
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFi
bGUgc3RvcmFnZS4iKSk7CisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4LT5tdWx0aUVudHJ5KCkpOworICAgICAgICAgICAgQVNT
RVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRl
eERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlk
KCksIGluZGV4LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRh
YmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQg
dG8gSS9PIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
ICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICAgICAg
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKKyAgICBSZWZQ
dHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJL
ZXlSYW5nZTo6b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGRlbGV0ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzLCB0cmFu
c2FjdGlvbiwgZWMpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOworICAgIGlmICh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRo
aXM7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKworICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJl
Y29yZElkZW50aWZpZXI7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJh
Y2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgp
LCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9
IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisKKyAg
ICAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5k
ZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0
ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgorCisgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCks
IHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworCisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9y
ZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yLT5jbG9zZSgpOworICAgIH0KKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpj
bGVhciIpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpS
RUFEX09OTFkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZ
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y2xlYXJJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQorICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Cit9CisKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBvYmplY3RTdG9y
ZS0+bV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Cit9CisKK25hbWVzcGFjZSB7Citj
bGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJh
Y2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
KQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3Rv
cmVJZCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgY2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOworICAgICAgICBSZWZQ
dHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0
KCksIG1faW5kZXgtPmtleVBhdGgoKSk7CisKKyAgICAgICAgaWYgKCFpbmRleEtleSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghbV9pbmRleC0+bXVsdGlFbnRyeSgp
IHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKKyAgICAgICAgICAg
IGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5w
dXRJbmRleERhdGFGb3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXgtPmlkKCksICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1faW5k
ZXgtPm11bHRpRW50cnkoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9
PSBJREJLZXk6OkFycmF5VHlwZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZGV4S2V5LT5hcnJheSgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2luZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUu
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZpZXIpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIElEQkJhY2tpbmdT
dG9yZSYgbV9iYWNraW5nU3RvcmU7CisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1f
aW5kZXg7Cit9OworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRl
SW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQoreworICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUs
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9y
ZS5mb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2Fs
bGJhY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5hbWUu
aXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5T
SUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9pbmRleGVzLmNv
bnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNU
UkFJTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHRyYW5zYWN0aW9u
LT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURC
SW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNl
SWQsIHRoaXMsIG5hbWUsIG1fbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAg
ICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5h
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwg
dHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CisgICAg
cmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBpZDsKKyAgICBpZiAoIW9i
amVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRo
KCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5k
ZXgtPnNldElkKGlkKTsKKworICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1f
YmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9p
ZCwgaW5kZXgpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwor
fQorCitQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1faW5kZXhl
cy5nZXQobmFtZSk7CisgICAgaWYgKCFpbmRleCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
cmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICh0
cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOworICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJh
bnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCisgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZElu
ZGV4VG9NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwg
aW5kZXgpKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbmRleGVzLnJl
bW92ZShuYW1lKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit7CisgICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJ
bmRleChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgt
PmlkKCkpOworICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOworICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSA9IHBycFJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOworICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3Ms
IHRyYW5zYWN0aW9uUHRyKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KK30KKwordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9u
Pih0bXBEaXJlY3Rpb24pOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBi
YWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPm9wZW5PYmpl
Y3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQo
KSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpu
dWxsVmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0
ZShiYWNraW5nU3RvcmVDdXJzb3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0
U3RvcmUuZ2V0KCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkp
OworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50
Iik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7
CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFs
Iik7CisgICAgdWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIGlmICghYmFj
a2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRvIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9IHdoaWxlIChiYWNraW5nU3Rv
cmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOworCisgICAgYmFja2luZ1N0b3JlQ3Vyc29y
LT5jbG9zZSgpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpsb2FkSW5kZXhlcygpCit7CisgICAgVmVjdG9yPGludDY0X3Q+IGlkczsKKyAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0
b3I8Ym9vbD4gdW5pcXVlRmxhZ3M7CisgICAgVmVjdG9yPGJvb2w+IG11bHRpRW50cnlGbGFnczsK
KyAgICBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywg
bmFtZXMsIGtleVBhdGhzLCB1bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsKKworICAgIEFT
U0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNp
emUoKSA9PSBpZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6ZSgpID09IGlk
cy5zaXplKCkpOworICAgIEFTU0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXpl
KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIG1faW5kZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSht
X2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ld
LCBtX25hbWUsIGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRyeUZsYWdzW2ld
KSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9t
TWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQoreworICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4
LT5uYW1lKCkpKTsKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+bmFt
ZSgpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFw
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
KQoreworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9IGluZGV4Owor
ICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleFB0ci0+bmFt
ZSgpKSk7CisgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwg
aW5kZXhQdHIpOworfQorCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCit7CisgICAgaWYgKG1fYXV0b0luY3JlbWVudE51
bWJlciA+IDApCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNy
ZW1lbnROdW1iZXIrKyk7CisKKyAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fYmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihtX2RhdGFiYXNl
SWQsIGlkKCkpKTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVt
ZW50TnVtYmVyKyspOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCisjZGVmaW5lIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGxfaAorCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJCYWNraW5nU3RvcmU7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xh
c3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIGlkLCBu
YW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CisKKyAgICBzdGF0aWMgY29uc3Qg
aW50NjRfdCBJbnZhbGlkSWQgPSAwOworICAgIGludDY0X3QgaWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1faWQgIT0gSW52YWxpZElkKTsKKyAgICAgICAgcmV0dXJuIG1faWQ7Cisg
ICAgfQorICAgIHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICBpbnQ2
NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWQ7IH0KKworICAgIHZp
cnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3JlbWVudDsg
fQorCisgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3Jl
JiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4pOworCitwcml2YXRlOgorICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KTsKKyAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSos
IGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2b2lkIGxvYWRJbmRleGVzKCk7Cisg
ICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICB2b2lkIHJl
c2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsg
fQorCisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVJbmRleElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIG9wZW5D
dXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisK
KyAgICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRh
c2tzLgorICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkSW5kZXhUb01hcChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQg
cmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Cisg
ICAgaW50NjRfdCBtX2lkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fa2V5UGF0
aDsKKyAgICBib29sIG1fYXV0b0luY3JlbWVudDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFwOworICAgIEluZGV4TWFw
IG1faW5kZXhlczsKKyAgICBpbnQgbV9hdXRvSW5jcmVtZW50TnVtYmVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlz
aW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2UuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2VfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBE
T01TdHJpbmdMaXN0OworY2xhc3MgSURCQ2FsbGJhY2tzOworY2xhc3MgSURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisKKyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBBZGRPclVwZGF0ZSwKKyAgICAg
ICAgQWRkT25seSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisgICAgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwor
I2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOjEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5o
IgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorCit1c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOworCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGhy
ZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRy
YW5zYWN0aW9ucygpCit7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlIFZlY3RvciB0byBTY3JpcHRF
eGVjdXRpb25Db250ZXh0IHRvIGF2b2lkIGRlYWxpbmcgd2l0aAorICAgIC8vIHRocmVhZC1sb2Nh
bCBzdG9yYWdlLgorICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhUaHJlYWRTcGVjaWZp
YzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiosIHRyYW5zYWN0aW9u
cyA9IG5ldyBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKj4gPik7CisgICAgcmV0dXJuICp0cmFuc2FjdGlvbnM7Cit9CisKK3ZvaWQgSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgdHJhbnNhY3Rpb25zKCktPmFw
cGVuZCh0cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
cjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24pCit7CisgICAgVGhyZWFkU3BlY2lmaWM8VmVjdG9yPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSo+ID4mIHRyYW5zYWN0aW9uTGlzdCA9IHRyYW5zYWN0aW9ucygp
OworICAgIHNpemVfdCBwb3MgPSB0cmFuc2FjdGlvbkxpc3QtPmZpbmQodHJhbnNhY3Rpb24pOwor
ICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0
aW9uTGlzdC0+cmVtb3ZlKHBvcyk7Cit9CisKK3ZvaWQgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvcjo6YWJvcnRQZW5kaW5nVHJhbnNhY3Rpb25zKCkKK3sKKyAgICBUaHJlYWRTcGVjaWZpYzxW
ZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0
ID0gdHJhbnNhY3Rpb25zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2FjdGlv
bnMoKS0+c2l6ZSgpOyArK2kpCisgICAgICAgIHRyYW5zYWN0aW9uTGlzdC0+YXQoaSktPmFib3J0
KCk7CisgICAgLy8gRklYTUU6IEV4ZXJjaXNlIHRoaXMgY2FsbCB0byBjbGVhcigpIGluIGEgbGF5
b3V0IHRlc3QuCisgICAgdHJhbnNhY3Rpb25MaXN0LT5jbGVhcigpOworfQorCit9OworI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvcl9oCisjZGVmaW5lIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOworCisvLyBUaGlzIGNsYXNzIGtlZXBz
IHRyYWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQKKy8v
IEphdmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rpb24gaXMgJ3BlbmRpbmcn
IGlmIG5vIGFzeW5jaHJvbm91cworLy8gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBxdWV1ZWQgZm9y
IGl0IChlLmcuIGFuIElEQk9iamVjdFN0b3JlOjpwdXQoKSBvciBzaW1pbGFyKS4KKy8vIEFsbCBw
ZW5kaW5nIHRyYW5zYWN0aW9ucyBhcmUgYWJvcnRlZCBhcyBzb29uIGFzIGV4ZWN1dGlvbiByZXR1
cm5zIGZyb20KKy8vIHRoZSBzY3JpcHQgZW5naW5lLgorCitjbGFzcyBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhZGRQZW5kaW5nVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgc3RhdGljIHZvaWQg
cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OworICAgIHN0YXRpYyB2b2lkIGFib3J0UGVuZGluZ1RyYW5zYWN0aW9ucygpOworCitwcml2YXRl
OgorICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IoKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5k
aWYgLy8gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA5NDYx
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwOjEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IklEQlJlcXVlc3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwg
c291cmNlLCB0cmFuc2FjdGlvbikpKTsKKyAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsK
KyAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNv
dXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0
KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX2Vycm9yQ29kZSgwKQorICAgICwgbV9zb3VyY2Uoc291
cmNlKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fcmVhZHlTdGF0
ZShMT0FESU5HKQorICAgICwgbV9yZXF1ZXN0RmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2N1cnNv
ckZpbmlzaGVkKGZhbHNlKQorICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKKyAgICAsIG1f
Y3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkK
KyAgICAsIG1fY3Vyc29yKDApCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKKyAgICAgICAg
bV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworICAgICAgICBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpKTsKKyAgICB9Cit9CisKK0lEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKK3sK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUgfHwgbV9yZWFkeVN0YXRlID09IEVhcmx5
RGVhdGggfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKG1fdHJhbnNhY3Rp
b24pCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOworfQor
CitQYXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkgeworICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICByZXR1cm4gbV9yZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlJl
cXVlc3Q6OmVycm9yQ29kZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9y
ZWFkeVN0YXRlICE9IERPTkUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1f
ZXJyb3JDb2RlOworfQorCitTdHJpbmcgSURCUmVxdWVzdDo6d2Via2l0RXJyb3JNZXNzYWdlKEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Cisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdl
OworfQorCitQYXNzUmVmUHRyPElEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zb3VyY2U7Cit9CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElE
QlJlcXVlc3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlv
bjsKK30KKwordW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om1h
cmtFYXJseURlYXRoKCkKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IExPQURJTkcpOwor
ICAgIG1fcmVhZHlTdGF0ZSA9IEVhcmx5RGVhdGg7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6cmVz
ZXRSZWFkeVN0YXRlKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQo
IW1fcmVxdWVzdEZpbmlzaGVkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7CisgICAgaWYgKG1f
cmVhZHlTdGF0ZSAhPSBET05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3JlYWR5
U3RhdGUgPSBMT0FESU5HOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgbV9lcnJvckNvZGUg
PSAwOworICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CisKKyAgICBJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi0+
YmFja2VuZCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitJREJBbnkqIElEQlJlcXVlc3Q6
OnNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOworfQorCit2b2lkIElEQlJl
cXVlc3Q6OmFib3J0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IExPQURJTkcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCByZW1v
dmVkID0gZXZlbnRRdWV1ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorICAgIG1f
ZW5xdWV1ZWRFdmVudHMuY2xlYXIoKTsKKworICAgIG1fZXJyb3JDb2RlID0gMDsKKyAgICBtX2Vy
cm9yTWVzc2FnZSA9IFN0cmluZygpOworICAgIG1fcmVzdWx0LmNsZWFyKCk7CisgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFCT1JUX0VS
UiwgIlRoZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCwgc28gdGhlIHJlcXVlc3QgY2Fubm90IGJl
IGZ1bGZpbGxlZC4iKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yVHlwZShJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQVNT
RVJUKG1fY3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vy
c29yVHlwZSk7CisgICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKK30KKwordm9pZCBJREJS
ZXF1ZXN0OjpzZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IGN1cnNvcikKK3sKKyAgICBB
U1NFUlQoIW1fY3Vyc29yKTsKKyAgICBtX2N1cnNvciA9IGN1cnNvcjsKK30KKwordm9pZCBJREJS
ZXF1ZXN0OjpmaW5pc2hDdXJzb3IoKQoreworICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOwor
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTE9BRElORykKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNo
ZWQgPSB0cnVlOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPiBlcnJvcikKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJy
b3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgbV9lcnJvckNvZGUgPSBlcnJv
ci0+Y29kZSgpOworICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKKyAgICBt
X2N1cnNvci5jbGVhcigpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2
ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQoreworICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhET01TdHJpbmdMaXN0KSIp
OworICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYg
IW1fcmVzdWx0KTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3Qp
OworICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Cit9CisKK3ZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4g
YmFja2VuZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJz
b3IpIik7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwo
KSAmJiAhbV9yZXN1bHQpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOworICAgIFJlZlB0cjxJREJDdXJzb3I+
IGN1cnNvcjsKKyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShi
YWNrZW5kLCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5k
LCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisKKyAgICBzZXRS
ZXN1bHRDdXJzb3IoY3Vyc29yLCBtX2N1cnNvclR5cGUpOworCisgICAgZW5xdWV1ZUV2ZW50KGNy
ZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCit7CisgICAgSURC
X1RSQUNFKCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7CisgICAgQVNTRVJU
KCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwor
ICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBJ
REJEYXRhYmFzZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCk7Cisg
ICAgaWRiRGF0YWJhc2UtPm9wZW4oKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
aWRiRGF0YWJhc2UucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2
ZW50KCkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktl
eT4gaWRiS2V5KQoreworICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQktl
eSkiKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgp
ICYmICFtX3Jlc3VsdCk7CisgICAgaWYgKGlkYktleSAmJiBpZGJLZXktPnZhbGlkKCkpCisgICAg
ICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5KTsKKyAgICBlbHNlCisgICAgICAg
IG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmlu
ZWRWYWx1ZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQor
Cit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gcHJwQmFja2VuZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhJREJUcmFuc2FjdGlvbikiKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYm
IG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisKKyAgICBp
ZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAg
ICAgIGJhY2tlbmQtPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdl
dCgpKTsKKyAgICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOworICAgIG1f
dHJhbnNhY3Rpb24gPSBmcm9udGVuZDsKKworICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6SURCRGF0YWJhc2VUeXBlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisgICAgbV9zb3VyY2UtPmlk
YkRhdGFiYXNlKCktPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihmcm9udGVuZC5nZXQoKSk7
CisKKyAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNh
Y3Rpb24obV90cmFuc2FjdGlvbi0+YmFja2VuZCgpKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGUoZnJvbnRlbmQucmVsZWFzZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3Vj
Y2Vzc0V2ZW50KCkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQoreworICAgIElE
Ql9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkiKTsK
KyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFt
X3Jlc3VsdCk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0
VmFsdWUpOworICAgIG1fY3Vyc29yLmNsZWFyKCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGlu
dWF0aW9uKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250
aW51YXRpb24iKTsKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgQVNTRVJUKG1fY3Vyc29yKTsKKyAgICBzZXRSZXN1
bHRDdXJzb3IobV9jdXJzb3IsIG1fY3Vyc29yVHlwZSk7CisgICAgbV9jdXJzb3IuY2xlYXIoKTsK
KyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQorCitib29sIElEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIGFu
IGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFz
IGEgb3IgY2FuCisgICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBl
dmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCisgICAgLy8gICAgICAgIHVz
ZXIgZ2VuZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KKyAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlz
aGVkIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK3ZvaWQg
SURCUmVxdWVzdDo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAg
aWYgKG1fY29udGV4dFN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dFN0
b3BwZWQgPSB0cnVlOworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTE9BRElORykKKyAgICAgICAg
bWFya0Vhcmx5RGVhdGgoKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIElEQlJl
cXVlc3Q6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9ySURCUmVxdWVzdDsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURC
UmVxdWVzdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCitib29sIElEQlJl
cXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURC
X1RSQUNFKCJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7CisgICAgQVNTRVJUKCFtX3JlcXVl
c3RGaW5pc2hlZCk7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQo
bV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwgRE9ORSgl
ZCksIHdhcyAlZCIsIERPTkUsIG1fcmVhZHlTdGF0ZSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9O
RTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5n
ZXQoKSkKKyAgICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOworICAgIH0KKwor
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKKyAgICB0YXJnZXRzLmFw
cGVuZCh0aGlzKTsKKyAgICBpZiAobV90cmFuc2FjdGlvbikgeworICAgICAgICB0YXJnZXRzLmFw
cGVuZChtX3RyYW5zYWN0aW9uKTsKKyAgICAgICAgLy8gSWYgdGhlcmUgZXZlciBhcmUgZXZlbnRz
IHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGJ1dAorICAgICAgICAvLyB0aGF0
IGRvIG5vdCBoYXZlIGEgdHJhbnNhY3Rpb24sIHRoZW4gdGhpcyB3aWxsIG5vdCB3b3JrIGFuZCB3
ZSBuZWVkCisgICAgICAgIC8vIHRoaXMgb2JqZWN0IHRvIGFjdHVhbGx5IGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlIGRhdGFiYXNlICh0byBlbnN1cmUKKyAgICAgICAgLy8gaXQgc3RheXMgYWxpdmUp
LgorICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKKyAgICBpZiAobV9yZXN1bHQp
IHsKKyAgICAgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBl
KQorICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7Cisg
ICAgICAgIGVsc2UgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRo
VmFsdWVUeXBlKQorICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vy
c29yV2l0aFZhbHVlKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3Vz
dG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2Uu
CisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8
fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCk7CisgICAgYm9vbCBkb250UHJldmVudERl
ZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRz
KTsKKworICAgIC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9u
QmxvY2tlZCBldmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+dHlw
ZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBt
X2N1cnNvckZpbmlzaGVkKSkKKyAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOworCisg
ICAgaWYgKGN1cnNvclRvTm90aWZ5KQorICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1Y2Nl
c3NIYW5kbGVyQ2FsbGJhY2soKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CisgICAgICAg
IC8vIElmIGFuIGVycm9yIGV2ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4u
CisgICAgICAgIGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCkKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQo
KS0+YWJvcnQoKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5kaWRDb21wbGV0
ZVRhc2tFdmVudHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKK30K
Kwordm9pZCBJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKK3sK
KyAgICBpZiAobV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LT5hYm9ydCgpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKKworICAg
IGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKworICAgIEV2
ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVl
dWUoKTsKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworCisgICAgaWYgKGV2ZW50UXVldWUt
PmVucXVldWVFdmVudChldmVudC5nZXQoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBw
ZW5kKGV2ZW50KTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdl
dERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFy
Z2V0RGF0YSogSURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1
cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1
cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yLCBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpIHsKKyAgICAgICAgbV9yZXN1bHQgPSBJREJB
bnk6OmNyZWF0ZShwcnBDdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZyb21DdXJzb3IocHJw
Q3Vyc29yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lv
biAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oOjEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCUmVxdWVzdF9oCisjZGVm
aW5lIElEQlJlcXVlc3RfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCQW55Lmgi
CisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCVHJhbnNhY3Rpb247CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNz
IElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1
YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7
CisKKyAgICBQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAg
IFN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0OworCisgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURM
CisgICAgZW51bSBSZWFkeVN0YXRlIHsKKyAgICAgICAgTE9BRElORyA9IDEsCisgICAgICAgIERP
TkUgPSAyLAorICAgICAgICBFYXJseURlYXRoID0gMworICAgIH07CisgICAgdW5zaWduZWQgc2hv
cnQgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihzdWNjZXNzKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9y
KTsKKworICAgIHZvaWQgbWFya0Vhcmx5RGVhdGgoKTsKKyAgICBib29sIHJlc2V0UmVhZHlTdGF0
ZShJREJUcmFuc2FjdGlvbiopOworICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKyAgICB2b2lkIHNldEN1cnNvcihQYXNzUmVmUHRy
PElEQkN1cnNvcj4pOworICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CisgICAgSURCQW55KiBzb3Vy
Y2UoKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICAvLyBJREJDYWxsYmFja3MKKyAgICB2aXJ0
dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKyAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOworICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NX
aXRoQ29udGludWF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRj
aChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIE5vdCBp
bXBsZW1lbnRlZC4gQ2FsbGJhY2sgc2hvdWxkIG5vdCByZWFjaCB0aGUgcmVuZGVyZXIgc2lkZS4K
KyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVSUklERTsKKworICAgIC8vIEV2ZW50VGFyZ2V0Cisg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
Pik7CisgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQs
IGVjKTsgfQorICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVy
KCk7CisKKyAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7
CisgICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisK
K3Byb3RlY3RlZDoKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbiopOworICAgIHZvaWQgZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsK
KyAgICB1bnNpZ25lZCBzaG9ydCBtX2Vycm9yQ29kZTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3Nh
Z2U7CisKK3ByaXZhdGU6CisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJn
ZXREYXRhKCk7CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpOworCisgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+
LCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKworICAgIFJlZlB0cjxJ
REJBbnk+IG1fc291cmNlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKKworICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9yZXF1ZXN0Rmlu
aXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHM/
IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2N1cnNvckZpbmlzaGVkOworICAg
IGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5x
dWV1ZWRFdmVudHM7CisKKyAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwg
YmUgYSBjdXJzb3IuCisgICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBt
X2N1cnNvclR5cGU7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7CisKKyAgICBFdmVu
dFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElE
QlJlcXVlc3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmlkbDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRXZlbnRU
YXJnZXQKKyAgICBdIElEQlJlcXVlc3QgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURC
QW55IHJlc3VsdAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2Rl
CisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1VbmRlZmlu
ZWRdIERPTVN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UKKyAgICAgICAgICAgIGdldHRlciByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElE
QkFueSBzb3VyY2U7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbjsKKworICAgICAgICAvLyBTdGF0ZXMKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgTE9BRElORyA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTkUgPSAy
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsK
KworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25z
dWNjZXNzOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAg
ICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBF
dmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
W09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29s
ZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50
RXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhY2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYWNpbmcuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYWNpbmcuaDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIElEQlRyYWNpbmdfaAorI2RlZmluZSBJREJUcmFjaW5nX2gKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisjZGVmaW5lIElEQl9UUkFDRShhKSBUUkFDRV9FVkVOVDAoIklu
ZGV4ZWREQiIsIChhKSk7CisKKyNlbHNlCisKKyNkZWZpbmUgSURCX1RSQUNFKGEpICgodm9pZCkw
KQorCisjZW5kaWYgLy8gIFBMQVRGT1JNKENIUk9NSVVNKQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFjaW5nX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5j
bHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
SURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIK
KyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIp
Cit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihhZG9wdFJlZihuZXcg
SURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwgZGIpKSk7CisgICAgdHJhbnNhY3Rpb24t
PnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7Cit9
CisKK0lEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCRGF0YWJhc2UqIGRiKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRo
aXMpCisgICAgLCBtX2JhY2tlbmQoYmFja2VuZCkKKyAgICAsIG1fZGF0YWJhc2UoZGIpCisgICAg
LCBtX21vZGUobV9iYWNrZW5kLT5tb2RlKCkpCisgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQo
ZmFsc2UpCisgICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX2Jh
Y2tlbmQpOworICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFu
c2FjdGlvbihtX2JhY2tlbmQuZ2V0KCkpOworfQorCitJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5z
YWN0aW9uKCkKK3sKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFu
c2FjdGlvbjo6YmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsK
K30KKworYm9vbCBJREJUcmFuc2FjdGlvbjo6ZmluaXNoZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uRmluaXNoZWQ7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlRyYW5zYWN0
aW9uOjptb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb2RlOworfQorCitJREJEYXRhYmFz
ZSogSURCVHJhbnNhY3Rpb246OmRiKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS5n
ZXQoKTsKK30KKworUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKG1fdHJhbnNhY3Rpb25GaW5pc2hlZCkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChu
YW1lKTsKKyAgICBpZiAoaXQgIT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVj
KTsKKyAgICBpZiAoIW9iamVjdFN0b3JlQmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZWMpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlz
KTsKKyAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIHJldHVy
biBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVj
dFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsK
KyAgICBtX29iamVjdFN0b3JlTWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVN
YXAucmVtb3ZlKG5hbWUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCit7Cisg
ICAgaWYgKG1fdHJhbnNhY3Rpb25GaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7CisgICAgaWYgKG1fYmFja2VuZCkKKyAg
ICAgICAgbV9iYWNrZW5kLT5hYm9ydCgpOworfQorCitJREJUcmFuc2FjdGlvbjo6T3BlbkN1cnNv
ck5vdGlmaWVyOjpPcGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4g
dHJhbnNhY3Rpb24sIElEQkN1cnNvciogY3Vyc29yKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbiksCisgICAgICBtX2N1cnNvcihjdXJzb3IpCit7CisgICAgbV90cmFuc2FjdGlvbi0+
cmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKK30KKworSURCVHJhbnNhY3Rpb246Ok9wZW5D
dXJzb3JOb3RpZmllcjo6fk9wZW5DdXJzb3JOb3RpZmllcigpCit7CisgICAgbV90cmFuc2FjdGlv
bi0+dW5yZWdpc3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVu
Q3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5yZW1v
dmUoY3Vyc29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xvc2VPcGVuQ3Vyc29ycygp
Cit7CisgICAgSGFzaFNldDxJREJDdXJzb3IqPiBjdXJzb3JzOworICAgIGN1cnNvcnMuc3dhcCht
X29wZW5DdXJzb3JzKTsKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yKj46Oml0ZXJhdG9yIGkg
PSBjdXJzb3JzLmJlZ2luKCk7IGkgIT0gY3Vyc29ycy5lbmQoKTsgKytpKQorICAgICAgICAoKmkp
LT5jbG9zZSgpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoSURC
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBtX2NoaWxkUmVxdWVzdHMuYWRkKHJlcXVlc3QpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIC8vIElmIHdlIGFib3J0ZWQgdGhlIHJlcXVlc3QsIGl0IHdpbGwgYWxy
ZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVl
c3QpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKK3sKKyAgICBBU1NFUlQo
IW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3Rz
LmJlZ2luKCk7CisgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CisgICAg
ICAgIHJlcXVlc3QtPmFib3J0KCk7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBJREJUcmFu
c2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKKworICAg
IGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpv
bkNvbXBsZXRlKCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAg
aWYgKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpCisgICAgICAgIG1f
ZGF0YWJhc2UtPmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKHRoaXMpOworICAgIGNsb3Nl
T3BlbkN1cnNvcnMoKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVucXVldWVFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30K
KworYm9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBs
b25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4KKyAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRv
IHVzIG9yIGFueSBjaGlsZCByZXF1ZXN0IG9iamVjdCBhbmQgYW55IG9mIHRob3NlIGhhdmUKKyAg
ICAvLyAgICAgICAgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGlzICBpbiBvcmRlciB0byBoYW5kbGUg
dXNlciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgorICAgIHJldHVybiAhbV90cmFuc2FjdGlv
bkZpbmlzaGVkIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgSURCVHJhbnNhY3Rpb246OmludGVyZmFjZU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9ySURCVHJhbnNhY3Rpb247
Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlz
aGVkKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQo
ZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25GaW5pc2hlZCA9IHRy
dWU7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoSURCT2JqZWN0
U3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBt
X29iamVjdFN0b3JlTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2Fj
dGlvbkZpbmlzaGVkKCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworCisgICAgVmVj
dG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRo
aXMpOworICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOworCisgICAgLy8gRklYTUU6IFdoZW4gd2Ug
YWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0
byBjaGFuZ2UuCisgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBs
ZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Cisg
ICAgcmV0dXJuIElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdl
dHMpOworfQorCitib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3JlIHRoZSBmaXJzdCBy
ZXF1ZXN0IGlzIHNjaGVkdWxlCisgICAgLy8gICAgICAgIGFuZCBhZnRlciB0aGUgY29tcGxldGUv
YWJvcnQgZXZlbnQgaXMgZW5xdWV1ZWQuCisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25GaW5pc2hl
ZDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgQWN0aXZlRE9NT2Jq
ZWN0OjpzdG9wKCk7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAgICBhYm9ydCgp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV90cmFuc2FjdGlvbkZpbmlz
aGVkLCAiQSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9m
IHR5cGUgJXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAg
ICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQpOworfQorCitFdmVudFRhcmdldERhdGEq
IElEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgJKHJldmlz
aW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5o
OjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
QlRyYW5zYWN0aW9uX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25faAorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSURCQ3Vyc29yOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJPYmplY3RTdG9yZTsK
KworY2xhc3MgSURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25DYWxsYmFja3Ms
IHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJEYXRhYmFzZSopOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uKCk7CisKKyAgICBlbnVt
IE1vZGUgeworICAgICAgICBSRUFEX09OTFkgPSAwLAorICAgICAgICBSRUFEX1dSSVRFID0gMSwK
KyAgICAgICAgVkVSU0lPTl9DSEFOR0UgPSAyCisgICAgfTsKKworICAgIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OworICAgIGJvb2wgZmluaXNoZWQoKSBj
b25zdDsKKworICAgIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdDsKKyAgICBJREJEYXRhYmFz
ZSogZGIoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFib3J0KCk7
CisKKyAgICBjbGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
T3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+LCBJREJDdXJzb3Iq
KTsKKyAgICAgICAgfk9wZW5DdXJzb3JOb3RpZmllcigpOworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICAgICAgSURCQ3Vyc29y
KiBtX2N1cnNvcjsKKyAgICB9OworCisgICAgdm9pZCByZWdpc3RlclJlcXVlc3QoSURCUmVxdWVz
dCopOworICAgIHZvaWQgdW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOworICAgIHZvaWQg
b2JqZWN0U3RvcmVDcmVhdGVkKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+KTsKKyAgICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmKTsKKworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoY29tcGxldGUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoZXJyb3IpOworCisgICAgLy8gSURCVHJhbnNhY3Rpb25DYWxsYmFja3MKKyAg
ICB2aXJ0dWFsIHZvaWQgb25BYm9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7
CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBp
bnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KKworICAgIC8vIEFjdGl2ZURPTU9iamVj
dAorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzPjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rp
b25DYWxsYmFja3M+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+LCBJREJEYXRhYmFzZSopOworCisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4pOworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgdm9pZCByZWdp
c3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3IqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFy
Z2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdl
dERhdGEoKTsKKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1f
YmFja2VuZDsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgdW5zaWdu
ZWQgc2hvcnQgbV9tb2RlOworICAgIGJvb2wgbV90cmFuc2FjdGlvbkZpbmlzaGVkOyAvLyBJcyBp
dCBwb3NzaWJsZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzIG9yIGFsbG93IGFueSBu
ZXcgcmVxdWVzdHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2NvbnRleHRT
dG9wcGVkOworCisgICAgTGlzdEhhc2hTZXQ8SURCUmVxdWVzdCo+IG1fY2hpbGRSZXF1ZXN0czsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gPiBJ
REJPYmplY3RTdG9yZU1hcDsKKyAgICBJREJPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlTWFw
OworCisgICAgSGFzaFNldDxJREJDdXJzb3IqPiBtX29wZW5DdXJzb3JzOworCisgICAgRXZlbnRU
YXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJU
cmFuc2FjdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVE
T01PYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBJREJUcmFuc2FjdGlvbiB7Cisg
ICAgICAgIC8vIE1vZGVzCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9
IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfV1JJVEUgPSAxOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0NIQU5HRSA9IDI7CisKKyAgICAgICAgLy8g
UHJvcGVydGllcworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgbW9k
ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkRhdGFiYXNlIGRiOworICAgICAgICAv
LyBNZXRob2RzCisgICAgICAgIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlIChpbiBET01TdHJp
bmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOworICAg
ICAgICB2b2lkIGFib3J0ICgpOworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25jb21wbGV0ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAg
ICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZl
bnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJv
b2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpIAorICAgICAgICAgICAgcmFpc2VzKEV2
ZW50RXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVk
IHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMs
IG1vZGUsIGRhdGFiYXNlKSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1f
b2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAs
IG1fc3RhdGUoVW51c2VkKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fdHJh
bnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVUcmFuc2FjdGlvbigpKQor
ICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tU
aW1lckZpcmVkKQorICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ0V2ZW50cygw
KQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3JlTmFtZXMpOworICAgIEFTU0VSVChtX21vZGUg
PT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFIHx8ICFtX29iamVjdFN0b3JlTmFtZXMt
PmlzRW1wdHkoKSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5k
aWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBi
ZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRo
ZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7
Cit9CisKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgLy8gRG9lcyBhIGxpbmVhciBzZWFyY2gsIGJ1dCBpdCByZWFs
bHkgc2hvdWxkbid0IGJlIHRoYXQgc2xvdyBpbiBwcmFjdGljZS4KKyAgICBpZiAobV9tb2RlICE9
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSAmJiAhbV9vYmplY3RTdG9yZU5hbWVzLT5j
b250YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
Rk9VTkRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2UtPm9iamVj
dFN0b3JlKG5hbWUpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHJpZ2h0
IG5vdyBiZWFjdXNlIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb3VsZCBtb2RpZnkgdGhpbmdz
CisgICAgLy8gICAgICAgIGJldHdlZW4gaXRzIGNyZWF0aW9uICh3aGVyZSBhbm90aGVyIGNoZWNr
IG9jY3VycykgYW5kIHRoZSAub2JqZWN0U3RvcmUgY2FsbC4KKyAgICAvLyAgICAgICAgVGhlcmUn
cyBhIGJ1ZyB0byBtYWtlIHRoaXMgaW1wb3NzaWJsZSBpbiB0aGUgc3BlYy4gV2hlbiB3ZSBtYWtl
IGl0IGltcG9zc2libGUgaGVyZSwgd2UKKyAgICAvLyAgICAgICAgY2FuIHJlbW92ZSB0aGlzIGNo
ZWNrLgorICAgIGlmICghb2JqZWN0U3RvcmUpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJl
dHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9y
dFRhc2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoYWJvcnRUYXNr
KQorICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKworICAgIGlm
IChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0Iik7CisgICAgaWYgKG1f
c3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzUnVubmlu
ZyA9IG1fc3RhdGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0
aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBh
Ym9ydCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBr
ZWVwIG91cnNlbHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4K
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKworICAg
IG1fc3RhdGUgPSBGaW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisgICAgbV90YXNr
RXZlbnRUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgaWYgKHdh
c1J1bm5pbmcpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBS
dW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCisgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVl
LmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgbV9h
Ym9ydFRhc2tRdWV1ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygw
KTsKKyAgICB9CisKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkFib3J0KCk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRG
aW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uRmluaXNoZWQodGhpcyk7CisgICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tl
bmRJbXBsKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJD
dXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1
cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWRkUGVuZGluZ0V2
ZW50cyhpbnQgbikKK3sKKyAgICBtX3BlbmRpbmdFdmVudHMgKz0gbjsKKyAgICBBU1NFUlQobV9w
ZW5kaW5nRXZlbnRzID49IDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmRpZENvbXBsZXRlVGFza0V2ZW50cygpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IEFTU0VSVChtX3BlbmRpbmdFdmVudHMpOworICAgIG1fcGVuZGluZ0V2ZW50cy0tOworCisgICAg
aWYgKCFtX3Rhc2tFdmVudFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGFza0V2ZW50VGlt
ZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OnJ1bigpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUg
PT0gUnVubmluZyk7CisgICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKKworICAg
IG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKKwor
ICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
b29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpjb21taXQoKQoreworICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y29tbWl0Iik7CisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0
IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVw
cyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNl
bHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKKyAgICBBU1NFUlQobV9z
dGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBBU1NFUlQobV90YXNrUXVldWUuaXNFbXB0eSgpKTsKKwor
ICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90
cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKKyAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0
aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Cisg
ICAgbV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKQoreworICAg
IElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQiKTsK
KyAgICBBU1NFUlQoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9
PSBTdGFydFBlbmRpbmcpIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAg
ICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CisgICAgfQorCisgICAgVGFza1F1ZXVlIHF1ZXVlOworICAg
IHF1ZXVlLnN3YXAobV90YXNrUXVldWUpOworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpICYm
IG1fc3RhdGUgIT0gRmluaXNoZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmlu
Zyk7CisgICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHF1
ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgcXVldWUucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgbV9wZW5kaW5nRXZlbnRzKys7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOwor
ICAgIH0KK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1l
ckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKK3sKKyAgICBJREJfVFJB
Q0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQiKTsKKyAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKKworICAgIGlmICghbV9wZW5kaW5nRXZlbnRz
ICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgbGFzdCB0YXNrIGV2
ZW50IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0YXNrCisgICAgICAgIC8vIHF1ZXVlIGlzIGVtcHR5
LiBDb21taXQgdGhlIHRyYW5zYWN0aW9uLgorICAgICAgICBjb21taXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBvdGhlciBldmVu
dHMgdG8gY29tcGxldGUuIEhvd2V2ZXIsCisgICAgLy8gdGhlIHRhc2sgcXVldWUgaXMgbm9uLWVt
cHR5IGFuZCB0aGUgdGltZXIgaXMgaW5hY3RpdmUuCisgICAgLy8gV2UgY2FuIHRoZXJmb3JlIHNj
aGVkdWxlIHRoZSB0aW1lciBhZ2Fpbi4KKyAgICBpZiAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSAm
JiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3NlT3BlbkN1
cnNvcnMoKQoreworICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+OjppdGVy
YXRvciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7
ICsraSkKKyAgICAgICAgKCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7
Cit9CisKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6MTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsX2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKKworY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Ug
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0
ZVRhc2tFdmVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9j
YWxsYmFja3MgPSBjYWxsYmFja3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJP
cGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIGFkZFBl
bmRpbmdFdmVudHMoaW50KTsKKworICAgIHZvaWQgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKworICAgIGVudW0gU3Rh
dGUgeworICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAg
ICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rp
b24gbm90IHlldCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rp
b24gc3RhcnRlZCBidXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVp
dGhlciBhYm9ydGVkIG9yIGNvbW1pdHRlZC4KKyAgICB9OworCisgICAgdm9pZCBzdGFydCgpOwor
ICAgIHZvaWQgY29tbWl0KCk7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CisgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRp
bWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJz
b3JzKCk7CisKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOwor
ICAgIHVuc2lnbmVkIHNob3J0IG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVxdWU8T3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOworICAgIFRhc2tR
dWV1ZSBtX3Rhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworCisg
ICAgLy8gRklYTUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVh
ZC4KKyAgICBUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKKyAg
ICBUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOworICAg
IGludCBtX3BlbmRpbmdFdmVudHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBs
Kj4gbV9vcGVuQ3Vyc29yczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAkocmV2
aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oOjEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZV9oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCisKKyNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzOworCit0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOworCisvLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJUcmFuc2Fj
dGlvbiAoYXN5bmMpIGFuZCBJREJUcmFuc2FjdGlvblN5bmMgKHN5bmMpLgorLy8gVGhpcyBpcyBp
bXBsZW1lbnRlZCBieSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90
aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKKy8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJz
KS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQK
Ky8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KK2Ns
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KKworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNjaGVkdWxl
VGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3Mo
SURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
T3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmg6MTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJUcmFu
c2FjdGlvbkNhbGxiYWNrc19oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzX2gKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVk
PElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCVHJh
bnNhY3Rpb25DYWxsYmFja3MoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tz
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6
MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCkpOworfQorCitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkgCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKK3sKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBB
U1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJh
bnNhY3Rpb25zKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmlu
aXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7
CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAg
ICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAg
ICAgICBBU1NFUlQoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
OworICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAg
ICB9IGVsc2UgaWYgKG1fcnVubmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
CisgICAgICAgIG1fcnVubmluZ1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisg
ICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFy
dGVkVHJhbnNhY3Rpb25zKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRl
cm5hbCBjb25zaXN0aWVuY3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91
bmQuCitib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgfQorICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbikpOworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZgorCit2b2lk
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkK
K3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rpb24g
dG8gcnVuIGF0IGEgdGltZS4KKyAgICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbiA9ICptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICBtX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICBtX3J1bm5pbmdUcmFu
c2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKKyAgICB0cmFuc2FjdGlvbi0+cnVuKCk7Cit9CisK
K307CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3JfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3M7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworCisvLyBUcmFu
c2FjdGlvbnMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgorY2xh
c3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCk7CisKKyAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRo
ZXkgc3RhcnQgYW5kIGZpbmlzaC4KKyAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wg
aXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworCisgICAgdm9pZCBwcm9jZXNzU3Rh
cnRlZFRyYW5zYWN0aW9ucygpOworCisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3
YXkgdG8ga2VlcCByZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCisgICAgSGFzaE1hcDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+ID4gbV90cmFuc2FjdGlvbnM7CisgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBz
dGF0ZXMgYXJlIGdyb3VwZWQgYmVsb3cuCisgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
I2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZl
bnQuY3BwCShyZXZpc2lvbiAxMDk0NjEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDoxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gSURCVmVyc2lvbkNo
YW5nZUV2ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFu
Z2VFdmVudCh2ZXJzaW9uLCBldmVudFR5cGUpKTsKK30KKworSURCVmVyc2lvbkNoYW5nZUV2ZW50
OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkKKyAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UgLypjYW5C
dWJibGUqLywgZmFsc2UgLypjYW5jZWxhYmxlKi8pCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
K3sKK30KKworSURCVmVyc2lvbkNoYW5nZUV2ZW50Ojp+SURCVmVyc2lvbkNoYW5nZUV2ZW50KCkK
K3sKK30KKworU3RyaW5nIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6dmVyc2lvbigpCit7CisgICAg
cmV0dXJuIG1fdmVyc2lvbjsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9ySURCVmVyc2lvbkNoYW5nZUV2ZW50OworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDox
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAorI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRf
aAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCQW55OworCitjbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiA9IFN0cmluZygpLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSA9IEF0b21pY1N0cmluZygpKTsKKyAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hh
bmdlRXZlbnQoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKTsKKworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgSURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUpOworCisgICAgU3RyaW5nIG1fdmVyc2lvbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmlkbAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSURCVmVyc2lv
bkNoYW5nZUV2ZW50IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHZlcnNpb247CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDEwOTQ2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5jcHA6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Q+IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVx
dWVzdChhZG9wdFJlZihuZXcgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoY29udGV4dCwgc291cmNl
LCB2ZXJzaW9uKSkpOworICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVy
biByZXF1ZXN0LnJlbGVhc2UoKTsKKworfQorCitJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6SURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorICAgIDogSURC
UmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIDApCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sK
K30KKworSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6On5JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgp
Cit7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9ySURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q6Om9uQmxvY2tlZCgpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9y
TWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGVucXVldWVFdmVudChJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZl
bnQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaAkocmV2aXNpb24gMTA5NDYxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dF9oCisjZGVmaW5lIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0X2gKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogcHVibGljIElEQlJlcXVl
c3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCB+SURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QoKTsKKworICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKKworICAgIC8v
IEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdDsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tl
ZCk7CisKK3ByaXZhdGU6CisgICAgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CisKKyAgICBTdHJpbmcgbV92ZXJzaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJ
REJSZXF1ZXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwOTQ2
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5p
ZGw6MTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
Cittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2
ZW50VGFyZ2V0CisgICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3Qgewor
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5
KQpAQCAtOTg3LDYgKzk4Nyw3IEBACiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVz
JzogewogICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAg
ICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy9pbmRleGVkZGInLAogICAgICAgICAgICAgICAn
LS1pbmNsdWRlJywgJy4uL01vZHVsZXMvbWVkaWFzdHJlYW0nLAogICAgICAgICAgICAgICAnLS1p
bmNsdWRlJywgJy4uL2NzcycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vZG9tJywK
QEAgLTE4MzksNiArMTg0MCw4IEBACiAKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwu
Y3BwJCddLAogCisgICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZVxcLmNwcCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbFxcLmNwcCQnXSwKICAgICAgICAgWydl
eGNsdWRlJywgJ2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtXFwuY3BwJCddLAogICAgICAgICBbJ2V4
Y2x1ZGUnLCAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxcXC5jcHAkJ10s
CiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFteL10qXFwuY3BwJCdd
LApAQCAtMTg1Nyw4ICsxODYwLDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsdWdpbnMvbnBh
cGlcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tl
ckNsaWVudFxcLmgkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlclxcLmNwcCQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2VcXC5jcHAkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0lE
QktleVBhdGhCYWNrZW5kSW1wbFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0b3Jh
Z2UvT3JpZ2luUXVvdGFNYW5hZ2VyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgWydleGNsdWRlJywg
J3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmRcXC4oY3BwfGgpJCddLAogICAgICAgICBbJ2V4Y2x1
ZGUnLCAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudFxcLmNwcCQnXSwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjQxMTAsNiArMjQxMTAsMTY2IEBACiAJCQkJPC9GaWxlPgogCQkJPC9G
aWx0ZXI+CiAJCQk8RmlsdGVyCisJCQkJTmFtZT0iaW5kZXhlZGRiIgorCQkJCT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkFueS5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJBbnkuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkNhbGxiYWNrcy5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVk
ZGJcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5k
ZXhlZGRiXElEQkRhdGFiYXNlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
aW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
SURCRGF0YWJhc2VFcnJvci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnkuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFj
dG9yeS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
aW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4LmNwcCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhl
ZGRiXElEQkluZGV4LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJJbmRleEJhY2tlbmRJbXBsLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4QmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkluZGV4QmFja2VuZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5LmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcaW5kZXhlZGRiXElEQktleS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xpbmRleGVkZGJcSURCS2V5UmFuZ2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0
b3JlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlLmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRk
YlxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCUmVxdWVzdC5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJSZXF1ZXN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
PC9GaWx0ZXI+CisJCQk8RmlsdGVyCiAJCQkJTmFtZT0id2Vic29ja2V0cyIKIAkJCQk+CiAJCQkJ
PEZpbGUKQEAgLTcwNzM0LDE2MiArNzA4OTQsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkFueS5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQW55Lmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCQ2FsbGJhY2tzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJzb3IuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2UuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkRhdGFiYXNlRXJyb3IuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnkuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3Rvcnku
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXElEQkluZGV4LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXElEQkluZGV4QmFja2VuZEltcGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxJREJLZXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQktleS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQktleVJhbmdlLmNwcCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJ
REJLZXlSYW5nZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJPYmplY3RTdG9yZS5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdl
XElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxJREJSZXF1ZXN0LmNw
cCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxJREJSZXF1ZXN0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcSURCVHJhbnNhY3Rpb24uY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXElEQlRyYW5zYWN0aW9u
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU3RvcmFnZVRhc2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVD
b21tb24udnNwcm9wcwkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDcgQEAKIAk+CiAJPFRvb2wK
IAkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll
cz0iJnF1b3Q7JChQcm9qZWN0RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1
bGVzXGdlb2xvY2F0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1bGVzXHdlYnNv
Y2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHkmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxjJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGVkaXRpbmcmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGZpbGVhcGkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRl
cmluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXG1hdGhtbCZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxlJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxyZW5kZXJpbmdcc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5n
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcZ2VuZXJpYyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGJpbmRpbmdzXGpzXHNwZWNpYWxpemF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxk
b20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5caHRtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxcc2hh
ZG93JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFw
cGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGxvYWRlclxjYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVy
XGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG1hdGhtbCZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFn
ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24mcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBhZ2Vcc2Nyb2xsaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Mm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdp
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxz
dmdccHJvcGVydGllcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZp
bHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cdGVzdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3
ZWJzb2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90
OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0
aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJy
YXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1
ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2
YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNs
dWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNx
bGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0
Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGliJnF1b3Q7
IgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpLi4m
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcZ2VvbG9jYXRpb24mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcaW5kZXhlZGRiJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxNb2R1bGVzXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFj
Y2Vzc2liaWxpdHkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2lu
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGJyaWRnZVxjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGVkaXRpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGZpbGVhcGkmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHJlbmRlcmluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVu
ZGVyaW5nXG1hdGhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxl
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3ZnJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxiaW5kaW5ncyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGlu
Z3NcZ2VuZXJpYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzXHNwZWNpYWxpemF0aW9uJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxkb20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxk
ZWZhdWx0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxodG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZh
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGh0bWxcc2hhZG93JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNw
ZWN0b3ImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cbG9hZGVyXGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxs
b2FkZXJcYXJjaGl2ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVc
Y2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxjYWNoZSZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbG9hZGVyXGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG1h
dGhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5ccGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxh
bmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcc2Nyb2xsaW5nJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlv
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGlj
c1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
b3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRy
YW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVv
dDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3Vy
Y2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFu
aW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGllcyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2
ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVzdGluZyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
Llx3b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1
b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVv
dDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2Ny
aXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hlYWRlcnMmcXVv
dDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVx6bGliJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19XSU4z
Ml9fO0RJU0FCTEVfM0RfUkVOREVSSU5HO1dFQkNPUkVfQ09OVEVYVF9NRU5VUyIKIAkJVXNlUHJl
Y29tcGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViQ29yZVBy
ZWZpeC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMwLDE0ICsx
OTMwLDkgQEAKIAkJODA5REQxRTAxMzBERTJBRDAwQ0FFM0VEIC8qIENTU1N0eWxlQXBwbHlQcm9w
ZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA5
REQxREUxMzBERTJBRDAwQ0FFM0VEIC8qIENTU1N0eWxlQXBwbHlQcm9wZXJ0eS5oICovOyB9Owog
CQk4MTAyQzU4ODEzMjVCQjExMDBEREU2N0EgLyogU3RyaW5nQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODEwMkM1ODcxMzI1QkIxMTAw
RERFNjdBIC8qIFN0cmluZ0NhbGxiYWNrLmNwcCAqLzsgfTsKIAkJODE1RTYxNjcxMzI1ODdBQTAw
QjYyMkIwIC8qIERhdGFUcmFuc2Zlckl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODE1RTYxNjYxMzI1ODdBQTAwQjYyMkIwIC8qIERhdGFUcmFu
c2Zlckl0ZW0uY3BwICovOyB9OwotCQk4MUE3MzI1RTEyMTAxODlCMDBGQzBEOUUgLyogSURCQ3Vy
c29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUE3
MzI1RDEyMTAxODlCMDBGQzBEOUUgLyogSURCQ3Vyc29yLmggKi87IH07Ci0JCTgxQTczMjYwMTIx
MDE4QTQwMEZDMEQ5RSAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODFBNzMyNUYxMjEwMThBNDAwRkMwRDlFIC8qIElEQkN1cnNv
ci5jcHAgKi87IH07Ci0JCTgxQTczMjc4MTIxMDE5RTEwMEZDMEQ5RSAvKiBJREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODFBNzMyNzcxMjEwMTlFMTAwRkMwRDlFIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi87IH07
CiAJCTgxQUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUFDNTk5NzEzMTYzNkU2
MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oICovOyB9OwogCQk4MUFDNTk5QTEzMTYzNkU2
MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQUM1OTk4MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRh
VHJhbnNmZXJJdGVtTGlzdC5oICovOyB9OwogCQk4MUFDNkMzNjEzMUM1N0QzMDAwOUE3RTAgLyog
U3RyaW5nQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgxQUM2QzM1MTMxQzU3RDMwMDA5QTdFMCAvKiBTdHJpbmdDYWxsYmFjay5oICovOyB9
OwotCQk4MUJFMjA5ODExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTMx
MUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJODFC
RTIwOTkxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDk0MTFGNEFC
OEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTgxQkUy
MEQyMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEgLyog
SlNJREJDdXJzb3IuY3BwICovOyB9OwogCQk4MUJFMjBEMzExRjRCQzMyMDA5MTVERkEgLyogSlNJ
REJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovOyB9OwogCQk4MUY2
NUZGNjEzNzg4RkFBMDBGRjZGMkQgLyogRHJhZ1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUY2NUZGNTEzNzg4RkFBMDBGRjZGMkQgLyogRHJh
Z1N0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTMzMDUsNiArMzMwMCw3OSBAQAogCQk5NzBCNzJBNjE0NTAwOEVCMDBGMDBBMzcgLyogRXZl
bnRIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzBCNzJBNTE0NTAwOEVCMDBGMDBBMzcgLyogRXZlbnRIZWFkZXJzLmggKi87IH07CiAJCTk3
MTE0NjAzMTRFRjAwOUEwMDY3NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzExNDYwMDE0RUYwMDlB
MDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwICovOyB9OwogCQk5NzExNDYwNDE0
RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTE0NjAxMTRFRjAwOUEwMDY3NEZEOSAv
KiBOYXZpZ2F0b3JHZW9sb2NhdGlvbi5oICovOyB9OworCQk5NzEyQTVBRDE1MDA0RURBMDA0OEFG
MTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01X
aW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwICovOyB9OworCQk5NzEyQTVBRTE1MDA0RURBMDA0OEFG
MTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1NTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmggKi87IH07CisJCTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1NTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAgKi87IH07CisJCTk3MTJB
NUIxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnku
aCAqLzsgfTsKKwkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUEx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovOyB9OworCQk5NzEyQTVCNDE1
MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2Fs
bGJhY2tzLmggKi87IH07CisJCTk3MTJBNUI1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgKi87IH07CisJCTk3MTJBNUI2MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3Iu
aCAqLzsgfTsKKwkJOTcxMkE1QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07
CisJCTk3MTJBNUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjAxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi87IH07CisJCTk3MTJBNUJB
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MTE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovOyB9OworCQk5NzEyQTVCQjE1
MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYyMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICovOyB9OworCQk5NzEyQTVCQzE1MDA0RURBMDA0OEFG
MTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0
aFZhbHVlLmggKi87IH07CisJCTk3MTJBNUJFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU2NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuY3BwICovOyB9OworCQk5NzEyQTVC
RjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZS5oICovOyB9OworCQk5NzEyQTVDMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgKi87IH07CisJCTk3MTJBNUMyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU2OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICov
OyB9OworCQk5NzEyQTVDMzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgg
Ki87IH07CisJCTk3MTJBNUM0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNr
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi87IH07CisJCTk3
MTJBNUM1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkMxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi87IH07CisJCTk3
MTJBNUM2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZEMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLzsgfTsKKwkJOTcxMkE1
QzcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZFMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJEYXRhYmFzZUVycm9yLmggKi87IH07CisJCTk3MTJBNUM5MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MDE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VF
eGNlcHRpb24uY3BwICovOyB9OworCQk5NzEyQTVDQTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTcxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
ICovOyB9OworCQk5NzEyQTVDQzE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTczMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OworCQk5
NzEyQTVDRDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3NDE1MDA0RURBMDA0
OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi87IH07CisJCTk3MTJBNUNFMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmNw
cCAqLzsgfTsKKwkJOTcxMkE1Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc2MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggKi87IH07CisJCTk3MTJBNUQxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFj
a2VuZEltcGwuaCAqLzsgfTsKKwkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5jcHAgKi87IH07CisJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1N0IxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmggKi87IH07CisJCTk3MTJBNUQ1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJ
bmRleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU3QzE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguY3BwICovOyB9OworCQk5NzEyQTVE
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRl
eC5oICovOyB9OworCQk5NzEyQTVEODE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi87IH07
CisJCTk3MTJBNUQ5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MDE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVEQTE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4MTE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CisJCTk3MTJBNURCMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgKi87
IH07CisJCTk3MTJBNURDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTgzMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXkuaCAqLzsgfTsKKwkJOTcxMkE1REUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1ODUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguY3BwICovOyB9OworCQk5NzEy
QTVERjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QktleVBhdGguaCAqLzsgfTsKKwkJOTcxMkE1RTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGhCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU4NzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aEJhY2tlbmRJbXBs
LmNwcCAqLzsgfTsKKwkJOTcxMkE1RTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNr
ZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1ODgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5oICovOyB9
OworCQk5NzEyQTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODkxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLzsgfTsKKwkJOTcxMkE1RTMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLzsg
fTsKKwkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwICovOyB9Owor
CQk5NzEyQTVFNjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEQxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCAqLzsgfTsKKwkJOTcxMkE1
RTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEUxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovOyB9OworCQk5NzEyQTVFODE1MDA0RURBMDA0OEFG
MTAgLyogSURCTGV2ZWxEQkNvZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rp
bmcuaCAqLzsgfTsKKwkJOTcxMkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3Jl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTkwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi87IH07CisJCTk3MTJB
NUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlLmggKi87IH07CisJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKKwkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmggKi87IH07CisJCTk3MTJBNUVFMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKKwkJOTcxMkE1RUYxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovOyB9OworCQk5NzEyQTVGMDE1MDA0
RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTcxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLzsgfTsKKwkJOTcxMkE1RjEx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJl
cXVlc3QuY3BwICovOyB9OworCQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
OTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCAqLzsgfTsKKwkJOTcxMkE1RjQxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5n
LmggKi87IH07CisJCTk3MTJBNUY1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OworCQk5NzEyQTVG
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTlEMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbi5oICovOyB9OworCQk5NzEyQTVGODE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAgKi87IH07CisJCTk3MTJBNUY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oICovOyB9OworCQk5NzEyQTVGQTE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBMTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CisJCTk3MTJBNUZCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzLmggKi87IH07CisJCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKKwkJOTcxMkE1RkQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmggKi87IH07CisJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAgKi87IH07CisJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aCAqLzsgfTsKKwkJOTcxMkE2MDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNUE4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAg
Ki87IH07CisJCTk3MTJBNjAyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1QTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmggKi87IH07
CisJCTk3MTJBNjA0MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
QUIxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgKi87IH07
CisJCTk3MTJBNjA1MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUFD
MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCAqLzsgfTsKIAkJ
OTcyMDVBQUYxMjM5MjhDQTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MjA1QUFEMTIzOTI4
Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgKi87IH07CiAJCTk3MjA1QUIw
MTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcyMDVBQUUxMjM5MjhDQTAwQjE3Mzgw
IC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmggKi87IH07CiAJCTk3MjA1QUI1MTIzOTI5MTAwMEIx
NzM4MCAvKiBJbWFnZURvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MjA1QUIxMTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3VtZW50
LmNwcCAqLzsgfTsKQEAgLTM0MTksNyArMzQ4Nyw2IEBACiAJCTk3N0UyRTBGMTJGMEZDOUMwMEMx
MzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzdFMkUwQzEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oICovOyB9
OwogCQk5NzhBRDY3NDE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEFENjcxMTQxMzBB
OEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1lbnQuY3BwICovOyB9OwogCQk5NzhBRDY3NTE0MTMw
QThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhBRDY3MjE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNw
YW5FbGVtZW50LmggKi87IH07Ci0JCTk3OEQwN0IyMTQ1QTBFQkQwMDk2OTA4RCAvKiBJREJEYXRh
YmFzZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzhEMDdCMTE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwICovOyB9OwogCQk5NzhEMDdCNDE0NUEwRUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEQwN0Iz
MTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhEMDdCNjE0
NUEwRjAzMDA5NjkwOEQgLyogRmlsZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCNTE0NUEwRjAzMDA5NjkwOEQgLyogRmls
ZUV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCTk3OEQwN0I4MTQ1QTBGMUIwMDk2OTA4RCAvKiBPcGVy
YXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEQwN0I3MTQ1QTBGMUIwMDk2OTA4RCAvKiBPcGVyYXRpb25O
b3RBbGxvd2VkRXhjZXB0aW9uLmNwcCAqLzsgfTsKQEAgLTUwMDMsMTMgKzUwNzAsOCBAQAogCQlC
NUQzMURGQTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjgxMUNGNjEwQjAw
OUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJQjVEMzFERkIxMUNGNjEw
QjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZl
RE9NQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjVEMzYwMUExMTJGOEI1NjAwNDhERUE4IC8qIERhdGFi
YXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1RDM2MDE5MTEyRjhCNTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi87IH07
Ci0JCUI2MTc2MjU0MTIwMzM3NEYwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2MTc2
MjUzMTIwMzM3NEYwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsg
fTsKLQkJQjYxNzYyNjIxMjAzNDkwODAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2MTc2MjYx
MTIwMzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi87IH07Ci0JCUI2
NTY2MjZBMTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2NzEyMEIxMTVBMDA2RUE4
NUMgLyogSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OwotCQlCNjU2NjI2QjEyMEIxMTVBMDA2RUE4
NUMgLyogSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI2NTY2MjY4MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5o
ICovOyB9OwogCQlCNjU2NjI3MDEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY1NjYyNkUx
MjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKIAkJQjY1NjYyNzEx
MjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY1NjYyNkYxMjBCMTIyNzAwNkVBODVDIC8q
IEpTSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OwotCQlCNjkxQzFGOTEyMDZENEEwMDAyNUQ5ODAg
LyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU4NUE2QTMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlLmNwcCAqLzsg
fTsKIAkJQjcxRkU2REYxMTA5MUNCMzAwREFFRjc3IC8qIFByaW50Q29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0ExMTA0NTI1RDAw
QkVCMEVDIC8qIFByaW50Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNj
b2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NzM0QjE4MDExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwICovOyB9OwogCQlC
NzM0QjE4MzExOUI5OTFEMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3MzRCMTgyMTE5Qjk5MUQwMDY1ODdC
RCAvKiBGb250VHJhbnNjb2Rlci5oICovOyB9OwpAQCAtNTU0OCwxMSArNTYxMCw2IEBACiAJCUM1
NTYxMEYxMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTYxMEYwMTFBNzA0RUIwMEI4MkQy
NyAvKiBET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKIAkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCAqLzsgfTsKIAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgKi87IH07Ci0JCUM1NzJFRTBBMTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNDEyMDFD
NzM2MDA3RDhGODIgLyogSURCSW5kZXguY3BwICovOyB9OwotCQlDNTcyRUUwQjEyMDFDNzM2MDA3
RDhGODIgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1NzJFRTA1MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5oICovOyB9Owot
CQlDNTcyRUUwRDEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwNzEyMDFD
NzM2MDA3RDhGODIgLyogSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCUM1NzJFRTBF
MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwODEyMDFDNzM2MDA3RDhGODIg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5oICovOyB9OwotCQlDNTcyRUUwRjEyMDFDNzM2MDA3RDhG
ODIgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUwOTEyMDFDNzM2MDA3RDhGODIgLyogSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCUM1NzJFRTFFMTIwMUM5QkMwMDdEOEY4MiAv
KiBKU0lEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1NzJFRTFDMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmNwcCAqLzsgfTsK
IAkJQzU3MkVFMUYxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4
MiAvKiBKU0lEQkluZGV4LmggKi87IH07CiAJCUM1N0ZFREUxMTIxMkVFOUMwMDk3QkU2NSAvKiBG
aWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1N0ZFREUwMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLzsgfTsKQEAg
LTU1NzgsMzAgKzU2MzUsNiBAQAogCQlDNTg1QTY5MTExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJS
ZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTg1QTY3OTExRDRGQjA3MDA0QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggKi87IH07CiAJCUM1ODVB
Njk2MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OTQxMUQ0RkIxMzAwNEMzRTRCIC8q
IEpTSURCRmFjdG9yeS5jcHAgKi87IH07CiAJCUM1ODVBNjk3MTFENEZCMTMwMDRDM0U0QiAvKiBK
U0lEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1ODVBNjk1MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lEQkZhY3RvcnkuaCAqLzsgfTsKLQkJ
QzU4NUE2Q0MxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY5ODExRDRGQjNEMDA0QzNFNEIgLyog
SURCQW55LmNwcCAqLzsgfTsKLQkJQzU4NUE2Q0QxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2OTkx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5oICovOyB9OwotCQlDNTg1QTZDRjExRDRGQjNEMDA0
QzNFNEIgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTg1QTY5QjExRDRGQjNEMDA0QzNFNEIgLyogSURCQ2FsbGJhY2tzLmgg
Ki87IH07Ci0JCUM1ODVBNkQxMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUVycm9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY5RDEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFcnJvci5oICovOyB9OwotCQlDNTg1QTZEMzEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjlGMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovOyB9OwotCQlDNTg1QTZENTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZBMTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCUM1ODVBNkQ4MTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU4NUE2QTQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlLmggKi87IH07Ci0J
CUM1ODVBNkU2MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QjIxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQktleS5jcHAgKi87IH07Ci0JCUM1ODVBNkU3MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkIz
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuaCAqLzsgfTsKLQkJQzU4NUE2RTkxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1ODVBNkI1MTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5j
cHAgKi87IH07Ci0JCUM1ODVBNkVBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXlSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QjYxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmggKi87IH07Ci0JCUM1ODVBNkVEMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2QjkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0
b3JlLmggKi87IH07Ci0JCUM1ODVBNkVFMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkJBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCAqLzsgfTsKLQkJQzU4NUE2RUYxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkJCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggKi87IH07Ci0JCUM1ODVBNkYwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9y
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1
QTZCQzExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuY3BwICovOyB9OwotCQlDNTg1
QTZGMTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZCRDEx
RDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07
Ci0JCUM1ODVBNkYzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkJGMTFENEZCM0QwMDRD
M0U0QiAvKiBJREJSZXF1ZXN0LmNwcCAqLzsgfTsKLQkJQzU4NUE2RjQxMUQ0RkIzRDAwNEMzRTRC
IC8qIElEQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1ODVBNkMwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0LmggKi87IH07Ci0J
CUM1ODVBNkY5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZD
NTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovOyB9
OwotCQlDNTg1QTZGQTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVB
NkM2MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovOyB9
OwotCQlDNTg1QTZGQjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkM3
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovOyB9OwotCQlD
NTg1QTZGQzExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDODExRDRGQjNE
MDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi87IH07Ci0JCUM1ODVBNkZEMTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkM5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0
b3J5LmNwcCAqLzsgfTsKLQkJQzU4NUE2RkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkNB
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmggKi87IH07CiAJCUM1OTg5MDJFMTRFOUIw
RjgwMEU4RDE4QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUY3NjVCQTE0RTFFQ0Y0MDA2Qzg5OUIgLyog
UGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tICovOyB9OwogCQlDNTk4OTA1NzE0RTlDMjgwMDBFOEQx
OEIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNUY3NjVCNDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0
cmF0ZWd5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzU5ODkwNTgxNEU5QzI5OTAwRThEMThCIC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVCQUMxNkYxNEUzMEU0
NzAwMDA4ODM3IC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTAwLDcgKzU5MzMsNiBAQAogCQlFNEMyNzk1
OTBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5k
ZXJNZWRpYS5oICovOyB9OwogCQlFNEQ2ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxl
QnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICov
OyB9OwogCQlFNEQ2ODc3OTBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3ODBFRDdB
RTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggKi87IH07Ci0JCUVCNDlEQjhGMTRGNDZF
OEIwMDIyOTlEOSAvKiBJREJUcmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQjQ5REI4RTE0RjQ2RThCMDAyMjk5RDkgLyogSURCVHJhY2luZy5o
ICovOyB9OwogCQlFRDJCQTgzQzA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRNYXJrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEMkJBODNCMDlB
MjRCOTEwMDZDMEFDNCAvKiBEb2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVENTAxREM2MEIyNDlGMjkwMEFFMThEOSAvKiBF
ZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovOyB9OwogCQlFREUz
QTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xv
ck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC04ODQ1LDE4ICs4ODc3LDEyIEBACiAJCTgwOUREMURFMTMwREUyQUQwMENBRTNFRCAvKiBDU1NT
dHlsZUFwcGx5UHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
U3R5bGVBcHBseVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxMDJD
NTg3MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgxNUU2MTY2MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFUcmFuc2Zl
ckl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI1RDEyMTAxODlC
MDBGQzBEOUUgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUE3MzI1RjEyMTAx
OEE0MDBGQzBEOUUgLyogSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgx
QTczMjc3MTIxMDE5RTEwMEZDMEQ5RSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MUFDNTk5NzEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRy
YW5zZmVySXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhVHJhbnNm
ZXJJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQUM1OTk4MTMxNjM2RTYw
MDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MUFDNUFFODEzMTYzOTJFMDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgxQUM1QUU5MTMxNjM5MkUwMDA5QTdFMCAvKiBEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGF0YVRyYW5zZmVySXRlbUxp
c3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUFDNkMzNDEzMUM1N0MyMDAw
OUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0cmlu
Z0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFBQzZDMzUxMzFD
NTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0cmluZ0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgxQkUyMDk0MTFGNEFCOEQwMDkxNURG
QSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODFCRTIwOUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQ3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODFCRTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURC
Q3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQ3Vyc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxRjY1RkY1MTM3ODhGQUEwMEZGNkYyRCAv
KiBEcmFnU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ1N0YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE3NSw2ICsxMDIwMSw5NSBAQAog
CQk5NzExNDYwMDE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmF2aWdhdG9yR2VvbG9jYXRpb24u
Y3BwOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTE0NjAxMTRFRjAwOUEwMDY3NEZEOSAv
KiBOYXZpZ2F0b3JHZW9sb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBOYXZpZ2F0b3JHZW9sb2NhdGlvbi5oOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZp
Z2F0b3JHZW9sb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzExNDYw
MjE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IE5hdmlnYXRvckdlb2xvY2F0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvZ2Vv
bG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NzEyQTU1NDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFi
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTVdpbmRvd0lu
ZGV4ZWREYXRhYmFzZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NTE1
MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTU2MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1NzE1MDA0
RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IElEQkFueS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyog
SURCQW55LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkFueS5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTU5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IElEQkFueS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAg
LyogSURCQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkJhY2tpbmdTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTVCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
Q2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJz
b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3IuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU1RTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJREJDdXJzb3IuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NUYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1NjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRJ
bXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNTYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JXaXRoVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vy
c29yV2l0aFZhbHVlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NjQxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURC
Q3Vyc29yV2l0aFZhbHVlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldp
dGhWYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY1MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBJREJEYXRhYmFzZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY2MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJEYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJEYXRhYmFzZS5p
ZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NzEyQTU2QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VDYWxsYmFja3MuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNTZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmg7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NkUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0
YWJhc2VFcnJvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU2RjE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VFcnJvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRGF0YWJh
c2VFcnJvci5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUVycm9yLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzAxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTcxMkE1NzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uLmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3MjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VFeGNlcHRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1NzMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJFdmVudERpc3BhdGNoZXIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJFdmVudERpc3BhdGNoZXIuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NzEyQTU3NTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5LmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTc3
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBJREJGYWN0b3J5LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3ODE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU3OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0Mx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IElEQkluZGV4LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1N0QxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkluZGV4Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU3RTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXgu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkluZGV4LmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcx
MkE1N0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
QmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCSW5kZXhC
YWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFG
MTAgLyogSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3MTJBNTgyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCS2V5LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTgz
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCS2V5Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1ODQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCS2V5LmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJB
NTg1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IElEQktleVBhdGguY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTg2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IElEQktleVBhdGguaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1ODcxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBJREJLZXlQYXRoQmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1ODgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGhCYWNrZW5kSW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJLZXlQYXRoQmFja2VuZElt
cGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4OTE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURC
S2V5UmFuZ2UuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCS2V5UmFu
Z2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5n
ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2UuaWRsOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RDE1MDA0RURBMDA0
OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuY3BwOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
Q29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkxldmVsREJDb2Rp
bmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9i
amVjdFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9i
amVjdFN0b3JlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQk9iamVjdFN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
Qk9iamVjdFN0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5MjE1MDA0RURBMDA0OEFGMTAg
LyogSURCT2JqZWN0U3RvcmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQk9iamVjdFN0
b3JlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OTMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1OTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5NTE1MDA0
RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk2MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1OTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCUmVxdWVzdC5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTcxMkE1OTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCUmVxdWVzdC5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEy
QTU5QTE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gSURCUmVxdWVzdC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OUIxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
VHJhY2luZy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhY2luZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5QzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVHJh
bnNhY3Rpb24uY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
VHJhbnNhY3Rpb24uaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNTlFMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVHJhbnNhY3Rp
b24uaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUExMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QTIxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTVBNDE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTcxMkE1QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VF
dmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmlk
bDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUE4MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3MTJBNUE5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1QUExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGFnZUdyb3VwSW5kZXhlZERhdGFi
YXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNUFDMTUwMDRFREEwMDQ4
QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTcyMDVBQUQxMjM5MjhDQTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZUUERpcmVjdG9yeURv
Y3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcyMDVBQUUxMjM5MjhD
QTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZUUERpcmVjdG9yeURvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MjA1QUIxMTIzOTI5MTAwMEIxNzM4MCAvKiBJbWFnZURvY3VtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRG9jdW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAzMDMsNyArMTA0MTgsNiBAQAogCQk5NzhB
RDY3MTE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxTcGFuRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3OEFENjcyMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFNwYW5FbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3OEFENjczMTQxMzBBOEQwMEM3Q0FF
MyAvKiBIVE1MU3BhbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxTcGFu
RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3OEQwN0IxMTQ1QTBF
QkQwMDk2OTA4RCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3OEQwN0IzMTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMRXhjZXB0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc4RDA3QjUxNDVBMEYwMzAwOTY5
MDhEIC8qIEZpbGVFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRmlsZUV4Y2VwdGlvbi5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhEMDdCNzE0NUEwRjFCMDA5NjkwOEQg
LyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcDsgcGF0aCA9
IGZpbGVhcGkvT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMTk0NywxMiArMTIwNjEsNiBAQAogCQlCNUQzMURGODExQ0Y2MTBC
MDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWN0aXZlRE9NQ2FsbGJhY2suY3BwOyBwYXRoID0gZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1RDMxREY5
MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBY3RpdmVET01DYWxsYmFjay5oOyBwYXRoID0gZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUQzNjAxOTEx
MkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhYmFzZUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUI2MTc2MjUzMTIwMzM3NEYwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2MTc2MjYxMTIw
MzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYyNjcxMjBCMTE1QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjY1NjYyNjgxMjBCMTE1QTAw
NkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NTY2
MjY5MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCNjU2NjI2RDEyMEIxMTZCMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjU2NjI2RTEy
MEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCVHJhbnNhY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNzM0QjE4MDExOUI5OTExMDA2NTg3QkQg
LyogRm9udFRyYW5zY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRm9udFRyYW5zY29kZXIuY3BwOyBwYXRoID0gdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUzMCwxMiArMTI2MzgsNiBAQAog
CQlDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01TdHJpbmdMaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUUzOEJDMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NzJFRTA0MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRl
eC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJJbmRleC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NzJFRTA1MTIwMUM3MzYwMDdEOEY4MiAv
KiBJREJJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTcyRUUwNjEyMDFDNzM2MDA3RDhGODIg
LyogSURCSW5kZXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkluZGV4LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU3MkVFMDcxMjAxQzczNjAwN0Q4RjgyIC8qIElE
QkluZGV4QmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUM1NzJFRTA4MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkluZGV4QmFja2VuZEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU3MkVFMDkxMjAxQzczNjAwN0Q4RjgyIC8qIElEQklu
ZGV4QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzU3MkVFMUMxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCSW5kZXguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVTeXN0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN5c3RlbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjU2MSw0MCArMTI2NjMsNiBAQAogCQlD
NTg1QTY3OTExRDRGQjA3MDA0QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNTg1QTY5NDExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCRmFjdG9yeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1ODVBNjk1MTFENEZCMTMwMDRDM0U0QiAvKiBKU0lE
QkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJGYWN0b3J5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNjk4MTFENEZCM0QwMDRDM0U0
QiAvKiBJREJBbnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
QW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OTkxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJB
bnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUExMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQkFueS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQW55LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUIxMUQ0RkIzRDAwNEMzRTRCIC8qIElE
QkNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDYWxsYmFj
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2OUQxMUQ0RkIzRDAwNEMz
RTRCIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCRGF0YWJhc2VFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1
QTY5RTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFcnJvci5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSURCRGF0YWJhc2VFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUM1ODVBNjlGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZBMDExRDRGQjNEMDA0QzNFNEIg
LyogSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2
QTExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkEzMTFENEZCM0QwMDRDM0U0QiAv
KiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkE0MTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1
QTZBNTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IElEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4
NUE2QjIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDNTg1QTZCMzExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NTg1QTZCNDExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBJREJLZXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCNTEx
RDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCS2V5UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDNTg1QTZCNjExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCS2V5UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzU4NUE2QjcxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1ODVBNkI5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPYmplY3RTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCQTExRDRGQjNEMDA0QzNFNEIgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzU4NUE2QkIxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZCQzEx
RDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDNTg1QTZCRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
NTg1QTZCRTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQzU4NUE2QkYxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUM1ODVBNkMwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJSZXF1ZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlcXVlc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2QzExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJl
cXVlc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQlJlcXVlc3QuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZDNTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDNTg1QTZDNjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU4NUE2Qzcx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1QTZDODExRDRGQjNEMDA0QzNFNEIgLyogSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTg1
QTZDOTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJREJGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzU4NUE2Q0ExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNTg1QTZDQjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCRmFjdG9yeS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1QkFDMTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBhc3RlYm9h
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1QYXN0ZWJvYXJk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RDRBQTc4MTE2QkFGQjYwMDY5Q0E5
MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2x5cGhNZXRyaWNzTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RTlCNjc2
MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5NTIsNyArMTMwMjAsNiBAQAogCQlFNEMy
Nzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXJnZWFibGVCdWZmZXJNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5Nzgg
LyogUHVyZ2VhYmxlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1
cmdlYWJsZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFQjQ5REI4RTE0
RjQ2RThCMDAyMjk5RDkgLyogSURCVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJUcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVEMkJB
ODNCMDlBMjRCOTEwMDZDMEFDNCAvKiBEb2N1bWVudE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1h
Yy9FZGl0b3JNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3
QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb2xvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM5MTYsNjAg
KzEzOTgzLDYgQEAKIAkJCQlBOEY0NTc5RDE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FM
RGF0YWJhc2UuY3BwICovLAogCQkJCUE4RjQ1NzlFMTRCQzEzRUMwMDBDRUE1OSAvKiBET01XaW5k
b3dTUUxEYXRhYmFzZS5oICovLAogCQkJCUE4RjQ1NzlGMTRCQzEzRUMwMDBDRUE1OSAvKiBET01X
aW5kb3dTUUxEYXRhYmFzZS5pZGwgKi8sCi0JCQkJQzU4NUE2OTgxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkFueS5jcHAgKi8sCi0JCQkJQzU4NUE2OTkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5o
ICovLAotCQkJCUM1ODVBNjlBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJBbnkuaWRsICovLAotCQkJ
CUM1ODVBNjlCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJDYWxsYmFja3MuaCAqLywKLQkJCQk4MUE3
MzI1RjEyMTAxOEE0MDBGQzBEOUUgLyogSURCQ3Vyc29yLmNwcCAqLywKLQkJCQk4MUE3MzI1RDEy
MTAxODlCMDBGQzBEOUUgLyogSURCQ3Vyc29yLmggKi8sCi0JCQkJODFCRTIwOUMxMUY0QUJCRDAw
OTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8sCi0JCQkJODFCRTIwOTMxMUY0QUI4RDAwOTE1REZB
IC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk4MUE3MzI3NzEyMTAxOUUxMDBG
QzBEOUUgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLywKLQkJCQk4MUJFMjA5NDExRjRBQjhE
MDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovLAotCQkJCUM1ODVBNkEz
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJEYXRhYmFzZS5jcHAgKi8sCi0JCQkJQzU4NUE2QTQxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlLmggKi8sCi0JCQkJQzU4NUE2QTUxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkRhdGFiYXNlLmlkbCAqLywKLQkJCQlDNTg1QTZBMTExRDRGQjNEMDA0QzNF
NEIgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJQjYxNzYyNjExMjAzNDkw
ODAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLywKLQkJCQlCNjE3NjI1MzEy
MDMzNzRGMDBFRjkxMTQgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi8sCi0JCQkJ
QzU4NUE2OUQxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFiYXNlRXJyb3IuaCAqLywKLQkJCQlD
NTg1QTY5RTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFcnJvci5pZGwgKi8sCi0JCQkJ
OTc4RDA3QjExNDVBMEVCRDAwOTY5MDhEIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCAqLywK
LQkJCQlDNTg1QTY5RjExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAq
LywKLQkJCQlDNTg1QTZBMDExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
aWRsICovLAotCQkJCUM1ODVBNkM5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCAq
LywKLQkJCQlDNTg1QTZDQTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5oICovLAotCQkJ
CUM1ODVBNkNCMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmlkbCAqLywKLQkJCQlDNTg1
QTZDNzExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJ
CQlDNTg1QTZDODExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8s
Ci0JCQkJQzU4NUE2QzUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmNwcCAqLywKLQkJCQlDNTg1QTZDNjExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlDNTcyRUUwNDEyMDFDNzM2MDA3RDhGODIgLyogSURC
SW5kZXguY3BwICovLAotCQkJCUM1NzJFRTA1MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5o
ICovLAotCQkJCUM1NzJFRTA2MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleC5pZGwgKi8sCi0J
CQkJQzU3MkVFMDcxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwICov
LAotCQkJCUM1NzJFRTA4MTIwMUM3MzYwMDdEOEY4MiAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmgg
Ki8sCi0JCQkJQzU3MkVFMDkxMjAxQzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVy
ZmFjZS5oICovLAotCQkJCUM1ODVBNkIyMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwICov
LAotCQkJCUM1ODVBNkIzMTFENEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuaCAqLywKLQkJCQlDNTg1
QTZCNDExRDRGQjNEMDA0QzNFNEIgLyogSURCS2V5LmlkbCAqLywKLQkJCQlDNTg1QTZCNTExRDRG
QjNEMDA0QzNFNEIgLyogSURCS2V5UmFuZ2UuY3BwICovLAotCQkJCUM1ODVBNkI2MTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJLZXlSYW5nZS5oICovLAotCQkJCUM1ODVBNkI3MTFENEZCM0QwMDRDM0U0
QiAvKiBJREJLZXlSYW5nZS5pZGwgKi8sCi0JCQkJQzU4NUE2QkMxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQk9iamVjdFN0b3JlLmNwcCAqLywKLQkJCQlDNTg1QTZCOTExRDRGQjNEMDA0QzNFNEIgLyog
SURCT2JqZWN0U3RvcmUuaCAqLywKLQkJCQlDNTg1QTZCRTExRDRGQjNEMDA0QzNFNEIgLyogSURC
T2JqZWN0U3RvcmUuaWRsICovLAotCQkJCUM1ODVBNkJBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQlDNTg1QTZCQjExRDRGQjNEMDA0QzNF
NEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovLAotCQkJCUM1ODVBNkJEMTFENEZC
M0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCAqLywKLQkJCQlD
NTg1QTZCRjExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5jcHAgKi8sCi0JCQkJQzU4NUE2
QzAxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQlJlcXVlc3QuaCAqLywKLQkJCQlDNTg1QTZDMTExRDRG
QjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5pZGwgKi8sCi0JCQkJRUI0OURCOEUxNEY0NkU4QjAw
MjI5OUQ5IC8qIElEQlRyYWNpbmcuaCAqLywKLQkJCQlCNjU2NjI2NzEyMEIxMTVBMDA2RUE4NUMg
LyogSURCVHJhbnNhY3Rpb24uY3BwICovLAotCQkJCUI2NTY2MjY4MTIwQjExNUEwMDZFQTg1QyAv
KiBJREJUcmFuc2FjdGlvbi5oICovLAotCQkJCUI2NTY2MjY5MTIwQjExNUEwMDZFQTg1QyAvKiBJ
REJUcmFuc2FjdGlvbi5pZGwgKi8sCi0JCQkJQjY1NjYyNkQxMjBCMTE2QjAwNkVBODVDIC8qIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovLAogCQkJCTUxQTkyNjc4MEQ1M0YwNTcw
MDYzRUNDMiAvKiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwICovLAogCQkJCTUxQTkyNjc5MEQ1M0Yw
NTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLywKIAkJCQk1MUE5MjY3QTBENTNG
MDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovLApAQCAtMTcwNjQsNiArMTcw
NzcsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5NzExNDVG
RjE0RUYwMDc5MDA2NzRGRDkgLyogZ2VvbG9jYXRpb24gKi8sCisJCQkJOTcxMkE1NTMxNTAwNEUz
QzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAqLywKIAkJCQk5N0FBQkNGNzE0RkEwOUI1MDA3NDU3QUUg
Lyogd2Vic29ja2V0cyAqLywKIAkJCSk7CiAJCQluYW1lID0gTW9kdWxlczsKQEAgLTE3MDk1LDYg
KzE3MTA5LDEwMiBAQAogCQkJbmFtZSA9IGdlb2xvY2F0aW9uOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJOTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTcxMkE1NTQx
NTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8sCisJCQkJ
OTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICov
LAorCQkJCTk3MTJBNTU2MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuaWRsICovLAorCQkJCTk3MTJBNTU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3BwICov
LAorCQkJCTk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLywKKwkJCQk5NzEy
QTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLywKKwkJCQk5NzEyQTU1QTE1MDA0
RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi8sCisJCQkJOTcxMkE1NUIxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovLAorCQkJCTk3MTJBNTVDMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3IuY3BwICovLAorCQkJCTk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3IuaCAqLywKKwkJCQk5NzEyQTU1RTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yLmlkbCAqLywKKwkJCQk5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFj
a2VuZEltcGwuY3BwICovLAorCQkJCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3JCYWNrZW5kSW1wbC5oICovLAorCQkJCTk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJOTcxMkE1NjIxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCisJCQkJOTcxMkE1NjMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLAorCQkJCTk3MTJBNTY0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovLAorCQkJCTk3MTJBNTY1MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5jcHAgKi8sCisJCQkJOTcxMkE1NjYxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlLmggKi8sCisJCQkJOTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlLmlkbCAqLywKKwkJCQk5NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8sCisJCQkJOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU2QTE1MDA0RURBMDA0
OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJOTcxMkE1NkIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8sCisJCQkJOTcxMkE1
NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCisJ
CQkJOTcxMkE1NkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
ICovLAorCQkJCTk3MTJBNTZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUVycm9yLmgg
Ki8sCisJCQkJOTcxMkE1NkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXJyb3IuaWRs
ICovLAorCQkJCTk3MTJBNTcwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlv
bi5jcHAgKi8sCisJCQkJOTcxMkE1NzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLmggKi8sCisJCQkJOTcxMkE1NzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmlkbCAqLywKKwkJCQk5NzEyQTU3MzE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZl
bnREaXNwYXRjaGVyLmNwcCAqLywKKwkJCQk5NzEyQTU3NDE1MDA0RURBMDA0OEFGMTAgLyogSURC
RXZlbnREaXNwYXRjaGVyLmggKi8sCisJCQkJOTcxMkE1NzUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkZhY3RvcnkuY3BwICovLAorCQkJCTk3MTJBNTc2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0
b3J5LmggKi8sCisJCQkJOTcxMkE1NzcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaWRs
ICovLAorCQkJCTk3MTJBNTc4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwICovLAorCQkJCTk3MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFj
a2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU3QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuY3BwICovLAorCQkJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTk3MTJBNTdDMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJJbmRleC5jcHAgKi8sCisJCQkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4LmggKi8sCisJCQkJOTcxMkE1N0UxNTAwNEVEQTAwNDhBRjEwIC8qIElEQklu
ZGV4LmlkbCAqLywKKwkJCQk5NzEyQTU3RjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAgKi8sCisJCQkJOTcxMkE1ODAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4
QmFja2VuZEltcGwuaCAqLywKKwkJCQk5NzEyQTU4MTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmggKi8sCisJCQkJOTcxMkE1ODIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleS5jcHAgKi8sCisJCQkJOTcxMkE1ODMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5o
ICovLAorCQkJCTk3MTJBNTg0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaWRsICovLAorCQkJ
CTk3MTJBNTg1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCAqLywKKwkJCQk5NzEy
QTU4NjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oICovLAorCQkJCTk3MTJBNTg3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3MTJB
NTg4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoQmFja2VuZEltcGwuaCAqLywKKwkJCQk5
NzEyQTU4OTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwICovLAorCQkJCTk3MTJB
NThBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oICovLAorCQkJCTk3MTJBNThCMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5pZGwgKi8sCisJCQkJOTcxMkE1OEMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwICovLAorCQkJCTk3MTJBNThE
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggKi8sCisJCQkJOTcx
MkE1OEUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovLAorCQkJCTk3
MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8sCisJCQkJOTcx
MkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKKwkJCQk5NzEy
QTU5MTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCAqLywKKwkJCQk5NzEyQTU5
MjE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaWRsICovLAorCQkJCTk3MTJBNTkz
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLywKKwkJ
CQk5NzEyQTU5NDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
ICovLAorCQkJCTk3MTJBNTk1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UuaCAqLywKKwkJCQk5NzEyQTU5NjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi8sCisJCQkJOTcxMkE1OTcxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAqLywKKwkJCQk5NzEyQTU5ODE1
MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5jcHAgKi8sCisJCQkJOTcxMkE1OTkxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCAqLywKKwkJCQk5NzEyQTU5QTE1MDA0RURBMDA0OEFG
MTAgLyogSURCUmVxdWVzdC5pZGwgKi8sCisJCQkJOTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYWNpbmcuaCAqLywKKwkJCQk5NzEyQTU5QzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb24uY3BwICovLAorCQkJCTk3MTJBNTlEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbi5oICovLAorCQkJCTk3MTJBNTlFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2Fj
dGlvbi5pZGwgKi8sCisJCQkJOTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwICovLAorCQkJCTk3MTJBNUEwMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggKi8sCisJCQkJOTcxMkE1QTExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTk3MTJBNUEy
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oICovLAorCQkJCTk3
MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAq
LywKKwkJCQk5NzEyQTVBNDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oICovLAorCQkJCTk3MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwICovLAorCQkJCTk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaCAqLywKKwkJCQk5NzEyQTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAqLywKKwkJCQk5NzEyQTVBODE1MDA0RURBMDA0OEFGMTAg
LyogSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwICovLAorCQkJCTk3MTJBNUE5MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oICovLAorCQkJCTk3MTJBNUFBMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgKi8sCisJCQkJOTcx
MkE1QUIxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgKi8s
CisJCQkJOTcxMkE1QUMxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFz
ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBpbmRleGVkZGI7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OwogCQk5NzZENkM1NzEyMkI4QTE4MDAxRkQxRjcgLyogZmlsZWFwaSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xOTk0MSw4ICsyMDA1
MSw4IEBACiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8s
CiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAogCQkJCTBG
RTcxNDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8sCi0JCQkJQzY5
MTYxNDcxNEY2RUJBNzAwNDYzNzVDIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggKi8sCiAJCQkJ
QkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCisJCQkJQzY5
MTYxNDcxNEY2RUJBNzAwNDYzNzVDIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggKi8sCiAJCQkJ
QkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAq
LywKIAkJCQlCQzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGUuaCAqLywKIAkJCQk5M0MwOUM4NTBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAq
LywKQEAgLTIyMjIyLDYgKzIyMzMyLDcgQEAKIAkJCQk4NUM3RjVFNzBBQUZCQUZCMDA0MDE0REQg
LyogRE9NV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5ODlERDEwQUNDOEJCRDAw
QTBCQzUxIC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQw
M0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1QUUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTdEMkFEMDQxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1By
b3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEY0NTdBMTE0QkMxQTk0MDAwQ0VBNTkgLyog
RE9NV2luZG93U1FMRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNUFFNUFDMTQ5MjVG
NUIwMDRENTc3NiAvKiBET01XcmFwcGVyVmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjU5
NSwzMSArMjI3MDYsNDcgQEAKIAkJCQk1MTNGMTQ1NDBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxv
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMUVDQzEwQzkxQzkwNDAwREMyNTVCIC8qIElj
b25SZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1QkFDMkIwMTM2MEJCQUIwMDVEQTI1OCAv
KiBJY29uVVJMLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZDRDExRDRGQjNEMDA0QzNFNEIg
LyogSURCQW55LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVCMTE1MDA0RURBMDA0OEFGMTAg
LyogSURCQW55LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAg
LyogSURCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY2MzExRDRGQUM1
MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4
NUE2Q0YxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJODFBNzMyNUUxMjEwMTg5QjAwRkMwRDlFIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJODFBNzMyNzgxMjEwMTlFMTAwRkMwRDlFIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4MUJFMjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RDgxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNjE3NjI2MjEyMDM0
OTA4MDBFRjkxMTQgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjYxNzYyNTQxMjAzMzc0RjAwRUY5MTE0IC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RDExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRh
dGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVBNkQzMTFENEZCM0QwMDRDM0U0
QiAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU4NUE2RkUx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1ODVB
NkZDMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUM1ODVBNkZBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU3MkVFMEIxMjAxQzczNjAwN0Q4RjgyIC8q
IElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTcyRUUwRTEyMDFDNzM2MDA3RDhGODIg
LyogSURCSW5kZXhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU3MkVFMEYxMjAx
QzczNjAwN0Q4RjgyIC8qIElEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzU4NUE2RTcxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzU4NUE2RUExMUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlDNTg1QTZFRDExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmUuaCBp
biBIZWFkZXJzICovLAotCQkJCUM1ODVBNkVGMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTg1QTZGMTExRDRGQjNEMDA0
QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywK
LQkJCQlDNTg1QTZGNDExRDRGQjNEMDA0QzNFNEIgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRUI0OURCOEYxNEY0NkU4QjAwMjI5OUQ5IC8qIElEQlRyYWNpbmcuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUI2NTY2MjZCMTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxi
YWNrcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QjYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QjkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkN1cnNvckJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVCQTE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTcxMkE1QkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVDMjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1QzMxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTcxMkE1QzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5NzEyQTVDNjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVDNzE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1Q0ExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5NzEyQTVDRDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzEyQTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RDIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEy
QTVENjE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
MTJBNUQ5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleEJhY2tlbmRJbXBsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5NzEyQTVEQTE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVERjE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RTExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQktleVBhdGhCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RTMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEy
QTVFNjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rpbmcu
aCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmpl
Y3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUVF
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk3MTJBNUYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzEyQTVGMjE1MDA0RURBMDA0
OEFGMTAgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE1RjQxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUY2MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcx
MkE1RjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk3MTJBNUZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNUZCMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTcxMkE1RkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3MTJBNjAyMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3MUQ1
N0MwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU5MTNBMjQyMTNENDlFQkEwMEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5RTkxMUM1MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzQxOCw2ICsyMzU0NSw3IEBACiAJCQkJ
RjM4MjA4OTMxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUYzNDc0MkREMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJBZ2VudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTcxMkE2MDUxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VH
cm91cEluZGV4ZWREYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E2NzRCREMwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjM4MjA4OTUxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUYzNDc0MkU1MTM0MzYzM0MwMDUzMUJDMiAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjM3MTcsOCArMjM4NDUsOCBAQAogCQkJCUNBM0JGNjdF
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNBRTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDNkIzMUIyRTE0Rjg0MUZCMDA4OUYyM0YgLyogU2Nyb2xsYmFyVGhlbWVD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBT
Y3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzZCMzFCMkUxNEY4NDFGQjAwODlG
MjNGIC8qIFNjcm9sbGJhclRoZW1lQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0MDI4
QjBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDOEI4NTNFMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzE0MDYxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJh
clRoZW1lTW9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTMzNyw2ICsyNTQ2NSw3IEBACiAJCQkJ
MzFDMEZGNEQwRTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1QzdGNUU4MEFBRkJBRkIwMDQwMTRERCAvKiBET01XaGVlbEV2
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwM0I5OTgwOUVCMTNBRjAwNzk3QzdGIC8qIERP
TVdpbmRvdy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVBRDE1MDA0RURBMDA0OEFGMTAg
LyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3RDJB
RDAzMTRCODIzQTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEY0NTdBMDE0QkMxQTg4MDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1M0RBNDgxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdy
YXBwZXJXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjU3LDI0ICsyNTc4NiwzNiBAQAog
CQkJCUIyNzUzNThFMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQzU4NUE2Q0MxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkFueS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk5NzEyQTVCMDE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5n
VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTgxQTczMjYwMTIxMDE4QTQwMEZDMEQ5
RSAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODFCRTIwOTgxMUY0QUI4RDAw
OTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI2
OTFDMUY5MTIwNkQ0QTAwMDI1RDk4MCAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlDNTg1QTZENTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzhEMDdCMjE0NUEwRUJEMDA5NjkwOEQgLyogSURCRGF0
YWJhc2VFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RkQxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RkIxMUQ0
RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlDNTg1QTZGOTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU3MkVFMEExMjAxQzczNjAwN0Q4RjgyIC8qIElE
QkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1NzJFRTBEMTIwMUM3MzYwMDdEOEY4MiAv
KiBJREJJbmRleEJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1ODVBNkU2MTFE
NEZCM0QwMDRDM0U0QiAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzU4NUE2RTkx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1
ODVBNkYwMTFENEZCM0QwMDRDM0U0QiAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlDNTg1QTZFRTExRDRGQjNEMDA0QzNFNEIgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTg1QTZGMzExRDRGQjNEMDA0QzNFNEIgLyog
SURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNjU2NjI2QTEyMEIxMTVBMDA2RUE4
NUMgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QjUxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVC
ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1QkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVCRTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QzExNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1QzUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5NzEyQTVDOTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VFeGNlcHRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1Q0MxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVDRTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVEMTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTk3MTJBNUQzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVENTE1MDA0RURBMDA0OEFGMTAgLyog
SURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RDgxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1REIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVE
RTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
NzEyQTVFMDE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFNzE1MDA0RURB
MDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEy
QTVFOTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOTcxMkE1RUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RUYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1
RjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTcxMkE1RjUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTk3MTJBNUY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJB
NUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTcxMkE2MDExNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzFENTdCMEYzMzgxOTAwMEY5Q0U0RSAv
KiBJZGVudGlmaWVyUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5MTNBMjQxMTNENDlFQkEw
MEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NkYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY1
NjEsNiArMjY3MDIsNyBAQAogCQkJCUYzODIwODkyMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzNDc0MkRDMTM0MzYyRjAwMDUzMUJD
MiAvKiBQYWdlRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzAyQjBCRDBE
NzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJB
NjA0MTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzI2NDk3QzBEN0UyNEVDMDBCRDEwRjIg
LyogUGFnZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgyMDg5NDE0N0QzNUY5MDAxMEJD
MDYgLyogUGFnZVJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBAQAogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhpc3RvcnkuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9jYXRpb24uaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDEwOTQ2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJH
cm91cFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJREJBbnkuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNs
dWRlICJJREJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCQW55PiBJREJBbnk6OmNyZWF0ZUludmFs
aWQoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KCkpOwotfQotCi1QYXNzUmVm
UHRyPElEQkFueT4gSURCQW55OjpjcmVhdGVOdWxsKCkKLXsKLSAgICBSZWZQdHI8SURCQW55PiBp
ZGJBbnkgPSBhZG9wdFJlZihuZXcgSURCQW55KCkpOwotICAgIGlkYkFueS0+c2V0TnVsbCgpOwot
ICAgIHJldHVybiBpZGJBbnkucmVsZWFzZSgpOwotfQotCi1JREJBbnk6OklEQkFueSgpCi0gICAg
OiBtX3R5cGUoVW5kZWZpbmVkVHlwZSkKLXsKLX0KLQotSURCQW55Ojp+SURCQW55KCkKLXsKLX0K
LQotUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJBbnk6OmRvbVN0cmluZ0xpc3QoKQotewot
ICAgIEFTU0VSVChtX3R5cGUgPT0gRE9NU3RyaW5nTGlzdFR5cGUpOwotICAgIHJldHVybiBtX2Rv
bVN0cmluZ0xpc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQ3Vyc29yPiBJREJBbnk6OmlkYkN1cnNv
cigpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JUeXBlKTsKLSAgICByZXR1cm4g
bV9pZGJDdXJzb3I7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6
OmlkYkN1cnNvcldpdGhWYWx1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JX
aXRoVmFsdWVUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJDdXJzb3JXaXRoVmFsdWU7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCRGF0YWJhc2U+IElEQkFueTo6aWRiRGF0YWJhc2UoKQotewotICAgIEFTU0VS
VChtX3R5cGUgPT0gSURCRGF0YWJhc2VUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJEYXRhYmFzZTsK
LX0KLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBJREJBbnk6OmlkYkZhY3RvcnkoKQotewotICAg
IEFTU0VSVChtX3R5cGUgPT0gSURCRmFjdG9yeVR5cGUpOwotICAgIHJldHVybiBtX2lkYkZhY3Rv
cnk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXg+IElEQkFueTo6aWRiSW5kZXgoKQotewotICAg
IEFTU0VSVChtX3R5cGUgPT0gSURCSW5kZXhUeXBlKTsKLSAgICByZXR1cm4gbV9pZGJJbmRleDsK
LX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkFueTo6aWRiS2V5KCkKLXsKLSAgICBBU1NFUlQo
bV90eXBlID09IElEQktleVR5cGUpOwotICAgIHJldHVybiBtX2lkYktleTsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCi17Ci0gICAgQVNT
RVJUKG1fdHlwZSA9PSBJREJPYmplY3RTdG9yZVR5cGUpOwotICAgIHJldHVybiBtX2lkYk9iamVj
dFN0b3JlOwotfQotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5z
YWN0aW9uKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7Ci0g
ICAgcmV0dXJuIG1faWRiVHJhbnNhY3Rpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBJREJBbnk6OnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCi17Ci0gICAgQVNTRVJU
KG1fdHlwZSA9PSBTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlKTsKLSAgICByZXR1cm4gbV9zZXJp
YWxpemVkU2NyaXB0VmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55OjpzZXROdWxsKCkKLXsKLSAgICBB
U1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IE51bGxUeXBlOwot
fQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdmFsdWUpCi17
Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBET01T
dHJpbmdMaXN0VHlwZTsKLSAgICBtX2RvbVN0cmluZ0xpc3QgPSB2YWx1ZTsKLX0KLQotdm9pZCBJ
REJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gdmFsdWUpCi17Ci0gICAg
QVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJDdXJzb3JX
aXRoVmFsdWVUeXBlOwotICAgIG1faWRiQ3Vyc29yV2l0aFZhbHVlID0gdmFsdWU7Ci19Ci0KLXZv
aWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHZhbHVlKQotewotICAgIEFTU0VS
VChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCQ3Vyc29yVHlwZTsK
LSAgICBtX2lkYkN1cnNvciA9IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2U+IHZhbHVlKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVk
VHlwZSk7Ci0gICAgbV90eXBlID0gSURCRGF0YWJhc2VUeXBlOwotICAgIG1faWRiRGF0YWJhc2Ug
PSB2YWx1ZTsKLX0KLQotdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IHZh
bHVlKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBl
ID0gSURCRmFjdG9yeVR5cGU7Ci0gICAgbV9pZGJGYWN0b3J5ID0gdmFsdWU7Ci19Ci0KLXZvaWQg
SURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJJbmRleD4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJJbmRleFR5cGU7Ci0gICAg
bV9pZGJJbmRleCA9IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURC
S2V5PiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAg
IG1fdHlwZSA9IElEQktleVR5cGU7Ci0gICAgbV9pZGJLZXkgPSB2YWx1ZTsKLX0KLQotdm9pZCBJ
REJBbnk6OnNldChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB2YWx1ZSkKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IElEQlRyYW5zYWN0aW9u
VHlwZTsKLSAgICBtX2lkYlRyYW5zYWN0aW9uID0gdmFsdWU7Ci19Ci0KLXZvaWQgSURCQW55Ojpz
ZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fdHlw
ZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJPYmplY3RTdG9yZVR5cGU7Ci0g
ICAgbV9pZGJPYmplY3RTdG9yZSA9IHZhbHVlOwotfQotCi12b2lkIElEQkFueTo6c2V0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV90eXBl
ID09IFVuZGVmaW5lZFR5cGUpOwotICAgIG1fdHlwZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5
cGU7Ci0gICAgbV9zZXJpYWxpemVkU2NyaXB0VmFsdWUgPSB2YWx1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
QW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAkocmV2
aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQW55X2gKLSNkZWZp
bmUgSURCQW55X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01TdHJpbmdM
aXN0OwotY2xhc3MgSURCQ3Vyc29yOwotY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlOwotY2xhc3Mg
SURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0b3J5OwotY2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJ
REJLZXk7Ci1jbGFzcyBJREJPYmplY3RTdG9yZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotY2xh
c3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi1jbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291
bnRlZDxJREJBbnk+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNy
ZWF0ZUludmFsaWQoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZU51bGwo
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkFu
eT4gY3JlYXRlKFQqIGlkYk9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJBbnk+IGFu
eSA9IElEQkFueTo6Y3JlYXRlSW52YWxpZCgpOwotICAgICAgICBhbnktPnNldChpZGJPYmplY3Qp
OwotICAgICAgICByZXR1cm4gYW55LnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBbnk+IGNyZWF0ZShQYXNzUmVmUHRy
PFQ+IGlkYk9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJREJBbnk+IGFueSA9IElEQkFu
eTo6Y3JlYXRlSW52YWxpZCgpOwotICAgICAgICBhbnktPnNldChpZGJPYmplY3QpOwotICAgICAg
ICByZXR1cm4gYW55LnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgfklEQkFueSgpOwotCi0gICAgZW51
bSBUeXBlIHsKLSAgICAgICAgVW5kZWZpbmVkVHlwZSA9IDAsCi0gICAgICAgIE51bGxUeXBlLAot
ICAgICAgICBET01TdHJpbmdMaXN0VHlwZSwKLSAgICAgICAgSURCQ3Vyc29yVHlwZSwKLSAgICAg
ICAgSURCQ3Vyc29yV2l0aFZhbHVlVHlwZSwKLSAgICAgICAgSURCRGF0YWJhc2VUeXBlLAotICAg
ICAgICBJREJGYWN0b3J5VHlwZSwKLSAgICAgICAgSURCSW5kZXhUeXBlLAotICAgICAgICBJREJL
ZXlUeXBlLAotICAgICAgICBJREJPYmplY3RTdG9yZVR5cGUsCi0gICAgICAgIElEQlRyYW5zYWN0
aW9uVHlwZSwKLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZQotICAgIH07Ci0KLSAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAvLyBVc2UgdHlwZSgp
IHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNhbGwu
Ci0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCk7Ci0gICAgUGFz
c1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpOwotICAgIFBhc3NSZWZQdHI8SURCQ3Vyc29y
V2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKTsKLSAgICBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlPiBpZGJEYXRhYmFzZSgpOwotICAgIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9y
eSgpOwotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCk7Ci0gICAgUGFzc1JlZlB0
cjxJREJLZXk+IGlkYktleSgpOwotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9i
amVjdFN0b3JlKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rp
b24oKTsKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNj
cmlwdFZhbHVlKCk7Ci0KLSAgICAvLyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0gICAg
dm9pZCBzZXROdWxsKCk7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7
Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKLSAgICB2b2lkIHNldChQYXNz
UmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4pOwotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURC
RGF0YWJhc2U+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+KTsKLSAgICB2
b2lkIHNldChQYXNzUmVmUHRyPElEQkluZGV4Pik7Ci0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJ
REJLZXk+KTsKLSAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7Ci0gICAg
dm9pZCBzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4pOwotICAgIHZvaWQgc2V0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7Ci0KLXByaXZhdGU6Ci0gICAgSURCQW55KCk7
Ci0KLSAgICBUeXBlIG1fdHlwZTsKLQotICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcg
c2hvdWxkIGV2ZXIgYmUgaW4gdXNlIGF0IGFueSBnaXZlbiB0aW1lLgotICAgIFJlZlB0cjxET01T
dHJpbmdMaXN0PiBtX2RvbVN0cmluZ0xpc3Q7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9pZGJD
dXJzb3I7Ci0gICAgUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gbV9pZGJDdXJzb3JXaXRoVmFs
dWU7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2lkYkRhdGFiYXNlOwotICAgIFJlZlB0cjxJ
REJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2lkYkluZGV4
OwotICAgIFJlZlB0cjxJREJLZXk+IG1faWRiS2V5OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gbV9pZGJPYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1faWRiVHJh
bnNhY3Rpb247Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9zZXJpYWxpemVk
U2NyaXB0VmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkFueV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJBbnkuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkFueS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEN1c3RvbVRvSlNPYmplY3QKLSAgICBdIElE
QkFueSB7Ci0gICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5r
LgotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3Jl
LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IElEQkJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIElEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUg
IklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsK
LWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi1jbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJC
YWNraW5nU3RvcmUoKSB7fTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2
NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50
NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3Mp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKLQotICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciA6IHB1YmxpYyBSZWZDb3VudGVkPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gewotICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgfk9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHt9Ci0gICAgfTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVj
b3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGRv
dWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikg
PSAwOwotCi0gICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7Ci0gICAgcHVibGlj
OgotICAgICAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciosIGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKLSAgICAgICAgIHZpcnR1YWwg
fk9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2soKSB7fTsKLSAgICB9OwotICAgIHZpcnR1YWwgYm9v
bCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5p
cXVlRmxhZ3MsIFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dElu
ZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRf
dCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAw
OwotCi0gICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7Ci0gICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBjbG9uZSgpID0gMDsK
LSAgICAgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDAp
ID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkg
eyB9OwotICAgIH07Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKSA9IDA7Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRyYW5zYWN0aW9uPiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5UcmFuc2Fj
dGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygp
ID0gMDsKLSAgICB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRl
VHJhbnNhY3Rpb24oKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gSURCQmFja2luZ1N0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJDYWxsYmFja3MuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDYWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJDYWxsYmFja3NfaAotI2RlZmluZSBJREJDYWxsYmFja3NfaAotCi0jaW5jbHVkZSAi
RE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IEFsbCBjaGlsZCBjbGFzc2VzIG5lZWQgdG8g
YmUgbWFkZSB0aHJlYWRzYWZlLgotY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPElEQkNhbGxiYWNrcz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQkNh
bGxiYWNrcygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4pID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhD
b250aW51YXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRj
aChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgp
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAv
LyBJREJDYWxsYmFja3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAko
cmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNp
bmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5Lmgi
Ci0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPElEQkN1cnNvcj4gSURCQ3Vyc29yOjpjcmVhdGUoUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0
LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJh
bnNhY3Rpb24pKTsKLX0KLQotSURCQ3Vyc29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkq
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9iYWNrZW5kKGJh
Y2tlbmQpCi0gICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkK
LSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgLCBtX3RyYW5zYWN0aW9uTm90
aWZpZXIodHJhbnNhY3Rpb24sIHRoaXMpCi17Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAg
QVNTRVJUKG1fcmVxdWVzdCk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55
OjpJREJPYmplY3RTdG9yZVR5cGUgfHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQklu
ZGV4VHlwZSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwotfQotCi1JREJDdXJzb3I6On5J
REJDdXJzb3IoKQotewotfQotCi11bnNpZ25lZCBzaG9ydCBJREJDdXJzb3I6OmRpcmVjdGlvbigp
IGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3I6OmRpcmVjdGlvbiIpOwotICAgIHJl
dHVybiBtX2JhY2tlbmQtPmRpcmVjdGlvbigpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURC
Q3Vyc29yOjprZXkoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjprZXkiKTsK
LSAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXkoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElE
QkN1cnNvcjo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3I6
OnByaW1hcnlLZXkiKTsKLSAgICByZXR1cm4gbV9iYWNrZW5kLT5wcmltYXJ5S2V5KCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SURCQW55PiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkN1cnNvcjo6dmFsdWUiKTsKLSAgICByZXR1cm4gSURCQW55OjpjcmVhdGUobV9i
YWNrZW5kLT52YWx1ZSgpKTsKLX0KLQotSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3I6OnVwZGF0ZSIpOwotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2
YWx1ZSwgcmVxdWVzdCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJr
RWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVl
c3QucmVsZWFzZSgpOwotfQotCi12b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkN1cnNvcjo6Y29udGludWUiKTsKLSAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJ
REJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXF1ZXN0
KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogV2UncmUgbm90
IHVzaW5nIHRoZSBjb250ZXh0IGZyb20gd2hlbiBjb250aW51ZSB3YXMgY2FsbGVkLCB3aGljaCBt
ZWFucyB0aGUgY2FsbGJhY2sKLSAgICAvLyAgICAgICAgd2lsbCBiZSBvbiB0aGUgb3JpZ2luYWwg
Y29udGV4dCBvcGVuQ3Vyc29yIHdhcyBjYWxsZWQgb24uIElzIHRoaXMgcmlnaHQ/Ci0gICAgaWYg
KG1fcmVxdWVzdC0+cmVzZXRSZWFkeVN0YXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSB7Ci0gICAg
ICAgIG1fcmVxdWVzdC0+c2V0Q3Vyc29yKHRoaXMpOwotICAgICAgICBtX2JhY2tlbmQtPmNvbnRp
bnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotfQotCi1QYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJD
dXJzb3I6OmRlbGV0ZSIpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKHJlcXVlc3QsIGVjKTsKLSAg
ICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBJREJDdXJzb3I6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkKLXsKLSAgICBtX2JhY2tl
bmQtPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpj
bG9zZSgpCi17Ci0gICAgQVNTRVJUKG1fcmVxdWVzdCk7Ci0gICAgbV9yZXF1ZXN0LT5maW5pc2hD
dXJzb3IoKTsKLSAgICBtX3JlcXVlc3QuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCQ3Vyc29yX2gKLSNkZWZpbmUgSURCQ3Vyc29yX2gKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElEQkFueTsKLWNsYXNzIElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBJREJSZXF1ZXN0OwotY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLQotdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCQ3Vyc29yPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBEaXJlY3Rpb24gewotICAgICAgICBORVhU
ID0gMCwKLSAgICAgICAgTkVYVF9OT19EVVBMSUNBVEUgPSAxLAotICAgICAgICBQUkVWID0gMiwK
LSAgICAgICAgUFJFVl9OT19EVVBMSUNBVEUgPSAzLAotICAgIH07Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotICAg
IHZpcnR1YWwgfklEQkN1cnNvcigpOwotCi0gICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhl
IGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgdm9pZCBjb250aW51ZUZ1
bmN0aW9uKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oMCwgZWMpOyB9Ci0K
LSAgICAvLyBJbXBsZW1lbnQgdGhlIElETAotICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigp
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdDsKLSAgICBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCQW55PiB2
YWx1ZSgpIGNvbnN0OwotICAgIElEQkFueSogc291cmNlKCkgY29uc3Q7Ci0KLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJh
Y2soKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJDdXJzb3IoUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSog
c291cmNlLCBJREJUcmFuc2FjdGlvbiopOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1f
cmVxdWVzdDsKLSAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAgSURCVHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JO
b3RpZmllciBtX3RyYW5zYWN0aW9uTm90aWZpZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCQ3Vyc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvci5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBdIElEQkN1cnNvciB7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IE5FWFQgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBO
RVhUX05PX0RVUExJQ0FURSA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBSRVYg
PSAyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQUkVWX05PX0RVUExJQ0FURSA9IDM7
Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbjsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFyeUtleTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IElEQkFueSBzb3VyY2U7Ci0KLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbSW1wbGVt
ZW50ZWRBcz1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0gSURC
S2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxl
dGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQotICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJJREJCYWNraW5n
U3RvcmUuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUVycm9yLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLSNp
bmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkN1cnNvckJhY2tlbmRJ
bXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBjdXJzb3IsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIG9iamVjdFN0b3JlKQotICAgIDogbV9jdXJz
b3IoY3Vyc29yKQotICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICwgbV9jdXJzb3JU
eXBlKGN1cnNvclR5cGUpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwg
bV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAsIG1fY2xvc2VkKGZhbHNlKQotewotICAg
IG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKLX0KLQotSURCQ3Vyc29y
QmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCgpCi17Ci0gICAgbV90cmFuc2FjdGlv
bi0+dW5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7Ci0gICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50
LCB0aGUgY3Vyc29ycyBoYXZlIHRvIGJlIGRlc3RydWN0ZWQgYmVmb3JlIHRoZSBvYmplY3RTdG9y
ZS4KLSAgICBtX2N1cnNvci5jbGVhcigpOwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLQot
ICAgIG1fb2JqZWN0U3RvcmUuY2xlYXIoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCQ3Vyc29y
QmFja2VuZEltcGw6OmRpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6ZGlyZWN0aW9uIik7Ci0gICAgcmV0dXJuIG1fZGlyZWN0aW9uOwotfQot
Ci1QYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSgpIGNvbnN0Ci17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5Iik7Ci0gICAgcmV0dXJu
IG1fY3Vyc29yLT5rZXkoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpwcmltYXJ5S2V5KCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpwcmltYXJ5S2V5Iik7Ci0gICAgcmV0dXJuIG1fY3Vyc29yLT5wcmltYXJ5S2V5
KCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6dmFsdWUoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OnZhbHVlIik7Ci0gICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikK
LSAgICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpOwotICAgIHJl
dHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKG1fY3Vyc29yLT52YWx1
ZSgpKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JC
YWNrZW5kSW1wbDo6dXBkYXRlIik7Ci0gICAgaWYgKCFtX2N1cnNvciB8fCBtX2N1cnNvclR5cGUg
PT0gSW5kZXhLZXlDdXJzb3IpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYmplY3RT
dG9yZS0+cHV0KHZhbHVlLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwgY2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uLmdl
dCgpLCBlYyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rp
b24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWUiKTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBL
ZXk7Ci0KLSAgICBpZiAobV9jdXJzb3IgJiYga2V5KSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnNv
ci0+a2V5KCkpOwotICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUIHx8
IG1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUpIHsKLSAgICAgICAg
ICAgIGlmICghbV9jdXJzb3ItPmtleSgpLT5pc0xlc3NUaGFuKGtleS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoIWtleS0+aXNMZXNzVGhhbihtX2N1cnNvci0+a2V5KCkuZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsLCB0aGlzLCBrZXksIHBy
cENhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLS8vIElNUE9SVEFOVDogSWYgdGhpcyBldmVyIDEpIGZp
cmVzIGFuICdlcnJvcicgZXZlbnQgYW5kIDIpIGl0J3MgcG9zc2libGUgdG8gZmlyZSBhbm90aGVy
IGV2ZW50IGFmdGVyd2FyZHMsCi0vLyAgICAgICAgICAgIElEQlJlcXVlc3Q6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpIHdpbGwgbmVlZCB0byBiZSBtb2RpZmllZCB0byBoYW5kbGUgdGhpcyEhIQotdm9p
ZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJz
b3IsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGlu
dWVJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0g
cHJwQ3Vyc29yOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLQotICAgIGlmICgh
Y3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbihr
ZXkuZ2V0KCkpKSB7Ci0gICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzV2l0aENvbnRp
bnVhdGlvbigpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLSAg
ICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5jdGlvbihtX2N1
cnNvci0+cHJpbWFyeUtleSgpLCBwcnBDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVj
KTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQg
bnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6
cHJlZmV0Y2hDb250aW51ZSIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGlu
dWVJbnRlcm5hbCwgdGhpcywgbnVtYmVyVG9GZXRjaCwgcHJwQ2FsbGJhY2tzKSkpCi0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0K
LQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBw
cnBDdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNo
Q29udGludWVJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vy
c29yID0gcHJwQ3Vyc29yOwotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRLZXlz
OwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGZvdW5kUHJpbWFyeUtleXM7Ci0gICAgVmVj
dG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gZm91bmRWYWx1ZXM7Ci0KLSAgICBp
ZiAoY3Vyc29yLT5tX2N1cnNvcikKLSAgICAgICAgY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0gY3Vy
c29yLT5tX2N1cnNvci0+Y2xvbmUoKTsKLQotICAgIGNvbnN0IHNpemVfdCBrTWF4U2l6ZUVzdGlt
YXRlID0gMTAgKiAxMDI0ICogMTAyNDsKLSAgICBzaXplX3Qgc2l6ZUVzdGltYXRlID0gMDsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIGlm
ICghY3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlv
bigwKSkgewotICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kS2V5cy5hcHBlbmQoY3Vyc29yLT5tX2N1
cnNvci0+a2V5KCkpOwotICAgICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChjdXJzb3ItPm1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCkpOwotCi0gICAgICAgIGlmIChjdXJzb3ItPm1fY3Vyc29yVHlw
ZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKLSAgICAgICAg
ICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKGN1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCkpOwot
Ci0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVz
dGltYXRlKCk7Ci0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT5wcmlt
YXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwotICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNvclR5
cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAgICAg
ICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcik7Ci0KLSAgICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IGtNYXhTaXplRXN0
aW1hdGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kS2V5cy5z
aXplKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpudWxsVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjdXJzb3It
Pm1fdHJhbnNhY3Rpb24tPmFkZFBlbmRpbmdFdmVudHMoZm91bmRLZXlzLnNpemUoKSAtIDEpOwot
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzV2l0aFByZWZldGNoKGZvdW5kS2V5cywgZm91bmRQcmlt
YXJ5S2V5cywgZm91bmRWYWx1ZXMpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpw
cmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNldCIpOwot
ICAgIG1fdHJhbnNhY3Rpb24tPmFkZFBlbmRpbmdFdmVudHMoLXVudXNlZFByZWZldGNoZXMpOwot
ICAgIG1fY3Vyc29yID0gbV9zYXZlZEN1cnNvcjsKLSAgICBtX3NhdmVkQ3Vyc29yID0gMDsKLQot
ICAgIGlmIChtX2Nsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnNvcikgewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRQcmVmZXRjaGVzOyArK2kpIHsKLSAgICAg
ICAgICAgIGJvb2wgb2sgPSBtX2N1cnNvci0+Y29udGludWVGdW5jdGlvbigpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y2xvc2UiKTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7Ci0gICAgaWYgKG1fY3Vy
c29yKQotICAgICAgICBtX2N1cnNvci0+Y2xvc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDk0
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JC
YWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKLWNsYXNz
IElEQktleVJhbmdlOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwotY2xh
c3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OwotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5k
SW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0
U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tl
bmRJbXBsKGN1cnNvciwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yQmFja2VuZEltcGwoKTsKLQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRp
bnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNo
ZXMsIGludCB1bnVzZWRQcmVmZXRjaGVzKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQotCi1wcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgQ3Vyc29yVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGlj
IHZvaWQgcHJlZmV0Y2hDb250aW51ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZl
ZEN1cnNvcjsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBDdXJz
b3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG1fb2JqZWN0U3RvcmU7Ci0gICAgCi0gICAgYm9vbCBtX2Nsb3NlZDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlz
aW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJBbnk7Ci1j
bGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJSZXF1ZXN0OwotY2xh
c3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlKCkge30KLQotICAgIGVudW0gQ3Vyc29yVHlwZSB7
Ci0gICAgICAgIEludmFsaWRDdXJzb3JUeXBlID0gMCwKLSAgICAgICAgSW5kZXhDdXJzb3IsCi0g
ICAgICAgIEluZGV4S2V5Q3Vyc29yLAotICAgICAgICBPYmplY3RTdG9yZUN1cnNvcgotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbigpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0
Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQ
cmVmZXRjaGVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2Vu
ZGlmIC8vIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJL
ZXkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkN1cnNvcldpdGhW
YWx1ZT4gSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJj
ZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCQ3Vyc29yV2l0aFZhbHVlKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNhY3Rp
b24pKTsKLX0KLQotUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhW
YWx1ZTo6ZnJvbUN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4gcHJwQ3Vyc29yKQotewotICAg
IFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGN1cnNvcldpdGhWYWx1ZShzdGF0aWNfY2FzdDxJ
REJDdXJzb3JXaXRoVmFsdWUqPihwcnBDdXJzb3IuZ2V0KCkpKTsKLSAgICByZXR1cm4gY3Vyc29y
V2l0aFZhbHVlLnJlbGVhc2UoKTsKLX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JX
aXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJ
REJSZXF1ZXN0KiByZXF1ZXN0LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQotICAgIDogSURCQ3Vyc29yKGJhY2tlbmQsIHJlcXVlc3QsIHNvdXJjZSwgdHJhbnNh
Y3Rpb24pCi17Ci19Ci0KLUlEQkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSgp
Ci17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRo
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvcldp
dGhWYWx1ZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvcldpdGhWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQkN1cnNvcldpdGhWYWx1ZV9oCi0jZGVmaW5lIElEQkN1cnNvcldpdGhWYWx1
ZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNv
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZSA6
IHB1YmxpYyBJREJDdXJzb3IgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1
cnNvcldpdGhWYWx1ZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJzb3IoUGFzc1JlZlB0
cjxJREJDdXJzb3I+KTsKLSAgICB2aXJ0dWFsIH5JREJDdXJzb3JXaXRoVmFsdWUoKTsKLQotICAg
IC8vIFRoZSB2YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUgSURMIGlzIHNpbXBseSBpbXBs
ZW1lbnRlZCBpbiBJREJDdXJzb3IgKGJ1dCBub3QgZXhwb3NlZCB2aWEKLSAgICAvLyBpdHMgSURM
KS4gVGhpcyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHNpbXBsZSB3aGlsZSBt
YXRjaGluZyB3aGF0IHRoZSBzcGVjIHNheXMuCi0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yV2l0
aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3Qq
LCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJDdXJzb3JXaXRoVmFsdWVfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAkocmV2
aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFs
dWUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3Rv
cmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFCi0gICAgXSBJREJDdXJzb3JXaXRoVmFsdWUgOiBJREJDdXJzb3IgewotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHZhbHVlOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjY1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2UuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVl
LmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgot
I2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2lu
Y2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1
ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUg
PGxpbWl0cz4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNl
PiBJREJEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBkYXRhYmFzZSkKLXsKLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlKGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZShj
b250ZXh0LCBkYXRhYmFzZSkpKTsKLSAgICBpZGJEYXRhYmFzZS0+c3VzcGVuZElmTmVlZGVkKCk7
Ci0gICAgcmV0dXJuIGlkYkRhdGFiYXNlLnJlbGVhc2UoKTsKLX0KLQotSURCRGF0YWJhc2U6OklE
QkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQotICAgIDogQWN0aXZlRE9NT2JqZWN0
KGNvbnRleHQsIHRoaXMpCi0gICAgLCBtX2JhY2tlbmQoYmFja2VuZCkKLSAgICAsIG1fY2xvc2VQ
ZW5kaW5nKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLXsKLSAgICAvLyBX
ZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRl
ZC4KLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJh
Y2tzID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUodGhpcyk7Ci19Ci0KLUlEQkRh
dGFiYXNlOjp+SURCRGF0YWJhc2UoKQotewotICAgIGNsb3NlKCk7Ci0gICAgbV9kYXRhYmFzZUNh
bGxiYWNrcy0+dW5yZWdpc3RlckRhdGFiYXNlKHRoaXMpOwotfQotCi12b2lkIElEQkRhdGFiYXNl
OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQotewotICAgIEFTU0VSVCghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgIG1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2U6OmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCBtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiA9PSB0cmFuc2FjdGlvbik7Ci0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24gPSAwOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiBv
cHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleVBhdGg7
Ci0gICAgYm9vbCBrZXlQYXRoRXhpc3RzID0gb3B0aW9ucy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soImtleVBhdGgiLCBrZXlQYXRoKTsKLSAgICBpZiAoa2V5UGF0aEV4aXN0cyAmJiAhSURC
SXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwotICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVt
ZW50IiwgYXV0b0luY3JlbWVudCk7Ci0gICAgLy8gRklYTUU6IExvb2sgdXAgZXZpY3RhYmxlIGFu
ZCBwYXNzIHRoYXQgb24gYXMgd2VsbC4KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0
U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7Ci0g
ICAgICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9i
amVjdFN0b3JlQmFja2VuZC5yZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVk
KG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24pIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmpl
Y3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
Ci0gICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1l
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRGF0YWJhc2U6
OnNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAodmVyc2lvbi5pc051bGwo
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT05fVFJBTlNJRU5UX0VS
UjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgdmVyc2lvbik7Ci0gICAgbV9iYWNrZW5kLT5zZXRW
ZXJzaW9uKHZlcnNpb24sIHJlcXVlc3QsIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKLSAgICBy
ZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJh
c2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgc3RvcmVOYW1lLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwotICAgIHN0b3JlTmFtZXMtPmFwcGVuZChzdG9yZU5hbWUpOwotICAgIHJldHVy
biB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCBlYyk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHBycFN0b3Jl
TmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBzdG9yZU5hbWVzID0gcHJwU3RvcmVOYW1lczsKLSAgICBpZiAo
IXN0b3JlTmFtZXMgfHwgc3RvcmVOYW1lcy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobW9k
ZSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9XUklURSAmJiBtb2RlICE9IElEQlRyYW5zYWN0aW9u
OjpSRUFEX09OTFkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RS
QU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV9jbG9zZVBl
bmRpbmcpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGNyZWF0
ZSBhIG5ldyB0cmFuc2FjdGlvbiBzeW5jaHJvbm91c2x5LiBMb2NrcyBhcmUgYWNxdWlyZWQgYXN5
bmNocm9ub3VzbHkuIE9wZXJhdGlvbnMKLSAgICAvLyBjYW4gYmUgcXVldWVkIGFnYWluc3QgdGhl
IHRyYW5zYWN0aW9uIGF0IGFueSBwb2ludC4gVGhleSB3aWxsIHN0YXJ0IGV4ZWN1dGluZyBhcyBz
b29uIGFzIHRoZQotICAgIC8vIGFwcHJvcHJpYXRlIGxvY2tzIGhhdmUgYmVlbiBhY3F1aXJlZC4K
LSAgICAvLyBBbHNvIG5vdGUgdGhhdCBlYWNoIGJhY2tlbmQgb2JqZWN0IGNvcnJlc3BvbmRzIHRv
IGV4YWN0bHkgb25lIElEQlRyYW5zYWN0aW9uIG9iamVjdC4KLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkJhY2tlbmQgPSBtX2JhY2tlbmQtPnRy
YW5zYWN0aW9uKHN0b3JlTmFtZXMuZ2V0KCksIG1vZGUsIGVjKTsKLSAgICBpZiAoIXRyYW5zYWN0
aW9uQmFja2VuZCkgewotICAgICAgICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0
aW9uOjpjcmVhdGUoY29udGV4dCwgdHJhbnNhY3Rpb25CYWNrZW5kLCB0aGlzKTsKLSAgICB0cmFu
c2FjdGlvbkJhY2tlbmQtPnNldENhbGxiYWNrcyh0cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmV0
dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2Uo
KQotewotICAgIGlmIChtX2Nsb3NlUGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
bG9zZVBlbmRpbmcgPSB0cnVlOwotICAgIG1fYmFja2VuZC0+Y2xvc2UobV9kYXRhYmFzZUNhbGxi
YWNrcyk7Ci0KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7Ci0gICAgLy8gUmVtb3ZlIGFu
eSBwZW5kaW5nIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHNjaGVkdWxlZCB0byBmaXJlIG9uIHRoaXMK
LSAgICAvLyBjb25uZWN0aW9uLiBUaGV5IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgYnkgdGhl
IGJhY2tlbmQgd2hlbiBhbm90aGVyCi0gICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lv
biwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCi0gICAgLy8gY2xvc2VkIGJl
Zm9yZSB0aGV5IGNvdWxkIGZpcmUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVl
dWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVl
dWUtPmNhbmNlbEV2ZW50KG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFz
ZTo6b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBlbnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUodmVy
c2lvbiwgZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlOjpvcGVuKCkKLXsKLSAgICBtX2JhY2tlbmQtPm9wZW4obV9kYXRhYmFzZUNhbGxiYWNr
cyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKLSAgICBldmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwotICAgIGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudC5nZXQoKSk7Ci0g
ICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwotfQotCi1ib29sIElEQkRhdGFiYXNl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIElEQl9UUkFD
RSgiSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
ZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCi0gICAgICAgICAgICBtX2Vu
cXVldWVkRXZlbnRzLnJlbW92ZShpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0Ojpk
aXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgp
Ci17Ci0gICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7Ci0gICAgLy8gU3RvcCBmaXJlcyBhdCBh
IGRldGVybWluaXN0aWMgdGltZSwgc28gd2UgbmVlZCB0byBjYWxsIGNsb3NlIGluIGl0LgotICAg
IGNsb3NlKCk7Ci0KLSAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLX0KLQotY29uc3QgQXRv
bWljU3RyaW5nJiBJREJEYXRhYmFzZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JJREJEYXRhYmFzZTsKLX0KLQotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogSURCRGF0YWJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJREJEYXRhYmFzZTo6ZXZlbnRUYXJnZXREYXRhKCkK
LXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQotCi1FdmVudFRhcmdldERhdGEq
IElEQkRhdGFiYXNlOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2UuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBJREJEYXRhYmFzZV9oCi0jZGVmaW5lIElEQkRhdGFiYXNlX2gKLQotI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJFdmVu
dC5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgiCi0j
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgot
I2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJEYXRhYmFzZSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZT4pOwotICAgIH5JREJEYXRhYmFzZSgpOwotCi0gICAgdm9pZCBz
ZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGNs
ZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKik7Ci0KLSAgICAvLyBJ
bXBsZW1lbnQgdGhlIElETAotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kLT5uYW1lKCk7IH0KLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZC0+dmVyc2lvbigpOyB9Ci0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9yZU5hbWVzKCk7
IH0KLQotICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0
aGlzIGlzIHVubmVlZGVkLgotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9Ci0gICAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q+IHNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOwotICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoZXJyb3IpOwotICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIodmVyc2lvbmNoYW5nZSk7Ci0KLSAgICAvLyBJREJEYXRhYmFzZUNhbGxiYWNrcwotICAgIHZp
cnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRWZXJzaW9u
KTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZF
UlJJREU7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIG9wZW4o
KTsKLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgYm9vbCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLQotICAgIHVzaW5n
IFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJE
YXRhYmFzZT46OmRlcmVmOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pOwot
Ci0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7
IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi0gICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICBib29s
IG1fY2xvc2VQZW5kaW5nOwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLQotICAgIEV2ZW50
VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKLQotICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhl
IHZlcnNpb25jaGFuZ2UgZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcwotICAgIC8v
IGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFzZSBjbG9z
ZXMuCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwotCi0gICAg
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbD4gbV9kYXRhYmFzZUNhbGxiYWNrczsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRh
YmFzZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAkocmV2aXNp
b24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAg
ICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0Ci0gICAgXSBJREJEYXRh
YmFzZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZU5hbWVzOwotCi0gICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uZXJyb3I7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udmVyc2lv
bmNoYW5nZTsKLQotICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9yZShpbiBE
T01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMpCi0gICAg
ICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURC
RGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qgc2V0VmVyc2lvbihpbiBET01TdHJpbmcgdmVy
c2lvbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCVHJhbnNhY3Rpb24gdHJhbnNh
Y3Rpb24oaW4gRE9NU3RyaW5nTGlzdCBzdG9yZU5hbWVzLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElz
VW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQotICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihpbiBET01TdHJpbmdbXSBzdG9yZU5hbWVz
LCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBtb2RlKQot
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihp
biBET01TdHJpbmcgc3RvcmVOYW1lLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1
bnNpZ25lZCBzaG9ydCBtb2RlKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2Vw
dGlvbik7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLQotICAgICAgICAvLyBFdmVudFRhcmdldCBp
bnRlcmZhY2UKLSAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5l
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKLSAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmlu
ZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25h
bF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGlu
IEV2ZW50IGV2dCkKLSAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7Ci0gICAgfTsK
LQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIDog
cHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5DYWxsPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGlu
Z09wZW5DYWxsKGNhbGxiYWNrcykpOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KLQotcHJpdmF0ZToKLSAgICBQ
ZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdEZWxldGVDYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNh
bGw+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdEZWxldGVDYWxsKGNhbGxiYWNrcykpOwotICAg
IH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9j
YWxsYmFja3M7IH0KLQotcHJpdmF0ZToKLSAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgfQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwot
fTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ1NldFZlcnNpb25DYWxsKHZlcnNpb24s
IGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgU3RyaW5nIHZlcnNp
b24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KLSAgICBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VD
YWxsYmFja3M7IH0KLQotcHJpdmF0ZToKLSAgICBQZW5kaW5nU2V0VmVyc2lvbkNhbGwoY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAg
OiBtX3ZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0g
ICAgICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0g
ICAgfQotICAgIFN0cmluZyBtX3ZlcnNpb247Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2Fs
bGJhY2tzOwotfTsKLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgOiBtX2Jh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2lkKEludmFsaWRJZCkKLSAgICAsIG1f
bmFtZShuYW1lKQotICAgICwgbV92ZXJzaW9uKCIiKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1
ZUlkZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvcihjb29yZGluYXRvcikKLXsKLSAgICBBU1NFUlQoIW1fbmFtZS5pc051bGwo
KSk7Ci0gICAgb3BlbkludGVybmFsKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b3BlbkludGVybmFsKCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+
Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pZCk7Ci0gICAgQVNT
RVJUKHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxpZElkKSk7Ci0gICAgaWYgKHN1Y2Nlc3MpIHsK
LSAgICAgICAgbG9hZE9iamVjdFN0b3JlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBt
X3ZlcnNpb24sIG1faWQpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6
IE5lZWQgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgotfQotCi1JREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJE
YXRhYmFzZUJhY2tlbmQobV9pZGVudGlmaWVyKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwotfQotCi1QYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAotewotICAg
IFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6
Y3JlYXRlKCk7Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X29iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgb2JqZWN0
U3RvcmVOYW1lcy0+c29ydCgpOwotICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIEFTU0VSVCh0cmFuc2FjdGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSk7Ci0KLSAgICBpZiAobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZS5nZXQoKSwgbV9pZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7Ci0g
ICAgQVNTRVJUKG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7Ci0KLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2Us
IG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7
Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCAgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQotewotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZDsKLQotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3Jl
LT5jcmVhdGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5hbWUoKSwg
b2JqZWN0U3RvcmUtPmtleVBhdGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSwgb2Jq
ZWN0U3RvcmVJZCkpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBvYmplY3RTdG9yZS0+c2V0SWQob2JqZWN0U3RvcmVJZCk7Ci0g
ICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotfQotCi1QYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX29iamVjdFN0
b3Jlcy5nZXQobmFtZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5n
ZXQobmFtZSk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2Fj
dGlvblB0cjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFs
LCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjphZGRPYmplY3RTdG9yZVRvTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
bikKLXsKLSAgICBkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKGRh
dGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgdHJhbnNhY3Rpb24tPmRpZENv
bXBsZXRlVGFza0V2ZW50cygpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFz
ZUNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLSAgICBpZiAo
IW1fZGF0YWJhc2VDYWxsYmFja3NTZXQuY29udGFpbnMoZGF0YWJhc2VDYWxsYmFja3MpKSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFCT1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUg
c2V0IHZlcnNpb24gdHJhbnNhY3Rpb24gd2FzIGNyZWF0ZWQiKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNr
cykKLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UodmVyc2lvbik7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5l
Y3Rpb25zIGFmdGVyIHRoZQotICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVk
LCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICBpZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5z
aXplKCkgPiAxKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7Ci0gICAgICAgIFJl
ZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRp
bmdTZXRWZXJzaW9uQ2FsbDo6Y3JlYXRlKHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpOwotICAgICAgICBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuYXBwZW5kKHBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fcnVubmlu
Z1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewotICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZl
cnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6
OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAg
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVj
dFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSwgdGhpcyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVy
bmFsLCBkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgIH0K
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKQotewotICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOwot
ICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOwotICAgIGlmICghZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGRhdGFiYXNlSWQsIGRhdGFi
YXNlLT5tX3ZlcnNpb24pKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFz
ZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8g
SS9PIGVycm9ycy4KLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5n
IGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFu
c2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25T
dGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFu
c2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgp
ID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewotICAgICAgICBBU1NFUlQoIW1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0
aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSkgewotICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5u
aW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1Bl
bmRpbmdDYWxscygpCi17Ci0gICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQgb3Ig
YWJvcnRlZAotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gcGVuZGlu
Z1NldFZlcnNpb25DYWxsczsKLSAgICBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuc3dhcChwZW5k
aW5nU2V0VmVyc2lvbkNhbGxzKTsKLSAgICB3aGlsZSAoIXBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBwZW5kaW5n
U2V0VmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBzZXRWZXJzaW9uKHBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbC0+dmVyc2lvbigpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmNhbGxiYWNr
cygpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIGVjKTsKLSAg
ICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgfQotCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQuCi0g
ICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IHBlbmRpbmdEZWxldGVDYWxsczsK
LSAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5zd2FwKHBlbmRpbmdEZWxldGVDYWxscyk7Ci0gICAg
d2hpbGUgKCFwZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQ
ZW5kaW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBwZW5kaW5nRGVsZXRlQ2FsbHMu
dGFrZUZpcnN0KCk7Ci0gICAgICAgIGRlbGV0ZURhdGFiYXNlKHBlbmRpbmdEZWxldGVDYWxsLT5j
YWxsYmFja3MoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5k
aW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAo
IW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdP
cGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gbV9wZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgp
OwotICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpKTsK
LSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RT
dG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFtX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZU5hbWVz
LT5pdGVtKGkpKSkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9U
X0ZPVU5EX0VSUjsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IFJldHVybiBub3QgYWxsb3dlZCBlcnIgaWYgY2xvc2UgaGFzIGJlZW4gY2Fs
bGVkLgotICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2JqZWN0
U3RvcmVOYW1lcywgbW9kZSwgdGhpcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PihjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29u
bmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIGlmICgh
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxs
YmFja3MpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKQotICAg
ICAgICAgICAgb3BlbkludGVybmFsKCk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRo
aXMpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRh
YmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIGlmICht
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBl
bmRpbmdEZWxldGVDYWxsOjpjcmVhdGUocHJwQ2FsbGJhY2tzKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25WZXJzaW9uQ2hhbmdlIGlmIHRoZXJlIHRoZSBj
b25uZWN0aW9uIGlzbid0IGluCi0gICAgLy8gdGhlIHByb2Nlc3Mgb2YgY2xvc2luZy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMjkKLSAgICBmb3Ig
KERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytp
dCkKLSAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSgiIik7Ci0gICAgLy8gRklYTUU6IE9u
bHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhl
Ci0gICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1
cCB0byBmaXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MTEzMAotICAgIGlmICghbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVh
dGUoY2FsbGJhY2tzKSk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2Uo
bV9uYW1lKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9y
LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3ZlcnNpb24gPSAiIjsKLSAgICBt
X2lkID0gSW52YWxpZElkOwotICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0gICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIEFTU0VSVChtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQucmVtb3ZlKGNhbGxiYWNrcyk7Ci0gICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6
ZSgpID4gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQotewot
ICAgIFZlY3RvcjxpbnQ2NF90PiBpZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAg
VmVjdG9yPFN0cmluZz4ga2V5UGF0aHM7Ci0gICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRG
bGFnczsKLSAgICBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1faWQsIGlkcywgbmFt
ZXMsIGtleVBhdGhzLCBhdXRvSW5jcmVtZW50RmxhZ3MpOwotCi0gICAgQVNTRVJUKG5hbWVzLnNp
emUoKSA9PSBpZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoa2V5UGF0aHMuc2l6ZSgpID09IGlkcy5z
aXplKCkpOwotICAgIEFTU0VSVChhdXRvSW5jcmVtZW50RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2lkLCBpZHNbaV0sIG5hbWVzW2ldLCBr
ZXlQYXRoc1tpXSwgYXV0b0luY3JlbWVudEZsYWdzW2ldKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQotewotICAgIEFT
U0VSVChkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUtPm5hbWUo
KSkpOwotICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPm5h
bWUoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVU
b01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSkKLXsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmVQdHIgPSBvYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+bmFtZSgpKSk7Ci0gICAgZGF0YWJhc2Ut
Pm1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZVB0ci0+bmFtZSgpLCBvYmplY3RTdG9yZVB0
cik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgZGF0YWJhc2UtPm1fdmVyc2lv
biA9IHZlcnNpb247Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZEltcGxf
aAotI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKLQotI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElEQkJhY2tpbmdTdG9yZTsKLWNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRmFj
dG9yeUJhY2tlbmRJbXBsOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLWNsYXNz
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25z
dCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgZGF0YWJhc2UsIGNvb3JkaW5hdG9y
LCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkRh
dGFiYXNlQmFja2VuZEltcGwoKTsKLQotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUoKSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJ
ZCA9IDA7Ci0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIC8v
IEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBsaWtl
IHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCi0gICAgdm9pZCBvcGVuKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KTsKLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3Zl
cnNpb247IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3Rv
cmVOYW1lcygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihj
b25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01T
dHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KTsKLQotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRl
ZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZvaWQg
dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4pOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVu
dGlmaWVyKTsKLQotICAgIHZvaWQgb3BlbkludGVybmFsKCk7Ci0gICAgdm9pZCBsb2FkT2JqZWN0
U3RvcmVzKCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKLQotICAgIC8vIFRoZXNl
IGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCi0gICAgc3Rh
dGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBhZGRPYmplY3RTdG9yZVRvTWFw
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMg
dm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBpbnQ2NCBtX2lkOwotICAg
IFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fdmVyc2lvbjsKLQotICAgIFN0cmluZyBtX2lk
ZW50aWZpZXI7Ci0gICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5j
ZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBp
dCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KLSAgICBSZWZQdHI8SURC
RmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gPiBPYmplY3RTdG9yZU1hcDsK
LSAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKLQotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uOwotCi0gICAgY2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxsOwotICAgIERlcXVl
PFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxz
OwotCi0gICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwotICAgIERlcXVlPFJlZlB0cjxQZW5kaW5n
T3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwotCi0gICAgY2xhc3MgUGVuZGluZ0RlbGV0
ZUNhbGw7Ci0gICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0Rl
bGV0ZUNhbGxzOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci0gICAgRGF0YWJhc2VDYWxsYmFja3NT
ZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIElEQkNhbGxiYWNrczsK
LWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBUaGlzIGNsYXNzIGlzIHNoYXJlZCBieSBJREJE
YXRhYmFzZSAoYXN5bmMpIGFuZCBJREJEYXRhYmFzZVN5bmMgKHN5bmMpLgotLy8gVGhpcyBpcyBp
bXBsZW1lbnRlZCBieSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIGFuZCBvcHRpb25hbGx5IG90aGVy
cyAoaW4gb3JkZXIgdG8gcHJveHkKLS8vIGNhbGxzIGFjcm9zcyBwcm9jZXNzIGJhcnJpZXJzKS4g
QWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1ibG9ja2luZyBhbmQKLS8v
IHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5lY2Vzc2FyeS4KLWNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5J
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5h
bWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygp
IGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lv
bihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24oRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgJKHJl
dmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxs
YmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
REJEYXRhYmFzZUNhbGxiYWNrc19oCi0jZGVmaW5lIElEQkRhdGFiYXNlQ2FsbGJhY2tzX2gKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJh
c2VDYWxsYmFja3M+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUNhbGxiYWNr
cygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJpbmcm
IHZlcnNpb24pID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCIKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbD4g
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpjcmVhdGUoSURCRGF0YWJhc2UqIGRhdGFiYXNlKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKGRhdGFi
YXNlKSk7Ci19Ci0KLUlEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6SURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsKElEQkRhdGFiYXNlKiBkYXRhYmFzZSkKLSAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2Up
Ci17Ci19Ci0KLUlEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6fklEQkRhdGFiYXNlQ2FsbGJhY2tz
SW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpvblZlcnNpb25D
aGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIGlmIChtX2RhdGFiYXNlKQotICAg
ICAgICBtX2RhdGFiYXNlLT5vblZlcnNpb25DaGFuZ2UodmVyc2lvbik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsOjp1bnJlZ2lzdGVyRGF0YWJhc2UoSURCRGF0YWJhc2UqIGRh
dGFiYXNlKQotewotICAgIEFTU0VSVChkYXRhYmFzZSA9PSBtX2RhdGFiYXNlKTsKLSAgICBtX2Rh
dGFiYXNlID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGxfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJEYXRhYmFzZTsKLQotY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsIDogcHVibGlj
IElEQkRhdGFiYXNlQ2FsbGJhY2tzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IGNyZWF0ZShJREJEYXRhYmFzZSopOwotICAgIHZpcnR1
YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOwotCi0gICAgdmlydHVhbCB2b2lkIG9uVmVy
c2lvbkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZvaWQgdW5yZWdpc3RlckRh
dGFiYXNlKElEQkRhdGFiYXNlKik7Ci0KLXByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsKElEQkRhdGFiYXNlKik7Ci0KLSAgICAvLyBtX2RhdGFiYXNlIGhhcyBhIFJlZlB0ciB0
byB0aGlzLCBzbyB1c2UgYSB3ZWFrIHBvaW50ZXIgdG8gYXZvaWQgYSBjeWNsZS4KLSAgICBJREJE
YXRhYmFzZSogbV9kYXRhYmFzZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlRXJyb3JfaAotI2Rl
ZmluZSBJREJEYXRhYmFzZUVycm9yX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUVycm9y
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VFcnJvcj4gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBzaG9ydCBj
b2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoY29kZSA+
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQpOwotICAg
ICAgICBBU1NFUlQoY29kZSA8IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJEYXRhYmFzZUV4Y2Vw
dGlvbk1heCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VFcnJvcihj
b2RlIC0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQkRhdGFiYXNlRXhjZXB0aW9uT2Zmc2V0LCBt
ZXNzYWdlKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gY3JlYXRlV2l0aG91dE9mZnNldCh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoY29kZSA8IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJEYXRhYmFzZUV4Y2VwdGlvbk9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCRGF0YWJhc2VFcnJvcihjb2RlLCBtZXNzYWdlKSk7Ci0gICAgfQotCi0gICAgfklE
QkRhdGFiYXNlRXJyb3IoKSB7IH0KLQotICAgIHVuc2lnbmVkIHNob3J0IGNvZGUoKSBjb25zdCB7
IHJldHVybiBtX2NvZGU7IH0KLSAgICB2b2lkIHNldENvZGUodW5zaWduZWQgc2hvcnQgdmFsdWUp
IHsgbV9jb2RlID0gdmFsdWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UoKSBjb25zdCB7
IHJldHVybiBtX21lc3NhZ2U7IH0KLSAgICB2b2lkIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgeyBtX21lc3NhZ2UgPSB2YWx1ZTsgfQotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNl
RXJyb3IodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAg
ICA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1lc3NhZ2UpIHsgfQotCi0gICAgdW5zaWduZWQg
c2hvcnQgbV9jb2RlOwotICAgIFN0cmluZyBtX21lc3NhZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VFcnJvcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5pZGwJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsK
LQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UK
LSAgICBdIElEQkRhdGFiYXNlRXJyb3IgewotICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hv
cnQgY29kZTsKLSAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwotICAgIH07Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRp
b24uY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygc3RydWN0cyB0byBwYWlyIHRoZSBu
YW1lcyBhbmQgZGVzY3JpcHRpb25zLgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlv
bk5hbWVzW10gPSB7Ci0gICAgIlVOS05PV05fRVJSIiwKLSAgICAiTk9OX1RSQU5TSUVOVF9FUlIi
LAotICAgICJOT1RfRk9VTkRfRVJSIiwKLSAgICAiQ09OU1RSQUlOVF9FUlIiLAotICAgICJEQVRB
X0VSUiIsCi0gICAgIk5PVF9BTExPV0VEX0VSUiIsCi0gICAgIlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUiIsCi0gICAgIkFCT1JUX0VSUiIsCi0gICAgIlJFQURfT05MWV9FUlIiLAotICAgICJUSU1F
T1VUX0VSUiIsCi0gICAgIlFVT1RBX0VSUiIsCi0gICAgIlZFUl9FUlIiCi19OwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXhjZXB0aW9uRGVzY3JpcHRpb25zW10gPSB7Ci0gICAgIkFuIHVu
a25vd24gZXJyb3Igb2NjdXJyZWQgd2l0aGluIEluZGV4ZWQgRGF0YWJhc2UuIiwKLSAgICAiTk9O
X1RSQU5TSUVOVF9FUlIiLCAvLyBGSVhNRTogV3JpdGUgYSBiZXR0ZXIgbWVzc2FnZSBpZiBpdCdz
IGV2ZXIgcG9zc2libGUgdGhpcyBpcyB0aHJvd24uCi0gICAgIlRoZSBuYW1lIHN1cHBsaWVkIGRv
ZXMgbm90IG1hdGNoIGFueSBleGlzdGluZyBpdGVtLiIsCi0gICAgIlRoZSByZXF1ZXN0IGNhbm5v
dCBiZSBjb21wbGV0ZWQgZHVlIHRvIGEgZmFpbGVkIGNvbnN0cmFpbnQuIiwKLSAgICAiVGhlIGRh
dGEgcHJvdmlkZWQgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBmdW5jdGlv
bi4iLAotICAgICJUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGNhbGxlZCBpbiBz
dWNoIGEgY29udGV4dC4iLAotICAgICJBIHJlcXVlc3Qgd2FzIHBsYWNlZCBhZ2FpbnN0IGEgdHJh
bnNhY3Rpb24gd2hpY2ggaXMgZWl0aGVyIGN1cnJlbnRseSBub3QgYWN0aXZlLCBvciB3aGljaCBp
cyBmaW5pc2hlZC4iLAotICAgICJUaGUgdHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQsIHNvIHRoZSBy
ZXF1ZXN0IGNhbm5vdCBiZSBmdWxmaWxsZWQuIiwKLSAgICAiQSB3cml0ZSBvcGVyYXRpb24gd2Fz
IGF0dGVtcHRlZCBpbiBhIHJlYWQtb25seSB0cmFuc2FjdGlvbi4iLAotICAgICJBIGxvY2sgZm9y
IHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBub3QgYmUgb2J0YWluZWQgaW4gYSByZWFzb25hYmxlIHRp
bWUuIiwgLy8gRklYTUU6IFRoaXMgaXNuJ3QgdXNlZCB5ZXQuCi0gICAgIlRoZSBvcGVyYXRpb24g
ZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3Bh
Y2UsIG9yIHRoZSBzdG9yYWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5l
ZCB0byBnaXZlIG1vcmUgc3BhY2UgdG8gdGhlIGRhdGFiYXNlLiIsIC8vIEZJWE1FOiBUaGlzIGlz
bid0IHVzZWQgeWV0Ci0gICAgIkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gb3BlbiBhIGRhdGFiYXNl
IHVzaW5nIGEgbG93ZXIgdmVyc2lvbiB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uLiIsIC8vIEZJ
WE1FOiBUaGlzIGlzbid0IHVzZWQgeWV0Ci19OwotCi1DT01QSUxFX0FTU0VSVChXVEZfQVJSQVlf
TEVOR1RIKGV4Y2VwdGlvbk5hbWVzKSA9PSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbkRlc2Ny
aXB0aW9ucyksIElEQkRhdGFiYXNlRXhjZXB0aW9uVGFibGVzTXVzdE1hdGNoKTsKLQotYm9vbCBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6aW5pdGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUg
ZWMsIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiogZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKGVj
IDwgSURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQgfHwgZWMgPiBJREJEYXRhYmFzZUV4Y2VwdGlv
bk1heCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGVzY3JpcHRpb24tPnR5cGVOYW1l
ID0gIkRPTSBJREJEYXRhYmFzZSI7Ci0gICAgZGVzY3JpcHRpb24tPmNvZGUgPSBlYyAtIElEQkRh
dGFiYXNlRXhjZXB0aW9uT2Zmc2V0OwotICAgIGRlc2NyaXB0aW9uLT50eXBlID0gSURCRGF0YWJh
c2VFeGNlcHRpb25UeXBlOwotCi0gICAgc2l6ZV90IHRhYmxlU2l6ZSA9IFdURl9BUlJBWV9MRU5H
VEgoZXhjZXB0aW9uTmFtZXMpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gZWMgLSBVTktOT1dO
X0VSUjsKLQotICAgIGRlc2NyaXB0aW9uLT5uYW1lID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/
IGV4Y2VwdGlvbk5hbWVzW3RhYmxlSW5kZXhdIDogMDsKLSAgICBkZXNjcmlwdGlvbi0+ZGVzY3Jp
cHRpb24gPSB0YWJsZUluZGV4IDwgdGFibGVTaXplID8gZXhjZXB0aW9uRGVzY3JpcHRpb25zW3Rh
YmxlSW5kZXhdIDogMDsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFz
ZUV4Y2VwdGlvbl9oCi0jZGVmaW5lIElEQkRhdGFiYXNlRXhjZXB0aW9uX2gKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQmFzZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNlRXhjZXB0aW9uIDogcHVibGljIEV4
Y2VwdGlvbkJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXhjZXB0aW9uPiBjcmVhdGUoY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VFeGNl
cHRpb24oZGVzY3JpcHRpb24pKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IElEQkRh
dGFiYXNlRXhjZXB0aW9uT2Zmc2V0ID0gMTIwMDsKLSAgICBzdGF0aWMgY29uc3QgaW50IElEQkRh
dGFiYXNlRXhjZXB0aW9uTWF4ID0gMTI5OTsKLQotICAgIGVudW0gSURCRGF0YWJhc2VFeGNlcHRp
b25Db2RlIHsKLSAgICAgICAgTk9fRVJSID0gSURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQsCi0g
ICAgICAgIFVOS05PV05fRVJSLAotICAgICAgICBOT05fVFJBTlNJRU5UX0VSUiwKLSAgICAgICAg
Tk9UX0ZPVU5EX0VSUiwKLSAgICAgICAgQ09OU1RSQUlOVF9FUlIsCi0gICAgICAgIERBVEFfRVJS
LAotICAgICAgICBOT1RfQUxMT1dFRF9FUlIsCi0gICAgICAgIFRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUiwKLSAgICAgICAgQUJPUlRfRVJSLAotICAgICAgICBSRUFEX09OTFlfRVJSLAotICAgICAg
ICBUSU1FT1VUX0VSUiwKLSAgICAgICAgUVVPVEFfRVJSLAotICAgICAgICBWRVJfRVJSCi0gICAg
fTsKLQotICAgIHN0YXRpYyBpbnQgRXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKGludCBlcnJvckNv
ZGUpCi0gICAgewotICAgICAgICBpZiAoIWVycm9yQ29kZSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gZXJyb3JDb2RlICsgSURCRGF0YWJhc2VFeGNlcHRpb25PZmZzZXQ7
Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlv
bkNvZGUsIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiopOwotCi1wcml2YXRlOgotICAgIElEQkRh
dGFiYXNlRXhjZXB0aW9uKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCi0gICAgICAgIDogRXhjZXB0aW9uQmFzZShkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAgfQot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRh
dGFiYXNlRXhjZXB0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VFeGNlcHRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VFeGNlcHRpb24uaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICAgICAgRG9Ob3RDaGVja0Nv
bnN0YW50cwotICAgIF0gSURCRGF0YWJhc2VFeGNlcHRpb24gewotCi0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAgIGNvZGU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG1lc3NhZ2U7Ci0KLSNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJ
UFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKLSAgICAgICAgLy8gT3ZlcnJpZGUgaW4gYSBNb3pp
bGxhIGNvbXBhdGlibGUgZm9ybWF0Ci0gICAgICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcg
dG9TdHJpbmcoKTsKLSNlbmRpZgotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PX0VS
UiA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMTsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9OX1RSQU5TSUVOVF9FUlIgPSAyOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RfRk9VTkRfRVJSID0gMzsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgQ09OU1RSQUlOVF9FUlIgPSA0OwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBEQVRBX0VSUiA9IDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9B
TExPV0VEX0VSUiA9IDY7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRSQU5TQUNUSU9O
X0lOQUNUSVZFX0VSUiA9IDc7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFCT1JUX0VS
UiA9IDg7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWV9FUlIgPSA5Owot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDEwOwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBRVU9UQV9FUlIgPSAxMTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgVkVSX0VSUiA9IDEyOwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklE
QkV2ZW50RGlzcGF0Y2hlci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVu
dCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiYgZXZlbnRUYXJnZXRzKQotewotICAgIHNp
emVfdCBzaXplID0gZXZlbnRUYXJnZXRzLnNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZSk7Ci0KLSAg
ICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxl
bWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdl
dCgpKTsKLSAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQp
OwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQotICAgICAgICAgICAg
Z290byBkb25lRGlzcGF0Y2hpbmc7Ci0gICAgfQotCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJn
ZXRzWzBdLmdldCgpKTsKLSAgICBldmVudFRhcmdldHNbMF0tPmZpcmVFdmVudExpc3RlbmVycyhl
dmVudCk7Ci0gICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAhZXZlbnQtPmJ1
YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCi0gICAgICAgIGdvdG8gZG9uZURpc3Bh
dGNoaW5nOwotCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgeyAvLyBEb24ndCBkbyB0
aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRU
YXJnZXRzW2ldLmdldCgpKTsKLSAgICAgICAgZXZlbnRUYXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0
ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8
IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKLSAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5n
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiAiLi4uSG93ZXZlciwgd2UgYWxzbyB3YW50ZWQgdG8g
aW50ZWdyYXRlIHRoZSB3aW5kb3cub25lcnJvciBmZWF0dXJlIGluCi0gICAgLy8gICAgICAgIEhU
TUw1LiBTbyBhZnRlciB3ZSd2ZSBmaXJlZCBhbiAiZXJyb3IiIGV2ZW50LCBpZiAucHJldmVudERl
ZmF1bHQoKSB3YXMKLSAgICAvLyAgICAgICAgbmV2ZXIgY2FsbGVkIG9uIHRoZSBldmVudCwgd2Ug
ZmlyZSBhbiBlcnJvciBldmVudCBvbiB0aGUgd2luZG93IChjYW4ndAotICAgIC8vICAgICAgICBy
ZW1lbWJlciBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIG9yIGFmdGVyIHdlIGFib3J0IHRoZSB0cmFu
c2FjdGlvbikuCi0gICAgLy8gICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0ZSBldmVudCwgd2hpY2gg
Zm9yIGV4YW1wbGUgbWVhbnMgdGhhdCBldmVuIGlmIHlvdQotICAgIC8vICAgICAgICBhdHRhY2gg
YSBjYXB0dXJpbmcgImVycm9yIiBoYW5kbGVyIG9uIHdpbmRvdywgeW91IHdvbid0IHNlZSBhbnkg
ZXZlbnRzCi0gICAgLy8gICAgICAgIHVubGVzcyBhbiBlcnJvciByZWFsbHkgd2VudCB1bmhhbmRs
ZWQuIEFuZCB5b3UgYWxzbyBjYW4ndCBjYWxsCi0gICAgLy8gICAgICAgIC5wcmV2ZW50RGVmYXVs
dCBvbiB0aGUgZXJyb3IgZXZlbnQgZmlyZWQgb24gdGhlIHdpbmRvdyBpbiBvcmRlciB0bwotICAg
IC8vICAgICAgICBwcmV2ZW50IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGJlaW5nIGFib3J0ZWQuIEl0
J3MgcHVyZWx5IHRoZXJlIGZvcgotICAgIC8vICAgICAgICBlcnJvciByZXBvcnRpbmcgYW5kIGRp
c3RpbmN0bHkgZGlmZmVyZW50IGZyb20gdGhlIGV2ZW50IHByb3BhZ2F0aW5nIHRvCi0gICAgLy8g
ICAgICAgIHRoZSB3aW5kb3cuCi0gICAgLy8gICAgICAgIAotICAgIC8vICAgICAgICBUaGlzIGlz
IHNpbWlsYXIgdG8gaG93ICJlcnJvciIgZXZlbnRzIGFyZSBoYW5kbGVkIGluIHdvcmtlcnMuCi0g
ICAgLy8gICAgICAgIAotICAgIC8vICAgICAgICAoSSB0aGluayB0aGF0IHNvIGZhciB3ZWJraXQg
aGFzbid0IGltcGxlbWVudGVkIHRoZSB3aW5kb3cub25lcnJvcgotICAgIC8vICAgICAgICBmZWF0
dXJlIHlldCwgc28geW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gZmlyZSB0aGUgc2VwYXJhdGUg
ZXJyb3IKLSAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1bnRpbCB0aGF0IGhhcyBi
ZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKLQotZG9uZURpc3BhdGNoaW5nOgot
ICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KDApOwotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRXZlbnREaXNwYXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJFdmVudERpc3BhdGNoZXIuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJFdmVudERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBJREJFdmVudERpc3BhdGNoZXJfaAotI2RlZmluZSBJREJFdmVudERp
c3BhdGNoZXJfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEV2ZW50OwotY2xhc3MgRXZlbnRUYXJnZXQ7Ci0KLWNsYXNzIElEQkV2ZW50
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBW
ZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0PiA+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRo
ZW4gaXRzIGFuY2VzdG9ycyBpbiBvcmRlciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCi0KLXBy
aXZhdGU6Ci0gICAgSURCRXZlbnREaXNwYXRjaGVyKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8v
IElEQkV2ZW50RGlzcGF0Y2hlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJHcm91cFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
LSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JREJGYWN0b3J5OjpJREJGYWN0b3J5KElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQotICAgIDogbV9iYWNrZW5kKGZhY3RvcnkpCi17Ci0gICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLUlEQkZhY3Rvcnk6
On5JREJGYWN0b3J5KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5
OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0g
ICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IG1ha2Ug
dGhpcyB3b3JrIHdpdGggd29ya2Vycy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKLSAg
ICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgR3JvdXBTZXR0
aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0
aW5ncygpOwotICAgIG1fYmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmlu
ZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
QVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSB8fCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSk7Ci0KLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpOT05fVFJBTlNJRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGlmIChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKLSAgICAgICAgaWYgKCFkb2N1
bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICAgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIDApOwotICAgICAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgcmVx
dWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUsIFN0cmluZygpKTsK
LSAgICAgICAgcmV0dXJuIHJlcXVlc3Q7Ci0gICAgfQotI2lmIEVOQUJMRShXT1JLRVJTKQotICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICBtX2JhY2tlbmQtPm9wZW5Gcm9tV29ya2Vy
KG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIHN0YXRpY19j
YXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSwgU3RyaW5nKCkpOwotICAgIHJldHVybiByZXF1
ZXN0OwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1QYXNzUmVmUHRyPElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmICghY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29u
dGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT05fVFJBTlNJRU5UX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55Ojpj
cmVhdGVOdWxsKCksICIiKTsKLSAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9j
dW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5k
ZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwg
ZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgp
KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotc2hvcnQgSURCRmFjdG9yeTo6Y21wKFBhc3NS
ZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGZpcnN0KTsKLSAgICBBU1NFUlQoc2Vjb25kKTsKLQot
ICAgIGlmIChmaXJzdC0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUgfHwgc2Vjb25kLT50
eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgICAKLSAgICAK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGZpcnN0LT5jb21wYXJlKHNlY29uZC5nZXQo
KSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeV9oCi0jZGVmaW5l
IElEQkZhY3RvcnlfaAotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IElEQktleTsKLWNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U7Ci1jbGFzcyBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDsKLWNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkZh
Y3RvcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJGYWN0b3J5PiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gY3JlYXRlKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKiBmYWN0b3J5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0
b3J5KGZhY3RvcnkpKTsKLSAgICB9Ci0gICAgfklEQkZhY3RvcnkoKTsKLQotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHNob3J0
IGNtcChQYXNzUmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQs
IEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKik7Ci0KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U+IG1fYmFja2VuZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJGYWN0b3J5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRQotICAgIF0gSURCRmFjdG9yeSB7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGdldERhdGFiYXNlTmFtZXMoKTsKLQotICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuKGluIERP
TVN0cmluZyBuYW1lKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdCBkZWxldGVEYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSkKLSAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotCi0gICAgICAgIHNob3J0IGNtcChpbiBJ
REJLZXkgZmlyc3QsIGluIElEQktleSBzZWNvbmQpCi0gICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0Lmgi
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZUZpbGVJZGVudGlmaWVyKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBrTGV2ZWxEQkZp
bGVTdWZmaXhbXSA9ICJAMSI7Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlk
ZW50aWZpZXIoKSArIGtMZXZlbERCRmlsZVN1ZmZpeDsKLX0KLQotc3RhdGljIFN0cmluZyBjb21w
dXRlVW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbikKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3Vy
aXR5T3JpZ2luKSArIG5hbWU7Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9y
eUJhY2tlbmRJbXBsKCkKLSAgICA6IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKLXsKLX0KLQotSURCRmFjdG9yeUJhY2tlbmRJbXBs
Ojp+SURCRmFjdG9yeUJhY2tlbmRJbXBsKCkKLXsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VCYWNrZW5kTWFwLmNvbnRhaW5zKHVuaXF1
ZUlkZW50aWZpZXIpKTsKLSAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRl
bnRpZmllcik7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjphZGRJREJCYWNraW5n
U3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlKiBiYWNr
aW5nU3RvcmUpCi17Ci0gICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZU1hcC5jb250YWlucyhmaWxl
SWRlbnRpZmllcikpOwotICAgIG1fYmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwg
YmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlE
QkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKQotewotICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZU1hcC5jb250YWlucyhmaWxlSWRlbnRpZmllcikpOwotICAgIG1fYmFj
a2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBk
YXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBmb3VuZE5hbWVzOwotICAgIGJh
Y2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VOYW1lcyhmb3VuZE5hbWVzKTsKLSAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvdW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0g
Zm91bmROYW1lcy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YWJhc2VOYW1lcy0+YXBwZW5kKCpp
dCk7Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7
Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAg
ICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVj
dG9yeSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihj
b25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBz
ZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBjb25z
dCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUs
IHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwot
ICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVs
ZXRlIHRoZQotICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRl
RGF0YWJhc2UoY2FsbGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhy
ZWFkLgotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNr
aW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAgIGlmICghYmFja2lu
Z1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3Iu
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0
KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci0gICAgZGF0YWJhc2VC
YWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwotfQotCi1QYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXJlY3RvcnkpCi17Ci0gICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZp
bGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQotICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKLSAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9y
IGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwotICAgIGlmIChp
dDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0
Mi0+c2Vjb25kOwotICAgIGVsc2UgewotI2lmIFVTRShMRVZFTERCKQotICAgICAgICBiYWNraW5n
U3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7Ci0jZWxzZQotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGlmIChiYWNraW5nU3Rv
cmUpCi0gICAgICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gcHJwU2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkK
LXsKLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gcHJwU2VjdXJp
dHlPcmlnaW47Ci0gICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5p
cXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1
bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5k
KCkpIHsKLSAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRv
IHdhaXQgZm9yIGFueSBwZW5kaW5nCi0gICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29t
cGxldGUuCi0gICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5v
dyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2lu
LCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tl
bmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdl
dCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZp
ZXIpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U+KGRhdGFiYXNlQmFja2VuZC5nZXQoKSkucmVsZWFzZSgpKTsKLSAgICBtX2RhdGFi
YXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0jaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRE9NU3RyaW5nTGlzdDsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0K
LWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tl
bmRJbXBsPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJG
YWN0b3J5QmFja2VuZEltcGwoKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNr
ZW5kSW1wbCgpOwotCi0gICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCi0g
ICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVu
dGlmaWVyKTsKLSAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJ
ZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKLSAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdT
dG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2
aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFj
a3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi1wcml2YXRlOgotICAg
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOwotICAgIHZvaWQgb3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwotICAgIElEQkRhdGFiYXNlQmFja2VuZE1h
cCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElE
QkJhY2tpbmdTdG9yZSo+IElEQkJhY2tpbmdTdG9yZU1hcDsKLSAgICBJREJCYWNraW5nU3RvcmVN
YXAgbV9iYWNraW5nU3RvcmVNYXA7Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi0gICAgLy8gT25seSBvbmUgaW5zdGFu
Y2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBnaXZlbiB0aW1lLgotICAgIHN0
YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlCYWNrZW5kSW1wbDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJGYWN0b3J5
QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotI2Vycm9yICJDaHJvbWl1bSBzaG91
bGQgbm90IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBpbnN0ZWFkIGRlZmluZSBpdHMgb3duIHZlcnNp
b24gb2YgdGhpcyBmYWN0b3J5IHRoYXQgbmF2aWdhdGVzIHRoZSBtdWx0aS1wcm9jZXNzIGJvdW5k
cnkuIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpjcmVhdGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAx
MDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAot
Ci0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xh
c3MgV29ya2VyQ29udGV4dDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotLy8gVGhp
cyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCRmFjdG9yeSAoYXN5bmMpIGFuZCBJREJGYWN0b3J5U3lu
YyAoc3luYykuCi0vLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IElEQkZhY3RvcnlCYWNrZW5kSW1w
bCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jv
c3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBi
ZSBub24tYmxvY2tpbmcgYW5kCi0vLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVh
ZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBj
cmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKLQotI2VuZGlmIC8vIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwotCi1JREJJbmRl
eDo6SURCSW5kZXgoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQs
IElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQotICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV9i
YWNrZW5kKTsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb24pOwotfQotCi1JREJJbmRleDo6fklEQkluZGV4KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4
OjpvcGVuQ3Vyc29yIik7Ci0gICAgaWYgKGRpcmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYg
ZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9
IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rpb24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJ
Q0FURSkgewotICAgICAgICAvLyBGSVhNRTogTWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2Nl
ZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEN1cnNvcik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJh
bmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwot
ICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4Ojpjb3VudCIpOwotICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRl
KHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJh
bmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklE
QkluZGV4Ojpjb3VudCIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJL
ZXlSYW5nZTo6b25seShrZXksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7Ci0gICAgaWYgKGRpcmVjdGlvbiAhPSBJ
REJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNB
VEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rpb24gIT0gSURCQ3Vy
c29yOjpQUkVWX05PX0RVUExJQ0FURSkgewotICAgICAgICAvLyBGSVhNRTogTWF5IG5lZWQgdG8g
Y2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19i
dWcuY2dpP2lkPTExNDA2Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNU
UkFJTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlw
ZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcik7Ci0gICAgbV9iYWNr
ZW5kLT5vcGVuS2V5Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5t
YXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
cXVlc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXQiKTsKLSAgICBpZiAo
a2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwot
ICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIElEQl9UUkFDRSgiSURCSW5kZXg6OmdldEtleSIpOwotICAgIGlmIChrZXkgJiYgKGtl
eS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNr
ZW5kLT5nZXRLZXkoa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBJREJJbmRleF9oCi0jZGVmaW5lIElEQkluZGV4X2gKLQotI2luY2x1
ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgot
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElE
Qk9iamVjdFN0b3JlOwotCi1jbGFzcyBJREJJbmRleCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQklu
ZGV4PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCT2JqZWN0U3Rv
cmUqIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4KGJhY2tlbmQsIG9iamVjdFN0b3JlLCB0
cmFuc2FjdGlvbikpOwotICAgIH0KLSAgICB+SURCSW5kZXgoKTsKLQotICAgIC8vIEltcGxlbWVu
dCB0aGUgSURMCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPm5h
bWUoKTsgfQotICAgIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb2JqZWN0U3RvcmUuZ2V0KCk7IH0KLSAgICBTdHJpbmcga2V5UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZC0+a2V5UGF0aCgpOyB9Ci0gICAgYm9vbCB1bmlxdWUoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmQtPnVuaXF1ZSgpOyB9Ci0gICAgYm9vbCBtdWx0aUVudHJ5KCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kLT5tdWx0aUVudHJ5KCk7IH0KLQotICAgIC8vIEZJWE1FOiBUcnkg
dG8gbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCAw
LCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdl
LCBJREJDdXJzb3I6Ok5FWFQsIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktl
eVJhbmdlKj4oMCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4
dCwgMCwgZWMpOyB9IAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4
dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6TkVYVCwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotCi1wcml2YXRlOgotICAgIElEQkluZGV4KFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiwgSURCT2JqZWN0U3RvcmUqLCBJREJUcmFuc2Fj
dGlvbiopOwotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5k
OwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCSW5kZXhfaApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJJbmRleC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXguaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFCi0gICAgXSBJREJJbmRleCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQk9i
amVjdFN0b3JlIG9iamVjdFN0b3JlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGtleVBhdGg7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlFbnRyeTsKLQotICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuQ3Vyc29y
KGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UsIGluIFtPcHRpb25hbF0gdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0
IG9wZW5LZXlDdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlv
bmFsXSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCi0gICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgZ2V0S2V5KGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSBy
YW5nZSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBJ
REJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0g
ICAgfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZElt
cGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURC
Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2lu
Y2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5n
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5k
ZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tl
bmQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkK
LSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5k
KQotICAgICwgbV9pZChpZCkKLSAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9zdG9yZU5hbWUo
c3RvcmVOYW1lKQotICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCi0gICAgLCBtX3VuaXF1ZSh1bmlx
dWUpCi0gICAgLCBtX211bHRpRW50cnkobXVsdGlFbnRyeSkKLXsKLX0KLQotSURCSW5kZXhCYWNr
ZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBv
YmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9y
ZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fZGF0YWJhc2VJ
ZChkYXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNr
ZW5kKQotICAgICwgbV9pZChJbnZhbGlkSWQpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1f
c3RvcmVOYW1lKHN0b3JlTmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV91
bmlxdWUodW5pcXVlKQotICAgICwgbV9tdWx0aUVudHJ5KG11bHRpRW50cnkpCi17Ci19Ci0KLUlE
QkluZGV4QmFja2VuZEltcGw6On5JREJJbmRleEJhY2tlbmRJbXBsKCkKLXsKLX0KLQotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1bnR5cGVkRGlyZWN0aW9uLCBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOwotICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih1bnR5cGVkRGlyZWN0
aW9uKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3Jl
Q3Vyc29yOwotCi0gICAgc3dpdGNoIChjdXJzb3JUeXBlKSB7Ci0gICAgY2FzZSBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcjoKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPm1f
ZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQo
KSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5t
X2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlk
KCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yOgotICAgIGNhc2UgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGU6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKGluZGV4LT5t
X3N0b3JlTmFtZSwgZWMpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSAmJiAhZWMpOwotCi0gICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBkaXJlY3Rpb24sIGN1cnNv
clR5cGUsIHRyYW5zYWN0aW9uLmdldCgpLCBvYmplY3RTdG9yZS5nZXQoKSk7Ci0gICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6
Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0
aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKLSAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2Fj
dGlvblB0cjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IiKTsK
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vy
c29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJu
YWwiKTsKLSAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+
b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5F
WFQpOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIGJh
Y2tpbmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7Ci19Ci0KLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgi
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIGJvb2wgZ2V0
T2JqZWN0LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9U
UkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKLSAgICAvLyBGSVhNRTog
U3BsaXQgZ2V0SW50ZXJuYWwgaW50byB0d28gZnVuY3Rpb25zLCBnZXR0aW5nIHJpZCBvZmYgfGdl
dE9iamVjdHwuCi0gICAgaWYgKGdldE9iamVjdCkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBp
bmRleC0+bV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNl
SWQsIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkp
OwotICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5tX2JhY2tpbmdT
dG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwotICAgICAgICBp
ZiAoIWtleVJlc3VsdCkgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGlj
X2Nhc3Q8SURCS2V5Kj4oMCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7Ci0gICAgfQotfQotCi12
b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldCIpOwotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5
OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRJ
bnRlcm5hbCwgaW5kZXgsIGtleSwgdHJ1ZSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkiKTsKLSAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtl
eTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0
SW50ZXJuYWwsIGluZGV4LCBrZXksIGZhbHNlLCBjYWxsYmFja3MpKSkKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi1ib29s
IElEQkluZGV4QmFja2VuZEltcGw6OmFkZGluZ0tleUFsbG93ZWQoY29uc3QgSURCS2V5KiBpbmRl
eEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5KQotewotICAgIGlmICghbV91bmlxdWUpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5
OwotICAgIGJvb2wgZm91bmQgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5JbmRleChtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2lkLCAqaW5kZXhLZXksIGZv
dW5kUHJpbWFyeUtleSk7Ci0gICAgaWYgKCFmb3VuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKHByaW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFsKHByaW1hcnlLZXkp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgJKHJldmlz
aW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJJ
bmRleEJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW1wbF9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJLZXk7Ci1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJh
Y2tlbmQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9y
ZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1w
bChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5hbWUs
IHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7Ci0gICAgfQotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
SW5kZXhCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFj
a2VuZCwgbmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwotCi0gICAgaW50NjRfdCBp
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOwotICAg
ICAgICByZXR1cm4gbV9pZDsKLSAgICB9Ci0gICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7IG1f
aWQgPSBpZDsgfQotICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0g
SW52YWxpZElkOyB9OwotCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOwotCi0gICAgLy8gSW1wbGVt
ZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgp
IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHN0b3JlTmFtZSgpIHsgcmV0
dXJuIG1fc3RvcmVOYW1lOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0dXJu
IG1fa2V5UGF0aDsgfQotICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tdWx0aUVudHJ5
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZ2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7
Ci0KLXByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2
NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIElE
QkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwg
Ym9vbCBtdWx0aUVudHJ5KTsKLQotICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotICAgIHN0YXRp
YyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Pik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9v
bCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
bV9iYWNraW5nU3RvcmU7Ci0KLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKLSAgICBpbnQ2
NF90IG1faWQ7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9zdG9yZU5hbWU7Ci0g
ICAgU3RyaW5nIG1fa2V5UGF0aDsKLSAgICBib29sIG1fdW5pcXVlOwotICAgIGJvb2wgbV9tdWx0
aUVudHJ5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlm
IC8vIElEQkluZGV4QmFja2VuZEltcGxfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4QmFja2VuZElu
dGVyZmFjZV9oCi0jZGVmaW5lIElEQkluZGV4QmFja2VuZEludGVyZmFjZV9oCi0KLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJ
REJLZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgSURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZElu
dGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpID0gMDsKLSAgICB2aXJ0
dWFsIFN0cmluZyBzdG9yZU5hbWUoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdW5pcXVlKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBt
dWx0aUVudHJ5KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5Piwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQktleS5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
SURCS2V5OjpJREJLZXkoKQotICAgIDogbV90eXBlKEludmFsaWRUeXBlKQotICAgICwgbV9zaXpl
RXN0aW1hdGUoa092ZXJoZWFkU2l6ZSkKLXsKLX0KLQotSURCS2V5Ojp+SURCS2V5KCkKLXsKLX0K
LQotaW50IElEQktleTo6Y29tcGFyZShjb25zdCBJREJLZXkqIG90aGVyKSBjb25zdAotewotICAg
IEFTU0VSVChvdGhlcik7Ci0gICAgaWYgKG1fdHlwZSAhPSBvdGhlci0+bV90eXBlKQotICAgICAg
ICByZXR1cm4gbV90eXBlID4gb3RoZXItPm1fdHlwZSA/IC0xIDogMTsKLQotICAgIHN3aXRjaCAo
bV90eXBlKSB7Ci0gICAgY2FzZSBBcnJheVR5cGU6Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheS5zaXplKCkgJiYgaSA8IG90aGVyLT5tX2FycmF5LnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoaW50IHJlc3VsdCA9IG1fYXJyYXlbaV0tPmNvbXBhcmUob3RoZXIt
Pm1fYXJyYXlbaV0uZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fYXJyYXkuc2l6ZSgpIDwgb3RoZXItPm1fYXJyYXkuc2l6ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAobV9hcnJheS5zaXplKCkgPiBv
dGhlci0+bV9hcnJheS5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgY2FzZSBTdHJpbmdUeXBlOgotICAgICAgICByZXR1cm4gLWNvZGVQb2ludENv
bXBhcmUob3RoZXItPm1fc3RyaW5nLCBtX3N0cmluZyk7Ci0gICAgY2FzZSBEYXRlVHlwZToKLSAg
ICAgICAgcmV0dXJuIChtX2RhdGUgPCBvdGhlci0+bV9kYXRlKSA/IC0xIDoKLSAgICAgICAgICAg
ICAgICAobV9kYXRlID4gb3RoZXItPm1fZGF0ZSkgPyAxIDogMDsKLSAgICBjYXNlIE51bWJlclR5
cGU6Ci0gICAgICAgIHJldHVybiAobV9udW1iZXIgPCBvdGhlci0+bV9udW1iZXIpID8gLTEgOgot
ICAgICAgICAgICAgICAgIChtX251bWJlciA+IG90aGVyLT4gbV9udW1iZXIpID8gMSA6IDA7Ci0g
ICAgY2FzZSBJbnZhbGlkVHlwZToKLSAgICBjYXNlIE1pblR5cGU6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJREJLZXk6OmlzTGVzc1RoYW4o
Y29uc3QgSURCS2V5KiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQob3RoZXIpOwotICAgIHJl
dHVybiBjb21wYXJlKG90aGVyKSA9PSAtMTsKLX0KLQotYm9vbCBJREJLZXk6OmlzRXF1YWwoY29u
c3QgSURCS2V5KiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoIW90aGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIWNvbXBhcmUob3RoZXIpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCShyZXZp
c2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJLZXlfaAotI2RlZmlu
ZSBJREJLZXlfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJREJLZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5
PiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBLZXlBcnJh
eTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSW52YWxpZCgpCi0gICAg
ewotICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcgSURCS2V5KCkp
OwotICAgICAgICBpZGJLZXktPm1fdHlwZSA9IEludmFsaWRUeXBlOwotICAgICAgICByZXR1cm4g
aWRiS2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+
IGNyZWF0ZU51bWJlcihkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktl
eT4gaWRiS2V5ID0gYWRvcHRSZWYobmV3IElEQktleSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5
cGUgPSBOdW1iZXJUeXBlOwotICAgICAgICBpZGJLZXktPm1fbnVtYmVyID0gbnVtYmVyOwotICAg
ICAgICBpZGJLZXktPm1fc2l6ZUVzdGltYXRlICs9IHNpemVvZihkb3VibGUpOwotICAgICAgICBy
ZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJLZXk+IGNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAg
IFJlZlB0cjxJREJLZXk+IGlkYktleSA9IGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7Ci0gICAgICAg
IGlkYktleS0+bV90eXBlID0gU3RyaW5nVHlwZTsKLSAgICAgICAgaWRiS2V5LT5tX3N0cmluZyA9
IHN0cmluZzsKLSAgICAgICAgaWRiS2V5LT5tX3NpemVFc3RpbWF0ZSArPSBzdHJpbmcubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpOwotICAgICAgICByZXR1cm4gaWRiS2V5LnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZURhdGUoZG91YmxlIGRh
dGUpCi0gICAgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBhZG9wdFJlZihuZXcg
SURCS2V5KCkpOwotICAgICAgICBpZGJLZXktPm1fdHlwZSA9IERhdGVUeXBlOwotICAgICAgICBp
ZGJLZXktPm1fZGF0ZSA9IGRhdGU7Ci0gICAgICAgIGlkYktleS0+bV9zaXplRXN0aW1hdGUgKz0g
c2l6ZW9mKGRvdWJsZSk7Ci0gICAgICAgIHJldHVybiBpZGJLZXkucmVsZWFzZSgpOwotICAgIH0K
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlQXJyYXkoY29uc3QgS2V5QXJy
YXkmIGFycmF5KQotICAgIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gYWRvcHRS
ZWYobmV3IElEQktleSgpKTsKLSAgICAgICAgaWRiS2V5LT5tX3R5cGUgPSBBcnJheVR5cGU7Ci0g
ICAgICAgIGlkYktleS0+bV9hcnJheSA9IGFycmF5OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBpZGJLZXktPm1fc2l6ZUVz
dGltYXRlICs9IGFycmF5W2ldLT5tX3NpemVFc3RpbWF0ZTsKLQotICAgICAgICByZXR1cm4gaWRi
S2V5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICB+SURCS2V5KCk7Ci0KLSAgICAvLyBJbiBvcmRl
ciBvZiB0aGUgbGVhc3QgdG8gdGhlIGhpZ2hlc3QgcHJlY2VkZW50IGluIHRlcm1zIG9mIHNvcnQg
b3JkZXIuCi0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgSW52YWxpZFR5cGUgPSAwLAotICAgICAg
ICBBcnJheVR5cGUsCi0gICAgICAgIFN0cmluZ1R5cGUsCi0gICAgICAgIERhdGVUeXBlLAotICAg
ICAgICBOdW1iZXJUeXBlLAotICAgICAgICBNaW5UeXBlCi0gICAgfTsKLQotICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgdmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgIT0gSW52YWxpZFR5cGU7IH0KLQotICAgIGNvbnN0IEtleUFycmF5JiBhcnJh
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IEFycmF5VHlwZSk7Ci0g
ICAgICAgIHJldHVybiBtX2FycmF5OwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlwZSk7Ci0g
ICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9Ci0KLSAgICBkb3VibGUgZGF0ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IERhdGVUeXBlKTsKLSAgICAgICAgcmV0
dXJuIG1fZGF0ZTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbnVtYmVyKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gTnVtYmVyVHlwZSk7Ci0gICAgICAgIHJldHVybiBtX251
bWJlcjsKLSAgICB9Ci0KLSAgICBpbnQgY29tcGFyZShjb25zdCBJREJLZXkqIG90aGVyKSBjb25z
dDsKLSAgICBib29sIGlzTGVzc1RoYW4oY29uc3QgSURCS2V5KiBvdGhlcikgY29uc3Q7Ci0gICAg
Ym9vbCBpc0VxdWFsKGNvbnN0IElEQktleSogb3RoZXIpIGNvbnN0OwotCi0gICAgc2l6ZV90IHNp
emVFc3RpbWF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUVzdGltYXRlOyB9Ci0KLSAgICBzdGF0
aWMgaW50IGNvbXBhcmVUeXBlcyhUeXBlIGEsIFR5cGUgYikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBiIC0gYTsKLSAgICB9Ci0KLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXk+
OjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5Pjo6ZGVyZWY7Ci0K
LXByaXZhdGU6Ci0gICAgSURCS2V5KCk7Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICBLZXlBcnJh
eSBtX2FycmF5OwotICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICBkb3VibGUgbV9kYXRlOwotICAg
IGRvdWJsZSBtX251bWJlcjsKLQotICAgIHNpemVfdCBtX3NpemVFc3RpbWF0ZTsKLQotICAgIC8v
IFZlcnkgcm91Z2ggZXN0aW1hdGUgb2YgbWluaW11bSBrZXkgc2l6ZSBvdmVyaGVhZC4KLSAgICBl
bnVtIHsga092ZXJoZWFkU2l6ZSA9IDE2IH07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQktleV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXkuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCi0gICAgICAgIEN1c3RvbVRvSlNPYmplY3QKLSAgICBdIElEQktleSB7
Ci0gICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgotICAg
IH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5UGF0aExleGVyIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFRva2VuVHlwZSB7Ci0gICAgICAgIFRva2VuSWRlbnRpZmllciwKLSAgICAgICAgVG9r
ZW5Eb3QsCi0gICAgICAgIFRva2VuRW5kLAotICAgICAgICBUb2tlbkVycm9yCi0gICAgfTsKLQot
ICAgIGV4cGxpY2l0IElEQktleVBhdGhMZXhlcihjb25zdCBTdHJpbmcmIHMpCi0gICAgICAgIDog
bV9zdHJpbmcocykKLSAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKLSAgICAgICAgLCBt
X2VuZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCi0gICAgICAgICwgbV9jdXJyZW50VG9r
ZW5UeXBlKFRva2VuRXJyb3IpCi0gICAgewotICAgIH0KLQotICAgIFRva2VuVHlwZSBjdXJyZW50
VG9rZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOyB9Ci0KLSAgICBU
b2tlblR5cGUgbmV4dFRva2VuVHlwZSgpCi0gICAgewotICAgICAgICBtX2N1cnJlbnRUb2tlblR5
cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRUb2tl
blR5cGU7Ci0gICAgfQotCi0gICAgY29uc3QgU3RyaW5nJiBjdXJyZW50RWxlbWVudCgpIHsgcmV0
dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KLQotcHJpdmF0ZToKLSAgICBUb2tlblR5cGUgbGV4KFN0
cmluZyYpOwotICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKFN0cmluZyYpOwotICAgIFN0cmlu
ZyBtX2N1cnJlbnRFbGVtZW50OwotICAgIFN0cmluZyBtX3N0cmluZzsKLSAgICBjb25zdCBVQ2hh
ciogbV9wdHI7Ci0gICAgY29uc3QgVUNoYXIqIG1fZW5kOwotICAgIFRva2VuVHlwZSBtX2N1cnJl
bnRUb2tlblR5cGU7Ci19OwotCi1JREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQYXRo
TGV4ZXI6OmxleChTdHJpbmcmIGVsZW1lbnQpCi17Ci0gICAgaWYgKG1fcHRyID49IG1fZW5kKQot
ICAgICAgICByZXR1cm4gVG9rZW5FbmQ7Ci0gICAgQVNTRVJUKG1fcHRyIDwgbV9lbmQpOwotCi0g
ICAgaWYgKCptX3B0ciA9PSAnLicpIHsKLSAgICAgICAgKyttX3B0cjsKLSAgICAgICAgcmV0dXJu
IFRva2VuRG90OwotICAgIH0KLSAgICByZXR1cm4gbGV4SWRlbnRpZmllcihlbGVtZW50KTsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3RlcihVQ2hh
ciBjKQotewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0gJ18nKSB8fCAoYyA9
PSAnJCcpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllckNoYXJhY3Rl
cihVQ2hhciBjKQotewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IChjID09
ICdfJykgfHwgKGMgPT0gJyQnKTsKLX0KLQotSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURC
S2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKFN0cmluZyYgZWxlbWVudCkKLXsKLSAgICBjb25z
dCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKLSAgICBpZiAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJ
ZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKLSAgICAgICAgKyttX3B0cjsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybiBUb2tlbkVycm9yOwotCi0gICAgd2hpbGUgKG1fcHRyIDwgbV9l
bmQgJiYgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9wdHIpKQotICAgICAgICArK21fcHRy
OwotCi0gICAgZWxlbWVudCA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7Ci0gICAgcmV0
dXJuIFRva2VuSWRlbnRpZmllcjsKLX0KLQotYm9vbCBJREJJc1ZhbGlkS2V5UGF0aChjb25zdCBT
dHJpbmcmIGtleVBhdGgpCi17Ci0gICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAg
VmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwotICAgIElEQlBhcnNlS2V5UGF0aChrZXlQ
YXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKLSAgICByZXR1cm4gZXJyb3IgPT0gSURCS2V5
UGF0aFBhcnNlRXJyb3JOb25lOwotfQotCi12b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJp
bmcmIGtleVBhdGgsIFZlY3RvcjxTdHJpbmc+JiBlbGVtZW50cywgSURCS2V5UGF0aFBhcnNlRXJy
b3ImIGVycm9yKQotewotICAgIC8vIElEQktleVBhdGggOjo9IEVNUFRZX1NUUklORyB8IGlkZW50
aWZpZXIgKCcuJyBpZGVudGlmaWVyKSoKLSAgICAvLyBUaGUgYmFzaWMgc3RhdGUgbWFjaGluZSBp
czoKLSAgICAvLyAgIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBFbmR9Ci0gICAgLy8gICBJZGVudGlm
aWVyID0+IHtEb3QsIEVuZH0KLSAgICAvLyAgIERvdCA9PiB7SWRlbnRpZmllcn0KLSAgICAvLyBJ
dCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3QgZGlz
Y2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgotICAgIGVudW0gUGFyc2VyU3RhdGUg
eyBJZGVudGlmaWVyLCBEb3QsIEVuZCB9OwotCi0gICAgSURCS2V5UGF0aExleGVyIGxleGVyKGtl
eVBhdGgpOwotICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVy
Lm5leHRUb2tlblR5cGUoKTsKLSAgICBQYXJzZXJTdGF0ZSBzdGF0ZTsKLSAgICBpZiAodG9rZW5U
eXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKQotICAgICAgICBzdGF0ZSA9
IElkZW50aWZpZXI7Ci0gICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6
VG9rZW5FbmQpCi0gICAgICAgIHN0YXRlID0gRW5kOwotICAgIGVsc2UgewotICAgICAgICBlcnJv
ciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB3aGlsZSAoMSkgewotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2Ug
SWRlbnRpZmllciA6IHsKLSAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRv
a2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKLSAgICAgICAgICAgIEFTU0VSVCh0
b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpOwotCi0gICAgICAg
ICAgICBTdHJpbmcgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAg
ICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHRva2VuVHlwZSA9IGxl
eGVyLm5leHRUb2tlblR5cGUoKTsKLSAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5
UGF0aExleGVyOjpUb2tlbkRvdCkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQot
ICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXI7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBEb3Q6IHsKLSAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6
VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnRUb2tlblR5cGUoKTsKLSAgICAgICAg
ICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCk7Ci0KLSAg
ICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKLSAgICAgICAgICAg
IGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpCi0gICAg
ICAgICAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEVuZDogewotICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFy
c2VFcnJvck5vbmU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaAkocmV2
aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCS2V5UGF0aF9o
Ci0jZGVmaW5lIElEQktleVBhdGhfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gSURCS2V5UGF0aFBhcnNlRXJyb3Igewot
ICAgIElEQktleVBhdGhQYXJzZUVycm9yTm9uZSwKLSAgICBJREJLZXlQYXRoUGFyc2VFcnJvclN0
YXJ0LAotICAgIElEQktleVBhdGhQYXJzZUVycm9ySWRlbnRpZmllciwKLSAgICBJREJLZXlQYXRo
UGFyc2VFcnJvckRvdCwKLX07Ci0KLWJvb2wgSURCSXNWYWxpZEtleVBhdGgoY29uc3QgU3RyaW5n
Jik7Ci12b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYs
IElEQktleVBhdGhQYXJzZUVycm9yJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBJREJLZXlQYXRoX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQktleVBhdGhCYWNrZW5kSW1wbC5oIgotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0p
Ci0jZXJyb3IgIkNocm9taXVtIHNob3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3Rl
YWQgZGVmaW5lIGl0cyBvd24gdmVyc2lvbiBvZiB0aGlzIGZhY3RvcnkgdGhhdCBuYXZpZ2F0ZXMg
dGhlIG11bHRpLXByb2Nlc3MgYm91bmRyeS4iCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi12b2lkIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zy
b21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4mLCAwPiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9y
PFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS4KLX0KLQotUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQktleVBh
dGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS4KLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1w
bC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBh
dGhCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIElEQktleVBhdGhCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQktleVBhdGhCYWNrZW5k
SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOwotCi1jbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgewot
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAw
PiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5Piwg
MD4mIGtleXMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
SURCS2V5UGF0aEJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5
UmFuZ2UuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0KLSNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQktleS5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCS2V5UmFuZ2U6
OklEQktleVJhbmdlKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+
IHVwcGVyLCBMb3dlckJvdW5kVHlwZSBsb3dlclR5cGUsIFVwcGVyQm91bmRUeXBlIHVwcGVyVHlw
ZSkKLSAgICA6IG1fbG93ZXIobG93ZXIpCi0gICAgLCBtX3VwcGVyKHVwcGVyKQotICAgICwgbV9s
b3dlclR5cGUobG93ZXJUeXBlKQotICAgICwgbV91cHBlclR5cGUodXBwZXJUeXBlKQotewotfQot
Ci1QYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6b25seShQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBwcnBLZXk7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZh
bGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3Jl
YXRlKGtleSwga2V5LCBMb3dlckJvdW5kQ2xvc2VkLCBVcHBlckJvdW5kQ2xvc2VkKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoUGFzc1JlZlB0
cjxJREJLZXk+IGJvdW5kLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
IChib3VuZCAmJiAoYm91bmQtPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBlKSkgewotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoYm91bmQsIDAsIG9w
ZW4gPyBMb3dlckJvdW5kT3BlbiA6IExvd2VyQm91bmRDbG9zZWQsIFVwcGVyQm91bmRDbG9zZWQp
OwotfQotCi1QYXNzUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6dXBwZXJCb3VuZChQ
YXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgaWYgKGJvdW5kICYmIChib3VuZC0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUp
KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZSgwLCBi
b3VuZCwgTG93ZXJCb3VuZENsb3NlZCwgb3BlbiA/IFVwcGVyQm91bmRPcGVuIDogVXBwZXJCb3Vu
ZENsb3NlZCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpib3Vu
ZChQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1cHBlciwgYm9v
bCBsb3dlck9wZW4sIGJvb2wgdXBwZXJPcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoKGxvd2VyICYmIChsb3dlci0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB8fCAo
dXBwZXIgJiYgKHVwcGVyLT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgaWYgKGxvd2VyICYmIHVwcGVyICYmIHVwcGVyLT5pc0xlc3NUaGFuKGxv
d2VyLmdldCgpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChsb3dlciAmJiB1cHBlciAmJiB1
cHBlci0+aXNFcXVhbChsb3dlci5nZXQoKSkgJiYgKGxvd2VyT3BlbiB8fCB1cHBlck9wZW4pKSB7
Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShsb3dlciwg
dXBwZXIsIGxvd2VyT3BlbiA/IExvd2VyQm91bmRPcGVuIDogTG93ZXJCb3VuZENsb3NlZCwgdXBw
ZXJPcGVuID8gVXBwZXJCb3VuZE9wZW4gOiBVcHBlckJvdW5kQ2xvc2VkKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCShyZXZpc2lvbiAxMDk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCS2V5UmFuZ2VfaAotI2RlZmluZSBJREJL
ZXlSYW5nZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklE
QktleS5oIgotI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBJREJLZXlSYW5nZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXlSYW5nZT4gewotcHVibGljOgotICAgIGVu
dW0gTG93ZXJCb3VuZFR5cGUgewotICAgICAgICBMb3dlckJvdW5kT3BlbiwKLSAgICAgICAgTG93
ZXJCb3VuZENsb3NlZAotICAgIH07Ci0gICAgZW51bSBVcHBlckJvdW5kVHlwZSB7Ci0gICAgICAg
IFVwcGVyQm91bmRPcGVuLAotICAgICAgICBVcHBlckJvdW5kQ2xvc2VkCi0gICAgfTsKLQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJLZXk+
IGxvd2VyLCBQYXNzUmVmUHRyPElEQktleT4gdXBwZXIsIExvd2VyQm91bmRUeXBlIGxvd2VyVHlw
ZSwgVXBwZXJCb3VuZFR5cGUgdXBwZXJUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJLZXlSYW5nZShsb3dlciwgdXBwZXIsIGxvd2VyVHlwZSwgdXBwZXJUeXBlKSk7
Ci0gICAgfQotICAgIH5JREJLZXlSYW5nZSgpIHsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJLZXk+
IGxvd2VyKCkgY29uc3QgeyByZXR1cm4gbV9sb3dlcjsgfQotICAgIFBhc3NSZWZQdHI8SURCS2V5
PiB1cHBlcigpIGNvbnN0IHsgcmV0dXJuIG1fdXBwZXI7IH0KLSAgICBib29sIGxvd2VyT3Blbigp
IGNvbnN0IHsgcmV0dXJuIG1fbG93ZXJUeXBlID09IExvd2VyQm91bmRPcGVuOyB9Ci0gICAgYm9v
bCB1cHBlck9wZW4oKSBjb25zdCB7IHJldHVybiBtX3VwcGVyVHlwZSA9PSBVcHBlckJvdW5kT3Bl
bjsgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG9ubHkoUGFzc1JlZlB0
cjxJREJLZXk+IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gbG93ZXJCb3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotICAgIHsKLSAgICAgIHJldHVybiBsb3dlckJvdW5kKGJvdW5kLCBmYWxz
ZSwgZWMpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbG93ZXJC
b3VuZChQYXNzUmVmUHRyPElEQktleT4gYm91bmQsIGJvb2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHVwcGVyQm91bmQoUGFzc1Jl
ZlB0cjxJREJLZXk+IGJvdW5kLCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0gICAgICByZXR1
cm4gdXBwZXJCb3VuZChib3VuZCwgZmFsc2UsIGVjKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHVwcGVyQm91bmQoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBi
b29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBib3VuZChQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5
PiB1cHBlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAgcmV0dXJuIGJvdW5kKGxv
d2VyLCB1cHBlciwgZmFsc2UsIGZhbHNlLCBlYyk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBib3VuZChQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQ
dHI8SURCS2V5PiB1cHBlciwgYm9vbCBsb3dlck9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAg
IHsKLSAgICAgIHJldHVybiBib3VuZChsb3dlciwgdXBwZXIsIGxvd2VyT3BlbiwgZmFsc2UsIGVj
KTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGJvdW5kKFBhc3NS
ZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyLCBib29sIGxvd2Vy
T3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBJ
REJLZXlSYW5nZShQYXNzUmVmUHRyPElEQktleT4gbG93ZXIsIFBhc3NSZWZQdHI8SURCS2V5PiB1
cHBlciwgTG93ZXJCb3VuZFR5cGUgbG93ZXJUeXBlLCBVcHBlckJvdW5kVHlwZSB1cHBlclR5cGUp
OwotCi0gICAgUmVmUHRyPElEQktleT4gbV9sb3dlcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX3Vw
cGVyOwotICAgIExvd2VyQm91bmRUeXBlIG1fbG93ZXJUeXBlOwotICAgIFVwcGVyQm91bmRUeXBl
IG1fdXBwZXJUeXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQot
I2VuZGlmIC8vIElEQktleVJhbmdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UmFuZ2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5
UmFuZ2UuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVJhbmdlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9k
dWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRQotICAgIF0gSURCS2V5UmFuZ2UgewotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSURCS2V5IGxvd2VyOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHVw
cGVyOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsb3dlck9wZW47Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVwcGVyT3BlbjsKLQotICAgICAgICBzdGF0
aWMgSURCS2V5UmFuZ2Ugb25seShpbiBJREJLZXkgdmFsdWUpCi0gICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgc3RhdGljIElEQktleVJhbmdlIGxvd2Vy
Qm91bmQoaW4gSURCS2V5IGJvdW5kLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gb3BlbikKLSAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICBzdGF0aWMgSURC
S2V5UmFuZ2UgdXBwZXJCb3VuZChpbiBJREJLZXkgYm91bmQsIGluIFtPcHRpb25hbF0gYm9vbGVh
biBvcGVuKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAg
ICAgIHN0YXRpYyBJREJLZXlSYW5nZSBib3VuZChpbiBJREJLZXkgbG93ZXIsIGluIElEQktleSB1
cHBlciwgaW4gW09wdGlvbmFsXSBib29sZWFuIGxvd2VyT3BlbiwgaW4gW09wdGlvbmFsXSBib29s
ZWFuIHVwcGVyT3BlbikKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24p
OwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0j
aWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJBc3NlcnRpb25zLmgiCi0jaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUg
IklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkNvZGluZy5oIgotI2luY2x1ZGUg
IkxldmVsREJDb21wYXJhdG9yLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCi0jaW5j
bHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGlu
ZzsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdl
dEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRf
dCYgZm91bmRJbnQpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5n
ZXQoa2V5LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZEludCA9
IGRlY29kZUludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29s
IHB1dEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50
NjRfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGItPnB1dChrZXksIGVuY29kZUludCh2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wg
Z2V0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBT
dHJpbmcmIGZvdW5kU3RyaW5nKQotewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYg
KCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91
bmRTdHJpbmcgPSBkZWNvZGVTdHJpbmcocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+
Ci1zdGF0aWMgYm9vbCBwdXRTdHJpbmcoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9y
PGNoYXI+IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAoIWRiLT5wdXQoa2V5
LCBlbmNvZGVTdHJpbmcodmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVLZXlzKGNvbnN0IExldmVsREJTbGljZSYg
YSwgY29uc3QgTGV2ZWxEQlNsaWNlJiBiKQotewotICAgIHJldHVybiBjb21wYXJlKGEsIGIpOwot
fQotCi1zdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBj
b25zdCBMZXZlbERCU2xpY2UmIGIpCi17Ci0gICAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgdHJ1ZSk7
Ci19Ci0KLWNsYXNzIENvbXBhcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkNvbXBhcmF0b3IgewotcHVi
bGljOgotICAgIHZpcnR1YWwgaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25z
dCBMZXZlbERCU2xpY2UmIGIpIGNvbnN0IHsgcmV0dXJuIElEQkxldmVsREJDb2Rpbmc6OmNvbXBh
cmUoYSwgYik7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVy
biAiaWRiX2NtcDEiOyB9Ci19OwotCi1zdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJE
YXRhYmFzZSogZGIpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG1ldGFEYXRhS2V5ID0gU2No
ZW1hVmVyc2lvbktleTo6ZW5jb2RlKCk7Ci0KLSAgICBpbnQ2NF90IHNjaGVtYVZlcnNpb24gPSAw
OwotICAgIGlmICghZ2V0SW50KGRiLCBtZXRhRGF0YUtleSwgc2NoZW1hVmVyc2lvbikpIHsKLSAg
ICAgICAgc2NoZW1hVmVyc2lvbiA9IDA7Ci0gICAgICAgIGlmICghcHV0SW50KGRiLCBtZXRhRGF0
YUtleSwgc2NoZW1hVmVyc2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHksIHdlJ2xsIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFu
c2l0aW9uIGJldHdlZW4gc2NoZW1hcy4KLSAgICBpZiAoc2NoZW1hVmVyc2lvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBEb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGlzIHZlcnNpb24u
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiKQotICAgIDog
bV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAs
IG1fZGIoZGIpCi17Ci0gICAgbV9mYWN0b3J5LT5hZGRJREJCYWNraW5nU3RvcmUoaWRlbnRpZmll
ciwgdGhpcyk7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2lu
Z1N0b3JlKCkKLXsKLSAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJhY2tpbmdTdG9yZShtX2lkZW50
aWZpZXIpOwotCi0gICAgLy8gbV9kYidzIGRlc3RydWN0b3IgdXNlcyBtX2NvbXBhcmF0b3IuIFRo
ZSBvcmRlciBvZiBkZXN0cnVjdGlvbiBpcyBpbXBvcnRhbnQuCi0gICAgbV9kYi5jbGVhcigpOwot
ICAgIG1fY29tcGFyYXRvci5jbGVhcigpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50
aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKLXsKLSAgICBTdHJpbmcgcGF0
aEJhc2UgPSBwYXRoQmFzZUFyZzsKLQotICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29t
cGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwotICAgIE93blB0cjxMZXZlbERC
RGF0YWJhc2U+IGRiOwotCi0gICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgZGIg
PSBMZXZlbERCRGF0YWJhc2U6Om9wZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgSW5kZXhlZERCIGRhdGFiYXNlIHBh
dGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBzYW1lIExldmVsREIgZGF0YWJhc2UgZm9yIGFs
bCBvcmlnaW5zLgotICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRl
eGVkZGIubGV2ZWxkYiIpOwotCi0gICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBh
dGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmICghZGIpCi0gICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLQotICAgIC8vIEZJWE1FOiBIYW5k
bGUgY29tcGFyYXRvciBuYW1lIGNoYW5nZXMuCi0KLSAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJMZXZlbERCQmFja2luZ1N0b3Jl
KGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5LCBkYi5yZWxlYXNlKCkpKSk7Ci0gICAgYmFja2luZ1N0
b3JlLT5tX2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yLnJlbGVhc2UoKTsKLQotICAgIGlmICghc2V0
VXBNZXRhZGF0YShiYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpKQotICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0KLSAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRl
bnRpZmllcik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVL
ZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKLQotICAgIEFTU0VSVChm
b3VuZE5hbWVzLmlzRW1wdHkoKSk7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5u
ZXh0KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAg
ICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBEYXRh
YmFzZU5hbWVLZXkgZGF0YWJhc2VOYW1lS2V5OwotICAgICAgICBwID0gRGF0YWJhc2VOYW1lS2V5
OjpkZWNvZGUocCwgbGltaXQsICZkYXRhYmFzZU5hbWVLZXkpOwotICAgICAgICBBU1NFUlQocCk7
Ci0KLSAgICAgICAgZm91bmROYW1lcy5hcHBlbmQoZGF0YWJhc2VOYW1lS2V5LmRhdGFiYXNlTmFt
ZSgpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBp
bnQ2NF90JiBmb3VuZElkKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9IGdl
dEludChtX2RiLmdldCgpLCBrZXksIGZvdW5kSWQpOwotICAgIGlmICghb2spCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNp
b24pLCBmb3VuZFZlcnNpb24pOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlk
KExldmVsREJEYXRhYmFzZSogZGIpCi17Ci0gICAgaW50NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7
Ci0gICAgaWYgKCFnZXRJbnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRh
YmFzZUlkKSkKLSAgICAgICAgbWF4RGF0YWJhc2VJZCA9IDA7Ci0KLSAgICBBU1NFUlQobWF4RGF0
YWJhc2VJZCA+PSAwKTsKLQotICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IG1heERhdGFiYXNlSWQg
KyAxOwotICAgIGlmICghcHV0SW50KGRiLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0
YWJhc2VJZCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBkYXRhYmFzZUlkOwot
fQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJv
d0lkKQotewotICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpKTsKLSAgICBp
ZiAocm93SWQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsK
LSAgICBpZiAoIXB1dEludChtX2RiLmdldCgpLCBrZXksIHJvd0lkKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghcHV0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSwgdmVy
c2lvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0
X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOwotICAgIGlmICghcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmtVc2VyVmVyc2lvbiksIHZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBlbmQpCi17Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQt
PmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgp
KSB7Ci0gICAgICAgIGlmICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbiA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUo
dGhpcyk7Ci0gICAgdHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0KLSAgICBpbnQ2NF90IGRhdGFiYXNl
SWQ7Ci0gICAgU3RyaW5nIHZlcnNpb247Ci0gICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KG5hbWUsIHZlcnNpb24sIGRhdGFiYXNlSWQpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdG9wS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQgKyAxLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7Ci0gICAgaWYgKCFkZWxldGVSYW5nZSht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpKSB7Ci0gICAgICAg
IHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1f
aWRlbnRpZmllciwgbmFtZSk7Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXkp
OwotCi0gICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgYm9vbCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJ
dGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKLXsKLSAgICBpZiAoIWl0LT5pc1ZhbGlkKCkg
fHwgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA+PSAwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OwotICAgIGNv
bnN0IGNoYXIqIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUoaXQtPmtleSgpLmJl
Z2luKCksIGl0LT5rZXkoKS5lbmQoKSwgJm1ldGFEYXRhS2V5KTsKLSAgICBBU1NFUlRfVU5VU0VE
KHAsIHApOwotICAgIGlmIChtZXRhRGF0YUtleS5vYmplY3RTdG9yZUlkKCkgIT0gb2JqZWN0U3Rv
cmVJZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0
YVR5cGUoKSAhPSBtZXRhRGF0YVR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9y
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rv
cjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpCi17Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IDEsIDApOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQpOwotCi0gICAgQVNTRVJUKGZvdW5kSWRz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQoZm91bmRLZXlQYXRocy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEF1dG9JbmNyZW1l
bnRGbGFncy5pc0VtcHR5KCkpOwotCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBt
X2RiLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKLSAgICB3aGls
ZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkg
ewotICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwotCi0gICAgICAgIE9iamVjdFN0b3Jl
TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjpkZWNvZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsK
LSAgICAgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtZXRhRGF0
YUtleS5vYmplY3RTdG9yZUlkKCk7Ci0gICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBk
ZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotCi0g
ICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgMSkpIHsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcga2V5UGF0aCA9IGRlY29kZVN0cmlu
ZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0gICAgICAgIGJvb2wg
aGFzS2V5UGF0aCA9IHRydWU7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgaWYgKCFj
aGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RT
dG9yZUlkLCAyKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJ
WE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgotICAgICAgICBib29s
IGF1dG9JbmNyZW1lbnQgPSAqaXQtPnZhbHVlKCkuYmVnaW4oKTsKLQotICAgICAgICBpdC0+bmV4
dCgpOyAvLyBJcyBldmljYXRibGUuCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1l
dGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgMykpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIExhc3QgdmVy
c2lvbi4KLSAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCA0KSkgewotICAgICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aXVtIGluZGV4IGlkIGFsbG9jYXRl
ZC4KLSAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgp
LCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCA1KSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBoYXMga2V5IHBhdGggKGlz
IG5vdCBudWxsKQotICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShp
dC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgNikpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9yIGJvb2xzLgotICAgICAgICAgICAg
aGFzS2V5UGF0aCA9ICppdC0+dmFsdWUoKS5iZWdpbigpOwotICAgICAgICAgICAgaWYgKCFoYXNL
ZXlQYXRoICYmICFrZXlQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm91bmRJZHMuYXBwZW5kKG9iamVjdFN0b3JlSWQpOwotICAgICAgICBmb3VuZE5hbWVz
LmFwcGVuZChvYmplY3RTdG9yZU5hbWUpOwotICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZCho
YXNLZXlQYXRoID8ga2V5UGF0aCA6IFN0cmluZygpKTsKLSAgICAgICAgZm91bmRBdXRvSW5jcmVt
ZW50RmxhZ3MuYXBwZW5kKGF1dG9JbmNyZW1lbnQpOwotICAgIH0KLX0KLQotc3RhdGljIGludDY0
X3QgZ2V0TmV3T2JqZWN0U3RvcmVJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQpCi17Ci0gICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gLTE7
Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heE9iamVjdFN0b3JlSWRLZXkgPSBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a01heE9i
amVjdFN0b3JlSWQpOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9y
ZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKSkKLSAgICAgICAgbWF4T2JqZWN0U3RvcmVJZCA9IDA7
Ci0KLSAgICBBU1NFUlQobWF4T2JqZWN0U3RvcmVJZCA+PSAwKTsKLQotICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCA9IG1heE9iamVjdFN0b3JlSWQgKyAxOwotICAgIGlmICghcHV0SW50KHRyYW5z
YWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0
dXJuIC0xOwotCi0gICAgcmV0dXJuIG9iamVjdFN0b3JlSWQ7Ci19Ci0KLWJvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RT
dG9yZUlkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKLSAgICBpZiAo
b2JqZWN0U3RvcmVJZCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBuYW1lS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDApOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRo
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDEpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBhdXRvSW5jcmVtZW50S2V5ID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDIp
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBldmljdGFibGVLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMyk7Ci0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDUpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBoYXNLZXlQYXRo
S2V5ICA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCA2KTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkgPSBPYmplY3RTdG9y
ZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7Ci0KLSAgICBib29sIG9rID0gcHV0
U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKLSAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0U3RyaW5nKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKLSAgICBpZiAo
IW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKLSAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBldmljdGFibGVLZXksIGZhbHNlKTsKLSAgICBpZiAo
IW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBsYXN0VmVyc2lvbktleSwgMSk7Ci0gICAgaWYgKCFvaykgewot
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgbWF4SW5kZXhJZEtleSwga01pbmltdW1JbmRleElkKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBoYXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwotICAgIGlm
ICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYXNzaWduZWRPYmplY3RTdG9y
ZUlkID0gb2JqZWN0U3RvcmVJZDsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlv
bik7Ci0KLSAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lOwotICAgIGdldFN0cmluZyhtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBvYmplY3RTdG9yZU5hbWUpOwotCi0gICAgaWYgKCFk
ZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQotICAg
ICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0KLSAgICBtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZU5hbWUpKTsKLQotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpKSkKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgot
ICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4TWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotCi0gICAgY2xlYXJPYmplY3RT
dG9yZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotU3RyaW5nIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGtleSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rp
b24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0
YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICAodm9pZCkgdmVyc2lvbjsKLQotICAgIHJldHVybiBkZWNvZGVT
dHJpbmcocCwgZGF0YS5lbmQoKSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jbGFzcyBMZXZlbERCUmVj
b3JkSWRlbnRpZmllciA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29y
ZElkZW50aWZpZXI+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0
X3QgdmVyc2lvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IExldmVsREJSZWNvcmRJZGVudGlmaWVy
KHByaW1hcnlLZXksIHZlcnNpb24pKTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJS
ZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJl
Y29yZElkZW50aWZpZXIoKSk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmltYXJ5S2V5LmlzRW1wdHkoKTsgfQotICAgIFZlY3RvcjxjaGFyPiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdm9pZCBzZXRQcmlt
YXJ5S2V5KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSkgeyBtX3ByaW1hcnlLZXkgPSBw
cmltYXJ5S2V5OyB9Ci0gICAgaW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJz
aW9uOyB9Ci0gICAgdm9pZCBzZXRWZXJzaW9uKGludDY0X3QgdmVyc2lvbikgeyBtX3ZlcnNpb24g
PSB2ZXJzaW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoY29u
c3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5
S2V5KHByaW1hcnlLZXkpLCBtX3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXku
aXNFbXB0eSgpKTsgfQotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlL
ZXkoKSwgbV92ZXJzaW9uKC0xKSB7fQotCi0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtleTsg
Ly8gRklYTUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2
ZXJzaW9uIG9mIHRoZSBrZXkuCi0gICAgaW50NjRfdCBtX3ZlcnNpb247Ci19OwotfQotCi1zdGF0
aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCA0KTsKLQotICAgIGludDY0X3Qg
bGFzdFZlcnNpb24gPSAtMTsKLSAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNp
b25LZXksIGxhc3RWZXJzaW9uKSkKLSAgICAgICAgbGFzdFZlcnNpb24gPSAwOwotCi0gICAgQVNT
RVJUKGxhc3RWZXJzaW9uID49IDApOwotCi0gICAgaW50NjRfdCB2ZXJzaW9uID0gbGFzdFZlcnNp
b24gKyAxOwotICAgIGJvb2wgb2sgPSBwdXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5
LCB2ZXJzaW9uKTsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBBU1NFUlQodmVy
c2lvbiA+IGxhc3RWZXJzaW9uKTsgLy8gRklYTUU6IFRoaW5rIGFib3V0IGhvdyB3ZSB3YW50IHRv
IGhhbmRsZSB0aGUgb3ZlcmZsb3cgc2NlbmFyaW8uCi0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0K
LQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGlu
dDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25OdW1iZXIobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBvYmplY3RTdG9yZWRhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHY7Ci0gICAgdi5h
cHBlbmQoZW5jb2RlVmFySW50KHZlcnNpb24pKTsKLSAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmco
dmFsdWUpKTsKLQotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9y
ZWRhdGFLZXksIHYpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGtleSk7Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0
KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZp
ZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlE
QktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJz
aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0YXJ0S2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IDApLmVuY29kZSgpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gS2V5UHJlZml4
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwKS5lbmNvZGUoKTsKLQotICAgIGRlbGV0
ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVy
KCkKLXsKLSAgICByZXR1cm4gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQot
Ci12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2
ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRl
bnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG9i
amVjdFN0b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwot
ICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXIt
PnByaW1hcnlLZXkoKSk7Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNF
bnRyeUtleSk7Ci19Ci0KLWRvdWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0lu
Y3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
LXsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IG1heElEQktleSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJy
ZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0KLSAgICBpbnQgbWF4TnVtZXJpY0tl
eSA9IDA7Ci0KLSAgICAvLyBGSVhNRTogQmUgbW9yZSBlZmZpY2llbnQ6IHNlZWsgdG8gc29tZXRo
aW5nIGFmdGVyIHRoZSBvYmplY3Qgc3RvcmUgZGF0YSwgdGhlbiByZXZlcnNlLgotCi0gICAgZm9y
IChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtl
eSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9
IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXko
KS5lbmQoKTsKLQotICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAgICAgICAg
cCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7Ci0gICAg
ICAgIEFTU0VSVChwKTsKLQotICAgICAgICBpZiAoZGF0YUtleS51c2VyS2V5KCktPnR5cGUoKSA9
PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgICAgIGludDY0X3QgbiA9IHN0YXRpY19j
YXN0PGludDY0X3Q+KGRhdGFLZXkudXNlcktleSgpLT5udW1iZXIoKSk7Ci0gICAgICAgICAgICBp
ZiAobiA+IG1heE51bWVyaWNLZXkpCi0gICAgICAgICAgICAgICAgbWF4TnVtZXJpY0tleSA9IG47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TnVtZXJpY0tleSArIDE7Ci19Ci0K
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXks
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQotewot
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+
IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBrZXkpOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgaWYgKCFtX2N1
cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVWYXJJbnQoZGF0
YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihmb3VuZFJlY29yZElkZW50aWZp
ZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlE
QktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJz
aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
Ojpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQotewotICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0
YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgbWluSURCS2V5KCkpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURC
S2V5KCkpOwotCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsg
aXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQt
Pm5leHQoKSkgewotICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwotICAgICAgICBPYmpl
Y3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLQotICAgICAg
ICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gZGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICAg
ICAgaW50NjRfdCB2ZXJzaW9uOwotICAgICAgICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKLSAgICAg
ICAgaWYgKCFxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFJlZlB0cjxM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gcmkgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3Jl
YXRlKGVuY29kZUlEQktleSgqcHJpbWFyeUtleSksIHZlcnNpb24pOwotICAgICAgICBTdHJpbmcg
aWRiVmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotCi0gICAgICAg
IGlmICghY2FsbGJhY2suY2FsbGJhY2socmkuZ2V0KCksIGlkYlZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJv
b2wgY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNv
bnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBjaGFy
IG1ldGFEYXRhVHlwZSkKLXsKLSAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMo
aXQtPmtleSgpLCBzdG9wS2V5KSA+PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJ
bmRleE1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OwotICAgIGNvbnN0IGNoYXIqIHAgPSBJbmRleE1l
dGFEYXRhS2V5OjpkZWNvZGUoaXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5lbmQoKSwgJm1l
dGFEYXRhS2V5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHAsIHApOwotICAgIGlmIChtZXRhRGF0YUtl
eS5pbmRleElkKCkgIT0gaW5kZXhJZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
ZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBtZXRhRGF0YVR5cGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi12b2lkIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
LCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1
ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKQotewotICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtl
eSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsg
MSwgMCwgMCk7Ci0KLSAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
Zm91bmROYW1lcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEtleVBhdGhzLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKGZvdW5kVW5pcXVlRmxhZ3MuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
Zm91bmRNdWx0aUVudHJ5RmxhZ3MuaXNFbXB0eSgpKTsKLQotICAgIE93blB0cjxMZXZlbERCSXRl
cmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBpdC0+c2VlayhzdGFydEtl
eSk7Ci0gICAgd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBz
dG9wS2V5KSA8IDApIHsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigp
OwotICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAg
ICBJbmRleE1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OwotICAgICAgICBwID0gSW5kZXhNZXRhRGF0
YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7
Ci0KLSAgICAgICAgaW50NjRfdCBpbmRleElkID0gbWV0YURhdGFLZXkuaW5kZXhJZCgpOwotICAg
ICAgICBBU1NFUlQoIW1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpKTsKLQotICAgICAgICBTdHJp
bmcgaW5kZXhOYW1lID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1
ZSgpLmVuZCgpKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyB1bmlxdWUgZmxhZwotICAgICAg
ICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJ
ZCwgMSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTog
QWRkIGVuY29kZS9kZWNvZGUgZnVuY3Rpb25zIGZvciBib29scy4KLSAgICAgICAgYm9vbCBpbmRl
eFVuaXF1ZSA9ICppdC0+dmFsdWUoKS5iZWdpbigpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8v
IGtleVBhdGgKLSAgICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCks
IHN0b3BLZXksIGluZGV4SWQsIDIpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgU3RyaW5nIGtleVBhdGggPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwg
aXQtPnZhbHVlKCkuZW5kKCkpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIFtvcHRpb25hbF0g
bXVsdGlFbnRyeSBmbGFnCi0gICAgICAgIGJvb2wgaW5kZXhNdWx0aUVudHJ5ID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGlu
ZGV4SWQsIDMpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIGVuY29kZS9kZWNvZGUgZnVu
Y3Rpb25zIGZvciBib29scy4KLSAgICAgICAgICAgIGluZGV4TXVsdGlFbnRyeSA9ICppdC0+dmFs
dWUoKS5iZWdpbigpOwotICAgICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvdW5kSWRzLmFwcGVuZChpbmRleElkKTsKLSAgICAgICAgZm91bmROYW1lcy5hcHBlbmQo
aW5kZXhOYW1lKTsKLSAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQoa2V5UGF0aCk7Ci0gICAg
ICAgIGZvdW5kVW5pcXVlRmxhZ3MuYXBwZW5kKGluZGV4VW5pcXVlKTsKLSAgICAgICAgZm91bmRN
dWx0aUVudHJ5RmxhZ3MuYXBwZW5kKGluZGV4TXVsdGlFbnRyeSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIGludDY0
X3QgbWF4SW5kZXhJZCA9IC0xOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhJbmRleElkS2V5
ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDUpOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBtYXhJ
bmRleElkKSkKLSAgICAgICAgbWF4SW5kZXhJZCA9IGtNaW5pbXVtSW5kZXhJZDsKLQotICAgIEFT
U0VSVChtYXhJbmRleElkID49IDApOwotCi0gICAgaW50NjRfdCBpbmRleElkID0gbWF4SW5kZXhJ
ZCArIDE7Ci0gICAgaWYgKCFwdXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIGluZGV4
SWQpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICByZXR1cm4gaW5kZXhJZDsKLX0KLQotYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRl
eElkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW5kZXhJZCA9
IGdldE5ld0luZGV4SWQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwotICAgIGlmIChpbmRleElkIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJbmRleE1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7Ci0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHVuaXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAxKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
a2V5UGF0aEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAyKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbXVsdGlFbnRyeUtl
eSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAzKTsKLQotICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIHVu
aXF1ZUtleSwgaXNVbmlxdWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBh
dGhLZXksIGtleVBhdGgpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlL
ZXksIGlzTXVsdGlFbnRyeSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpk
ZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gdW5pcXVlS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIDEpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRo
S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIDIpOwotCi0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG5h
bWVLZXkpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9u
LT5yZW1vdmUodW5pcXVlS2V5KSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleVBhdGhLZXkpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFTdGFydCA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBpbmRleERhdGFFbmQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLQotICAgIGlmICghZGVsZXRlUmFu
Z2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFF
bmQpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQo
aW5kZXhJZCA+PSBrTWluaW11bUluZGV4SWQpOwotICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVu
dGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVs
REJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkg
PSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCBlbmNvZGVJREJLZXkoa2V5KSwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXko
KSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChlbmNvZGVWYXJJ
bnQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwotICAgIGRhdGEuYXBwZW5k
KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwotCi0gICAgcmV0dXJuIG1f
Y3VycmVudFRyYW5zYWN0aW9uLT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKLX0KLQotc3RhdGlj
IGJvb2wgZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFyZ2V0LCBWZWN0b3I8Y2hhcj4mIGZv
dW5kS2V5KQotewotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24t
PmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgaXQtPnNlZWsodGFyZ2V0KTsKLQotICAgIGlmICghaXQt
PmlzVmFsaWQoKSkgewotICAgICAgICBpdC0+c2Vla1RvTGFzdCgpOwotICAgICAgICBpZiAoIWl0
LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hp
bGUgKGNvbXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCB0YXJnZXQpID4gMCkgewotICAgICAgICBp
dC0+cHJldigpOwotICAgICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICBmb3VuZEtleS5jbGVhcigpOwot
ICAgICAgICBmb3VuZEtleS5hcHBlbmQoaXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5lbmQo
KSAtIGl0LT5rZXkoKS5iZWdpbigpKTsKLQotICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc2V2ZXJh
bCBpbmRleCBrZXlzIHRoYXQgY29tcGFyZSBlcXVhbC4gV2Ugd2FudCB0aGUgbGFzdCBvbmUuCi0g
ICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgfSB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiAhY29tcGFy
ZUluZGV4S2V5cyhpdC0+a2V5KCksIHRhcmdldCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdlIGludmFsaWRh
dGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIFJlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkgPSBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5KTsKLSAgICBpZiAoIXByaW1hcnlLZXkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIHJldHVybiBnZXRPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCAqcHJpbWFyeUtleSk7Ci19Ci0KLXN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMo
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVyc2lvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBl
bmNvZGVkUHJpbWFyeUtleSkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRXhpc3Rz
RW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVkUHJpbWFy
eUtleSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5n
ZXQoa2V5LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRlY29k
ZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247Ci19Ci0KLXN0YXRpYyBi
b29sIGZpbmRLZXlJbkluZGV4KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCi17
Ci0gICAgQVNTRVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKLQotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0
ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVr
KGxldmVsZGJLZXkpOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoIWl0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjb21wYXJlSW5kZXhL
ZXlzKGl0LT5rZXkoKSwgbGV2ZWxkYktleSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IGRl
Y29kZVZhckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lv
bik7Ci0gICAgICAgIGlmICghcCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsK
LQotICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHModHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7Ci0gICAgICAg
ICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0gICAg
ICAgICAgICB0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7Ci0gICAgICAgICAgICBpdC0+
bmV4dCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLQotICAgIFZlY3RvcjxjaGFyPiBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5OwotICAgIGlmIChmaW5kS2V5SW5JbmRleChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5OwotICAgICAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdpbigp
LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBwcmltYXJ5S2V5KTsKLSAgICAgICAgcmV0
dXJuIHByaW1hcnlLZXkucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1i
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKLXsKLSAgICBB
U1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotCi0gICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5j
b2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKCFmaW5kS2V5SW5JbmRleChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXks
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBk
ZWNvZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5LmVuZCgpLCBmb3VuZFByaW1hcnlLZXkpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7Ci0gICAgVmVjdG9yPGNoYXI+
IGxvd0tleTsKLSAgICBib29sIGxvd09wZW47Ci0gICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7Ci0g
ICAgYm9vbCBoaWdoT3BlbjsKLSAgICBib29sIGZvcndhcmQ7Ci0gICAgYm9vbCB1bmlxdWU7Ci19
OwotCi1jbGFzcyBDdXJzb3JJbXBsQ29tbW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yIHsKLXB1YmxpYzoKLSAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1
YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSopOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRh
SWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7Ci0gICAgYm9vbCBmaXJzdFNlZWsoKTsKLQotcHJvdGVj
dGVkOgotICAgIEN1cnNvckltcGxDb21tb24oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRp
b25zKQotICAgIHsKLSAgICB9Ci0KLSAgICBDdXJzb3JJbXBsQ29tbW9uKGNvbnN0IEN1cnNvcklt
cGxDb21tb24qIG90aGVyKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24ob3RoZXItPm1fdHJhbnNh
Y3Rpb24pCi0gICAgICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMp
Ci0gICAgICAgICwgbV9jdXJyZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkpCi0gICAgewotICAg
ICAgICBpZiAob3RoZXItPm1faXRlcmF0b3IpIHsKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSBt
X3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotCi0gICAgICAgICAgICBpZiAob3RoZXIt
Pm1faXRlcmF0b3ItPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnNl
ZWsob3RoZXItPm1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9p
dGVyYXRvci0+aXNWYWxpZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHZpcnR1YWwgfkN1cnNvckltcGxDb21tb24oKSB7fQotCi0gICAgTGV2ZWxEQlRyYW5zYWN0
aW9uKiBtX3RyYW5zYWN0aW9uOwotICAgIEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwot
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0gICAgUmVmUHRyPElEQktl
eT4gbV9jdXJyZW50S2V5OwotfTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWso
KQotewotICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwot
Ci0gICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQotICAgICAgICBtX2l0ZXJhdG9yLT5z
ZWVrKG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pdGVyYXRv
ci0+c2VlayhtX2N1cnNvck9wdGlvbnMuaGlnaEtleSk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIGlmICghbV9pdGVyYXRvci0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlv
bnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJz
b3JPcHRpb25zLmhpZ2hLZXkpID49IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JPcHRpb25zLmhpZ2hP
cGVuICYmIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9u
cy5oaWdoS2V5KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
bV9jdXJzb3JPcHRpb25zLmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29t
cGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkg
PD0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2N1cnNvck9w
dGlvbnMuZm9yd2FyZCAmJiAhbV9jdXJzb3JPcHRpb25zLmxvd09wZW4gJiYgY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9y
d2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbikgewotICAgICAgICAgICAgLy8gbG93S2V5
IG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UuCi0gICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPD0gMCkgewot
ICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPm5leHQoKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fY3Vyc29yT3B0
aW9ucy5mb3J3YXJkICYmIG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbikgewotICAgICAgICAgICAg
Ly8gaGlnaEtleSBub3QgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLgotICAgICAgICAgICAgaWYgKGNv
bXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5
KSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFsb2FkQ3VycmVudFJvdygpKSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZv
cndhcmQpCi0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnByZXYoKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1i
b29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hhcmVzIGEgbG90IG9mIGNvZGUgd2l0aCBmaXJzdFNl
ZWsuCi0gICAgUmVmUHRyPElEQktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7Ci0KLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAg
ICAgICAgIG1faXRlcmF0b3ItPm5leHQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9p
dGVyYXRvci0+cHJldigpOwotCi0gICAgICAgIGlmICghbV9pdGVyYXRvci0+aXNWYWxpZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxjaGFyPiB0cmFzaDsK
LSAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQobV9pdGVyYXRvci0+a2V5KCksIHRyYXNo
KSkKLSAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25z
LmZvcndhcmQgJiYgbV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMo
bV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+PSAwKSAvLyBoaWdo
IGtleSBub3QgaW5jbHVkZWQgaW4gcmFuZ2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1cnNvck9wdGlvbnMuaGln
aE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRp
b25zLmhpZ2hLZXkpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCFtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCAmJiBtX2N1cnNvck9wdGlvbnMubG93T3BlbiAmJiBj
b21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5
KSA8PSAwKSAvLyBsb3cga2V5IG5vdCBpbmNsdWRlZCBpbiByYW5nZQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkICYmICFtX2N1
cnNvck9wdGlvbnMubG93T3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgp
LCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKCFsb2FkQ3VycmVudFJvdygpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGtleSkgewotICAgICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5m
b3J3YXJkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEtleS0+aXNMZXNzVGhhbihr
ZXkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGtleS0+aXNMZXNzVGhhbihtX2N1cnJlbnRLZXkuZ2V0KCkp
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMudW5pcXVlICYmIG1fY3VycmVudEtleS0+
aXNFcXVhbChwcmV2aW91c0tleS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgT2JqZWN0
U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlv
bnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29y
SW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykpOwotICAg
IH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgp
IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faWRlbnRpZmll
cjsKLSAgICB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3co
KTsKLQotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQotICAg
IHsKLSAgICB9Ci0KLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVD
dXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQotICAg
ICAgICAsIG1fY3VycmVudFZhbHVlKG90aGVyLT5tX2N1cnJlbnRWYWx1ZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOwotICAgIFJlZlB0cjxMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOwotfTsKLQotYm9vbCBPYmplY3RTdG9yZUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KCkKLXsKLSAgICBjb25zdCBjaGFyKiBwID0gbV9pdGVyYXRvci0+
a2V5KCkuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0b3ItPmtl
eSgpLmVuZCgpOwotCi0gICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9iamVjdFN0b3JlRGF0YUtleTsK
LSAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwga2V5TGltaXQsICZvYmplY3RT
dG9yZURhdGFLZXkpOwotICAgIEFTU0VSVChwKTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fY3VycmVudEtleSA9IG9iamVjdFN0b3JlRGF0YUtleS51c2VyS2V5
KCk7Ci0KLSAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZh
ckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5k
KCksIHZlcnNpb24pOwotICAgIEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBk
ZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgotICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNv
cmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9u
KTsKLQotICAgIG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHEsIG1faXRlcmF0b3ItPnZh
bHVlKCkuZW5kKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIEluZGV4S2V5Q3Vy
c29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwodHJhbnNhY3Rp
b24sIGN1cnNvck9wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRoaXMpKTsKLSAgICB9Ci0KLSAgICAvLyBDdXJz
b3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7Ci0K
LXByaXZhdGU6Ci0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDog
Q3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAg
fQotCi0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKGNvbnN0IEluZGV4S2V5Q3Vyc29ySW1wbCogb3Ro
ZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKLSAgICAgICAgLCBtX3ByaW1h
cnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QktleT4gbV9wcmltYXJ5S2V5OwotfTsKLQotYm9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KCkKLXsKLSAgICBjb25zdCBjaGFyKiBwID0gbV9pdGVyYXRvci0+a2V5KCkuYmVn
aW4oKTsKLSAgICBjb25zdCBjaGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgp
OwotICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXk7Ci0gICAgcCA9IEluZGV4RGF0YUtleTo6
ZGVjb2RlKHAsIGtleUxpbWl0LCAmaW5kZXhEYXRhS2V5KTsKLQotICAgIG1fY3VycmVudEtleSA9
IGluZGV4RGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247
Ci0gICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJl
Z2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24pOwotICAg
IEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHEg
PSBkZWNvZGVJREJLZXkocSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5
KTsKLSAgICBBU1NFUlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6
OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3Rv
cmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5nZXQocHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsK
LSAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQu
ZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwotICAgIEFTU0VSVCh0KTsKLSAgICBpZiAo
IXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJz
aW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3Zl
KG1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29y
SW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJ
bXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29y
T3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5kZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0aGlz
KSk7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5n
IHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICBib29sIGxvYWRDdXJyZW50Um93KCk7Ci0KLXByaXZh
dGU6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1w
bENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0gICAg
SW5kZXhDdXJzb3JJbXBsKGNvbnN0IEluZGV4Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDog
Q3Vyc29ySW1wbENvbW1vbihvdGhlcikKLSAgICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1f
cHJpbWFyeUtleSkKLSAgICAgICAgLCBtX3ZhbHVlKG90aGVyLT5tX3ZhbHVlKQotICAgICAgICAs
IG1fcHJpbWFyeUxldmVsREJLZXkob3RoZXItPm1fcHJpbWFyeUxldmVsREJLZXkpCi0gICAgewot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92
YWx1ZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5TGV2ZWxEQktleTsKLX07Ci0KLWJvb2wg
SW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciAqcCA9
IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciAqbGltaXQgPSBtX2l0
ZXJhdG9yLT5rZXkoKS5lbmQoKTsKLQotICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXk7Ci0g
ICAgcCA9IEluZGV4RGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmaW5kZXhEYXRhS2V5KTsKLQot
ICAgIG1fY3VycmVudEtleSA9IGluZGV4RGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICBjb25zdCBj
aGFyICpxID0gbV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIgKnZh
bHVlTGltaXQgPSBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpOwotCi0gICAgaW50NjRfdCBpbmRl
eERhdGFWZXJzaW9uOwotICAgIHEgPSBkZWNvZGVWYXJJbnQocSwgdmFsdWVMaW1pdCwgaW5kZXhE
YXRhVmVyc2lvbik7Ci0gICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHEgPSBkZWNvZGVJREJLZXkocSwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5
KTsKLSAgICBBU1NFUlQocSk7Ci0gICAgaWYgKCFxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBtX3ByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5k
ZXhEYXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1f
cHJpbWFyeUtleSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV90cmFu
c2FjdGlvbi0+Z2V0KG1fcHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKLSAgICBjb25z
dCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9i
amVjdFN0b3JlRGF0YVZlcnNpb24pOwotICAgIEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGlu
ZGV4RGF0YVZlcnNpb24pIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0
b3ItPmtleSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fdmFsdWUg
PSBkZWNvZGVTdHJpbmcodCwgcmVzdWx0LmVuZCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0g
ICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotCi0gICAgYm9vbCBsb3dlckJvdW5kID0g
cmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYg
cmFuZ2UtPnVwcGVyKCk7Ci0gICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9
PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFQpOwotICAgIGN1cnNvck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJz
b3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9f
RFVQTElDQVRFKTsKLQotICAgIGlmICghbG93ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRp
b25zLmxvd0tleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0g
dHJ1ZTsgLy8gTm90IGluY2x1ZGVkLgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlv
bnMubG93S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVu
ID0gcmFuZ2UtPmxvd2VyT3BlbigpOwotICAgIH0KLQotICAgIGlmICghdXBwZXJCb3VuZCkgewot
ICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7Ci0KLSAgICAgICAgaWYg
KGN1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9w
ZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Ly8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0
ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JP
cHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcmFu
Z2UtPnVwcGVyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVw
cGVyT3BlbigpOwotCi0gICAgICAgIGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7Ci0gICAg
ICAgICAgICAvLyBGb3IgcmV2ZXJzZSBjdXJzb3JzLCB3ZSBuZWVkIGEga2V5IHRoYXQgZXhpc3Rz
LgotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKLSAgICAgICAgICAgIGlm
ICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3VsZCBu
b3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBzaG91
bGQgaW5jbHVkZSB0aGF0LgotICAgICAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4g
JiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkg
PCAwKQotICAgICAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLQot
ICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0g
T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGN1cnNvck9wdGlvbnMpOwotICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbklu
ZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0g
ICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJh
bmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJh
bmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0g
SURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpO
RVhUKTsKLSAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29y
OjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RV
UExJQ0FURSk7Ci0KLSAgICBpZiAoIWxvd2VyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9u
cy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7
IC8vIEluY2x1ZGVkLgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFu
Z2UtPmxvd2VyT3BlbigpOwotICAgIH0KLQotICAgIGlmICghdXBwZXJCb3VuZCkgewotICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlv
bnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAg
aWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9w
ZW4gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlv
bnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7Ci0KLSAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5k
SGlnaEtleTsKLSAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdo
S2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUg
a2V5cy4KLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8vIElmIHRoZSB0YXJnZXQg
a2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIg
a2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgotICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5o
aWdoS2V5KSA8IDApCi0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7
Ci0KLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgIH0K
LQotICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29y
SW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsK
LSAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK
LSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vy
c29yT3B0aW9uczsKLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIo
KTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLSAgICBj
dXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19E
VVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgY3Vyc29yT3B0
aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUg
fHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpOwotCi0gICAgaWYg
KCFsb3dlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRh
S2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0g
ICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KLSAgICB9
IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+bG93ZXIoKSk7
Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHJhbmdlLT5sb3dlck9wZW4oKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsgLy8g
SW5jbHVkZWQuCi0KLSAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsgLy8gV2Ug
bmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5
TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25z
LmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2Ut
PnVwcGVyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVy
T3BlbigpOwotCi0gICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlm
ICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhl
ICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLQotICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGlu
Y2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1
ZGUgdGhhdC4KLSAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUlu
ZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQotICAgICAg
ICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwotCi0gICAgICAgIGN1cnNvck9w
dGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5kZXhD
dXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2Vl
aygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwot
fQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKLXsKLSAgICByZXR1cm4gVHJhbnNhY3Rp
b246OmNyZWF0ZSh0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0
ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUcmFuc2FjdGlvbihiYWNraW5nU3RvcmUpKTsKLX0KLQotSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLXsK
LX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4oKQot
ewotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAg
ICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rp
b246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgbV9iYWNraW5nU3RvcmUt
Pm1fY3VycmVudFRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9j
dXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRU
cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJh
bnNhY3Rpb24uY2xlYXIoKTsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpiYWNr
aW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQotewotICAgIFN0cmluZyBwYXRoQmFzZSA9
IHBhdGhCYXNlQXJnOwotCi0gICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUg
c2FtZSBMZXZlbERCIGRhdGFiYXNlIGZvciBhbGwgb3JpZ2lucy4KLSAgICBTdHJpbmcgcGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwotCi0gICAgLy8gRklYTUU6
IHRoaXMgaXMgY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIHRoZSBkb21haW4sIG5vdCB0aGUgZGF0
YWJhc2UgaXRzZWxmCi0gICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJCYWNraW5n
U3RvcmVfaAotI2RlZmluZSBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIExldmVsREJDb21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotY2xh
c3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwotCi1j
bGFzcyBJREJMZXZlbERCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRl
bnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCTGV2ZWxE
QkJhY2tpbmdTdG9yZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCBy
b3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0
b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZl
Y3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBj
cmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3Jk
SWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciopOwotICAgIHZpcnR1YWwgZG91YmxlIG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wg
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3Vu
ZFJlY29yZElkZW50aWZpZXIpOwotCi0gICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYg
Zm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91
bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4m
IGZvdW5kTXVsdGlFbnRyeUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRy
eSwgaW50NjRfdCYgaW5kZXhJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwot
ICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBib29sIGRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtl
eSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7Ci0K
LSAgICBzdGF0aWMgYm9vbCBiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UpOwotCi1wcml2YXRlOgotICAg
IElEQkxldmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0
b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4pOwotCi0gICAgU3Ry
aW5nIG1faWRlbnRpZmllcjsKLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2Zh
Y3Rvcnk7Ci0gICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKLSAgICBPd25QdHI8TGV2
ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKLSAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0
aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKLQotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVi
bGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0
b3JlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAg
ICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKLSAgICB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkxldmVsREJC
YWNraW5nU3RvcmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJD
b2RpbmcuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkxldmVsREJDb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MDUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1
ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotLy8gTGV2ZWxEQiBzdG9yZXMga2V5L3ZhbHVlIHBhaXJz
LiBLZXlzIGFuZCB2YWx1ZXMgYXJlIHN0cmluZ3Mgb2YgYnl0ZXMsIG5vcm1hbGx5IG9mIHR5cGUg
VmVjdG9yPGNoYXI+LgotLy8KLS8vIFRoZSBrZXlzIGluIHRoZSBiYWNraW5nIHN0b3JlIGFyZSB2
YXJpYWJsZS1sZW5ndGggdHVwbGVzIHdpdGggZGlmZmVyZW50IHR5cGVzCi0vLyBvZiBmaWVsZHMu
IEVhY2gga2V5IGluIHRoZSBiYWNraW5nIHN0b3JlIHN0YXJ0cyB3aXRoIGEgdGVybmFyeSBwcmVm
aXg6IChkYXRhYmFzZSBpZCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCkuIEZvciBlYWNoLCAw
IGlzIHJlc2VydmVkIGZvciBtZXRhLWRhdGEuCi0vLyBUaGUgcHJlZml4IG1ha2VzIHN1cmUgdGhh
dCBkYXRhIGZvciBhIHNwZWNpZmljIGRhdGFiYXNlLCBvYmplY3Qgc3RvcmUsIGFuZCBpbmRleCBh
cmUgZ3JvdXBlZCB0b2dldGhlci4gVGhlIGxvY2FsaXR5IGlzIGltcG9ydGFudCBmb3IgcGVyZm9y
bWFuY2U6IGNvbW1vbgotLy8gb3BlcmF0aW9ucyBzaG91bGQgb25seSBuZWVkIGEgbWluaW1hbCBu
dW1iZXIgb2Ygc2VlayBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgYWxsIHRoZSBtZXRhLWRhdGEg
Zm9yIGEgZGF0YWJhc2UgaXMgZ3JvdXBlZCB0b2dldGhlciBzbyB0aGF0IHJlYWRpbmcgdGhhdAot
Ly8gbWV0YS1kYXRhIG9ubHkgcmVxdWlyZXMgb25lIHNlZWsuCi0vLwotLy8gRWFjaCBrZXkgdHlw
ZSBoYXMgYSBjbGFzcyAoaW4gc3F1YXJlIGJyYWNrZXRzIGJlbG93KSB3aGljaCBrbm93cyBob3cg
dG8gZW5jb2RlLCBkZWNvZGUsIGFuZCBjb21wYXJlIHRoYXQga2V5IHR5cGUuCi0vLwotLy8gR2xv
YmFsIG1ldGEtZGF0YSBoYXZlIGtleXMgd2l0aCBwcmVmaXggKDAsMCwwKSwgZm9sbG93ZWQgYnkg
YSB0eXBlIGJ5dGU6Ci0vLwotLy8gICAgIDwwLCAwLCAwLCAwPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9PiBJbmRleGVkREIvTGV2ZWxEQiBzY2hlbWEgdmVyc2lv
biAoMCBmb3Igbm93KSBbU2NoZW1hVmVyc2lvbktleV0KLS8vICAgICA8MCwgMCwgMCwgMT4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVGhlIG1heGltdW0gZGF0
YWJhc2UgaWQgZXZlciBhbGxvY2F0ZWQgW01heERhdGFiYXNlSWRLZXldCi0vLyAgICAgPDAsIDAs
IDAsIDEwMCwgZGF0YWJhc2UgaWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IEV4aXN0
ZW5jZSBpbXBsaWVzIHRoZSBkYXRhYmFzZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtEYXRhYmFz
ZUZyZWVMaXN0S2V5XQotLy8gICAgIDwwLCAwLCAwLCAyMDEsIHV0ZjE2IG9yaWdpbiBuYW1lLCB1
dGYxNiBkYXRhYmFzZSBuYW1lPiA9PiBEYXRhYmFzZSBpZCBbRGF0YWJhc2VOYW1lS2V5XQotLy8K
LS8vCi0vLyBEYXRhYmFzZSBtZXRhLWRhdGE6Ci0vLwotLy8gICAgIEFnYWluLCB0aGUgcHJlZml4
IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAs
IDAsIDA+ID0+IHV0ZjE2IG9yaWdpbiBuYW1lIFtEYXRhYmFzZU1ldGFEYXRhS2V5XQotLy8gICAg
IDxkYXRhYmFzZSBpZCwgMCwgMCwgMT4gPT4gdXRmMTYgZGF0YWJhc2UgbmFtZSBbRGF0YWJhc2VN
ZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDI+ID0+IHV0ZjE2IHVzZXIg
dmVyc2lvbiBkYXRhIFtEYXRhYmFzZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwg
MCwgMCwgMz4gPT4gbWF4aW11bSBvYmplY3Qgc3RvcmUgaWQgZXZlciBhbGxvY2F0ZWQgW0RhdGFi
YXNlTWV0YURhdGFLZXldCi0vLwotLy8KLS8vIE9iamVjdCBzdG9yZSBtZXRhLWRhdGE6Ci0vLwot
Ly8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJp
YWJsZS1sZW5ndGggaW50ZWdlciwgYW5kIHRoZW4gYW5vdGhlciB2YXJpYWJsZS1sZW5ndGggaW50
ZWdlciAoRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgYnl0ZSkuCi0vLwotLy8gICAgIDxkYXRhYmFz
ZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3Jl
IG5hbWUgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAw
LCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUg
aWQsIDI+ID0+IGhhcyBhdXRvIGluY3JlbWVudCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8v
ICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDM+ID0+IGlzIGV2
aWN0YWJsZSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAs
IDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDQ+ID0+IGxhc3QgInZlcnNpb24iIG51bWJlciBbT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmpl
Y3Qgc3RvcmUgaWQsIDU+ID0+IG1heGltdW0gaW5kZXggaWQgZXZlciBhbGxvY2F0ZWQgW09iamVj
dFN0b3JlTWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0
IHN0b3JlIGlkLCA2PiA9PiBoYXMga2V5IHBhdGggKHZzLiBudWxsKSBbT2JqZWN0U3RvcmVNZXRh
RGF0YUtleV0KLS8vCi0vLwotLy8gSW5kZXggbWV0YS1kYXRhOgotLy8KLS8vICAgICBUaGUgcHJl
Zml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIHR3byB2YXJpYWJsZS1sZW5ndGgg
aW50ZWdlcnMsIGFuZCB0aGVuIGFub3RoZXIgdHlwZSBieXRlLgotLy8KLS8vICAgICA8ZGF0YWJh
c2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgMD4gPT4gdXRmMTYg
aW5kZXggbmFtZSBbSW5kZXhNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAs
IDEwMCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgMT4gPT4gYXJlIGluZGV4IGtleXMgdW5p
cXVlIFtJbmRleE1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMTAwLCBv
YmplY3Qgc3RvcmUgaWQsIGluZGV4IGlkLCAyPiA9PiB1dGYxNiBrZXkgcGF0aCBbSW5kZXhNZXRh
RGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0IHN0b3JlIGlk
LCBpbmRleCBpZCwgMz4gPT4gaXMgaW5kZXggbXVsdGktZW50cnkgW0luZGV4TWV0YURhdGFLZXld
Ci0vLwotLy8KLS8vIE90aGVyIG9iamVjdCBzdG9yZSBhbmQgaW5kZXggbWV0YS1kYXRhOgotLy8K
LS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBUaGUgb2JqZWN0
IHN0b3JlIGFuZCBpbmRleCBpZCBhcmUgdmFyaWFibGUgbGVuZ3RoIGludGVnZXJzLCB0aGUgdXRm
MTYgc3RyaW5ncyBhcmUgdmFyaWFibGUgbGVuZ3RoIHN0cmluZ3MuCi0vLwotLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgMTUwLCBvYmplY3Qgc3RvcmUgaWQ+ICAgICAgICAgICAgICAgICAgID0+
IGV4aXN0ZW5jZSBpbXBsaWVzIHRoZSBvYmplY3Qgc3RvcmUgaWQgaXMgaW4gdGhlIGZyZWUgbGlz
dCBbT2JqZWN0U3RvcmVGcmVlTGlzdEtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDE1
MSwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZD4gICAgICAgICA9PiBleGlzdGVuY2UgaW1wbGll
cyB0aGUgaW5kZXggaWQgaXMgaW4gdGhlIGZyZWUgbGlzdCBbSW5kZXhGcmVlTGlzdEtleV0KLS8v
ICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDIwMCwgdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWU+ICAg
ICAgICAgICA9PiBvYmplY3Qgc3RvcmUgaWQgW09iamVjdFN0b3JlTmFtZXNLZXldCi0vLyAgICAg
PGRhdGFiYXNlIGlkLCAwLCAwLCAyMDEsIG9iamVjdCBzdG9yZSBpZCwgdXRmMTYgaW5kZXggbmFt
ZT4gPT4gaW5kZXggaWQgW0luZGV4TmFtZXNLZXldCi0vLwotLy8KLS8vIE9iamVjdCBzdG9yZSBk
YXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBU
aGUgdXNlciBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBp
ZCwgb2JqZWN0IHN0b3JlIGlkLCAxLCB1c2VyIGtleT4gPT4gInZlcnNpb24iLCBzZXJpYWxpemVk
IHNjcmlwdCB2YWx1ZSBbT2JqZWN0U3RvcmVEYXRhS2V5XQotLy8KLS8vCi0vLyAiRXhpc3RzIiBl
bnRyeToKLS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4g
VGhlIHVzZXIga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJhc2Ug
aWQsIG9iamVjdCBzdG9yZSBpZCwgMiwgdXNlciBrZXk+ID0+ICJ2ZXJzaW9uIiBbRXhpc3RzRW50
cnlLZXldCi0vLwotLy8KLS8vIEluZGV4IGRhdGE6Ci0vLwotLy8gICAgIFRoZSBwcmVmaXggaXMg
Zm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSBpbmRleCBrZXkgaXMgYW4gZW5jb2RlZCBJREJL
ZXkuIFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgYSB2YXJpYWJsZSBsZW5ndGggaW50ZWdlci4KLS8v
ICAgICBUaGUgcHJpbWFyeSBrZXkgaXMgYW4gZW5jb2RlZCBJREJLZXkuCi0vLwotLy8gICAgIDxk
YXRhYmFzZSBpZCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwgaW5kZXgga2V5LCBzZXF1ZW5j
ZSBudW1iZXIsIHByaW1hcnkga2V5PiA9PiAidmVyc2lvbiIsIHByaW1hcnkga2V5IFtJbmRleERh
dGFLZXldCi0vLwotLy8gICAgIChUaGUgc2VxdWVuY2UgbnVtYmVyIGlzIG9ic29sZXRlOyBpdCB3
YXMgdXNlZCB0byBhbGxvdyB0d28gZW50cmllcyB3aXRoCi0vLyAgICAgdGhlIHNhbWUgdXNlciAo
aW5kZXgpIGtleSBpbiBub24tdW5pcXVlIGluZGV4ZXMgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBv
ZgotLy8gICAgIHRoZSBwcmltYXJ5IGtleSBpbiB0aGUgZGF0YS4gVGhlICJ2ZXJzaW9uIiBmaWVs
ZCBpcyB1c2VkIHRvIHdlZWQgb3V0IHN0YWxlCi0vLyAgICAgaW5kZXggZGF0YS4gV2hlbmV2ZXIg
bmV3IG9iamVjdCBzdG9yZSBkYXRhIGlzIGluc2VydGVkLCBpdCBnZXRzIGEgbmV3Ci0vLyAgICAg
InZlcnNpb24iIG51bWJlciwgYW5kIG5ldyBpbmRleCBkYXRhIGlzIHdyaXR0ZW4gd2l0aCB0aGlz
IG51bWJlci4gV2hlbgotLy8gICAgIHRoZSBpbmRleCBpcyB1c2VkIGZvciBsb29rLXVwcywgZW50
cmllcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlCi0vLyAgICAgImV4aXN0cyIgZW50cmllcywg
YW5kIHJlY29yZHMgd2l0aCBvbGQgInZlcnNpb24iIG51bWJlcnMgYXJlIGRlbGV0ZWQKLS8vICAg
ICB3aGVuIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIGdldFByaW1hcnlLZXlWaWFJbmRleCwKLS8v
ICAgICBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93LCBhbmQgSW5kZXhLZXlDdXJzb3JJ
bXBsOjpsb2FkQ3VycmVudFJvdykuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJ
REJMZXZlbERCQ29kaW5nIHsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleU51
bGxUeXBlQnl0ZSA9IDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5U3RyaW5n
VHlwZUJ5dGUgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleURhdGVUeXBl
Qnl0ZSA9IDI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSURCS2V5TnVtYmVyVHlwZUJ5
dGUgPSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleUFycmF5VHlwZUJ5dGUg
PSA0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lEQktleU1pbktleVR5cGVCeXRlID0g
NTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlRGF0YUluZGV4SWQg
PSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0V4aXN0c0VudHJ5SW5kZXhJZCA9IDI7
Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtTY2hlbWFWZXJzaW9uVHlwZUJ5dGUgPSAw
Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga01heERhdGFiYXNlSWRUeXBlQnl0ZSA9IDE7
Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrRGF0YWJhc2VGcmVlTGlzdFR5cGVCeXRlID0g
MTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0RhdGFiYXNlTmFtZVR5cGVCeXRlID0g
MjAxOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0U3RvcmVNZXRhRGF0YVR5
cGVCeXRlID0gNTA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrSW5kZXhNZXRhRGF0YVR5
cGVCeXRlID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga09iamVjdFN0b3JlRnJl
ZUxpc3RUeXBlQnl0ZSA9IDE1MDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtJbmRleEZy
ZWVMaXN0VHlwZUJ5dGUgPSAxNTE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrT2JqZWN0
U3RvcmVOYW1lc1R5cGVCeXRlID0gMjAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga0lu
ZGV4TmFtZXNLZXlUeXBlQnl0ZSA9IDIwMTsKLQotI2lmbmRlZiBJTlQ2NF9NQVgKLSNkZWZpbmUg
SU5UNjRfTUFYIDB4N2ZmZmZmZmZmZmZmZmZmZkxMCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFY
Ci0jZGVmaW5lIElOVDMyX01BWCAweDdmZmZmZmZmTAotI2VuZGlmCi0KLQotVmVjdG9yPGNoYXI+
IGVuY29kZUJ5dGUodW5zaWduZWQgY2hhciBjKQotewotICAgIFZlY3RvcjxjaGFyPiB2OwotICAg
IHYuYXBwZW5kKGMpOwotICAgIHJldHVybiB2OwotfQotCi1WZWN0b3I8Y2hhcj4gbWF4SURCS2V5
KCkKLXsKLSAgICByZXR1cm4gZW5jb2RlQnl0ZShrSURCS2V5TnVsbFR5cGVCeXRlKTsKLX0KLQot
VmVjdG9yPGNoYXI+IG1pbklEQktleSgpCi17Ci0gICAgcmV0dXJuIGVuY29kZUJ5dGUoa0lEQktl
eU1pbktleVR5cGVCeXRlKTsKLX0KLQotVmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90IG4p
Ci17Ci0gICAgQVNTRVJUKG4gPj0gMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsgLy8gRklYTUU6
IFNpemUgdGhpcyBhdCBjcmVhdGlvbi4KLQotICAgIGRvIHsKLSAgICAgICAgdW5zaWduZWQgY2hh
ciBjID0gbjsKLSAgICAgICAgcmV0LmFwcGVuZChjKTsKLSAgICAgICAgbiA+Pj0gODsKLSAgICB9
IHdoaWxlIChuKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludDY0X3QgZGVjb2RlSW50KGNv
bnN0IGNoYXIqIGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpCi17Ci0gICAgQVNTRVJUKGJlZ2luIDw9
IGVuZCk7Ci0gICAgaW50NjRfdCByZXQgPSAwOwotCi0gICAgaW50IHNoaWZ0ID0gMDsKLSAgICB3
aGlsZSAoYmVnaW4gPCBlbmQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKmJlZ2luKys7
Ci0gICAgICAgIHJldCB8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihjKSA8PCBzaGlmdDsKLSAgICAg
ICAgc2hpZnQgKz0gODsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50
IGNvbXBhcmVJbnRzKGludDY0X3QgYSwgaW50NjRfdCBiKQotewotICAgIEFTU0VSVChhID49IDAp
OwotICAgIEFTU0VSVChiID49IDApOwotCi0gICAgaW50NjRfdCBkaWZmID0gYSAtIGI7Ci0gICAg
aWYgKGRpZmYgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGRpZmYgPiAwKQotICAg
ICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gMDsKLX0KLQotVmVjdG9yPGNoYXI+IGVuY29kZVZh
ckludChpbnQ2NF90IG4pCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsgLy8gRklYTUU6IFNpemUg
dGhpcyBhdCBjcmVhdGlvbi4KLQotICAgIGRvIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0g
biAmIDB4N2Y7Ci0gICAgICAgIG4gPj49IDc7Ci0gICAgICAgIGlmIChuKQotICAgICAgICAgICAg
YyB8PSAweDgwOwotICAgICAgICByZXQuYXBwZW5kKGMpOwotICAgIH0gd2hpbGUgKG4pOwotCi0g
ICAgcmV0dXJuIHJldDsKLX0KLQotY29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIg
KnAsIGNvbnN0IGNoYXIqIGxpbWl0LCBpbnQ2NF90JiBmb3VuZEludCkKLXsKLSAgICBBU1NFUlQo
bGltaXQgPj0gcCk7Ci0gICAgZm91bmRJbnQgPSAwOwotICAgIGludCBzaGlmdCA9IDA7Ci0KLSAg
ICBkbyB7Ci0gICAgICAgIGlmIChwID49IGxpbWl0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnA7Ci0gICAgICAgIGZvdW5kSW50IHw9IHN0YXRp
Y19jYXN0PGludDY0X3Q+KGMgJiAweDdmKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0gNzsK
LSAgICB9IHdoaWxlICgqcCsrICYgMHg4MCk7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3Rvcjxj
aGFyPiBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQotewotICAgIFZlY3RvcjxjaGFyPiBy
ZXQ7IC8vIEZJWE1FOiBTaXplIHRoaXMgYXQgY3JlYXRpb24uCi0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIHUgPSBzW2ldOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIGhpID0gdSA+PiA4OwotICAgICAgICB1bnNpZ25lZCBjaGFy
IGxvID0gdTsKLSAgICAgICAgcmV0LmFwcGVuZChoaSk7Ci0gICAgICAgIHJldC5hcHBlbmQobG8p
OwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLVN0cmluZyBkZWNvZGVTdHJpbmcoY29u
c3QgY2hhciogcCwgY29uc3QgY2hhciogZW5kKQotewotICAgIEFTU0VSVChlbmQgPj0gcCk7Ci0g
ICAgQVNTRVJUKCEoKGVuZCAtIHApICUgMikpOwotCi0gICAgc2l6ZV90IGxlbiA9IChlbmQgLSBw
KSAvIDI7Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBh
Y2l0eShsZW4pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAg
ICAgICB1bnNpZ25lZCBjaGFyIGhpID0gKnArKzsKLSAgICAgICAgdW5zaWduZWQgY2hhciBsbyA9
ICpwKys7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oKGhpIDw8
IDgpIHwgbG8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0K
LVZlY3RvcjxjaGFyPiBlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IFN0cmluZyYgcykKLXsK
LSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gZW5jb2RlVmFySW50KHMubGVuZ3RoKCkpOwotICAgIHJl
dC5hcHBlbmQoZW5jb2RlU3RyaW5nKHMpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1jb25zdCBj
aGFyKiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxp
bWl0LCBTdHJpbmcmIGZvdW5kU3RyaW5nKQotewotICAgIEFTU0VSVChsaW1pdCA+PSBwKTsKLSAg
ICBpbnQ2NF90IGxlbjsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW4pOwotICAg
IGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHAgKyBsZW4gKiAyID4gbGltaXQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgZm91bmRTdHJpbmcgPSBkZWNvZGVTdHJpbmcocCwg
cCArIGxlbiAqIDIpOwotICAgIHAgKz0gbGVuICogMjsKLSAgICByZXR1cm4gcDsKLX0KLQotaW50
IGNvbXBhcmVFbmNvZGVkU3RyaW5nc1dpdGhMZW5ndGgoY29uc3QgY2hhciomIHAsIGNvbnN0IGNo
YXIqIGxpbWl0UCwgY29uc3QgY2hhciomIHEsIGNvbnN0IGNoYXIqIGxpbWl0USkKLXsKLSAgICBB
U1NFUlQoJnAgIT0gJnEpOwotICAgIEFTU0VSVChsaW1pdFAgPj0gcCk7Ci0gICAgQVNTRVJUKGxp
bWl0USA+PSBxKTsKLSAgICBpbnQ2NF90IGxlblAsIGxlblE7Ci0gICAgcCA9IGRlY29kZVZhcklu
dChwLCBsaW1pdFAsIGxlblApOwotICAgIHEgPSBkZWNvZGVWYXJJbnQocSwgbGltaXRRLCBsZW5R
KTsKLSAgICBBU1NFUlQocCAmJiBxKTsKLSAgICBBU1NFUlQobGVuUCA+PSAwKTsKLSAgICBBU1NF
UlQobGVuUSA+PSAwKTsKLSAgICBBU1NFUlQocCArIGxlblAgKiAyIDw9IGxpbWl0UCk7Ci0gICAg
QVNTRVJUKHEgKyBsZW5RICogMiA8PSBsaW1pdFEpOwotCi0gICAgY29uc3QgY2hhciogc3RhcnRQ
ID0gcDsKLSAgICBjb25zdCBjaGFyKiBzdGFydFEgPSBxOwotICAgIHAgKz0gbGVuUCAqIDI7Ci0g
ICAgcSArPSBsZW5RICogMjsKLQotICAgIGlmIChwID4gbGltaXRQIHx8IHEgPiBsaW1pdFEpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3Qgc2l6ZV90IGxtaW4gPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KGxlblAgPCBsZW5RID8gbGVuUCA6IGxlblEpOwotICAgIGlmIChpbnQgeCA9IG1lbWNt
cChzdGFydFAsIHN0YXJ0USwgbG1pbiAqIDIpKQotICAgICAgICByZXR1cm4geDsKLQotICAgIGlm
IChsZW5QID09IGxlblEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIChsZW5QID4g
bGVuUSkgPyAxIDogLTE7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlIHgp
Ci17Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgYmUgYnl0ZSBv
cmRlciBpbmRlcGVuZGVudC4KLSAgICBjb25zdCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oJngpOwotICAgIFZlY3RvcjxjaGFyPiB2OwotICAgIHYuYXBwZW5kKHAsIHNpemVvZih4
KSk7Ci0gICAgQVNTRVJUKHYuc2l6ZSgpID09IHNpemVvZih4KSk7Ci0gICAgcmV0dXJuIHY7Ci19
Ci0KLWNvbnN0IGNoYXIqIGRlY29kZURvdWJsZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBs
aW1pdCwgZG91YmxlKiBkKQotewotICAgIGlmIChwICsgc2l6ZW9mKCpkKSA+IGxpbWl0KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGNoYXIqIHggPSByZWludGVycHJldF9jYXN0PGNoYXIqPihk
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZigqZCk7ICsraSkKLSAgICAgICAg
KngrKyA9ICpwKys7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVJREJL
ZXkoY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldDsKLSAgICBlbmNv
ZGVJREJLZXkoa2V5LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLXZvaWQgZW5jb2RlSURC
S2V5KGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGludG8pCi17Ci0gICAgc2l6ZV90
IHByZXZpb3VzU2l6ZSA9IGludG8uc2l6ZSgpOwotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewot
ICAgIGNhc2UgSURCS2V5OjpJbnZhbGlkVHlwZToKLSAgICBjYXNlIElEQktleTo6TWluVHlwZToK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29k
ZUJ5dGUoa0lEQktleU51bGxUeXBlQnl0ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
REJLZXk6OkFycmF5VHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgaW50by5hcHBlbmQoZW5j
b2RlQnl0ZShrSURCS2V5QXJyYXlUeXBlQnl0ZSkpOwotICAgICAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IGtleS5hcnJheSgpLnNpemUoKTsKLSAgICAgICAgICAgIGludG8uYXBwZW5kKGVuY29kZVZh
ckludChsZW5ndGgpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICAgICAgZW5jb2RlSURCS2V5KCprZXkuYXJyYXkoKVtpXSwgaW50
byk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkg
PiBwcmV2aW91c1NpemUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgY2Fz
ZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lE
QktleVN0cmluZ1R5cGVCeXRlKSk7Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZVN0cmluZ1dp
dGhMZW5ndGgoa2V5LnN0cmluZygpKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNT
aXplLCBpbnRvLnNpemUoKSA+IHByZXZpb3VzU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIGludG8uYXBwZW5kKGVuY29kZUJ5dGUoa0lE
QktleURhdGVUeXBlQnl0ZSkpOwotICAgICAgICBpbnRvLmFwcGVuZChlbmNvZGVEb3VibGUoa2V5
LmRhdGUoKSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXpl
KCkgLSBwcmV2aW91c1NpemUgPT0gOSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElEQktl
eTo6TnVtYmVyVHlwZToKLSAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlQnl0ZShrSURCS2V5TnVt
YmVyVHlwZUJ5dGUpKTsKLSAgICAgICAgaW50by5hcHBlbmQoZW5jb2RlRG91YmxlKGtleS5udW1i
ZXIoKSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkg
LSBwcmV2aW91c1NpemUgPT0gOSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotCi1jb25zdCBjaGFyKiBkZWNvZGVJREJLZXkoY29uc3Qg
Y2hhciogcCwgY29uc3QgY2hhciogbGltaXQsIFJlZlB0cjxJREJLZXk+JiBmb3VuZEtleSkKLXsK
LSAgICBBU1NFUlQobGltaXQgPj0gcCk7Ci0gICAgaWYgKHAgPj0gbGltaXQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgdW5zaWduZWQgY2hhciB0eXBlID0gKnArKzsKLQotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2Uga0lEQktleU51bGxUeXBlQnl0ZToKLSAgICAgICAgZm91bmRLZXkg
PSBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICBjYXNl
IGtJREJLZXlBcnJheVR5cGVCeXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQ2NF90IGxl
bmd0aDsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIGxlbmd0aCk7Ci0g
ICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICBpZiAobGVuZ3RoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IElEQktleTo6S2V5QXJyYXkgYXJyYXk7Ci0gICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAgICAgICAgICAgICAgcCA9
IGRlY29kZUlEQktleShwLCBsaW1pdCwga2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoIXApCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGFycmF5LmFwcGVu
ZChrZXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNy
ZWF0ZUFycmF5KGFycmF5KTsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAg
Y2FzZSBrSURCS2V5U3RyaW5nVHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmlu
ZyBzOwotICAgICAgICAgICAgcCA9IGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHMp
OwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZVN0cmluZyhzKTsKLSAgICAgICAgICAgIHJl
dHVybiBwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBkb3VibGUgZDsKLSAgICAgICAgICAgIHAgPSBkZWNvZGVEb3VibGUo
cCwgbGltaXQsICZkKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGQpOwotICAg
ICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0KLSAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBl
Qnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgZG91YmxlIGQ7Ci0gICAgICAgICAgICBwID0g
ZGVjb2RlRG91YmxlKHAsIGxpbWl0LCAmZCk7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRl
TnVtYmVyKGQpOwotICAgICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotY29uc3QgY2hhciog
ZXh0cmFjdEVuY29kZWRJREJLZXkoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0
LCBWZWN0b3I8Y2hhcj4qIHJlc3VsdCkKLXsKLSAgICBBU1NFUlQocmVzdWx0KTsKLSAgICBjb25z
dCBjaGFyKiBwID0gc3RhcnQ7Ci0gICAgaWYgKHAgPj0gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdW5zaWduZWQgY2hhciB0eXBlID0gKnArKzsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2Uga0lEQktleU51bGxUeXBlQnl0ZToKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlU
eXBlQnl0ZToKLSAgICAgICAgKnJlc3VsdCA9IGVuY29kZUJ5dGUodHlwZSk7Ci0gICAgICAgIHJl
dHVybiBwOwotICAgIGNhc2Uga0lEQktleUFycmF5VHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludDY0X3QgbGVuZ3RoOwotICAgICAgICAgICAgcCA9IGRlY29kZVZhckludChwLCBs
aW1pdCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgcmVzdWx0LT5jbGVhcigpOwotICAgICAgICAgICAgcmVzdWx0LT5h
cHBlbmQoc3RhcnQsIHAgLSBzdGFydCk7Ci0gICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsK
LSAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gc3Via2V5OwotICAgICAgICAgICAgICAgIHAg
PSBleHRyYWN0RW5jb2RlZElEQktleShwLCBsaW1pdCwgJnN1YmtleSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZChzdWJrZXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHA7Ci0gICAgICAgIH0KLSAgICBjYXNlIGtJREJLZXlTdHJpbmdUeXBlQnl0ZToKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50NjRfdCBsZW5ndGg7Ci0gICAgICAgICAgICBwID0gZGVjb2Rl
VmFySW50KHAsIGxpbWl0LCBsZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKHAgKyBsZW5ndGggKiAyID4gbGltaXQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXN1bHQtPmNsZWFyKCk7
Ci0gICAgICAgICAgICByZXN1bHQtPmFwcGVuZChzdGFydCwgcCAtIHN0YXJ0ICsgbGVuZ3RoICog
Mik7Ci0gICAgICAgICAgICByZXR1cm4gcCArIGxlbmd0aCAqIDI7Ci0gICAgICAgIH0KLSAgICBj
YXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6Ci0gICAgY2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6
Ci0gICAgICAgIGlmIChwICsgc2l6ZW9mKGRvdWJsZSkgPiBsaW1pdCkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXN1bHQtPmNsZWFyKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5k
KHN0YXJ0LCAxICsgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICByZXR1cm4gcCArIHNpemVvZihk
b3VibGUpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIElEQktleTo6VHlwZSBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh1bnNpZ25lZCBj
aGFyIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBrSURCS2V5TnVsbFR5
cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpJbnZhbGlkVHlwZTsKLSAgICBjYXNlIGtJ
REJLZXlBcnJheVR5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpBcnJheVR5cGU7Ci0g
ICAgY2FzZSBrSURCS2V5U3RyaW5nVHlwZUJ5dGU6Ci0gICAgICAgIHJldHVybiBJREJLZXk6OlN0
cmluZ1R5cGU7Ci0gICAgY2FzZSBrSURCS2V5RGF0ZVR5cGVCeXRlOgotICAgICAgICByZXR1cm4g
SURCS2V5OjpEYXRlVHlwZTsKLSAgICBjYXNlIGtJREJLZXlOdW1iZXJUeXBlQnl0ZToKLSAgICAg
ICAgcmV0dXJuIElEQktleTo6TnVtYmVyVHlwZTsKLSAgICBjYXNlIGtJREJLZXlNaW5LZXlUeXBl
Qnl0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6TWluVHlwZTsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSURCS2V5OjpJbnZhbGlkVHlwZTsKLX0KLQot
aW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBjaGFyKiYgcCwgY29uc3QgY2hhciogbGlt
aXRBLCBjb25zdCBjaGFyKiYgcSwgY29uc3QgY2hhciogbGltaXRCKQotewotICAgIEFTU0VSVCgm
cCAhPSAmcSk7Ci0gICAgQVNTRVJUKHAgPCBsaW1pdEEpOwotICAgIEFTU0VSVChxIDwgbGltaXRC
KTsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVBID0gKnArKzsKLSAgICB1bnNpZ25lZCBjaGFyIHR5
cGVCID0gKnErKzsKLQotICAgIGlmIChpbnQgeCA9IElEQktleTo6Y29tcGFyZVR5cGVzKGtleVR5
cGVCeXRlVG9LZXlUeXBlKHR5cGVBKSwga2V5VHlwZUJ5dGVUb0tleVR5cGUodHlwZUIpKSkKLSAg
ICAgICAgcmV0dXJuIHg7Ci0KLSAgICBzd2l0Y2ggKHR5cGVBKSB7Ci0gICAgY2FzZSBrSURCS2V5
TnVsbFR5cGVCeXRlOgotICAgIGNhc2Uga0lEQktleU1pbktleVR5cGVCeXRlOgotICAgICAgICAv
LyBOdWxsIHR5cGUgb3IgbWF4IHR5cGU7IG5vIHBheWxvYWQgdG8gY29tcGFyZS4KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgY2FzZSBrSURCS2V5QXJyYXlUeXBlQnl0ZToKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50NjRfdCBsZW5ndGhBLCBsZW5ndGhCOwotICAgICAgICAgICAgcCA9IGRlY29k
ZVZhckludChwLCBsaW1pdEEsIGxlbmd0aEEpOwotICAgICAgICAgICAgaWYgKCFwKQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcSA9IGRlY29kZVZhckludChxLCBsaW1p
dEIsIGxlbmd0aEIpOwotICAgICAgICAgICAgaWYgKCFxKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgaWYgKGxlbmd0aEEgPCAwIHx8IGxlbmd0aEIgPCAwKQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBpIDwg
bGVuZ3RoQSAmJiBpIDwgbGVuZ3RoQjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGludCBj
bXAgPSBjb21wYXJlRW5jb2RlZElEQktleXMocCwgbGltaXRBLCBxLCBsaW1pdEIpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY21wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGxlbmd0aEEgPCBsZW5ndGhCKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
ICAgIGlmIChsZW5ndGhBID4gbGVuZ3RoQikKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgY2FzZSBrSURCS2V5U3RyaW5nVHlw
ZUJ5dGU6Ci0gICAgICAgIHJldHVybiBjb21wYXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKHAs
IGxpbWl0QSwgcSwgbGltaXRCKTsKLSAgICBjYXNlIGtJREJLZXlEYXRlVHlwZUJ5dGU6Ci0gICAg
Y2FzZSBrSURCS2V5TnVtYmVyVHlwZUJ5dGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBkLCBlOwotICAgICAgICAgICAgcCA9IGRlY29kZURvdWJsZShwLCBsaW1pdEEsICZkKTsKLSAg
ICAgICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgICAgIHEgPSBkZWNvZGVEb3VibGUocSwgbGlt
aXRCLCAmZSk7Ci0gICAgICAgICAgICBBU1NFUlQocSk7Ci0gICAgICAgICAgICBpZiAoZCA8IGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGQgPiBlKQotICAg
ICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
aW50IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGtleUEsIGNvbnN0
IFZlY3RvcjxjaGFyPiYga2V5QikKLXsKLSAgICBBU1NFUlQoa2V5QS5zaXplKCkgPj0gMSk7Ci0g
ICAgQVNTRVJUKGtleUIuc2l6ZSgpID49IDEpOwotCi0gICAgY29uc3QgY2hhciogcCA9IGtleUEu
ZGF0YSgpOwotICAgIGNvbnN0IGNoYXIqIGxpbWl0QSA9IHAgKyBrZXlBLnNpemUoKTsKLSAgICBj
b25zdCBjaGFyKiBxID0ga2V5Qi5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogbGltaXRCID0gcSAr
IGtleUIuc2l6ZSgpOwotCi0gICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwLCBsaW1p
dEEsIHEsIGxpbWl0Qik7Ci19Ci0KLW5hbWVzcGFjZSB7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
eXBlPgotaW50IGRlY29kZUFuZENvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBM
ZXZlbERCU2xpY2UmIGIpCi17Ci0gICAgS2V5VHlwZSBrZXlBOwotICAgIEtleVR5cGUga2V5QjsK
LQotICAgIGNvbnN0IGNoYXIqIHB0ckEgPSBLZXlUeXBlOjpkZWNvZGUoYS5iZWdpbigpLCBhLmVu
ZCgpLCAma2V5QSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwdHJBLCBwdHJBKTsKLSAgICBjb25zdCBj
aGFyKiBwdHJCID0gS2V5VHlwZTo6ZGVjb2RlKGIuYmVnaW4oKSwgYi5lbmQoKSwgJmtleUIpOwot
ICAgIEFTU0VSVF9VTlVTRUQocHRyQiwgcHRyQik7Ci0KLSAgICByZXR1cm4ga2V5QS5jb21wYXJl
KGtleUIpOwotfQotfQotCi1pbnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0
IExldmVsREJTbGljZSYgYiwgYm9vbCBpbmRleEtleXMpCi17Ci0gICAgY29uc3QgY2hhciogcHRy
QSA9IGEuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFyKiBwdHJCID0gYi5iZWdpbigpOwotICAgIGNv
bnN0IGNoYXIqIGVuZEEgPSBhLmVuZCgpOwotICAgIGNvbnN0IGNoYXIqIGVuZEIgPSBiLmVuZCgp
OwotCi0gICAgS2V5UHJlZml4IHByZWZpeEE7Ci0gICAgS2V5UHJlZml4IHByZWZpeEI7Ci0KLSAg
ICBwdHJBID0gS2V5UHJlZml4OjpkZWNvZGUocHRyQSwgZW5kQSwgJnByZWZpeEEpOwotICAgIHB0
ckIgPSBLZXlQcmVmaXg6OmRlY29kZShwdHJCLCBlbmRCLCAmcHJlZml4Qik7Ci0gICAgQVNTRVJU
KHB0ckEpOwotICAgIEFTU0VSVChwdHJCKTsKLQotICAgIGlmIChpbnQgeCA9IHByZWZpeEEuY29t
cGFyZShwcmVmaXhCKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAgICBpZiAocHJlZml4QS50eXBl
KCkgPT0gS2V5UHJlZml4OjprR2xvYmFsTWV0YURhdGEpIHsKLSAgICAgICAgQVNTRVJUKHB0ckEg
IT0gZW5kQSk7Ci0gICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOwotCi0gICAgICAgIHVuc2ln
bmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckErKzsKLSAgICAgICAgdW5zaWduZWQgY2hhciB0eXBl
Qnl0ZUIgPSAqcHRyQisrOwotCi0gICAgICAgIGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVC
eXRlQikKLSAgICAgICAgICAgIHJldHVybiB4OwotCi0gICAgICAgIGlmICh0eXBlQnl0ZUEgPD0g
MSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtEYXRh
YmFzZUZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFy
ZTxEYXRhYmFzZUZyZWVMaXN0S2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9PSBr
RGF0YWJhc2VOYW1lVHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFy
ZTxEYXRhYmFzZU5hbWVLZXk+KGEsIGIpOwotICAgIH0KLQotICAgIGlmIChwcmVmaXhBLnR5cGUo
KSA9PSBLZXlQcmVmaXg6OmtEYXRhYmFzZU1ldGFEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChwdHJB
ICE9IGVuZEEpOwotICAgICAgICBBU1NFUlQocHRyQiAhPSBlbmRCKTsKLQotICAgICAgICB1bnNp
Z25lZCBjaGFyIHR5cGVCeXRlQSA9ICpwdHJBKys7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlw
ZUJ5dGVCID0gKnB0ckIrKzsKLQotICAgICAgICBpZiAoaW50IHggPSB0eXBlQnl0ZUEgLSB0eXBl
Qnl0ZUIpCi0gICAgICAgICAgICByZXR1cm4geDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVBIDw9
IDMpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAodHlwZUJ5dGVBID09IGtP
YmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q29tcGFyZTxPYmplY3RTdG9yZU1ldGFEYXRhS2V5PihhLCBiKTsKLSAgICAgICAgaWYgKHR5cGVC
eXRlQSA9PSBrSW5kZXhNZXRhRGF0YVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENvbXBhcmU8SW5kZXhNZXRhRGF0YUtleT4oYSwgYik7Ci0gICAgICAgIGlmICh0eXBlQnl0
ZUEgPT0ga09iamVjdFN0b3JlRnJlZUxpc3RUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDb21wYXJlPE9iamVjdFN0b3JlRnJlZUxpc3RLZXk+KGEsIGIpOwotICAgICAgICBp
ZiAodHlwZUJ5dGVBID09IGtJbmRleEZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ29tcGFyZTxJbmRleEZyZWVMaXN0S2V5PihhLCBiKTsKLSAgICAgICAgaWYg
KHR5cGVCeXRlQSA9PSBrT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRlKQotICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENvbXBhcmU8T2JqZWN0U3RvcmVOYW1lc0tleT4oYSwgYik7Ci0gICAgICAg
IGlmICh0eXBlQnl0ZUEgPT0ga0luZGV4TmFtZXNLZXlUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDb21wYXJlPEluZGV4TmFtZXNLZXk+KGEsIGIpOwotCi0gICAgICAgIHJl
dHVybiAwOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
cHJlZml4QS50eXBlKCkgPT0gS2V5UHJlZml4OjprT2JqZWN0U3RvcmVEYXRhKSB7Ci0gICAgICAg
IGlmIChwdHJBID09IGVuZEEgJiYgcHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgIGlmIChwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6IFRo
aXMgY2FzZSBvZiBub24tZXhpc3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBiZSBo
YW5kbGVkIHRoaXMgd2F5LgotCi0gICAgICAgIHJldHVybiBkZWNvZGVBbmRDb21wYXJlPE9iamVj
dFN0b3JlRGF0YUtleT4oYSwgYik7Ci0gICAgfQotICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBL
ZXlQcmVmaXg6OmtFeGlzdHNFbnRyeSkgewotICAgICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0
ckIgPT0gZW5kQikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAocHRyQSA9PSBl
bmRBKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQot
ICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEZJWE1FOiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5n
IHVzZXIga2V5cyBzaG91bGQgbm90IGhhdmUgdG8gYmUgaGFuZGxlZCB0aGlzIHdheS4KLQotICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ29tcGFyZTxFeGlzdHNFbnRyeUtleT4oYSwgYik7Ci0gICAg
fQotICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OmtJbmRleERhdGEpIHsKLSAg
ICAgICAgaWYgKHB0ckEgPT0gZW5kQSAmJiBwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSkKLSAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgaWYgKHB0ckIgPT0gZW5kQikKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhN
RTogVGhpcyBjYXNlIG9mIG5vbi1leGlzdGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRv
IGJlIGhhbmRsZWQgdGhpcyB3YXkuCi0KLSAgICAgICAgSW5kZXhEYXRhS2V5IGluZGV4RGF0YUtl
eUE7Ci0gICAgICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXlCOwotCi0gICAgICAgIHB0ckEg
PSBJbmRleERhdGFLZXk6OmRlY29kZShhLmJlZ2luKCksIGVuZEEsICZpbmRleERhdGFLZXlBKTsK
LSAgICAgICAgcHRyQiA9IEluZGV4RGF0YUtleTo6ZGVjb2RlKGIuYmVnaW4oKSwgZW5kQiwgJmlu
ZGV4RGF0YUtleUIpOwotICAgICAgICBBU1NFUlQocHRyQSk7Ci0gICAgICAgIEFTU0VSVChwdHJC
KTsKLQotICAgICAgICBib29sIGlnbm9yZUR1cGxpY2F0ZXMgPSBpbmRleEtleXM7Ci0gICAgICAg
IHJldHVybiBpbmRleERhdGFLZXlBLmNvbXBhcmUoaW5kZXhEYXRhS2V5QiwgaWdub3JlRHVwbGlj
YXRlcyk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLQotS2V5UHJlZml4OjpLZXlQcmVmaXgoKQotICAgIDogbV9kYXRhYmFzZUlkKGtJbnZh
bGlkVHlwZSkKLSAgICAsIG1fb2JqZWN0U3RvcmVJZChrSW52YWxpZFR5cGUpCi0gICAgLCBtX2lu
ZGV4SWQoa0ludmFsaWRUeXBlKQotewotfQotCi1LZXlQcmVmaXg6OktleVByZWZpeChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotICAg
IDogbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0
U3RvcmVJZCkKLSAgICAsIG1faW5kZXhJZChpbmRleElkKQotewotfQotCi1jb25zdCBjaGFyKiBL
ZXlQcmVmaXg6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEtl
eVByZWZpeCogcmVzdWx0KQotewotICAgIGlmIChzdGFydCA9PSBsaW1pdCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSA9ICpzdGFydCsrOwotCi0gICAg
aW50IGRhdGFiYXNlSWRCeXRlcyA9ICgoZmlyc3RCeXRlID4+IDUpICYgMHg3KSArIDE7Ci0gICAg
aW50IG9iamVjdFN0b3JlSWRCeXRlcyA9ICgoZmlyc3RCeXRlID4+IDIpICYgMHg3KSArIDE7Ci0g
ICAgaW50IGluZGV4SWRCeXRlcyA9IChmaXJzdEJ5dGUgJiAweDMpICsgMTsKLQotICAgIGlmIChz
dGFydCArIGRhdGFiYXNlSWRCeXRlcyArIG9iamVjdFN0b3JlSWRCeXRlcyArIGluZGV4SWRCeXRl
cyA+IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJlc3VsdC0+bV9kYXRhYmFzZUlk
ID0gZGVjb2RlSW50KHN0YXJ0LCBzdGFydCArIGRhdGFiYXNlSWRCeXRlcyk7Ci0gICAgc3RhcnQg
Kz0gZGF0YWJhc2VJZEJ5dGVzOwotICAgIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkID0gZGVjb2Rl
SW50KHN0YXJ0LCBzdGFydCArIG9iamVjdFN0b3JlSWRCeXRlcyk7Ci0gICAgc3RhcnQgKz0gb2Jq
ZWN0U3RvcmVJZEJ5dGVzOwotICAgIHJlc3VsdC0+bV9pbmRleElkID0gZGVjb2RlSW50KHN0YXJ0
LCBzdGFydCArIGluZGV4SWRCeXRlcyk7Ci0gICAgc3RhcnQgKz0gaW5kZXhJZEJ5dGVzOwotCi0g
ICAgcmV0dXJuIHN0YXJ0OwotfQotCi1WZWN0b3I8Y2hhcj4gS2V5UHJlZml4OjplbmNvZGUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgIT0ga0ludmFsaWRJZCk7Ci0gICAgQVNT
RVJUKG1fb2JqZWN0U3RvcmVJZCAhPSBrSW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRleElk
ICE9IGtJbnZhbGlkSWQpOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFiYXNlSWRTdHJpbmcgPSBl
bmNvZGVJbnQobV9kYXRhYmFzZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVJZFN0
cmluZyA9IGVuY29kZUludChtX29iamVjdFN0b3JlSWQpOwotICAgIFZlY3RvcjxjaGFyPiBpbmRl
eElkU3RyaW5nID0gZW5jb2RlSW50KG1faW5kZXhJZCk7Ci0KLSAgICBBU1NFUlQoZGF0YWJhc2VJ
ZFN0cmluZy5zaXplKCkgPD0gOCk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlSWRTdHJpbmcuc2l6
ZSgpIDw9IDgpOwotICAgIEFTU0VSVChpbmRleElkU3RyaW5nLnNpemUoKSA8PSA0KTsKLQotCi0g
ICAgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGUgPSAoZGF0YWJhc2VJZFN0cmluZy5zaXplKCkgLSAx
KSA8PCA1IHwgKG9iamVjdFN0b3JlSWRTdHJpbmcuc2l6ZSgpIC0gMSkgPDwgMiB8IChpbmRleElk
U3RyaW5nLnNpemUoKSAtIDEpOwotICAgIFZlY3RvcjxjaGFyPiByZXQ7Ci0gICAgcmV0LmFwcGVu
ZChmaXJzdEJ5dGUpOwotICAgIHJldC5hcHBlbmQoZGF0YWJhc2VJZFN0cmluZyk7Ci0gICAgcmV0
LmFwcGVuZChvYmplY3RTdG9yZUlkU3RyaW5nKTsKLSAgICByZXQuYXBwZW5kKGluZGV4SWRTdHJp
bmcpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IEtleVByZWZpeDo6Y29tcGFyZShjb25z
dCBLZXlQcmVmaXgmIG90aGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgIT0g
a0ludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCAhPSBrSW52YWxpZElkKTsK
LSAgICBBU1NFUlQobV9pbmRleElkICE9IGtJbnZhbGlkSWQpOwotCi0gICAgaWYgKG1fZGF0YWJh
c2VJZCAhPSBvdGhlci5tX2RhdGFiYXNlSWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyht
X2RhdGFiYXNlSWQsIG90aGVyLm1fZGF0YWJhc2VJZCk7Ci0gICAgaWYgKG1fb2JqZWN0U3RvcmVJ
ZCAhPSBvdGhlci5tX29iamVjdFN0b3JlSWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyht
X29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKG1faW5kZXhJ
ZCAhPSBvdGhlci5tX2luZGV4SWQpCi0gICAgICAgIHJldHVybiBjb21wYXJlSW50cyhtX2luZGV4
SWQsIG90aGVyLm1faW5kZXhJZCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUtleVByZWZpeDo6VHlw
ZSBLZXlQcmVmaXg6OnR5cGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgIT0g
a0ludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCAhPSBrSW52YWxpZElkKTsK
LSAgICBBU1NFUlQobV9pbmRleElkICE9IGtJbnZhbGlkSWQpOwotCi0gICAgaWYgKCFtX2RhdGFi
YXNlSWQpCi0gICAgICAgIHJldHVybiBrR2xvYmFsTWV0YURhdGE7Ci0gICAgaWYgKCFtX29iamVj
dFN0b3JlSWQpCi0gICAgICAgIHJldHVybiBrRGF0YWJhc2VNZXRhRGF0YTsKLSAgICBpZiAobV9p
bmRleElkID09IGtPYmplY3RTdG9yZURhdGFJbmRleElkKQotICAgICAgICByZXR1cm4ga09iamVj
dFN0b3JlRGF0YTsKLSAgICBpZiAobV9pbmRleElkID09IGtFeGlzdHNFbnRyeUluZGV4SWQpCi0g
ICAgICAgIHJldHVybiBrRXhpc3RzRW50cnk7Ci0gICAgaWYgKG1faW5kZXhJZCA+PSBrTWluaW11
bUluZGV4SWQpCi0gICAgICAgIHJldHVybiBrSW5kZXhEYXRhOwotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtJbnZhbGlkVHlwZTsKLX0KLQotVmVjdG9yPGNoYXI+IFNj
aGVtYVZlcnNpb25LZXk6OmVuY29kZSgpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeCgwLCAwLCAw
KTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBl
bmQoZW5jb2RlQnl0ZShrU2NoZW1hVmVyc2lvblR5cGVCeXRlKSk7Ci0gICAgcmV0dXJuIHJldDsK
LX0KLQotVmVjdG9yPGNoYXI+IE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpCi17Ci0gICAgS2V5
UHJlZml4IHByZWZpeCgwLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVu
Y29kZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrTWF4RGF0YWJhc2VJZFR5cGVCeXRl
KSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotRGF0YWJhc2VGcmVlTGlzdEtleTo6RGF0YWJhc2VG
cmVlTGlzdEtleSgpCi0gICAgOiBtX2RhdGFiYXNlSWQoLTEpCi17Ci19Ci0KLWNvbnN0IGNoYXIq
IERhdGFiYXNlRnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogbGltaXQsIERhdGFiYXNlRnJlZUxpc3RLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXgg
cHJlZml4OwotICAgIGNvbnN0IGNoYXIgKnAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGlt
aXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJU
KCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3Jl
SWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwot
ICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtEYXRhYmFzZUZyZWVMaXN0
VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fZGF0YWJhc2VJZCk7Ci19Ci0K
LVZlY3RvcjxjaGFyPiBEYXRhYmFzZUZyZWVMaXN0S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoMCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+
IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa0RhdGFi
YXNlRnJlZUxpc3RUeXBlQnl0ZSkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KGRhdGFi
YXNlSWQpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VGcmVl
TGlzdEtleTo6ZW5jb2RlTWF4S2V5KCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKElOVDY0X01BWCk7
Ci19Ci0KLWludDY0X3QgRGF0YWJhc2VGcmVlTGlzdEtleTo6ZGF0YWJhc2VJZCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUlk
OwotfQotCi1pbnQgRGF0YWJhc2VGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBEYXRhYmFzZUZy
ZWVMaXN0S2V5JiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDAp
OwotICAgIHJldHVybiBjb21wYXJlSW50cyhtX2RhdGFiYXNlSWQsIG90aGVyLm1fZGF0YWJhc2VJ
ZCk7Ci19Ci0KLWNvbnN0IGNoYXIqIERhdGFiYXNlTmFtZUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VOYW1lS2V5KiByZXN1bHQpCi17Ci0g
ICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNv
ZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBw
OwotICAgIEFTU0VSVCghcHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgu
bV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwotICAgIGlm
IChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlID0gKnArKzsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBrRGF0
YWJhc2VOYW1lVHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX29y
aWdpbik7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2Rl
U3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX2RhdGFiYXNlTmFtZSk7Ci19Ci0K
LVZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeCgw
LCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJl
dC5hcHBlbmQoZW5jb2RlQnl0ZShrRGF0YWJhc2VOYW1lVHlwZUJ5dGUpKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgob3JpZ2luKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNv
ZGVTdHJpbmdXaXRoTGVuZ3RoKGRhdGFiYXNlTmFtZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0K
LVZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbikKLXsKLSAgICByZXR1cm4gZW5jb2RlKG9yaWdpbiwgIiIpOwotfQot
Ci1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIC8vIGp1c3QgYWZ0ZXIgb3JpZ2luIGluIGNvbGxh
dGlvbiBvcmRlcgotICAgIHJldHVybiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4ob3JpZ2luICsgIlx4
MDEiKTsKLX0KLQotaW50IERhdGFiYXNlTmFtZUtleTo6Y29tcGFyZShjb25zdCBEYXRhYmFzZU5h
bWVLZXkmIG90aGVyKQotewotICAgIGlmIChpbnQgeCA9IGNvZGVQb2ludENvbXBhcmUobV9vcmln
aW4sIG90aGVyLm1fb3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIGNvZGVQ
b2ludENvbXBhcmUobV9kYXRhYmFzZU5hbWUsIG90aGVyLm1fZGF0YWJhc2VOYW1lKTsKLX0KLQot
VmVjdG9yPGNoYXI+IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIE1ldGFEYXRhVHlwZSBtZXRhRGF0YVR5cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChk
YXRhYmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgp
OwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUpKTsKLSAgICByZXR1cm4g
cmV0OwotfQotCi1PYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpPYmplY3RTdG9yZU1ldGFEYXRhS2V5
KCkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAgICAsIG1fbWV0YURhdGFUeXBlKC0xKQot
ewotfQotCi1jb25zdCBjaGFyKiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUoY29uc3Qg
Y2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KiBy
ZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5
UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAg
ICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NF
UlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJ
ZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVk
IGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVC
eXRlID09IGtPYmplY3RTdG9yZU1ldGFEYXRhVHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1
bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBBU1NFUlQocmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmIChwID09IGxpbWl0KQot
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1
bHQtPm1fbWV0YURhdGFUeXBlKTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBtZXRhRGF0YVR5cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlk
LCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJl
dC5hcHBlbmQoZW5jb2RlQnl0ZShrT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKSk7Ci0gICAg
cmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQo
ZW5jb2RlVmFySW50KG1ldGFEYXRhVHlwZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3Rv
cjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRh
YmFzZUlkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgSU5UNjRfTUFYLCBJTlQ2
NF9NQVgpOwotfQotCi1WZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
TWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAg
IHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgSU5UNjRfTUFYKTsKLX0K
LQotaW50NjRfdCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpvYmplY3RTdG9yZUlkKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIHJldHVybiBtX29iamVj
dFN0b3JlSWQ7Ci19Ci1pbnQ2NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om1ldGFEYXRhVHlw
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbWV0YURhdGFUeXBlID49IDApOwotICAgIHJldHVy
biBtX21ldGFEYXRhVHlwZTsKLX0KLQotaW50IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmNvbXBh
cmUoY29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1f
b2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7Ci0g
ICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVj
dFN0b3JlSWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gbV9tZXRhRGF0YVR5cGUg
LSBvdGhlci5tX21ldGFEYXRhVHlwZTsKLX0KLQotSW5kZXhNZXRhRGF0YUtleTo6SW5kZXhNZXRh
RGF0YUtleSgpCi0gICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCi0gICAgLCBtX2luZGV4SWQoLTEp
Ci0gICAgLCBtX21ldGFEYXRhVHlwZSgwKQotewotfQotCi1jb25zdCBjaGFyKiBJbmRleE1ldGFE
YXRhS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRl
eE1ldGFEYXRhS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25z
dCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAg
ICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFz
ZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCgh
cHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQo
dHlwZUJ5dGUsIHR5cGVCeXRlID09IGtJbmRleE1ldGFEYXRhVHlwZUJ5dGUpOwotICAgIGlmIChw
ID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxp
bWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhJZCk7
Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSA9ICpwKys7Ci0gICAg
cmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
dW5zaWduZWQgY2hhciBtZXRhRGF0YVR5cGUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRh
YmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwot
ICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrSW5kZXhNZXRhRGF0YVR5cGVCeXRlKSk7Ci0gICAg
cmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQo
ZW5jb2RlVmFySW50KGluZGV4SWQpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUobWV0YURh
dGFUeXBlKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4TWV0YURh
dGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIElO
VDY0X01BWCwgMjU1KTsKLX0KLQotaW50IEluZGV4TWV0YURhdGFLZXk6OmNvbXBhcmUoY29uc3Qg
SW5kZXhNZXRhRGF0YUtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+
PSAwKTsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotCi0gICAgaWYgKGludCB4ID0gY29t
cGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAg
ICByZXR1cm4geDsKLSAgICBpZiAoaW50IHggPSBjb21wYXJlSW50cyhtX2luZGV4SWQsIG90aGVy
Lm1faW5kZXhJZCkpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBtX21ldGFEYXRhVHlw
ZSAtIG90aGVyLm1fbWV0YURhdGFUeXBlOwotfQotCi1pbnQ2NF90IEluZGV4TWV0YURhdGFLZXk6
OmluZGV4SWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgcmV0
dXJuIG1faW5kZXhJZDsKLX0KLQotT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6T2JqZWN0U3RvcmVG
cmVlTGlzdEtleSgpCi0gICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCi17Ci19Ci0KLWNvbnN0IGNo
YXIqIE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29u
c3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkqIHJlc3VsdCkKLXsKLSAgICBL
ZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIgKnAgPSBLZXlQcmVmaXg6OmRlY29kZShz
dGFydCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9
PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
ICpwKys7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga09iamVjdFN0
b3JlRnJlZUxpc3RUeXBlQnl0ZSk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RT
dG9yZUlkKTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmVuY29k
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBLZXlQ
cmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBw
cmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKGtPYmplY3RTdG9yZUZy
ZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RTdG9y
ZUlkKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRnJl
ZUxpc3RLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpCi17Ci0gICAgcmV0dXJu
IGVuY29kZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgpOwotfQotCi1pbnQ2NF90IE9iamVjdFN0b3Jl
RnJlZUxpc3RLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVj
dFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50IE9i
amVjdFN0b3JlRnJlZUxpc3RLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVGcmVlTGlzdEtl
eSYgb3RoZXIpCi17Ci0gICAgLy8gRklYTUU6IEl0IG1heSBzZWVtIHN0cmFuZ2UgdGhhdCB3ZSdy
ZSBub3QgY29tcGFyaW5nIGRhdGFiYXNlIGlkJ3MsCi0gICAgLy8gYnV0IHRoYXQgY29tcGFyaXNv
biB3aWxsIGhhdmUgYmVlbiBtYWRlIGVhcmxpZXIuCi0gICAgLy8gV2Ugc2hvdWxkIHByb2JhYmx5
IG1ha2UgdGhpcyBtb3JlIGNsZWFyLCB0aG91Z2guLi4KLSAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZUlkID49IDApOwotICAgIHJldHVybiBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVy
Lm1fb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLUluZGV4RnJlZUxpc3RLZXk6OkluZGV4RnJlZUxpc3RL
ZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQotewot
fQotCi1jb25zdCBjaGFyKiBJbmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3Rh
cnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleEZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAg
S2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUo
c3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwot
ICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29i
amVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAg
PT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUg
PSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IGtJbmRleEZy
ZWVMaXN0VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7
Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlVmFySW50
KHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhJZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleEZy
ZWVMaXN0S2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQs
IDAsIDApOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0
LmFwcGVuZChlbmNvZGVCeXRlKGtJbmRleEZyZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBw
ZW5kKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVW
YXJJbnQoaW5kZXhJZCkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRl
eEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBJTlQ2NF9NQVgpOwotfQotCi1pbnQgSW5kZXhGcmVlTGlzdEtleTo6Y29tcGFyZShjb25z
dCBJbmRleEZyZWVMaXN0S2V5JiBvdGhlcikKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlk
ID49IDApOwotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgaWYgKGludCB4ID0gY29t
cGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAg
ICByZXR1cm4geDsKLSAgICByZXR1cm4gY29tcGFyZUludHMobV9pbmRleElkLCBvdGhlci5tX2lu
ZGV4SWQpOwotfQotCi1pbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6Om9iamVjdFN0b3JlSWQoKSBj
b25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJZDsKLX0KLQotaW50NjRfdCBJbmRleEZyZWVMaXN0S2V5OjppbmRleElkKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAgIHJldHVybiBtX2luZGV4
SWQ7Ci19Ci0KLS8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBz
dG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/Ci0vLyBDYW4g
d2UgcmVtb3ZlIHRoaXM/Ci1jb25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5
KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0g
S2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBB
U1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5k
ZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2ln
bmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5
cGVCeXRlID09IGtPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpOwotICAgIHJldHVybiBkZWNvZGVT
dHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVOYW1lKTsKLX0K
LQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKQotewotICAgIEtleVByZWZpeCBw
cmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5l
bmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoa09iamVjdFN0b3JlTmFtZXNUeXBl
Qnl0ZSkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChvYmplY3RTdG9y
ZU5hbWUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQgT2JqZWN0U3RvcmVOYW1lc0tleTo6
Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZU5hbWVzS2V5JiBvdGhlcikKLXsKLSAgICByZXR1cm4g
Y29kZVBvaW50Q29tcGFyZShtX29iamVjdFN0b3JlTmFtZSwgb3RoZXIubV9vYmplY3RTdG9yZU5h
bWUpOwotfQotCi1JbmRleE5hbWVzS2V5OjpJbmRleE5hbWVzS2V5KCkKLSAgICA6IG1fb2JqZWN0
U3RvcmVJZCgtMSkKLXsKLX0KLQotLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sg
dXAgaW5kZXggaWRzLCBiZWNhdXNlIGEgbWFwcGluZwotLy8gaXMga2VwdCBhdCBhIGhpZ2hlciBs
ZXZlbC4KLWNvbnN0IGNoYXIqIEluZGV4TmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4TmFtZXNLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQ
cmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFy
dCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
QVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0
U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9PSBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpw
Kys7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0ga0luZGV4TmFtZXNL
ZXlUeXBlQnl0ZSk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLSAg
ICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBkZWNvZGVTdHJpbmdXaXRo
TGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+
IEluZGV4TmFtZXNLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCi17Ci0gICAgS2V5UHJlZml4IHByZWZp
eChkYXRhYmFzZUlkLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29k
ZSgpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShrSW5kZXhOYW1lc0tleVR5cGVCeXRlKSk7
Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5h
cHBlbmQoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChpbmRleE5hbWUpKTsKLSAgICByZXR1cm4gcmV0
OwotfQotCi1pbnQgSW5kZXhOYW1lc0tleTo6Y29tcGFyZShjb25zdCBJbmRleE5hbWVzS2V5JiBv
dGhlcikKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIGlmIChpbnQg
eCA9IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKSkK
LSAgICAgICAgcmV0dXJuIHg7Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobV9pbmRleE5h
bWUsIG90aGVyLm1faW5kZXhOYW1lKTsKLX0KLQotY29uc3QgY2hhciogT2JqZWN0U3RvcmVEYXRh
S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgT2JqZWN0U3Rv
cmVEYXRhS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBj
aGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGVuZCwgJnByZWZpeCk7Ci0gICAgaWYg
KCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7
Ci0gICAgQVNTRVJUKHByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgu
bV9pbmRleElkID09IGtTcGVjaWFsSW5kZXhOdW1iZXIpOwotICAgIGlmIChwID09IGVuZCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGVuZCwg
JnJlc3VsdC0+bV9lbmNvZGVkVXNlcktleSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgVmVjdG9yPGNoYXI+IGVuY29kZWRVc2VyS2V5KQotewotICAgIEtleVByZWZpeCBw
cmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga1NwZWNpYWxJbmRleE51bWJlcik7Ci0g
ICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kKGVu
Y29kZWRVc2VyS2V5KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KQotewotICAgIHJldHVybiBlbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlSURCS2V5KHVzZXJLZXkpKTsKLX0KLQotaW50
IE9iamVjdFN0b3JlRGF0YUtleTo6Y29tcGFyZShjb25zdCBPYmplY3RTdG9yZURhdGFLZXkmIG90
aGVyKQotewotICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkVXNlcktl
eSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBPYmpl
Y3RTdG9yZURhdGFLZXk6OnVzZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+IGtl
eTsKLSAgICBkZWNvZGVJREJLZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29kZWRV
c2VyS2V5LmVuZCgpLCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLWNvbnN0IGludDY0X3Qg
T2JqZWN0U3RvcmVEYXRhS2V5OjprU3BlY2lhbEluZGV4TnVtYmVyID0ga09iamVjdFN0b3JlRGF0
YUluZGV4SWQ7Ci0KLWNvbnN0IGNoYXIqIEV4aXN0c0VudHJ5S2V5OjpkZWNvZGUoY29uc3QgY2hh
ciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgRXhpc3RzRW50cnlLZXkqIHJlc3VsdCkKLXsKLSAg
ICBLZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29k
ZShzdGFydCwgZW5kLCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwot
ICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2luZGV4SWQgPT0ga1NwZWNpYWxJbmRl
eE51bWJlcik7Ci0gICAgaWYgKHAgPT0gZW5kKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZXh0cmFjdEVuY29kZWRJREJLZXkocCwgZW5kLCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5
KTsKLX0KLQotVmVjdG9yPGNoYXI+IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2Rl
ZEtleSkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtTcGVjaWFsSW5kZXhOdW1iZXIpOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5j
b2RlKCk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVkS2V5KTsKLSAgICByZXR1cm4gcmV0OwotfQot
Ci1WZWN0b3I8Y2hhcj4gRXhpc3RzRW50cnlLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KQotewotICAgIHJl
dHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlSURCS2V5KHVzZXJL
ZXkpKTsKLX0KLQotaW50IEV4aXN0c0VudHJ5S2V5Ojpjb21wYXJlKGNvbnN0IEV4aXN0c0VudHJ5
S2V5JiBvdGhlcikKLXsKLSAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2Rl
ZFVzZXJLZXksIG90aGVyLm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1QYXNzUmVmUHRyPElEQktl
eT4gRXhpc3RzRW50cnlLZXk6OnVzZXJLZXkoKSBjb25zdAotewotICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKLSAgICBkZWNvZGVJREJLZXkobV9lbmNvZGVkVXNlcktleS5iZWdpbigpLCBtX2VuY29k
ZWRVc2VyS2V5LmVuZCgpLCBrZXkpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLWNvbnN0IGludDY0
X3QgRXhpc3RzRW50cnlLZXk6OmtTcGVjaWFsSW5kZXhOdW1iZXIgPSBrRXhpc3RzRW50cnlJbmRl
eElkOwotCi1JbmRleERhdGFLZXk6OkluZGV4RGF0YUtleSgpCi0gICAgOiBtX2RhdGFiYXNlSWQo
LTEpCi0gICAgLCBtX29iamVjdFN0b3JlSWQoLTEpCi0gICAgLCBtX2luZGV4SWQoLTEpCi0gICAg
LCBtX3NlcXVlbmNlTnVtYmVyKC0xKQotewotfQotCi1jb25zdCBjaGFyKiBJbmRleERhdGFLZXk6
OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4RGF0YUtl
eSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9
IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAg
QVNTRVJUKHByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChwcmVmaXgubV9pbmRl
eElkID49IGtNaW5pbXVtSW5kZXhJZCk7Ci0gICAgcmVzdWx0LT5tX2RhdGFiYXNlSWQgPSBwcmVm
aXgubV9kYXRhYmFzZUlkOwotICAgIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkID0gcHJlZml4Lm1f
b2JqZWN0U3RvcmVJZDsKLSAgICByZXN1bHQtPm1faW5kZXhJZCA9IHByZWZpeC5tX2luZGV4SWQ7
Ci0gICAgcmVzdWx0LT5tX3NlcXVlbmNlTnVtYmVyID0gLTE7Ci0gICAgcmVzdWx0LT5tX2VuY29k
ZWRQcmltYXJ5S2V5ID0gbWluSURCS2V5KCk7Ci0KLSAgICBwID0gZXh0cmFjdEVuY29kZWRJREJL
ZXkocCwgbGltaXQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkpOwotICAgIGlmICghcCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBbb3B0aW9uYWxdIHNlcXVlbmNlIG51bWJlcgotICAg
IGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gcDsKLSAgICBwID0gIGRlY29kZVZhcklu
dChwLCBsaW1pdCwgcmVzdWx0LT5tX3NlcXVlbmNlTnVtYmVyKTsKLSAgICBpZiAoIXApCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgLy8gW29wdGlvbmFsXSBwcmltYXJ5IGtleQotICAgIGlmIChw
ID09IGxpbWl0KQotICAgICAgICByZXR1cm4gcDsKLSAgICBwID0gZXh0cmFjdEVuY29kZWRJREJL
ZXkocCwgbGltaXQsICZyZXN1bHQtPm1fZW5jb2RlZFByaW1hcnlLZXkpOwotICAgIGlmICghcCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcDsKLX0KLQotVmVjdG9yPGNoYXI+IElu
ZGV4RGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFVzZXJLZXks
IGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3Qgc2VxdWVuY2VO
dW1iZXIpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAg
IHJldC5hcHBlbmQoZW5jb2RlZFVzZXJLZXkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50
KHNlcXVlbmNlTnVtYmVyKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVkUHJpbWFyeUtleSk7Ci0g
ICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6ZW5jb2RlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYgdXNlcktleSkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleSh1c2VyS2V5KSwgbWluSURCS2V5
KCkpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsK
LSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIG1p
bklEQktleSgpLCBtaW5JREJLZXkoKSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleERhdGFLZXk6
OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwgbWF4SURCS2V5KCksIG1heElEQktleSgpLCBJTlQ2NF9NQVgpOwot
fQotCi1pbnQgSW5kZXhEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IEluZGV4RGF0YUtleSYgb3RoZXIs
IGJvb2wgaWdub3JlRHVwbGljYXRlcykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUlkID49IDAp
OwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1faW5kZXhJ
ZCA+PSAwKTsKLSAgICBpZiAoaW50IHggPSBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVk
VXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSkpCi0gICAgICAgIHJldHVybiB4OwotICAg
IGlmIChpZ25vcmVEdXBsaWNhdGVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoaW50IHgg
PSBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkUHJpbWFyeUtleSwgb3RoZXIubV9lbmNv
ZGVkUHJpbWFyeUtleSkpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBjb21wYXJlSW50
cyhtX3NlcXVlbmNlTnVtYmVyLCBvdGhlci5tX3NlcXVlbmNlTnVtYmVyKTsKLX0KLQotaW50NjRf
dCBJbmRleERhdGFLZXk6OmRhdGFiYXNlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFi
YXNlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VJZDsKLX0KLQotaW50NjRfdCBJbmRl
eERhdGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0
b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50NjRfdCBJ
bmRleERhdGFLZXk6OmluZGV4SWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0g
MCk7Ci0gICAgcmV0dXJuIG1faW5kZXhJZDsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEluZGV4
RGF0YUtleTo6dXNlcktleSgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAg
IGRlY29kZUlEQktleShtX2VuY29kZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVzZXJLZXku
ZW5kKCksIGtleSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElu
ZGV4RGF0YUtleTo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5
OwotICAgIGRlY29kZUlEQktleShtX2VuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIG1fZW5jb2Rl
ZFByaW1hcnlLZXkuZW5kKCksIGtleSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSURCTGV2ZWxEQkNvZGluZwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAkocmV2aXNpb24gMTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJDb2Rp
bmdfaAotI2RlZmluZSBJREJMZXZlbERCQ29kaW5nX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJLZXk7Ci1jbGFzcyBMZXZlbERCU2xpY2U7
Ci0KLW5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nIHsKLQotY29uc3QgdW5zaWduZWQgY2hhciBr
TWluaW11bUluZGV4SWQgPSAzMDsKLQotVmVjdG9yPGNoYXI+IGVuY29kZUJ5dGUodW5zaWduZWQg
Y2hhcik7Ci1WZWN0b3I8Y2hhcj4gbWF4SURCS2V5KCk7Ci1WZWN0b3I8Y2hhcj4gbWluSURCS2V5
KCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlSW50KGludDY0X3QpOwotaW50NjRfdCBkZWNvZGVJbnQo
Y29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2Rl
VmFySW50KGludDY0X3QpOwotY29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIgKnAs
IGNvbnN0IGNoYXIqIGxpbWl0LCBpbnQ2NF90JiBmb3VuZEludCk7Ci1WZWN0b3I8Y2hhcj4gZW5j
b2RlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotU3RyaW5nIGRlY29kZVN0cmluZyhjb25zdCBjaGFy
KiBwLCBjb25zdCBjaGFyKiBlbmQpOwotVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5n
dGgoY29uc3QgU3RyaW5nJik7Ci1jb25zdCBjaGFyKiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNv
bnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBTdHJpbmcmIGZvdW5kU3RyaW5nKTsKLWlu
dCBjb21wYXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBj
aGFyKiBsaW1pdFAsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdFEpOwotVmVjdG9y
PGNoYXI+IGVuY29kZURvdWJsZShkb3VibGUpOwotY29uc3QgY2hhciogZGVjb2RlRG91YmxlKGNv
bnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBkb3VibGUqKTsKLXZvaWQgZW5jb2RlSURC
S2V5KGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgaW50byk7Ci1WZWN0b3I8Y2hhcj4gZW5j
b2RlSURCS2V5KGNvbnN0IElEQktleSYpOwotY29uc3QgY2hhciogZGVjb2RlSURCS2V5KGNvbnN0
IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBSZWZQdHI8SURCS2V5PiYgZm91bmRLZXkpOwot
Y29uc3QgY2hhciogZXh0cmFjdEVuY29kZWRJREJLZXkoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBWZWN0b3I8Y2hhcj4qIHJlc3VsdCk7Ci1pbnQgY29tcGFyZUVuY29kZWRJ
REJLZXlzKGNvbnN0IFZlY3RvcjxjaGFyPiYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotCi1pbnQg
Y29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmLCBjb25zdCBMZXZlbERCU2xpY2UmLCBib29sIGlu
ZGV4S2V5cyA9IGZhbHNlKTsKLQotY2xhc3MgS2V5UHJlZml4IHsKLXB1YmxpYzoKLSAgICBLZXlQ
cmVmaXgoKTsKLSAgICBLZXlQcmVmaXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgS2V5UHJlZml4KiByZXN1
bHQpOwotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGUoKSBjb25zdDsKLSAgICBpbnQgY29tcGFyZShj
b25zdCBLZXlQcmVmaXgmIG90aGVyKSBjb25zdDsKLQotICAgIGVudW0gVHlwZSB7Ci0gICAgICAg
IGtHbG9iYWxNZXRhRGF0YSwKLSAgICAgICAga0RhdGFiYXNlTWV0YURhdGEsCi0gICAgICAgIGtP
YmplY3RTdG9yZURhdGEsCi0gICAgICAgIGtFeGlzdHNFbnRyeSwKLSAgICAgICAga0luZGV4RGF0
YSwKLSAgICAgICAga0ludmFsaWRUeXBlCi0gICAgfTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0
OwotCi0gICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7Ci0gICAgaW50NjRfdCBtX2luZGV4SWQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBr
SW52YWxpZElkID0gLTE7Ci19OwotCi1jbGFzcyBTY2hlbWFWZXJzaW9uS2V5IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZSgpOwotfTsKLQotY2xhc3MgTWF4RGF0YWJh
c2VJZEtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKLX07
Ci0KLWNsYXNzIERhdGFiYXNlRnJlZUxpc3RLZXkgewotcHVibGljOgotICAgIERhdGFiYXNlRnJl
ZUxpc3RLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VGcmVlTGlzdEtleSogcmVzdWx0KTsKLSAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQpOwotICAgIHN0
YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KCk7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlk
KCkgY29uc3Q7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRGF0YWJhc2VGcmVlTGlzdEtleSYgb3Ro
ZXIpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotfTsKLQot
Y2xhc3MgRGF0YWJhc2VOYW1lS2V5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VOYW1l
S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7Ci0gICAgc3RhdGljIFZlY3Rv
cjxjaGFyPiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlU3RvcEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbik7Ci0gICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9
Ci0gICAgU3RyaW5nIGRhdGFiYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VOYW1l
OyB9Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRGF0YWJhc2VOYW1lS2V5JiBvdGhlcik7Ci0KLXBy
aXZhdGU6Ci0gICAgU3RyaW5nIG1fb3JpZ2luOyAvLyBGSVhNRTogU3RvcmUgZW5jb2RlZCBzdHJp
bmdzLCBvciBqdXN0IHBvaW50ZXJzLgotICAgIFN0cmluZyBtX2RhdGFiYXNlTmFtZTsKLX07Ci0K
LWNsYXNzIERhdGFiYXNlTWV0YURhdGFLZXkgewotcHVibGljOgotICAgIGVudW0gTWV0YURhdGFU
eXBlIHsKLSAgICAgICAga09yaWdpbk5hbWUgPSAwLAotICAgICAgICBrRGF0YWJhc2VOYW1lID0g
MSwKLSAgICAgICAga1VzZXJWZXJzaW9uID0gMiwKLSAgICAgICAga01heE9iamVjdFN0b3JlSWQg
PSAzCi0gICAgfTsKLQotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCwgTWV0YURhdGFUeXBlKTsKLX07Ci0KLWNsYXNzIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXkgewotcHVibGljOgotICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkoKTsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBtZXRhRGF0YVR5cGUpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGlu
dDY0X3QgZGF0YWJhc2VJZCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXko
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgbWV0YURhdGFUeXBlKCkgY29uc3Q7
Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIpOwot
Ci1wcml2YXRlOgotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9t
ZXRhRGF0YVR5cGU7IC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBieXRlLgotfTsKLQotY2xhc3MgSW5k
ZXhNZXRhRGF0YUtleSB7Ci1wdWJsaWM6Ci0gICAgSW5kZXhNZXRhRGF0YUtleSgpOwotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBJbmRleE1ldGFEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKTsKLSAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhNZXRhRGF0YUtleSYgb3RoZXIpOwot
ICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhRGF0YVR5cGU7IH0KLQotcHJpdmF0ZToKLSAgICBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICB1bnNp
Z25lZCBjaGFyIG1fbWV0YURhdGFUeXBlOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVGcmVlTGlz
dEtleSB7Ci1wdWJsaWM6Ci0gICAgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSgpOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0
LCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hh
cj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOwot
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludCBjb21wYXJlKGNvbnN0
IE9iamVjdFN0b3JlRnJlZUxpc3RLZXkmIG90aGVyKTsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKLX07Ci0KLWNsYXNzIEluZGV4RnJlZUxpc3RLZXkgewotcHVibGlj
OgotICAgIEluZGV4RnJlZUxpc3RLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2Rl
KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhGcmVlTGlzdEtleSog
cmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgSW5kZXhGcmVlTGlzdEtleSYgb3Ro
ZXIpOwotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgaW5k
ZXhJZCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwot
ICAgIGludDY0X3QgbV9pbmRleElkOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVOYW1lc0tleSB7
Ci1wdWJsaWM6Ci0gICAgLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2Jq
ZWN0IHN0b3JlIGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKLSAgICAvLyBpcyBrZXB0IGluIHRoZSBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/
Ci0gICAgLy8gQ2FuIHdlIHJlbW92ZSB0aGlzPwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNv
ZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVz
S2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOwotICAgIGludCBjb21wYXJl
KGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKTsKLSAgICBTdHJpbmcgb2JqZWN0U3Rv
cmVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZU5hbWU7IH0KLQotcHJpdmF0ZToK
LSAgICBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7IC8vIEZJWE1FOiBTdG9yZSB0aGUgZW5jb2Rl
ZCBzdHJpbmcsIG9yIGp1c3QgcG9pbnRlcnMgdG8gaXQuCi19OwotCi1jbGFzcyBJbmRleE5hbWVz
S2V5IHsKLXB1YmxpYzoKLSAgICBJbmRleE5hbWVzS2V5KCk7Ci0gICAgLy8gRklYTUU6IFdlIG5l
dmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgaW5kZXggaWRzLCBiZWNhdXNlIGEgbWFwcGluZwotICAg
IC8vIGlzIGtlcHQgYXQgYSBoaWdoZXIgbGV2ZWwuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRl
Y29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIEluZGV4TmFtZXNLZXkq
IHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKLSAg
ICBpbnQgY29tcGFyZShjb25zdCBJbmRleE5hbWVzS2V5JiBvdGhlcik7Ci0gICAgU3RyaW5nIGlu
ZGV4TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhOYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgU3RyaW5nIG1faW5kZXhOYW1lOwotfTsKLQot
Y2xhc3MgT2JqZWN0U3RvcmVEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIE9iamVjdFN0b3Jl
RGF0YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+IGVu
Y29kZWRVc2VyS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsK
LSAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZURhdGFLZXkmIG90aGVyKTsKLSAgICBQ
YXNzUmVmUHRyPElEQktleT4gdXNlcktleSgpIGNvbnN0OwotICAgIHN0YXRpYyBjb25zdCBpbnQ2
NF90IGtTcGVjaWFsSW5kZXhOdW1iZXI7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPGNoYXI+IG1f
ZW5jb2RlZFVzZXJLZXk7Ci19OwotCi1jbGFzcyBFeGlzdHNFbnRyeUtleSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hh
ciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBlbmNvZGVkS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29k
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiB1c2VyS2V5KTsKLSAgICBpbnQgY29tcGFyZShjb25zdCBFeGlzdHNFbnRyeUtleSYgb3RoZXIp
OwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgaW50NjRfdCBrU3BlY2lhbEluZGV4TnVtYmVyOwotCi1wcml2YXRlOgotICAgIFZlY3Rv
cjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OwotfTsKLQotY2xhc3MgSW5kZXhEYXRhS2V5IHsKLXB1
YmxpYzoKLSAgICBJbmRleERhdGFLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2Rl
KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5KiByZXN1
bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFZlY3RvcjxjaGFy
PiYgZW5jb2RlZFVzZXJLZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXks
IGludDY0X3Qgc2VxdWVuY2VOdW1iZXIgPSAwKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
ZW5jb2RlTWluS2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
OwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4RGF0YUtleSYgb3RoZXIsIGJvb2wgaWdub3Jl
RHVwbGljYXRlcyk7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3Q7Ci0gICAgaW50NjRf
dCBvYmplY3RTdG9yZUlkKCkgY29uc3Q7Ci0gICAgaW50NjRfdCBpbmRleElkKCkgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGludDY0X3QgbV9kYXRh
YmFzZUlkOwotICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9pbmRl
eElkOwotICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2VyS2V5OwotICAgIFZlY3RvcjxjaGFy
PiBtX2VuY29kZWRQcmltYXJ5S2V5OwotICAgIGludDY0X3QgbV9zZXF1ZW5jZU51bWJlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkxldmVsREJDb2RpbmcKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJMZXZlbERCQ29kaW5nX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
REJPYmplY3RTdG9yZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklE
QktleS5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgot
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwotCi1JREJPYmplY3RTdG9y
ZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBt
X2JhY2tlbmQoaWRiT2JqZWN0U3RvcmUpCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsK
LSAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLX0KLQotU3RyaW5n
IElEQk9iamVjdFN0b3JlOjpuYW1lKCkgY29uc3QKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpuYW1lIik7Ci0gICAgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOwotfQotCi1TdHJp
bmcgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmU6OmtleVBhdGgiKTsKLSAgICByZXR1cm4gbV9iYWNrZW5kLT5rZXlQYXRoKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFt
ZXMoKSBjb25zdAotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMi
KTsKLSAgICByZXR1cm4gbV9iYWNrZW5kLT5pbmRleE5hbWVzKCk7Ci19Ci0KLUlEQlRyYW5zYWN0
aW9uKiBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uIik7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rp
b24uZ2V0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpn
ZXQiKTsKLSAgICBpZiAoa2V5ICYmIChrZXktPnR5cGUoKSA9PSBJREJLZXk6OkludmFsaWRUeXBl
KSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gcmVx
dWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOwotICAg
IGlmIChrZXkgJiYgKGtleS0+dHlwZSgpID09IElEQktleTo6SW52YWxpZFR5cGUpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7Ci0gICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0K
LQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgaWYgKGtleSAmJiAoa2V5LT50
eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQt
PnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBk
YXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZSIp
OwotICAgIGlmICgha2V5UmFuZ2UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1
bmN0aW9uKGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRl
Iik7Ci0gICAgaWYgKCFrZXkgfHwgIWtleS0+dmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFj
a2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0
LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAg
cmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJJbmRleD4gSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCIpOwotICAg
IGlmICghSURCSXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5nZXQoInVuaXF1ZSIs
IHVuaXF1ZSk7Ci0KLSAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdl
dCgibXVsdGlFbnRyeSIsIG11bHRpRW50cnkpOwotCi0gICAgLy8gRklYTUU6IFdoZW4gQXJyYXkt
dHlwZSBrZXlQYXRocyBhcmUgc3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBp
cyBBcnJheSBhbmQgbXVsdGlFbnRyeSBpcyB0cnVlLgotCi0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5jcmVhdGVJbmRleChuYW1l
LCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCi0gICAgaWYgKCFpbmRleEJhY2tlbmQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKGluZGV4QmFja2Vu
ZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi1QYXNz
UmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpp
bmRleCIpOwotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5maW5pc2hlZCgpKSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgSURCSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5m
aW5kKG5hbWUpOwotICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOwotICAgIEFTU0VSVCghaW5k
ZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3Vs
ZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCi0gICAgaWYg
KCFpbmRleEJhY2tlbmQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywg
bV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOwot
ICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmU6OmRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
bV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKLX0KLQotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yIik7Ci0gICAgaWYgKGRp
cmVjdGlvbiAhPSBJREJDdXJzb3I6Ok5FWFQgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6TkVY
VF9OT19EVVBMSUNBVEUgJiYgZGlyZWN0aW9uICE9IElEQkN1cnNvcjo6UFJFViAmJiBkaXJlY3Rp
b24gIT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkgewotICAgICAgICAvLyBGSVhNRTog
TWF5IG5lZWQgdG8gY2hhbmdlIHdoZW4gc3BlY2NlZDogaHR0cDovL3d3dy53My5vcmcvQnVncy9Q
dWJsaWMvc2hvd19idWcuY2dpP2lkPTExNDA2Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkNPTlNUUkFJTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+
c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNv
cik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBy
ZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOwotICAgIGlmIChlYykKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2Uo
KSwgZWMpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkK
LXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSk7Ci0KLSAgICAvLyBCcmVh
ayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1faW5kZXhNYXAuY2xlYXIoKTsKLX0KLQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCT2JqZWN0U3RvcmVf
aAotI2RlZmluZSBJREJPYmplY3RTdG9yZV9oCi0KLSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNp
bmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktl
eVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0j
aW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5j
bHVkZSAiT3B0aW9uc09iamVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci1jbGFzcyBJREJBbnk7Ci0KLWNsYXNzIElEQk9iamVjdFN0
b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmpl
Y3RTdG9yZShpZGJPYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKLSAgICB9Ci0gICAgfklEQk9i
amVjdFN0b3JlKCkgeyB9Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBr
ZXlQYXRoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVz
KCkgY29uc3Q7Ci0gICAgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3Q7Ci0KLSAg
ICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1
bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsg
IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KLSAg
ICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZUlu
ZGV4KG5hbWUsIGtleVBhdGgsIE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVjKTsg
fSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJD
dXJzb3I6Ok5FWFQsIGVjKTsgfSAKLQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNz
UmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBQYXNzUmVm
UHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOwotCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7IAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGNvdW50KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVj
KTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHRyYW5zYWN0aW9uRmlu
aXNoZWQoKTsKLQotcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCBy
ZW1vdmVUcmFuc2FjdGlvbkZyb21QZW5kaW5nTGlzdCgpOwotCi0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gbV90cmFuc2FjdGlvbjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJJbmRleD4gPiBJREJJbmRleE1hcDsKLSAgICBJREJJbmRleE1hcCBtX2luZGV4TWFwOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQk9i
amVjdFN0b3JlX2gKLQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1
bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFCi0gICAgXSBJREJPYmplY3RTdG9yZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJpbmcgbmFtZTsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51
bGxdIERPTVN0cmluZyBrZXlQYXRoOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nTGlzdCBpbmRleE5hbWVzOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb247Ci0KLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgcHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4g
W09wdGlvbmFsXSBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJS
ZXF1ZXN0IGFkZChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0g
SURCS2V5IGtleSkKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwot
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1k
ZWxldGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoaW4gSURCS2V5UmFuZ2Uga2V5UmFuZ2Up
Ci0gICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rp
b25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleSBrZXkpCi0gICAgICAgICAgICByYWlzZXMg
KElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgY2xlYXIoKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRh
YmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJSZXF1ZXN0IGdldChpbiBJREJLZXkga2V5KQotICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IG9wZW5DdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5n
ZSwgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCi0gICAgICAgICAgICBy
YWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgSURCSW5kZXggY3JlYXRlSW5k
ZXgoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyBrZXlQYXRoLCBpbiBbT3B0aW9uYWxd
IE9wdGlvbnNPYmplY3Qgb3B0aW9ucykKLSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwotICAgICAgICBJREJJbmRleCBpbmRleChpbiBET01TdHJpbmcgbmFtZSkKLSAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGRl
bGV0ZUluZGV4KGluIERPTVN0cmluZyBuYW1lKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRh
YmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSBJREJSZXF1ZXN0IGNvdW50KGluIFtPcHRpb25hbF0gSURCS2V5UmFuZ2UgcmFuZ2UpCi0gICAg
ICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRo
PVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY291bnQoaW4gSURCS2V5IGtleSkK
LSAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgIH07Ci19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5j
bHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJ
REJLZXlQYXRoQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1
ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoKQotewotfQotCi1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCi0gICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAsIG1faWQoaWQpCi0g
ICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQotICAgICwgbV9hdXRv
SW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCi0gICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEp
Ci17Ci0gICAgbG9hZEluZGV4ZXMoKTsKLX0KLQotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0
b3JlKQotICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX2lkKEludmFsaWRJ
ZCkKLSAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCi0gICAgLCBt
X2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAgICAsIG1fYXV0b0luY3JlbWVudE51bWJl
cigtMSkKLXsKLX0KLQotUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleE5hbWVzKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoSW5kZXhN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKGl0LT5maXJzdCk7Ci0g
ICAgaW5kZXhOYW1lcy0+c29ydCgpOwotICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsK
LX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwot
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXksIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbCIpOwotICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9y
ZS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksICprZXkpOwotICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgewotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZh
bHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwotfQot
Ci1zdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOwot
ICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKLSAgICB2
YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOwot
ICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFs
dWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtleXMpOwotICAgIGlmIChrZXlzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOwot
ICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmluamVjdEtleUludG9LZXlQYXRoIik7Ci0gICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5k
SW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRo
KTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0Iik7Ci0gICAgaWYgKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246
OlJFQURfT05MWSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09O
TFlfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKLSAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9
IHBycEtleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24gPSB0cmFuc2FjdGlvblB0cjsKLQotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkg
ewotICAgICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpOwotICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUt
Pm1fa2V5UGF0aC5pc051bGwoKTsKLQotICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0
b0luY3JlbWVudCAmJiAha2V5KSB7Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9
IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgp
OwotICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPnZhbGlkKCkpIHsK
LSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWF1
dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aEtleSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVh
dGVOdW1iZXIoLTEpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChkdW1teUtleSwg
dmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgIGlmICghdmFs
dWVBZnRlckluamVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5ICYm
ICFrZXktPnZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZvciAo
SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1faW5kZXhl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBp
bmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGluZGV4LT5rZXlQYXRo
KCkpOwotICAgICAgICAgICAgaWYgKGluZGV4S2V5ICYmICFpbmRleEtleS0+dmFsaWQoKSkgewot
ICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChrZXkpOwotICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGgg
PSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKLSAgICAgICAgaWYgKGhhc0tleVBh
dGgpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZy
b21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAg
ICAgIGlmICgha2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAot
ICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGws
IHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5j
cmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCi17Ci0gICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5Owot
Ci0gICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wg
YXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwot
ICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgQVNTRVJUKCFrZXkpOwotICAg
ICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgo
dmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKGtl
eVBhdGhLZXkpCi0gICAgICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoYXV0b0luY3JlbWVudCkgewotICAgICAgICAgICAgaWYgKCFrZXkpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdl
bkF1dG9JbmNyZW1lbnRLZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewot
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFm
dGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9i
amVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVB
ZnRlckluamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVj
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVja3MgaW4g
cHV0KCkgZW5zdXJlIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ug
c3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkv
TyBlcnJvcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwg
IkludGVybmFsIGVycm9yIGluc2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4i
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogTG9naWMgdG8gdXBkYXRl
IGdlbmVyYXRvciBzdGF0ZSBzaG91bGQgZ28gaGVyZS4gQ3VycmVudGx5IGl0IGRvZXMgYSBzY2Fu
LgotICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNo
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGtleSAm
JiBrZXktPnZhbGlkKCkpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIGlmIChwdXRN
b2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgp
LCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICBvYmplY3RTdG9yZS0+
cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlO
VF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtl
eXM7Ci0gICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5z
ZWNvbmQ7Ci0KLSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21L
ZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKLSAgICAgICAgaWYgKCFpbmRl
eEtleSkgewotICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT52YWxpZCgpKTsKLQotICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8IGlu
ZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5nS2V5
QWxsb3dlZChpbmRleEtleS5nZXQoKSwga2V5LmdldCgpKSkgewotICAgICAgICAgICAgb2JqZWN0
U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci0gICAgICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUiwgIk9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtl
eXMgZm9yIGFuIGluZGV4IGRvZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1l
bnRzLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
bmRleC0+bXVsdGlFbnRyeSgpICYmIGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5
cGUpIHsKLSAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXko
KS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICghaW5kZXgtPmFkZGluZ0tleUFs
bG93ZWQoaW5kZXhLZXktPmFycmF5KClbal0uZ2V0KCksIGtleS5nZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBk
ZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNm
eSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVudHMuIikpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlz
IHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLQotICAg
IGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChv
YmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUt
PnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICAvLyBG
SVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFu
IGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpbnQgaSA9IDA7Ci0gICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9y
ZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7
ICsraXQsICsraSkgewotICAgICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4mIGluZGV4
ID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKCFpbmRleC0+aGFzVmFsaWRJZCgpKQotICAgICAg
ICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0
IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCi0KLSAgICAgICAgaWYgKCFvYmpl
Y3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RT
dG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIHJlY29y
ZElkZW50aWZpZXIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVy
cm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Ci0gICAgICAgICAgICB0cmFu
c2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghaW5kZXhLZXlzW2ldKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gaW5kZXhLZXlzW2ldOwotCi0gICAgICAgIGlmICghaW5k
ZXgtPm11bHRpRW50cnkoKSB8fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBl
KSB7Ci0gICAgICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5p
ZCgpLCBpbmRleC0+aWQoKSwgKmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0
aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4K
LSAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0
YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGluZGV4LT5tdWx0aUVudHJ5KCkpOwotICAgICAg
ICAgICAgQVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7
ICsraikgewotICAgICAgICAgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5wdXRJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbal0sIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5k
ZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBk
ZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwotICAg
ICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsK
LSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgaWYgKCFrZXkgfHwgIWtleS0+
dmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGRlbGV0ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbiwgZWMpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwotICAgIGlmICh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKLSAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJh
bmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
LQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwg
a2V5UmFuZ2UsIGNhbGxiYWNrcykpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJu
YWwiKTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXI7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0
b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoYmFj
a2luZ1N0b3JlQ3Vyc29yKSB7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgcmVjb3JkSWRl
bnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KCk7Ci0KLSAgICAgICAgICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3Rv
cmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBi
ZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgotCi0g
ICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
OwotICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwotCi0gICAgICAgIH0gd2hpbGUgKGJh
Y2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICAgICAgYmFja2lu
Z1N0b3JlQ3Vyc29yLT5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjbGVhciIpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
UkVBRF9PTkxZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotCi0gICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQotICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19
Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBv
YmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUt
Pm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7Ci19Ci0KLW5hbWVz
cGFjZSB7Ci1jbGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBQb3B1bGF0ZUlu
ZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4KQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgewotICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RW
YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOwotICAg
ICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0
VmFsdWUuZ2V0KCksIG1faW5kZXgtPmtleVBhdGgoKSk7Ci0KLSAgICAgICAgaWYgKCFpbmRleEtl
eSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICghbV9pbmRleC0+bXVs
dGlFbnRyeSgpIHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKLSAg
ICAgICAgICAgIGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFtX2JhY2tp
bmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXgtPmlkKCksICppbmRleEtleSwgcmVjb3JkSWRlbnRpZmllcikpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKG1faW5kZXgtPm11bHRpRW50cnkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXkt
PnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluZGV4S2V5LT5hcnJheSgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX2luZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghbV9iYWNr
aW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4LT5pZCgpLCAqaW5kZXhLZXktPmFycmF5KClbaV0sIHJlY29yZElkZW50aWZp
ZXIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIElE
QkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3RvcmU7Ci0gICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7
Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IG1faW5kZXg7Ci19OwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4KQotewotICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNr
aW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZS5mb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgY2FsbGJhY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9OX1RSQU5TSUVOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAobV9p
bmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkNPTlNUUkFJTlRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHRy
YW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBt
X2RhdGFiYXNlSWQsIHRoaXMsIG5hbWUsIG1fbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVu
dHJ5KTsKLSAgICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKLQotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2Fj
dGlvbjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5k
ZXhJbnRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3Jl
LCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRl
eCk7Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgaW50NjRfdCBpZDsKLSAg
ICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3Rv
cmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4
LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7
Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaW5kZXgtPnNldElkKGlkKTsKLQotICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RT
dG9yZS0+bV9pZCwgaW5kZXgpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2
ZW50cygpOwotfQotCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9
IG1faW5kZXhlcy5nZXQobmFtZSk7Ci0gICAgaWYgKCFpbmRleCkgewotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAot
ICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmFkZEluZGV4VG9NYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3RTdG9yZSwgaW5kZXgpKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9p
bmRleGVzLnJlbW92ZShuYW1lKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCi17Ci0gICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5kZWxldGVJbmRleChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQo
KSwgaW5kZXgtPmlkKCkpOwotICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMo
KTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOwotICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSA9IHBycFJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOwotICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uUHRyKSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotICAgIH0KLX0KLQotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJl
Y3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOwotICAg
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6
RGlyZWN0aW9uPih0bXBEaXJlY3Rpb24pOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUt
Pm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RT
dG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Ci0gICAgaWYgKCFiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpudWxsVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZElt
cGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IucmVsZWFzZSgpLCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQo
KSwgb2JqZWN0U3RvcmUuZ2V0KCkpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5y
ZWxlYXNlKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNvdW50Iik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhp
cywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwotfQotCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3Vu
dEludGVybmFsIik7Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAg
IGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChi
YWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgYmFja2luZ1N0
b3JlQ3Vyc29yLT5jbG9zZSgpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCi17Ci0gICAgVmVjdG9yPGludDY0X3Q+IGlkczsK
LSAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsK
LSAgICBWZWN0b3I8Ym9vbD4gdW5pcXVlRmxhZ3M7Ci0gICAgVmVjdG9yPGJvb2w+IG11bHRpRW50
cnlGbGFnczsKLSAgICBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1f
aWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCB1bmlxdWVGbGFncywgbXVsdGlFbnRyeUZsYWdzKTsK
LQotICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGtl
eVBhdGhzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQodW5pcXVlRmxhZ3Muc2l6
ZSgpID09IGlkcy5zaXplKCkpOwotICAgIEFTU0VSVChtdWx0aUVudHJ5RmxhZ3Muc2l6ZSgpID09
IGlkcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBp
KyspCi0gICAgICAgIG1faW5kZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6
OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0s
IG5hbWVzW2ldLCBtX25hbWUsIGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSwgbXVsdGlFbnRy
eUZsYWdzW2ldKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3Zl
SW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4KQotewotICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRh
aW5zKGluZGV4LT5uYW1lKCkpKTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShp
bmRleC0+bmFtZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJ
bmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4KQotewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleFB0ciA9
IGluZGV4OwotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRl
eFB0ci0+bmFtZSgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHIt
Pm5hbWUoKSwgaW5kZXhQdHIpOwotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCi17Ci0gICAgaWYgKG1fYXV0b0lu
Y3JlbWVudE51bWJlciA+IDApCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlciht
X2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7Ci0KLSAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KG1fYmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlciht
X2RhdGFiYXNlSWQsIGlkKCkpKTsKLSAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9h
dXRvSW5jcmVtZW50TnVtYmVyKyspOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAotI2Rl
ZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsX2gKLQotI2luY2x1ZGUgIklEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw7Ci1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gY3JlYXRlKElEQkJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoYmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkp
OwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0lu
Y3JlbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG5hbWUsIGtleVBhdGgsIGF1
dG9JbmNyZW1lbnQpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCgpOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLSAgICBp
bnQ2NF90IGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2lkICE9IEludmFsaWRJ
ZCk7Ci0gICAgICAgIHJldHVybiBtX2lkOwotICAgIH0KLSAgICB2b2lkIHNldElkKGludDY0X3Qg
aWQpIHsgbV9pZCA9IGlkOyB9Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhYmFzZUlkOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5UGF0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBp
bmRleE5hbWVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2F1dG9JbmNyZW1lbnQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1
bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBvcGVu
Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJl
Y3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBzdGF0aWMgYm9vbCBw
b3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKLQotcHJp
dmF0ZToKLSAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7Ci0gICAgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwot
Ci0gICAgdm9pZCBsb2FkSW5kZXhlcygpOwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5BdXRv
SW5jcmVtZW50S2V5KCk7Ci0gICAgdm9pZCByZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpIHsg
bV9hdXRvSW5jcmVtZW50TnVtYmVyID0gLTE7IH0KLQotICAgIHN0YXRpYyB2b2lkIGdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pOwotICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBj
bGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRp
YyB2b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0g
ICAgc3RhdGljIHZvaWQgZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+KTsKLSAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+KTsKLSAgICBzdGF0aWMgdm9pZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwotCi0gICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0
VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNrcy4KLSAgICBzdGF0aWMgdm9pZCByZW1vdmVJ
bmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotICAg
IHN0YXRpYyB2b2lkIGFkZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLQot
ICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGludDY0X3QgbV9pZDsKLSAgICBTdHJpbmcg
bV9uYW1lOwotICAgIFN0cmluZyBtX2tleVBhdGg7Ci0gICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7
Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gPiBJbmRleE1hcDsKLSAgICBJbmRleE1hcCBtX2luZGV4ZXM7Ci0gICAgaW50IG1fYXV0b0lu
Y3JlbWVudE51bWJlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Uu
aAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAotI2RlZmluZSBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0Owot
Y2xhc3MgSURCQ2FsbGJhY2tzOwotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlOwotY2xh
c3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci0KLXR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UoKSB7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBTdHJpbmcga2V5UGF0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICBl
bnVtIFB1dE1vZGUgewotICAgICAgICBBZGRPclVwZGF0ZSwKLSAgICAgICAgQWRkT25seSwKLSAg
ICAgICAgQ3Vyc29yVXBkYXRlCi0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
LQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAJKHJldmlzaW9u
IDEwOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUGVuZGluZ1RyYW5zYWN0aW9u
TW9uaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgi
Ci0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8
d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0KLXVzaW5nIFdURjo6VGhyZWFkU3BlY2lmaWM7Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UaHJl
YWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJh
bnNhY3Rpb25zKCkKLXsKLSAgICAvLyBGSVhNRTogTW92ZSB0aGUgVmVjdG9yIHRvIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgdG8gYXZvaWQgZGVhbGluZyB3aXRoCi0gICAgLy8gdGhyZWFkLWxvY2Fs
IHN0b3JhZ2UuCi0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKFRocmVhZFNwZWNpZmlj
PFZlY3RvcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqPiA+KiwgdHJhbnNhY3Rpb25z
ID0gbmV3IFRocmVhZFNwZWNpZmljPFZlY3RvcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqPiA+KTsKLSAgICByZXR1cm4gKnRyYW5zYWN0aW9uczsKLX0KLQotdm9pZCBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKLXsKLSAgICB0cmFuc2FjdGlvbnMoKS0+YXBw
ZW5kKHRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
OjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBUaHJlYWRTcGVjaWZpYzxWZWN0b3I8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKj4gPiYgdHJhbnNhY3Rpb25MaXN0ID0gdHJhbnNhY3Rpb25zKCk7
Ci0gICAgc2l6ZV90IHBvcyA9IHRyYW5zYWN0aW9uTGlzdC0+ZmluZCh0cmFuc2FjdGlvbik7Ci0g
ICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rp
b25MaXN0LT5yZW1vdmUocG9zKTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yOjphYm9ydFBlbmRpbmdUcmFuc2FjdGlvbnMoKQotewotICAgIFRocmVhZFNwZWNpZmljPFZl
Y3RvcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqPiA+JiB0cmFuc2FjdGlvbkxpc3Qg
PSB0cmFuc2FjdGlvbnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zYWN0aW9u
cygpLT5zaXplKCk7ICsraSkKLSAgICAgICAgdHJhbnNhY3Rpb25MaXN0LT5hdChpKS0+YWJvcnQo
KTsKLSAgICAvLyBGSVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4gYSBsYXlv
dXQgdGVzdC4KLSAgICB0cmFuc2FjdGlvbkxpc3QtPmNsZWFyKCk7Ci19Ci0KLX07Ci0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaAkocmV2aXNpb24gMTA5
NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCi0jZGVmaW5lIElEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3JfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotCi0vLyBU
aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcg
dGhlIGN1cnJlbnQKLS8vIEphdmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuIEEgdHJhbnNhY3Rp
b24gaXMgJ3BlbmRpbmcnIGlmIG5vIGFzeW5jaHJvbm91cwotLy8gb3BlcmF0aW9uIGlzIGN1cnJl
bnRseSBxdWV1ZWQgZm9yIGl0IChlLmcuIGFuIElEQk9iamVjdFN0b3JlOjpwdXQoKSBvciBzaW1p
bGFyKS4KLS8vIEFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBhcmUgYWJvcnRlZCBhcyBzb29uIGFz
IGV4ZWN1dGlvbiByZXR1cm5zIGZyb20KLS8vIHRoZSBzY3JpcHQgZW5naW5lLgotCi1jbGFzcyBJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
ZGRQZW5kaW5nVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0g
ICAgc3RhdGljIHZvaWQgcmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOwotICAgIHN0YXRpYyB2b2lkIGFib3J0UGVuZGluZ1RyYW5zYWN0aW9u
cygpOwotCi1wcml2YXRlOgotICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IoKTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVz
dC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudEV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvcldpdGhW
YWx1ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNw
YXRjaGVyLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2lu
Y2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdChhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRy
YW5zYWN0aW9uKSkpOwotICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIHJldHVy
biByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKLSAgICAsIG1fZXJyb3JDb2RlKDApCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9yZWFkeVN0YXRlKExPQURJTkcp
Ci0gICAgLCBtX3JlcXVlc3RGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1fY3Vyc29yRmluaXNoZWQo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQotICAgICwgbV9jdXJzb3JUeXBl
KElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKQotICAgICwgbV9j
dXJzb3IoMCkKLXsKLSAgICBpZiAobV90cmFuc2FjdGlvbikgewotICAgICAgICBtX3RyYW5zYWN0
aW9uLT5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci0gICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCkpOwotICAgIH0KLX0KLQotSURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQotewotICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gRE9ORSB8fCBtX3JlYWR5U3RhdGUgPT0gRWFybHlEZWF0aCB8fCAh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAobV90cmFuc2FjdGlvbikKLSAgICAg
ICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SURCQW55PiBJREJSZXF1ZXN0OjpyZXN1bHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiBtX3Jlc3VsdDsKLX0KLQotdW5zaWduZWQgc2hvcnQgSURCUmVxdWVzdDo6ZXJy
b3JDb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUg
IT0gRE9ORSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbV9lcnJvckNvZGU7
Ci19Ci0KLVN0cmluZyBJREJSZXF1ZXN0Ojp3ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKSB7Ci0gICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci19Ci0KLVBh
c3NSZWZQdHI8SURCQW55PiBJREJSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAotewotICAgIHJldHVy
biBtX3NvdXJjZTsKLX0KLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCUmVxdWVzdDo6
dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zYWN0aW9uOwotfQotCi11
bnNpZ25lZCBzaG9ydCBJREJSZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IExPQURJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwotICAg
IHJldHVybiBtX3JlYWR5U3RhdGU7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6bWFya0Vhcmx5RGVh
dGgoKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gTE9BRElORyk7Ci0gICAgbV9yZWFk
eVN0YXRlID0gRWFybHlEZWF0aDsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3Rh
dGUoSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0
RmluaXNoZWQpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFT
U0VSVCh0cmFuc2FjdGlvbiA9PSBtX3RyYW5zYWN0aW9uKTsKLSAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IERPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IExP
QURJTkc7Ci0gICAgbV9yZXN1bHQuY2xlYXIoKTsKLSAgICBtX2Vycm9yQ29kZSA9IDA7Ci0gICAg
bV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKLQotICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCkp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEQkFueSogSURCUmVxdWVzdDo6c291cmNlKCkK
LXsKLSAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6YWJv
cnQoKQotewotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTE9BRElO
RykgewotICAgICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVu
dFF1ZXVlLT5jYW5jZWxFdmVudChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0gICAgbV9lbnF1ZXVlZEV2
ZW50cy5jbGVhcigpOwotCi0gICAgbV9lcnJvckNvZGUgPSAwOwotICAgIG1fZXJyb3JNZXNzYWdl
ID0gU3RyaW5nKCk7Ci0gICAgbV9yZXN1bHQuY2xlYXIoKTsKLSAgICBvbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QUJPUlRfRVJSLCAiVGhlIHRy
YW5zYWN0aW9uIHdhcyBhYm9ydGVkLCBzbyB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVk
LiIpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJzb3JUeXBlKElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSkKLXsKLSAgICBBU1NFUlQobV9jdXJz
b3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKTsK
LSAgICBtX2N1cnNvclR5cGUgPSBjdXJzb3JUeXBlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNl
dEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yKQotewotICAgIEFTU0VSVCghbV9j
dXJzb3IpOwotICAgIG1fY3Vyc29yID0gY3Vyc29yOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmZp
bmlzaEN1cnNvcigpCi17Ci0gICAgbV9jdXJzb3JGaW5pc2hlZCA9IHRydWU7Ci0gICAgaWYgKG1f
cmVhZHlTdGF0ZSAhPSBMT0FESU5HKQotICAgICAgICBtX3JlcXVlc3RGaW5pc2hlZCA9IHRydWU7
Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yKQotewotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2Uu
aXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBtX2Vycm9yQ29kZSA9IGVycm9yLT5jb2RlKCk7
Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvci0+bWVzc2FnZSgpOwotICAgIG1fY3Vyc29yLmNs
ZWFyKCk7Ci0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQsIHRydWUsIHRydWUpKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0
ZVN1Y2Nlc3NFdmVudCgpCi17Ci0gICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnN1Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1
Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQotewotICAgIElE
Ql9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKERPTVN0cmluZ0xpc3QpIik7Ci0gICAgQVNT
RVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQp
OwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZG9tU3RyaW5nTGlzdCk7Ci0gICAgZW5x
dWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojpv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQot
ewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQkN1cnNvcikiKTsKLSAg
ICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jl
c3VsdCk7Ci0gICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yOwot
ICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlDdXJzb3IpCi0gICAgICAgIGN1cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRo
aXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGN1cnNvciA9IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1f
c291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLQotICAgIHNldFJlc3VsdEN1cnNv
cihjdXJzb3IsIG1fY3Vyc29yVHlwZSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vz
c0V2ZW50KCkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKLXsKLSAgICBJREJfVFJBQ0UoIklE
QlJlcXVlc3Q6Om9uU3VjY2VzcyhJREJEYXRhYmFzZSkiKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JD
b2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7Ci0gICAgaWYgKG1f
Y29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IElEQkRhdGFiYXNl
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNrZW5kKTsKLSAgICBpZGJEYXRh
YmFzZS0+b3BlbigpOwotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJEYXRhYmFz
ZS5yZWxlYXNlKCkpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19
Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCS2V5KSIpOwotICAg
IEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVz
dWx0KTsKLSAgICBpZiAoaWRiS2V5ICYmIGlkYktleS0+dmFsaWQoKSkKLSAgICAgICAgbV9yZXN1
bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJLZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZXN1bHQg
PSBJREJBbnk6OmNyZWF0ZShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkp
OwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLXZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBwcnBCYWNrZW5kKQotewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNz
KElEQlRyYW5zYWN0aW9uKSIpOwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1l
c3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKLQotICAgIGlmIChtX2NvbnRl
eHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgYmFja2Vu
ZC0+YWJvcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4gZnJvbnRlbmQgPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgYmFja2VuZCwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOwotICAg
IGJhY2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7Ci0gICAgbV90cmFuc2FjdGlv
biA9IGZyb250ZW5kOwotCi0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJ
REJEYXRhYmFzZVR5cGUpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2Uo
KS0+c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGZyb250ZW5kLmdldCgpKTsKLQotICAgIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCkpOwotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShm
cm9udGVuZC5yZWxlYXNlKCkpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQo
KSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCi17Ci0gICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlKSIpOwotICAgIEFTU0VS
VCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsK
LSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk7Ci0g
ICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50
KCkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKQot
ewotICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbiIp
OwotICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYg
IW1fcmVzdWx0KTsKLSAgICBBU1NFUlQobV9jdXJzb3IpOwotICAgIHNldFJlc3VsdEN1cnNvciht
X2N1cnNvciwgbV9jdXJzb3JUeXBlKTsKLSAgICBtX2N1cnNvci5jbGVhcigpOwotICAgIGVucXVl
dWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29y
bGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4K
LSAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2ZW50IGxpc3Rl
bmVycy4gVGhpcyBpcyBvcmRlciB0byBoYW5kbGUKLSAgICAvLyAgICAgICAgdXNlciBnZW5lcmF0
ZWQgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiAhbV9yZXF1ZXN0RmluaXNoZWQgfHwgQWN0
aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpzdG9wKCkKLXsKLSAgICBBY3RpdmVET01PYmplY3Q6OnN0b3AoKTsKLSAgICBpZiAobV9jb250
ZXh0U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRy
dWU7Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HKQotICAgICAgICBtYXJrRWFybHlE
ZWF0aCgpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uQmxvY2tlZCgpCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSURCUmVxdWVzdDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JJREJSZXF1ZXN0OwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBJREJfVFJBQ0UoIklE
QlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVk
KTsKLSAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChtX2VucXVldWVk
RXZlbnRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0g
ICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fcmVhZHlTdGF0ZSA8IERPTkUsICJtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVk
IiwgRE9ORSwgbV9yZWFkeVN0YXRlKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5h
bWVzKCkuYmxvY2tlZEV2ZW50KQotICAgICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgpKQotICAg
ICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAgfQotCi0gICAgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOwotICAgIHRhcmdldHMuYXBwZW5kKHRoaXMp
OwotICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7Ci0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJh
bnNhY3Rpb24pOwotICAgICAgICAvLyBJZiB0aGVyZSBldmVyIGFyZSBldmVudHMgdGhhdCBhcmUg
YXNzb2NpYXRlZCB3aXRoIGEgZGF0YWJhc2UgYnV0Ci0gICAgICAgIC8vIHRoYXQgZG8gbm90IGhh
dmUgYSB0cmFuc2FjdGlvbiwgdGhlbiB0aGlzIHdpbGwgbm90IHdvcmsgYW5kIHdlIG5lZWQKLSAg
ICAgICAgLy8gdGhpcyBvYmplY3QgdG8gYWN0dWFsbHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUg
ZGF0YWJhc2UgKHRvIGVuc3VyZQotICAgICAgICAvLyBpdCBzdGF5cyBhbGl2ZSkuCi0gICAgICAg
IHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIFJlZlB0
cjxJREJDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAg
ICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvclR5cGUpCi0gICAgICAg
ICAgICBjdXJzb3JUb05vdGlmeSA9IG1fcmVzdWx0LT5pZGJDdXJzb3IoKTsKLSAgICAgICAgZWxz
ZSBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUp
Ci0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeSA9IG1fcmVzdWx0LT5pZGJDdXJzb3JXaXRoVmFs
dWUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQg
ZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NF
UlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsKLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElE
QkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwotCi0gICAg
Ly8gSWYgdGhlIHJlc3VsdCB3YXMgb2YgdHlwZSBJREJDdXJzb3IsIG9yIGEgb25CbG9ja2VkIGV2
ZW50LCB0aGVuIHdlJ2xsIGZpcmUgYWdhaW4uCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZl
bnROYW1lcygpLmJsb2NrZWRFdmVudCAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmlu
aXNoZWQpKQotICAgICAgICBtX3JlcXVlc3RGaW5pc2hlZCA9IHRydWU7Ci0KLSAgICBpZiAoY3Vy
c29yVG9Ob3RpZnkpCi0gICAgICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpOwotCi0gICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgLy8gSWYgYW4g
ZXJyb3IgZXZlbnQgYW5kIHRoZSBkZWZhdWx0IHdhc24ndCBwcmV2ZW50ZWQuLi4KLSAgICAgICAg
aWYgKGRvbnRQcmV2ZW50RGVmYXVsdCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50KQotICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLT5hYm9ydCgp
OwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCktPmRpZENvbXBsZXRlVGFza0V2ZW50
cygpOwotICAgIH0KLSAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwotfQotCi12b2lkIElE
QlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQotewotICAgIGlmICht
X3RyYW5zYWN0aW9uKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCktPmFib3J0KCk7
Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0RmluaXNoZWQpOwotCi0gICAgaWYgKG1fY29u
dGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA8IERPTkUpOwotCi0gICAgRXZlbnRRdWV1ZSog
ZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAg
IGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0KLSAgICBpZiAoZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2
ZW50KGV2ZW50LmdldCgpKSkKLSAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQp
OwotfQotCi1FdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSgpCi17
Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKLX0KLQotRXZlbnRUYXJnZXREYXRhKiBJ
REJSZXF1ZXN0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29yKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yPiBwcnBDdXJzb3IsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpJbmRleEtleUN1cnNvcikgewotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRl
KHBycEN1cnNvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlKElEQkN1cnNvcldpdGhWYWx1ZTo6ZnJvbUN1cnNvcihwcnBDdXJzb3IpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgSURCUmVxdWVzdF9oCi0jZGVmaW5lIElEQlJlcXVlc3RfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb247Ci0KLXR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tz
LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAg
ICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIFN0cmluZyB3ZWJraXRFcnJvck1lc3NhZ2UoRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UoKSBjb25zdDsK
LSAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0OwotCi0g
ICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCi0gICAgZW51bSBSZWFkeVN0YXRlIHsKLSAgICAgICAg
TE9BRElORyA9IDEsCi0gICAgICAgIERPTkUgPSAyLAotICAgICAgICBFYXJseURlYXRoID0gMwot
ICAgIH07Ci0gICAgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNvbnN0OwotCi0gICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNjZXNzKTsKLSAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKLQotICAgIHZvaWQgbWFya0Vhcmx5RGVhdGgoKTsK
LSAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2V0
Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKLSAgICB2
b2lkIHNldEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOwotICAgIHZvaWQgZmluaXNoQ3Vy
c29yKCk7Ci0gICAgSURCQW55KiBzb3VyY2UoKTsKLSAgICB2b2lkIGFib3J0KCk7Ci0KLSAgICAv
LyBJREJDYWxsYmFja3MKLSAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4pOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4pOwotICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Ci0gICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwotICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCk7Ci0gICAgdmlydHVhbCB2
b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYg
a2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9IC8vIE5vdCBpbXBsZW1lbnRlZC4gQ2FsbGJhY2sgc2hvdWxkIG5vdCBy
ZWFjaCB0aGUgcmVuZGVyZXIgc2lkZS4KLSAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7Ci0K
LSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVSUklERTsK
LQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQotICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdo
dEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7Ci0KLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPjo6ZGVyZWY7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJSZXF1ZXN0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2Fj
dGlvbiopOwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBS
ZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2Vycm9yQ29kZTsK
LSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7Ci0KLXByaXZhdGU6Ci0gICAgLy8gRXZlbnRUYXJn
ZXQKLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi0gICAgdm9pZCBzZXRSZXN1bHRDdXJz
b3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+LCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JUeXBlKTsKLQotICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLQotICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRl
OwotICAgIGJvb2wgbV9yZXF1ZXN0RmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2Un
bGwgZmlyZSBhbnkgbW9yZSBldmVudHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCi0gICAgYm9v
bCBtX2N1cnNvckZpbmlzaGVkOwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLSAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5xdWV1ZWRFdmVudHM7Ci0KLSAgICAvLyBPbmx5IHVzZWQg
aWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCi0gICAgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQkN1cnNv
cj4gbV9jdXJzb3I7Ci0KLSAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlJlcXVlc3RfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlJlcXVlc3QuaWRsCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9k
dWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRSwKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVudFRh
cmdldAotICAgIF0gSURCUmVxdWVzdCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJB
bnkgcmVzdWx0Ci0gICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUK
LSAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5l
ZF0gRE9NU3RyaW5nIHdlYmtpdEVycm9yTWVzc2FnZQotICAgICAgICAgICAgZ2V0dGVyIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURC
QW55IHNvdXJjZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQlRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uOwotCi0gICAgICAgIC8vIFN0YXRlcwotICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBMT0FESU5HID0gMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9ORSA9IDI7
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOwot
Ci0gICAgICAgIC8vIEV2ZW50cwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnN1
Y2Nlc3M7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0KLSAgICAg
ICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2
ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBb
T3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRM
aXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xl
YW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRF
eGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YWNpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYWNpbmcu
aAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFjaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYWNpbmdf
aAotI2RlZmluZSBJREJUcmFjaW5nX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jZGVm
aW5lIElEQl9UUkFDRShhKSBUUkFDRV9FVkVOVDAoIkluZGV4ZWREQiIsIChhKSk7Ci0KLSNlbHNl
Ci0KLSNkZWZpbmUgSURCX1RSQUNFKGEpICgodm9pZCkwKQotCi0jZW5kaWYgLy8gIFBMQVRGT1JN
KENIUk9NSVVNKQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRp
ZiAvLyBJREJUcmFjaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uY3BwCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyODAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgot
I2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVy
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgot
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJh
bnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2Uq
IGRiKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYo
bmV3IElEQlRyYW5zYWN0aW9uKGNvbnRleHQsIGJhY2tlbmQsIGRiKSkpOwotICAgIHRyYW5zYWN0
aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgp
OwotfQotCi1JREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQsIElEQkRhdGFiYXNlKiBkYikKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0
LCB0aGlzKQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCi0gICAgLCBtX2RhdGFiYXNlKGRiKQot
ICAgICwgbV9tb2RlKG1fYmFja2VuZC0+bW9kZSgpKQotICAgICwgbV90cmFuc2FjdGlvbkZpbmlz
aGVkKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLXsKLSAgICBBU1NFUlQo
bV9iYWNrZW5kKTsKLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5n
VHJhbnNhY3Rpb24obV9iYWNrZW5kLmdldCgpKTsKLX0KLQotSURCVHJhbnNhY3Rpb246On5JREJU
cmFuc2FjdGlvbigpCi17Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogSURC
VHJhbnNhY3Rpb246OmJhY2tlbmQoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmZpbmlzaGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90cmFuc2FjdGlvbkZpbmlzaGVkOwotfQotCi11bnNpZ25lZCBzaG9ydCBJREJUcmFu
c2FjdGlvbjo6bW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kZTsKLX0KLQotSURCRGF0
YWJhc2UqIElEQlRyYW5zYWN0aW9uOjpkYigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YWJh
c2UuZ2V0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmIChtX3RyYW5zYWN0aW9uRmluaXNoZWQpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBJREJPYmplY3RTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZp
bmQobmFtZSk7Ci0gICAgaWYgKGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOwotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1l
LCBlYyk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZUJhY2tlbmQpIHsKLSAgICAgICAgQVNTRVJUKGVj
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlQmFja2VuZCwg
dGhpcyk7Ci0gICAgb2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKLSAgICBy
ZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBvYmplY3RTdG9yZSkKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hl
ZCk7Ci0gICAgbV9vYmplY3RTdG9yZU1hcC5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOwotfQotCi12
b2lkIElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKLSAgICBtX29iamVjdFN0
b3JlTWFwLnJlbW92ZShuYW1lKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQot
ewotICAgIGlmIChtX3RyYW5zYWN0aW9uRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwotICAgIGlmIChtX2JhY2tlbmQp
Ci0gICAgICAgIG1fYmFja2VuZC0+YWJvcnQoKTsKLX0KLQotSURCVHJhbnNhY3Rpb246Ok9wZW5D
dXJzb3JOb3RpZmllcjo6T3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uLCBJREJDdXJzb3IqIGN1cnNvcikKLSAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pLAotICAgICAgbV9jdXJzb3IoY3Vyc29yKQotewotICAgIG1fdHJhbnNhY3Rp
b24tPnJlZ2lzdGVyT3BlbkN1cnNvcihtX2N1cnNvcik7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjpP
cGVuQ3Vyc29yTm90aWZpZXI6On5PcGVuQ3Vyc29yTm90aWZpZXIoKQotewotICAgIG1fdHJhbnNh
Y3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvciogY3Vyc29yKQotewotICAgIG1f
b3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnVucmVn
aXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvciogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNvcnMu
cmVtb3ZlKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNsb3NlT3BlbkN1cnNv
cnMoKQotewotICAgIEhhc2hTZXQ8SURCQ3Vyc29yKj4gY3Vyc29yczsKLSAgICBjdXJzb3JzLnN3
YXAobV9vcGVuQ3Vyc29ycyk7Ci0gICAgZm9yIChIYXNoU2V0PElEQkN1cnNvcio+OjppdGVyYXRv
ciBpID0gY3Vyc29ycy5iZWdpbigpOyBpICE9IGN1cnNvcnMuZW5kKCk7ICsraSkKLSAgICAgICAg
KCppKS0+Y2xvc2UoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVnaXN0ZXJSZXF1ZXN0
KElEQlJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgbV9jaGlsZFJlcXVlc3RzLmFkZChyZXF1ZXN0
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVz
dCogcmVxdWVzdCkKLXsKLSAgICAvLyBJZiB3ZSBhYm9ydGVkIHRoZSByZXF1ZXN0LCBpdCB3aWxs
IGFscmVhZHkgaGF2ZSBiZWVuIHJlbW92ZWQuCi0gICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShy
ZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCi17Ci0gICAgQVNT
RVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOwotICAgIHdoaWxlICghbV9jaGlsZFJlcXVlc3Rz
LmlzRW1wdHkoKSkgewotICAgICAgICBJREJSZXF1ZXN0KiByZXF1ZXN0ID0gKm1fY2hpbGRSZXF1
ZXN0cy5iZWdpbigpOwotICAgICAgICBtX2NoaWxkUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3QpOwot
ICAgICAgICByZXF1ZXN0LT5hYm9ydCgpOwotICAgIH0KLQotICAgIGlmIChtX21vZGUgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKQotICAgICAgICBtX2RhdGFiYXNlLT5jbGVhclZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0K
LSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuYWJvcnRFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bjo6b25Db21wbGV0ZSgpCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOwot
ICAgIGlmIChtX21vZGUgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKQotICAgICAg
ICBtX2RhdGFiYXNlLT5jbGVhclZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBj
bG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnF1ZXVlRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7
Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQgcmV0dXJuIHRydWUg
YXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2FuCi0gICAgLy8gICAgICAgIGdldCBhIGhhbmRs
ZSB0byB1cyBvciBhbnkgY2hpbGQgcmVxdWVzdCBvYmplY3QgYW5kIGFueSBvZiB0aG9zZSBoYXZl
Ci0gICAgLy8gICAgICAgIGV2ZW50IGxpc3RlbmVycy4gVGhpcyBpcyAgaW4gb3JkZXIgdG8gaGFu
ZGxlIHVzZXIgZ2VuZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fdHJhbnNh
Y3Rpb25GaW5pc2hlZCB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwot
fQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQlRyYW5zYWN0
aW9uOwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJUcmFuc2FjdGlvbjo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotewotICAgIElEQl9UUkFDRSgiSURC
VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25G
aW5pc2hlZCk7Ci0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNT
RVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBtX3RyYW5zYWN0aW9uRmluaXNoZWQg
PSB0cnVlOwotCi0gICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBmb3IgKElEQk9i
amVjdFN0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQg
IT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dHJh
bnNhY3Rpb25GaW5pc2hlZCgpOwotICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKLQotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVu
ZCh0aGlzKTsKLSAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKLQotICAgIC8vIEZJWE1FOiBXaGVu
IHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5IG5l
ZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5j
b21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQp
OwotICAgIHJldHVybiBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0
YXJnZXRzKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGNhbiBzdXNwZW5kIGJlZm9yZSB0aGUgZmly
c3QgcmVxdWVzdCBpcyBzY2hlZHVsZQotICAgIC8vICAgICAgICBhbmQgYWZ0ZXIgdGhlIGNvbXBs
ZXRlL2Fib3J0IGV2ZW50IGlzIGVucXVldWVkLgotICAgIHJldHVybiBtX3RyYW5zYWN0aW9uRmlu
aXNoZWQ7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQotewotICAgIEFjdGl2ZURP
TU9iamVjdDo6c3RvcCgpOwotICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOwotCi0gICAgYWJv
cnQoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fdHJhbnNhY3Rpb25G
aW5pc2hlZCwgIkEgZmluaXNoZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gZW5xdWV1ZSBhbiBldmVu
dCBvZiB0eXBlICVzLiIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
Ci0gICAgZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKLX0KLQotRXZlbnRUYXJnZXRE
YXRhKiBJREJUcmFuc2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOwotfQotCi1FdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjpl
bnN1cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7
Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTA5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbl9oCi0jZGVmaW5l
IElEQlRyYW5zYWN0aW9uX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2lu
Y2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvcjsKLWNsYXNzIElE
QkRhdGFiYXNlOwotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1
YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsKLSAgICB2aXJ0
dWFsIH5JREJUcmFuc2FjdGlvbigpOwotCi0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgUkVBRF9P
TkxZID0gMCwKLSAgICAgICAgUkVBRF9XUklURSA9IDEsCi0gICAgICAgIFZFUlNJT05fQ0hBTkdF
ID0gMgotICAgIH07Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tl
bmQoKSBjb25zdDsKLSAgICBib29sIGZpbmlzaGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBz
aG9ydCBtb2RlKCkgY29uc3Q7Ci0gICAgSURCRGF0YWJhc2UqIGRiKCkgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhYm9ydCgpOwotCi0gICAgY2xhc3MgT3BlbkN1cnNv
ck5vdGlmaWVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE9wZW5DdXJzb3JOb3RpZmllcihQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiwgSURCQ3Vyc29yKik7Ci0gICAgICAgIH5PcGVuQ3Vyc29y
Tm90aWZpZXIoKTsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IG1fdHJhbnNhY3Rpb247Ci0gICAgICAgIElEQkN1cnNvciogbV9jdXJzb3I7Ci0gICAgfTsKLQot
ICAgIHZvaWQgcmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0
ZXJSZXF1ZXN0KElEQlJlcXVlc3QqKTsKLSAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRlZChjb25z
dCBTdHJpbmcmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7Ci0gICAgdm9pZCBvYmplY3RT
dG9yZURlbGV0ZWQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGFib3J0KTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNv
bXBsZXRlKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKLQot
ICAgIC8vIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzCi0gICAgdmlydHVhbCB2b2lkIG9uQWJvcnQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpOwotCi0gICAgLy8gRXZlbnRUYXJnZXQK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVu
dCwgZWMpOyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURF
OwotCi0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OnJlZjsK
LSAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6ZGVyZWY7Ci0K
LXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsK
LQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGNs
b3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ciopOwotICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yKik7Ci0KLSAgICAv
LyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKLSAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7Ci0KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPElE
QkRhdGFiYXNlPiBtX2RhdGFiYXNlOwotICAgIHVuc2lnbmVkIHNob3J0IG1fbW9kZTsKLSAgICBi
b29sIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSdsbCBm
aXJlIGFueSBtb3JlIGV2ZW50cyBvciBhbGxvdyBhbnkgbmV3IHJlcXVlc3RzPyBJZiBub3QsIHdl
J3JlIGZpbmlzaGVkLgotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKLQotICAgIExpc3RIYXNo
U2V0PElEQlJlcXVlc3QqPiBtX2NoaWxkUmVxdWVzdHM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+ID4gSURCT2JqZWN0U3RvcmVNYXA7Ci0gICAg
SURCT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZU1hcDsKLQotICAgIEhhc2hTZXQ8SURCQ3Vy
c29yKj4gbV9vcGVuQ3Vyc29yczsKLQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25faApJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwJKHJldmlzaW9uIDEwOTQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYwICswLDAgQEAKLSAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVy
ZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEFj
dGl2ZURPTU9iamVjdCwKLSAgICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIElEQlRyYW5zYWN0aW9u
IHsKLSAgICAgICAgLy8gTW9kZXMKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9P
TkxZID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9XUklURSA9IDE7Ci0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFZFUlNJT05fQ0hBTkdFID0gMjsKLQotICAgICAg
ICAvLyBQcm9wZXJ0aWVzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9y
dCBtb2RlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCRGF0YWJhc2UgZGI7Ci0gICAg
ICAgIC8vIE1ldGhvZHMKLSAgICAgICAgSURCT2JqZWN0U3RvcmUgb2JqZWN0U3RvcmUgKGluIERP
TVN0cmluZyBuYW1lKQotICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgICAgIHZvaWQgYWJvcnQgKCk7Ci0gICAgICAgIC8vIEV2ZW50cwotICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0OwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbmNvbXBsZXRlOwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9y
OwotICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgICAgdm9pZCBhZGRFdmVu
dExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAg
ICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkgCi0gICAgICAgICAgICByYWlz
ZXMoRXZlbnRFeGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEw
OTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoRE9NU3RyaW5nTGlzdCog
b2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiBkYXRhYmFzZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2RlLCBkYXRhYmFzZSkpOwotfQotCi1JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3Qq
IG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCogZGF0YWJhc2UpCi0gICAgOiBtX29iamVjdFN0b3JlTmFtZXMob2JqZWN0U3RvcmVzKQotICAg
ICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVudXNlZCkKLSAgICAsIG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS0+
Y3JlYXRlVHJhbnNhY3Rpb24oKSkKLSAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCkKLSAgICAsIG1fdGFza0V2ZW50VGltZXIo
dGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQpCi0g
ICAgLCBtX3BlbmRpbmdFdmVudHMoMCkKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZU5hbWVz
KTsKLSAgICBBU1NFUlQobV9tb2RlID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSB8
fCAhbV9vYmplY3RTdG9yZU5hbWVzLT5pc0VtcHR5KCkpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7Ci19Ci0KLUlE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKLXsK
LSAgICAvLyBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2JqZWN0IHRvIGdldCBk
ZWxldGVkIHVudGlsIGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQuCi0gICAgQVNTRVJU
KG1fc3RhdGUgPT0gRmluaXNoZWQpOwotfQotCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobV9zdGF0ZSA9
PSBGaW5pc2hlZCkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxM
T1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIERvZXMgYSBsaW5l
YXIgc2VhcmNoLCBidXQgaXQgcmVhbGx5IHNob3VsZG4ndCBiZSB0aGF0IHNsb3cgaW4gcHJhY3Rp
Y2UuCi0gICAgaWYgKG1fbW9kZSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UgJiYg
IW1fb2JqZWN0U3RvcmVOYW1lcy0+Y29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmUgPSBtX2RhdGFiYXNlLT5vYmplY3RTdG9yZShuYW1lKTsKLSAgICAvLyBGSVhNRTogVGhpcyBp
cyBvbmx5IG5lY2Vzc2FyeSByaWdodCBub3cgYmVhY3VzZSBhIHNldFZlcnNpb24gdHJhbnNhY3Rp
b24gY291bGQgbW9kaWZ5IHRoaW5ncwotICAgIC8vICAgICAgICBiZXR3ZWVuIGl0cyBjcmVhdGlv
biAod2hlcmUgYW5vdGhlciBjaGVjayBvY2N1cnMpIGFuZCB0aGUgLm9iamVjdFN0b3JlIGNhbGwu
Ci0gICAgLy8gICAgICAgIFRoZXJlJ3MgYSBidWcgdG8gbWFrZSB0aGlzIGltcG9zc2libGUgaW4g
dGhlIHNwZWMuIFdoZW4gd2UgbWFrZSBpdCBpbXBvc3NpYmxlIGhlcmUsIHdlCi0gICAgLy8gICAg
ICAgIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICBpZiAoIW9iamVjdFN0b3JlKSB7Ci0gICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi1i
b29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrKQotewotICAgIGlmIChtX3N0YXRlID09IEZpbmlz
aGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFz
ayk7Ci0gICAgaWYgKGFib3J0VGFzaykKLSAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5k
KGFib3J0VGFzayk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0
KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjphYm9ydCgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjphYm9ydCIpOwotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBU
aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBl
cmZvcm1pbmcgdGhlCi0gICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtl
IGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBl
eGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHNlbGYodGhpcyk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgbV90YXNrVGlt
ZXIuc3RvcCgpOwotICAgIG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOwotCi0gICAgY2xvc2VPcGVu
Q3Vyc29ycygpOwotICAgIGlmICh3YXNSdW5uaW5nKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5y
b2xsYmFjaygpOwotCi0gICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgotICAgIHdo
aWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS5maXJzdCgpLnJl
bGVhc2UoKSk7Ci0gICAgICAgIG1fYWJvcnRUYXNrUXVldWUucmVtb3ZlRmlyc3QoKTsKLSAgICAg
ICAgdGFzay0+cGVyZm9ybVRhc2soMCk7Ci0gICAgfQotCi0gICAgaWYgKG1fY2FsbGJhY2tzKQot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgQVNTRVJU
KCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsK
LSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwotICAgIG1fZGF0YWJh
c2UgPSAwOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJlZ2lzdGVyT3Bl
bkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQotewotICAgIG1fb3BlbkN1cnNv
cnMuYWRkKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dW5y
ZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKLXsKLSAgICBt
X29wZW5DdXJzb3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmFkZFBlbmRpbmdFdmVudHMoaW50IG4pCi17Ci0gICAgbV9wZW5kaW5nRXZlbnRz
ICs9IG47Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cyA+PSAwKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpkaWRDb21wbGV0ZVRhc2tFdmVudHMoKQotewotICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9z
dGF0ZSA9PSBSdW5uaW5nKTsKLSAgICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzKTsKLSAgICBtX3Bl
bmRpbmdFdmVudHMtLTsKLQotICAgIGlmICghbV90YXNrRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICBtX3Rhc2tFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpydW4oKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0
YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCghbV90YXNrVGlt
ZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3RhcnQoKQotewotICAgIEFTU0VSVCht
X3N0YXRlID09IFVudXNlZCk7Ci0KLSAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwotICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0
aGlzKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCIpOwotICAgIC8vIFRoZSBsYXN0IHJl
ZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0
aGUKLSAgICAvLyBjb21taXQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiBy
ZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcg
dGhpcyBtZXRob2QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHNlbGYo
dGhpcyk7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKG1fdGFz
a1F1ZXVlLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoZWQ7Ci0gICAgY2xvc2VP
cGVuQ3Vyc29ycygpOwotICAgIG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fY2FsbGJh
Y2tzLT5vbkNvbXBsZXRlKCk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkZpbmlzaGVkKHRoaXMpOwotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+KikKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnRhc2tUaW1lckZpcmVkIik7Ci0gICAgQVNTRVJUKCFtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmJlZ2luKCk7Ci0gICAgICAgIG1fc3RhdGUgPSBSdW5uaW5nOwotICAgIH0KLQotICAg
IFRhc2tRdWV1ZSBxdWV1ZTsKLSAgICBxdWV1ZS5zd2FwKG1fdGFza1F1ZXVlKTsKLSAgICB3aGls
ZSAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7Ci0gICAgICAgIEFT
U0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzayhxdWV1ZS5maXJzdCgpLnJlbGVhc2UoKSk7Ci0gICAgICAgIHF1
ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIG1fcGVuZGluZ0V2ZW50cysrOwotICAgICAgICB0
YXNrLT5wZXJmb3JtVGFzaygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiopCi17Ci0gICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNr
RXZlbnRUaW1lckZpcmVkIik7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0KLSAg
ICBpZiAoIW1fcGVuZGluZ0V2ZW50cyAmJiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gVGhlIGxhc3QgdGFzayBldmVudCBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGFzawotICAg
ICAgICAvLyBxdWV1ZSBpcyBlbXB0eS4gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4KLSAgICAgICAg
Y29tbWl0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgc3RpbGwg
d2FpdGluZyBmb3Igb3RoZXIgZXZlbnRzIHRvIGNvbXBsZXRlLiBIb3dldmVyLAotICAgIC8vIHRo
ZSB0YXNrIHF1ZXVlIGlzIG5vbi1lbXB0eSBhbmQgdGhlIHRpbWVyIGlzIGluYWN0aXZlLgotICAg
IC8vIFdlIGNhbiB0aGVyZm9yZSBzY2hlZHVsZSB0aGUgdGltZXIgYWdhaW4uCi0gICAgaWYgKCFt
X3Rhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpjbG9zZU9wZW5DdXJzb3JzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vy
c29yQmFja2VuZEltcGwqPjo6aXRlcmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAh
PSBtX29wZW5DdXJzb3JzLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPmNsb3NlKCk7Ci0gICAg
bV9vcGVuQ3Vyc29ycy5jbGVhcigpOwotfQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxf
aAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOwotCi1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsK
LQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZp
cnR1YWwgdW5zaWduZWQgc2hvcnQgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGFib3J0VGFzayk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwot
ICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3Mo
SURCVHJhbnNhY3Rpb25DYWxsYmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxi
YWNrczsgfQotICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFj
a2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vy
c29yQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQp
OwotCi0gICAgdm9pZCBydW4oKTsKLQotcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVu
dXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5n
LCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IFNRTGl0ZSB0cmFuc2FjdGlvbiBub3QgeWV0IHN0YXJ0
ZWQuCi0gICAgICAgIFJ1bm5pbmcsIC8vIFNRTGl0ZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBu
b3QgeWV0IGZpbmlzaGVkLgotICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3Ig
Y29tbWl0dGVkLgotICAgIH07Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBjb21taXQo
KTsKLQotICAgIHZvaWQgdGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4qKTsKLSAgICB2b2lkIHRhc2tFdmVudFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4qKTsKLSAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKLQotICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3JlTmFtZXM7Ci0gICAgdW5zaWduZWQgc2hv
cnQgbV9tb2RlOwotCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25DYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBtX2RhdGFiYXNlOwotCi0gICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gPiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVl
OwotICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOwotCi0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0KLSAgICAvLyBGSVhNRTogZGVs
ZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwotICAgIFRpbWVyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IG1fdGFza0V2ZW50VGltZXI7Ci0gICAgaW50IG1fcGVuZGluZ0V2
ZW50czsKLQotICAgIEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPiBtX29wZW5DdXJzb3Jz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2VfaAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2VfaAotCi0jaW5jbHVk
ZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw7Ci1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrczsKLQotdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKLQotLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSURCVHJhbnNhY3Rp
b24gKGFzeW5jKSBhbmQgSURCVHJhbnNhY3Rpb25TeW5jIChzeW5jKS4KLS8vIFRoaXMgaXMgaW1w
bGVtZW50ZWQgYnkgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhl
cnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycyku
IEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCi0v
LyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkgeyB9Ci0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBtb2RlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRh
c2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzayA9IG51bGxwdHIpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9w
ZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVu
cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhZGRQZW5kaW5nRXZlbnRzKGludCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkNhbGxiYWNrcy5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25DYWxsYmFja3NfaAotI2RlZmluZSBJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrc19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3Mg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz4gewotcHVibGljOgot
ICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKCkgeyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgb25BYm9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJU
cmFuc2FjdGlvbkNhbGxiYWNrc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEwOTQ2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0j
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpOwotfQotCi1J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgCi17
Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCkKLXsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVU
cmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb24pKTsKLQotICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQo
dHJhbnNhY3Rpb24pOwotICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0KLSAgICBpZiAobV9zdGFydGVkVHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIW1fcnVubmlu
Z1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgICAgICBtX3N0YXJ0ZWRU
cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLSAgICB9IGVsc2UgaWYgKG1fcnVubmlu
Z1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIG1fcnVubmluZ1Ry
YW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgbV90cmFuc2FjdGlvbnMucmVt
b3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci19
Ci0KLSNpZm5kZWYgTkRFQlVHCi0vLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVuY3kgd2hp
bGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCi1ib29sIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQotewotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZiAobV9zdGFydGVkVHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKLSAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKSB7Ci0g
ICAgICAgIEFTU0VSVCghZm91bmQpOwotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgfQotICAg
IEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwot
ICAgIHJldHVybiBmb3VuZDsKLX0KLSNlbmRpZgotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKLXsKLSAgICAvLyBGSVhNRTogRm9y
IG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rpb24gdG8gcnVuIGF0IGEgdGltZS4KLSAg
ICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9ICptX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMucmVt
b3ZlKHRyYW5zYWN0aW9uKTsKLSAgICBtX3J1bm5pbmdUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0
aW9uKTsKLSAgICB0cmFuc2FjdGlvbi0+cnVuKCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0
aW9uQ2FsbGJhY2tzOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotLy8gVHJhbnNh
Y3Rpb25zIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNz
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rp
b25Db29yZGluYXRvcigpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBhcyB0aGV5
IHN0YXJ0IGFuZCBmaW5pc2guCi0gICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLSAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGlz
QWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKLQotICAgIHZvaWQgcHJvY2Vzc1N0YXJ0
ZWRUcmFuc2FjdGlvbnMoKTsKLQotICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5
IHRvIGtlZXAgcmVmZXJlbmNlcyB0byBhbGwgdHJhbnNhY3Rpb25zLgotICAgIEhhc2hNYXA8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCosIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiA+IG1fdHJhbnNhY3Rpb25zOwotICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJlbnQgc3Rh
dGVzIGFyZSBncm91cGVkIGJlbG93LgotICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNldDxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKj4gbV9ydW5uaW5nVHJhbnNhY3Rpb25zOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNl
bmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAJKHJldmlzaW9uIDEwOTQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSURCQW55
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
RXZlbnQ+IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQodmVyc2lvbiwgZXZlbnRUeXBlKSk7Ci19Ci0KLUlE
QlZlcnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCi0gICAgOiBFdmVudChldmVu
dFR5cGUsIGZhbHNlIC8qY2FuQnViYmxlKi8sIGZhbHNlIC8qY2FuY2VsYWJsZSovKQotICAgICwg
bV92ZXJzaW9uKHZlcnNpb24pCi17Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VFdmVudDo6fklEQlZl
cnNpb25DaGFuZ2VFdmVudCgpCi17Ci19Ci0KLVN0cmluZyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OnZlcnNpb24oKQotewotICAgIHJldHVybiBtX3ZlcnNpb247Ci19Ci0KLWNvbnN0IEF0b21pY1N0
cmluZyYgSURCVmVyc2lvbkNoYW5nZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQlZlcnNpb25DaGFuZ2VFdmVudDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkocmV2aXNpb24gMTA5NDYx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnRfaAotI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRfaAotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQW55OwotCi1jbGFz
cyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiA9IFN0cmluZygpLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IEF0
b21pY1N0cmluZygpKTsKLSAgICB2aXJ0dWFsIH5JREJWZXJzaW9uQ2hhbmdlRXZlbnQoKTsKLQot
ICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgSURCVmVyc2lv
bkNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpOwotCi0gICAgU3RyaW5nIG1fdmVyc2lvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYg
Ly8gSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwJKHJldmlzaW9uIDEwOTQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQotICAgIF0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50IDogRXZlbnQgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHZlcnNpb247Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMDk0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBSZWZQdHI8SURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYobmV3IElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgdmVyc2lvbikpKTsKLSAgICByZXF1ZXN0LT5zdXNw
ZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci0KLX0KLQotSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q6OklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKLSAgICA6IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCAwKQotICAg
ICwgbV92ZXJzaW9uKHZlcnNpb24pCi17Ci19Ci0KLUlEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp+
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoKQotewotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OwotfQot
Ci12b2lkIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpvbkJsb2NrZWQoKQotewotICAgIEFTU0VS
VCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsK
LSAgICBlbnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUobV92ZXJzaW9u
LCBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oCShyZXZpc2lvbiAxMDk0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RfaAotI2RlZmlu
ZSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZpcnR1YWwgfklEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7Ci0KLSAgICAvLyBFdmVudFRhcmdl
dAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7
Ci0KLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsb2NrZWQpOwotCi1wcml2
YXRlOgotICAgIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotCi0g
ICAgU3RyaW5nIG1fdmVyc2lvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUmVxdWVzdF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmlkbAkocmV2aXNpb24gMTA5NDYxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAg
ICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogSURCUmVx
dWVzdCB7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKLSAgICB9
OwotfQo=
</data>
<flag name="review"
          id="132561"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>